public Form GetForm(TransferContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.FinishProtection);

            var templateWrapper = new FinishProtectionFormTemplateWrapper(template);

            var currencyService = context.UnityContainer.Resolve <ICurrencyService>();
            var currency        = currencyService.ObtainCurrencyByAccountNumber(context.Transfer.TargetPurse);

            templateWrapper.Control4Amount.CurrencyName = currencyService.AddPrefix(currency);

            var transfer = context.Transfer;

            var incomeValuesWrapper = new FinishProtectionFormValuesWrapper
            {
                Control1SourcePurse = transfer.SourcePurse,
                Control2TargetPurse = transfer.TargetPurse,
                Control3Amount      = transfer.Amount,
                Control4Description = transfer.Description
            };

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            form.ApplyTemplate(template, incomeValuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!FinishProtectionFormValuesWrapper.Control1SourcePurseCommandFindIdentifier.Equals(args.Command))
                {
                    return;
                }

                var purseNumber = (string)args.Argument;
                IdentifierDisplayHelper.ShowFindIdentifierForm(form, context, purseNumber);
            };

            form.WorkCallback = (step, list) =>
            {
                var valuesWrapper = new FinishProtectionFormValuesWrapper(list);

                var transferService = context.UnityContainer.Resolve <ITransferService>();
                transferService.FinishProtection(transfer.PrimaryId,
                                                 valuesWrapper.Control6HoldingFeatureIsUsed ? string.Empty : valuesWrapper.Control5Code);

                return(new Dictionary <string, object>());
            };

            return(form);
        }
Exemplo n.º 2
0
        public Form GetForm(SessionContext context, long?identifier)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var incomeValuesWrapper = new SendMessageFormValuesWrapper();

            if (null != identifier)
            {
                var formattingService = context.UnityContainer.Resolve <IFormattingService>();
                incomeValuesWrapper.Control1Identifier = formattingService.FormatIdentifier(identifier.Value);
            }

            var form = SubmitFormDisplayHelper.LoadSubmitFormByExtensionId(context.ExtensionManager, ExtensionCatalog.SendMessage,
                                                                           incomeValuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!SendMessageFormValuesWrapper.Control1IdentifierCommandFindPassport
                    .Equals(args.Command))
                {
                    return;
                }

                IdentifierDisplayHelper.ShowFindCertificateForm(form, context, (string)args.Argument);
            };

            form.WorkCallback = (step, list) =>
            {
                if (0 != step)
                {
                    throw new InvalidOperationException("0 != step");
                }

                var valuesWrapper = new SendMessageFormValuesWrapper(list);

                var messageService = context.UnityContainer.Resolve <IMessageService>();
                messageService.SendMessage(long.Parse(valuesWrapper.Control1Identifier), valuesWrapper.Control2Subject,
                                           valuesWrapper.Control3Message, false);

                return(new Dictionary <string, object>());
            };

            return(form);
        }
Exemplo n.º 3
0
        public Form GetForm(SessionContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var form = SubmitFormDisplayHelper.LoadSubmitFormByExtensionId(context.ExtensionManager,
                                                                           ExtensionCatalog.AddIdentifier);

            form.ServiceCommand += (sender, args) =>
            {
                if (!AddIdentifierFormValuesWrapper.Control1WmidCommandFindPassport.Equals(args.Command))
                {
                    return;
                }

                var identifierValue = (string)args.Argument;
                IdentifierDisplayHelper.ShowFindCertificateForm(form, context, identifierValue);
            };

            form.WorkCallback = (step, list) =>
            {
                var valuesWrapper = new AddIdentifierFormValuesWrapper(list);

                var identifier = long.Parse(valuesWrapper.Control1Wmid);
                var alias      = valuesWrapper.Control2Alias;

                var identifierService = context.UnityContainer.Resolve <IIdentifierService>();

                if (identifierService.IsIdentifierExists(identifier))
                {
                    throw new DuplicateIdentifierException(
                              string.Format(CultureInfo.InvariantCulture,
                                            Resources.AddIdentifierFormProvider_GetForm_WMID__0__already_registered_in_the_program,
                                            valuesWrapper.Control1Wmid));
                }

                identifierService.AddSecondaryIdentifier(new IdentifierSummary(identifier, alias));
                context.Session.CurrentIdentifier = identifier;

                return(new Dictionary <string, object>());
            };

            return(form);
        }
Exemplo n.º 4
0
        private void UpdateComboBox(long?identifierToSelect = null)
        {
            var identifiers = _identifierService.SelectIdentifiers();

            identifierComboBox.BeginUpdate(); // BeginUpdate

            identifierComboBox.Items.Clear();

            int index         = 0;
            int selectedIndex = 0;

            foreach (var identifierInfo in identifiers)
            {
                var text = IdentifierDisplayHelper.FormatIdentifierWithAlias(_formattingService,
                                                                             identifierInfo.Identifier, identifierInfo.IsMaster ? null : identifierInfo.IdentifierAlias);

                identifierComboBox.Items.Add(new ComboBoxItem(text, identifierInfo));

                if (null != identifierToSelect)
                {
                    if (identifierToSelect.Value == identifierInfo.Identifier)
                    {
                        selectedIndex = index;
                    }
                }
                else
                if (identifierInfo.IsMaster)
                {
                    selectedIndex = index;
                }

                index++;
            }

            identifierComboBox.EndUpdate(); // EndUpdate

            if (identifierComboBox.Items.Count > 0)
            {
                identifierComboBox.SelectedIndex = selectedIndex;
            }
        }
        public Form GetForm(SessionContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var form = SubmitFormDisplayHelper.LoadSubmitFormByExtensionId(context.ExtensionManager, ExtensionCatalog.AddPurse);

            form.ServiceCommand += (sender, args) =>
            {
                if (!AddPurseFormValuesWrapper.Control1PurseNumberCommandFindIdentifier.Equals(args.Command))
                {
                    return;
                }

                IdentifierDisplayHelper.ShowFindIdentifierForm(form, context, (string)args.Argument);
            };

            form.WorkCallback = (step, list) =>
            {
                var valuesWrapper = new AddPurseFormValuesWrapper(list);

                var purseService = context.UnityContainer.Resolve <IPurseService>();
                purseService.AddPurse(valuesWrapper.Control1PurseNumber, valuesWrapper.Control2Alias);

                return(new Dictionary <string, object>());
            };

            form.FinalAction = objects =>
            {
                EventBroker.OnPurseChanged(new DataChangedEventArgs {
                    FreshDataRequired = false
                });
                return(true);
            };

            return(form);
        }
        private Form GetForm(SessionContext context, long invoiceId, string targetPurse,
                             RejectInvoiceFormValuesWrapper valuesWrapper)
        {
            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.RejectInvoice);

            var templateWrapper = new RejectInvoiceFormTemplateWrapper(template);

            var currencyService = context.UnityContainer.Resolve <ICurrencyService>();
            var currency        = currencyService.ObtainCurrencyByAccountNumber(targetPurse);

            templateWrapper.Control4Amount.CurrencyName = currencyService.AddPrefix(currency);

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            form.ApplyTemplate(template, valuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!RejectInvoiceFormValuesWrapper.Control1TargetIdentifierCommandFindPassport.Equals(args.Command))
                {
                    return;
                }

                IdentifierDisplayHelper.ShowFindCertificateForm(form, context, (string)args.Argument);
            };

            form.WorkCallback = (step, list) =>
            {
                var invoiceService = context.UnityContainer.Resolve <IInvoiceService>();
                invoiceService.RejectInvoice(invoiceId);
                return(new Dictionary <string, object>());
            };

            return(form);
        }
        private Form GetForm(SessionContext context, string accountNumber)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.TakeTrust);

            var origin = new AccountDropDownListOrigin(context.UnityContainer)
            {
                Source = AccountSource.MasterIdentifier
            };

            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Transfer;

            if (null != accountNumber)
            {
                origin.SelectedAccountNumber = accountNumber;
            }

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            var step1TemplateWrapper = new TakeTrustFormTemplateWrapper.Step1(template);

            step1TemplateWrapper.Control1StorePurse.Items.Clear();
            step1TemplateWrapper.Control1StorePurse.Items.AddRange(itemTemplates);

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            form.ApplyTemplate(template);

            form.ServiceCommand += (sender, args) =>
            {
                if (TakeTrustFormValuesWrapper.Step1.Control7WMIDCommandFindPassport.Equals(args.Command))
                {
                    var identifierValue = (string)args.Argument;
                    IdentifierDisplayHelper.ShowFindCertificateForm(form, context, identifierValue);

                    return;
                }

                if (TakeTrustFormValuesWrapper.Step2.Control4SmsReferenceCommandGoTo.Equals(args.Command))
                {
                    Process.Start((string)args.Argument);
                }
            };

            form.WorkCallback = (step, list) =>
            {
                var trustService = context.UnityContainer.Resolve <ITrustService>();

                switch (step)
                {
                case 0:
                    var step1ValuesWrapper = new TakeTrustFormValuesWrapper.Step1(list);

                    ExtendedIdentifier extendedIdentifier;

                    switch (step1ValuesWrapper.Control5IdentifierType)
                    {
                    case TakePaymentFormValuesWrapper.Step1.Control3IdentifierTypeValueWmid:
                        extendedIdentifier = new ExtendedIdentifier(ExtendedIdentifierType.WmId,
                                                                    step1ValuesWrapper.Control7WMID);
                        break;

                    case TakePaymentFormValuesWrapper.Step1.Control3IdentifierTypeValuePhone:
                        extendedIdentifier = new ExtendedIdentifier(ExtendedIdentifierType.Phone,
                                                                    step1ValuesWrapper.Control6Phone);
                        break;

                    case TakePaymentFormValuesWrapper.Step1.Control3IdentifierTypeValueEmail:
                        extendedIdentifier = new ExtendedIdentifier(ExtendedIdentifierType.Email,
                                                                    step1ValuesWrapper.Control8Email);
                        break;

                    default:
                        throw new InvalidOperationException(
                                  "step1ValuesWrapper.Control5IdentifierType == " +
                                  step1ValuesWrapper.Control5IdentifierType);
                    }

                    var originalExpressTrust =
                        new OriginalExpressTrust(step1ValuesWrapper.Control1StorePurse, extendedIdentifier);

                    originalExpressTrust.DayLimit   = step1ValuesWrapper.Control2DailyAmountLimit;
                    originalExpressTrust.WeekLimit  = step1ValuesWrapper.Control3WeeklyAmountLimit;
                    originalExpressTrust.MonthLimit = step1ValuesWrapper.Control4MonthlyAmountLimit;

                    var trustConfirmationInstruction = trustService.RequestTrust(originalExpressTrust);

                    var step2IncomeValuesWrapper = new TakeTrustFormValuesWrapper.Step2
                    {
                        Control1RequestNumber =
                            trustConfirmationInstruction.Reference.ToString(),
                        Control2Message =
                            trustConfirmationInstruction.PublicMessage ?? string.Empty,

                        Control4SmsReference =
                            !string.IsNullOrEmpty(trustConfirmationInstruction.SmsReference)
                                ? string.Format(CultureInfo.InvariantCulture, CheckSmsStateUrlTemplate, trustConfirmationInstruction.SmsReference)
                                : string.Empty
                    };

                    return(step2IncomeValuesWrapper.CollectIncomeValues());

                case 1:
                    var step2ValuesWrapper = new TakeTrustFormValuesWrapper.Step2(list);

                    var trustConfirmation =
                        new TrustConfirmation(int.Parse(step2ValuesWrapper.Control1RequestNumber),
                                              step2ValuesWrapper.Control5Code);

                    trustService.ConfirmTrust(trustConfirmation);

                    break;
                }

                return(new Dictionary <string, object>());
            };

            return(form);
        }
Exemplo n.º 8
0
 private void infoButton_Click(object sender, EventArgs e)
 {
     IdentifierDisplayHelper.ShowFindCertificateForm(this, _sessionContext,
                                                     _formattingService.FormatIdentifier(_sessionContext.Session.CurrentIdentifier));
 }
Exemplo n.º 9
0
        public Form GetForm(IncomingInvoiceContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var invoice = context.Invoice;

            var currencyService = context.UnityContainer.Resolve <ICurrencyService>();
            var currency        = currencyService.ObtainCurrencyByAccountNumber(invoice.TargetPurse);

            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.PayInvoice);

            var templateWrapper = new PayInvoiceFormTemplateWrapper(template);

            templateWrapper.Control4Amount.CurrencyName = currencyService.AddPrefix(currency);

            // Устанавливаем кошельки
            var origin = new AccountDropDownListOrigin(context.UnityContainer);

            // Оплата в долг не требует денег на кошельке, осуществляется с кредитного кошелька (WMC).
            if (currencyService.CheckCapabilities(currency, CurrencyCapabilities.Debit))
            {
                currency = currencyService.SelectCurrencies(CurrencyCapabilities.Credit).First();
            }
            else
            {
                origin.FilterCriteria.HasMoney = true;
            }

            origin.FilterCriteria.Currency = currency;

            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Actual | CurrencyCapabilities.TransferByInvoice;

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            templateWrapper.Control11PayFrom.Items.Clear();
            templateWrapper.Control11PayFrom.Items.AddRange(itemTemplates);

            // Запрещена оплата с протекцией
            if (null == invoice.ProtectionPeriod)
            {
                templateWrapper.Control12UsePaymentProtection.Enabled = false;
            }
            else
            {
                templateWrapper.Control14ProtectionPeriod.MaxValue = invoice.ProtectionPeriod.Value;
            }

            var formattingService = context.UnityContainer.Resolve <IFormattingService>();

            var incomeValuesWrapper = new PayInvoiceFormValuesWrapper
            {
                Control1TargetIdentifier = formattingService.FormatIdentifier(invoice.TargetIdentifier),
                Control2TargetPurse      = invoice.TargetPurse,
                Control3Amount           = invoice.Amount,
                Control4Description      = invoice.Description ?? string.Empty,
                Control5OrderId          = invoice.OrderId.ToString(),
                Control6Address          = invoice.Address ?? string.Empty,
                Control7PaymentPeriod    = invoice.ExpirationPeriod.ToString(),
                Control9TransferId       = context.Session.SettingsService.AllocateTransferId()
            };

            if (null != invoice.ProtectionPeriod)
            {
                incomeValuesWrapper.Control8MaxProtectionPeriod = invoice.ProtectionPeriod.Value.ToString();
            }

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            form.ApplyTemplate(template, incomeValuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!PayInvoiceFormValuesWrapper.Control1TargetIdentifierCommandFindPassport.Equals(args.Command))
                {
                    return;
                }

                IdentifierDisplayHelper.ShowFindCertificateForm(form, context, (string)args.Argument);
            };

            form.WorkCallback = (step, list) =>
            {
                var valuesWrapper   = new PayInvoiceFormValuesWrapper(list);
                var transferService = context.UnityContainer.Resolve <ITransferService>();

                var originalTransfer = new OriginalTransfer(valuesWrapper.Control9TransferId,
                                                            valuesWrapper.Control10PayFrom, invoice.TargetPurse, invoice.Amount,
                                                            invoice.Description)
                {
                    InvoiceId = invoice.PrimaryId
                };

                if (valuesWrapper.Control11UsePaymentProtection)
                {
                    originalTransfer.ProtectionPeriod = valuesWrapper.Control12ProtectionPeriod;

                    if (valuesWrapper.Control14ProtectionByTime)
                    {
                        originalTransfer.ProtectionCode = valuesWrapper.Control13ProtectionCode;
                    }
                }

                transferService.CreateTransfer(originalTransfer);

                return(new Dictionary <string, object>());
            };

            return(form);
        }
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.TakePayment);

            var origin =
                new AccountDropDownListOrigin(context.UnityContainer)
            {
                SelectedAccountNumber = context.Account.Number
            };

            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Transfer;

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            var step1TemplateWrapper = new TakePaymentFormTemplateWrapper.Step1(template);

            step1TemplateWrapper.Control2StorePurse.Items.Clear();
            step1TemplateWrapper.Control2StorePurse.Items.AddRange(itemTemplates);

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            var incomeValuesWrapper =
                new TakePaymentFormValuesWrapper.Step1
            {
                Control2OrderId = context.Session.SettingsService.AllocateOrderId()
            };

            form.ApplyTemplate(template, incomeValuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!TakePaymentFormValuesWrapper.Step1.Control5WMIDCommandFindPassport.Equals(args.Command))
                {
                    return;
                }

                var identifierValue = (string)args.Argument;
                IdentifierDisplayHelper.ShowFindCertificateForm(form, context, identifierValue);
            };

            long   invoiceId = 0;
            string purse     = "";

            form.WorkCallback = (step, list) =>
            {
                var paymentService = context.UnityContainer.Resolve <IPaymentService>();

                switch (step)
                {
                case 0:
                    var step1ValuesWrapper = new TakePaymentFormValuesWrapper.Step1(list);

                    ExtendedIdentifier extendedIdentifier;

                    switch (step1ValuesWrapper.Control3IdentifierType)
                    {
                    case TakePaymentFormValuesWrapper.Step1.Control3IdentifierTypeValueWmid:
                        extendedIdentifier = new ExtendedIdentifier(ExtendedIdentifierType.WmId,
                                                                    step1ValuesWrapper.Control5WMID);
                        break;

                    case TakePaymentFormValuesWrapper.Step1.Control3IdentifierTypeValuePhone:
                        extendedIdentifier = new ExtendedIdentifier(ExtendedIdentifierType.Phone,
                                                                    step1ValuesWrapper.Control4Phone);
                        break;

                    case TakePaymentFormValuesWrapper.Step1.Control3IdentifierTypeValueEmail:
                        extendedIdentifier = new ExtendedIdentifier(ExtendedIdentifierType.Email,
                                                                    step1ValuesWrapper.Control6Email);
                        break;

                    default:
                        throw new InvalidOperationException(
                                  "step1ValuesWrapper.Control3IdentifierType == " +
                                  step1ValuesWrapper.Control3IdentifierType);
                    }

                    var originalExpressPayment = new OriginalExpressPayment(step1ValuesWrapper.Control2OrderId,
                                                                            step1ValuesWrapper.Control1StorePurse, step1ValuesWrapper.Control7PaymentAmount,
                                                                            step1ValuesWrapper.Control9Description, extendedIdentifier);

                    originalExpressPayment.ConfirmationType =
                        (ConfirmationType)Enum.Parse(typeof(ConfirmationType),
                                                     step1ValuesWrapper.Control8ConfirmationType);

                    purse = originalExpressPayment.TargetPurse;

                    var confirmationInstruction = paymentService.RequestPayment(originalExpressPayment);

                    invoiceId = confirmationInstruction.InvoiceId;

                    var step2IncomeValuesWrapper = new TakePaymentFormValuesWrapper.Step2();
                    step2IncomeValuesWrapper.Control1InvoiceId = confirmationInstruction.InvoiceId.ToString();
                    step2IncomeValuesWrapper.Control2Message   = confirmationInstruction.PublicMessage ?? string.Empty;

                    return(step2IncomeValuesWrapper.CollectIncomeValues());

                case 1:

                    var step2ValuesWrapper = new TakePaymentFormValuesWrapper.Step2(list);

                    var paymentConfirmation = new PaymentConfirmation(purse, invoiceId)
                    {
                        ConfirmationCode = step2ValuesWrapper.Control4CancelInvoice
                                ? "-1"
                                : step2ValuesWrapper.Control3Code
                    };

                    paymentService.ConfirmPayment(paymentConfirmation);

                    break;

                default:
                    throw new InvalidOperationException("step == " + step);
                }

                return(new Dictionary <string, object>());
            };

            return(form);
        }
Exemplo n.º 11
0
        public Form GetForm(SessionContext context, string sourceIdentifierValue, string targetAccountNumber)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.CreateOutgoingInvoice);

            var templateWrapper = new CreateOutgoingInvoiceFormTemplateWrapper(template);

            if (null != sourceIdentifierValue)
            {
                templateWrapper.Control2ReceiversWmid.DefaultValue = sourceIdentifierValue;
            }

            // Кошельки
            var origin = new AccountDropDownListOrigin(context.UnityContainer);

            if (null != targetAccountNumber)
            {
                origin.SelectedAccountNumber = targetAccountNumber;
            }

            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Invoice;

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            templateWrapper.Control3PayTo.Items.Clear();
            templateWrapper.Control3PayTo.Items.AddRange(itemTemplates);

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            var incomeValuesWrapper =
                new CreateOutgoingInvoiceFormValuesWrapper
            {
                Control1OrderId = context.Session.SettingsService.AllocateOrderId()
            };

            form.ApplyTemplate(template, incomeValuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!CreateOutgoingInvoiceFormValuesWrapper.Control2ReceiversWmidCommandFindPassport
                    .Equals(args.Command))
                {
                    return;
                }

                IdentifierDisplayHelper.ShowFindCertificateForm(form, context, (string)args.Argument);
            };

            form.WorkCallback = (step, list) =>
            {
                var valuesWrapper = new CreateOutgoingInvoiceFormValuesWrapper(list);


                var originalInvoice = new OriginalOutgoingInvoice(valuesWrapper.Control1OrderId,
                                                                  valuesWrapper.Control2ReceiversWmid, valuesWrapper.Control3PayTo, valuesWrapper.Control4Amount,
                                                                  valuesWrapper.Control5Description);

                if (valuesWrapper.Control6SpecifyAdditionalParameters)
                {
                    originalInvoice.Address = valuesWrapper.Control7Address;

                    if (valuesWrapper.Control8SpecifyPaymentPeriod)
                    {
                        originalInvoice.ExpirationPeriod = valuesWrapper.Control9PaymentPeriod;
                    }

                    if (valuesWrapper.Control10AllowPaymentWithProtection)
                    {
                        originalInvoice.ProtectionPeriod = valuesWrapper.Control11ProtectionPeriod;
                    }
                }

                var invoiceService = context.UnityContainer.Resolve <IInvoiceService>();

                invoiceService.CreateOutgoingInvoice(originalInvoice);

                return(new Dictionary <string, object>());
            };

            return(form);
        }
        private Form GetForm(SessionContext context, string purseNumber)
        {
            var incomeValuesWrapper = new FindIdentifierFormValuesWrapper.Step1();

            if (!string.IsNullOrEmpty(purseNumber))
            {
                incomeValuesWrapper.Control1Purse = purseNumber;
            }

            var form = SubmitFormDisplayHelper.LoadSubmitFormByExtensionId(context.ExtensionManager,
                                                                           ExtensionCatalog.FindIdentifier, incomeValuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!FindIdentifierFormValuesWrapper.Step2.Control1WmIdCommandFindPassport.Equals(args.Command))
                {
                    return;
                }

                var identifierValue = (string)args.Argument;
                IdentifierDisplayHelper.ShowFindCertificateForm(form, context, identifierValue);
            };

            form.WorkCallback = (step, list) =>
            {
                switch (step)
                {
                case 0:

                    var step1Wrapper = new FindIdentifierFormValuesWrapper.Step1(list);

                    var identifierService = context.UnityContainer.Resolve <IIdentifierService>();

                    var identifier = identifierService.FindIdentifier(step1Wrapper.Control1Purse);

                    if (null == identifier)
                    {
                        throw new PurseNotFoundException(string.Format(CultureInfo.InvariantCulture,
                                                                       Resources.FindIdentifierFormProvider_GetForm_Purse__0__not_found_,
                                                                       step1Wrapper.Control1Purse));
                    }

                    var formattingService = context.UnityContainer.Resolve <IFormattingService>();

                    var step2Wrapper = new FindIdentifierFormValuesWrapper.Step2(list)
                    {
                        Control1WmId = formattingService.FormatIdentifier(identifier.Value)
                    };
                    return(step2Wrapper.CollectIncomeValues());

                case 1:
                    return(new Dictionary <string, object>());

                default:
                    throw new InvalidOperationException("step == " + step);
                }
            };

            if (!string.IsNullOrEmpty(purseNumber))
            {
                form.Load += (sender, args) =>
                {
                    form.Submit();
                }
            }
            ;

            return(form);
        }
    }
Exemplo n.º 13
0
        public void DisplayValue(ICertificate certificate)
        {
            if (null == certificate)
            {
                throw new ArgumentNullException(nameof(certificate));
            }

            var imageKey = certificate.Degree.ToString();

            if (certificate.Revoked)
            {
                imageKey = $"{imageKey}Revoked";
            }

            mPictureBox.Image = certificateImageList.Images[imageKey];

            // 1. Общая информация
            wmIdTextBox.Text = IdentifierDisplayHelper.FormatIdentifierWithAlias(_formattingService,
                                                                                 certificate.Identifier, certificate.IdentifierAlias);

            certificateTextBox.Text =
                Translator.Instance.Translate(ExtensionCatalog.Certificate, certificate.Degree.ToString());

            if (certificate.Revoked)
            {
                certificateTextBox.Font = new Font(certificateTextBox.Font, FontStyle.Strikeout);
            }

            if (null != certificate.Bl)
            {
                levelsTextBox.Text = $@"BL {certificate.Bl.Value}";

                if (null != certificate.Tl)
                {
                    levelsTextBox.Text += $@"; TL {certificate.Tl.Value}";
                }
            }

            nameTextBox.Text =
                string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", certificate.FirstName, certificate.Surname,
                              certificate.Patronymic);
            addressTextBox.Text = Combine(certificate.Country, certificate.Region, certificate.City,
                                          certificate.Address);
            contactsTextBox.Text = Combine(certificate.ContactPhone, certificate.Email, certificate.Icq,
                                           certificate.WebAddress);

            if (null != certificate.PositiveRating && null != certificate.NegativeRating)
            {
                var pos = Translator.Instance.Translate(ExtensionCatalog.Certificate, "POS");
                var neg = Translator.Instance.Translate(ExtensionCatalog.Certificate, "NEG");
                claimsTextBox.Text =
                    $@"{pos} {certificate.PositiveRating ?? -1}; {neg} {certificate.NegativeRating ?? -1}";
            }

            var certificateListItems = new List <ListItemContent>
            {
                //  WMID
                ToListItemContent(Translator.Instance.Translate(ExtensionCatalog.Certificate, "WMID"),
                                  _formattingService.FormatIdentifier(certificate.Identifier), CertificateRecordAspects.Verified,
                                  GeneralInformationGroupName),
                // Название проекта, имя в сети
                ToListItemContent(Translator.Instance.Translate(ExtensionCatalog.Certificate, "Nickname"),
                                  certificate.IdentifierAlias, certificate.AliasAspects, GeneralInformationGroupName)
            };

            // Дата регистрации в системе

            foreach (IAttachedIdentifierSummary identifierSummary in certificate.AttachedIdentifierSummaries)
            {
                if (identifierSummary.Identifier == certificate.Identifier)
                {
                    certificateListItems.Add(ToListItemContent(
                                                 Translator.Instance.Translate(ExtensionCatalog.Certificate, "Registration date"),
                                                 _formattingService.FormatDateTime(identifierSummary.RegistrationDate),
                                                 CertificateRecordAspects.Verified,
                                                 GeneralInformationGroupName));
                    break;
                }
            }

            // 2. Аттестат

            // Тип аттестата
            var verificationStatus = certificate.Revoked
                ? Translator.Instance.Translate(ExtensionCatalog.Certificate, "Revoked")
                : Translator.Instance.Translate(ExtensionCatalog.Certificate, certificate.Degree.ToString());

            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Verification status"), verificationStatus,
                                         CertificateRecordAspects.Verified, CertificateGroupName));

            // Дата получения аттестата
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Date of issue"),
                                         _formattingService.FormatDateTime(certificate.CreationTime), CertificateRecordAspects.Verified,
                                         CertificateGroupName));
            // Кем выдан аттестат
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Issued by"),
                                         Combine(certificate.IssuerIdentifier.ToString("000000000000"), certificate.IssuerAlias),
                                         CertificateRecordAspects.Verified, CertificateGroupName));

            // 3. Персональные данные владельца аттестата

            // Статус владельца
            var status = Translator.Instance.Translate(ExtensionCatalog.Certificate, certificate.Status.ToString());

            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Status"),
                                         status, CertificateRecordAspects.Verified, PersonalDataGroupName));

            if (CertificateStatus.Entity == certificate.Status)
            {
                // На основании чего действует
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Based on"),
                                             certificate.Basis, certificate.BasisAspects,
                                             PersonalDataGroupName));
            }

            // Фамилия
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Last name"),
                                         certificate.Surname, certificate.SurnameAspects, PersonalDataGroupName));
            // Имя
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "First name"),
                                         certificate.FirstName, certificate.FirstNameAspects, PersonalDataGroupName));
            // Отчество
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Middle name"),
                                         certificate.Patronymic, certificate.PatronymicAspects, PersonalDataGroupName));
            // ИНН
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Tax ID"),
                                         certificate.OrganizationTaxId, certificate.OrganizationTaxIdAspects, PersonalDataGroupName));

            // 4. Фактическое местонахождение владельца аттестата

            // Город/Страна
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Country"),
                                         certificate.Country, certificate.CountryAspects, ActualLocationGroupName));
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Region"),
                                         certificate.Region, certificate.RegionAspects, ActualLocationGroupName));
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "City"),
                                         certificate.City, certificate.CityAspects, ActualLocationGroupName));
            // Почтовый индекс
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Postal code"), certificate.ZipCode,
                                         certificate.ZipCodeAspects, ActualLocationGroupName));
            // Адрес
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Address"),
                                         certificate.Address, certificate.AddressAspects, ActualLocationGroupName));

            // 5. Паспортные данные владельца аттестата

            // Номер паспорта
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Passport number"),
                                         certificate.PassportNumber, certificate.PassportNumberAspects, PassportDataGroupName));
            // Когда выдан
            string dateOfIssue = null;

            if (null != certificate.PassportDate)
            {
                dateOfIssue = _formattingService.FormatDateTime(certificate.PassportDate.Value);
            }

            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Date of issue"),
                                         dateOfIssue, certificate.PassportDateAspects,
                                         PassportDataGroupName));
            // Где выдан - Город/Страна
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Issuing country"),
                                         certificate.PassportCountry, certificate.PassportCountryAspects,
                                         PassportDataGroupName));
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Issuing city"),
                                         certificate.PassportCity, certificate.PassportCityAspects, PassportDataGroupName));
            // Кем выдан
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Issued by (issuing authority)"),
                                         certificate.PassportIssuer, certificate.PassportIssuerAspects, PassportDataGroupName));
            // Дата рождения
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Date of birth"),
                                         certificate.Birthday.ToString(), certificate.BirthdayAspects, PassportDataGroupName));
            // Место рождения - Город/Страна
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Place of Birth"), certificate.Birthplace,
                                         certificate.BirthplaceAspects, PassportDataGroupName));
            // Место постоянной регистрации - Город/Страна
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Country"),
                                         certificate.RegistrationCountry, certificate.RegistrationCountryAspects,
                                         PassportDataGroupName));
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "City"),
                                         certificate.RegistrationCity, certificate.RegistrationCityAspects,
                                         PassportDataGroupName));
            // Место постоянной регистрации - Адрес
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Address"),
                                         certificate.RegistrationAddress, certificate.RegistrationAddressAspects,
                                         PassportDataGroupName));

            // 6. Контактная информация владельца аттестата

            // Контактный телефон
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Contact phone."),
                                         certificate.ContactPhone, certificate.ContactPhoneAspects, ContactDataGroupName));
            // Факс
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Fax"),
                                         certificate.Fax, certificate.FaxAspects, ContactDataGroupName));
            // Мобильный телефон
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Mobile phone"), certificate.CellPhone,
                                         certificate.CellPhoneAspects, ContactDataGroupName));
            // Домашний телефон
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Home phone"), certificate.HomePhone,
                                         certificate.HomePhoneAspects, ContactDataGroupName));
            // E-mail
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Email"),
                                         certificate.Email, certificate.EmailAspects, ContactDataGroupName));
            // ICQ
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "ICQ UIN"),
                                         certificate.Icq, certificate.IcqAspects, ContactDataGroupName));
            // Web-сайт
            certificateListItems.Add(ToListItemContent(
                                         Translator.Instance.Translate(ExtensionCatalog.Certificate, "Web site"),
                                         certificate.WebAddress, certificate.WebAddressAspects, ContactDataGroupName));

            if (CertificateStatus.Entity == certificate.Status)
            {
                // 7. Информация об организации
                var appointment =
                    Translator.Instance.Translate(ExtensionCatalog.Certificate, certificate.Appointment.ToString());

                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Appointment"), appointment,
                                             certificate.AppointmentAspects, OrganizationGroupName));

                // Название организации
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Organization name"),
                                             certificate.OrganizationName, certificate.OrganizationNameAspects, OrganizationGroupName));
                // ИНН
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Tax ID"),
                                             certificate.OrganizationTaxId, certificate.OrganizationTaxIdAspects, OrganizationGroupName));
                // ОКПО
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Organization ID"),
                                             certificate.OrganizationId, certificate.OrganizationIdAspects, OrganizationGroupName));
                // ОКВЭД
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Activity Number"),
                                             certificate.OrganizationActivityId, certificate.OrganizationActivityIdAspects,
                                             OrganizationGroupName));
                // Директор (ФИО)
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Director"),
                                             certificate.OrganizationManager, certificate.OrganizationManagerAspects, OrganizationGroupName));
                // Гл. бухгалтер (ФИО)
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Accountant"),
                                             certificate.OrganizationAccountant, certificate.OrganizationAccountantAspects,
                                             OrganizationGroupName));
                // Юридический адрес - Город/Страна
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Country"),
                                             certificate.OrganizationCountry, certificate.OrganizationCountryAspects, OrganizationGroupName));
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "City"),
                                             certificate.OrganizationCity, certificate.OrganizationCityAspects, OrganizationGroupName));
                // Юридический адрес - Индекс
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Postal code"),
                                             certificate.OrganizationZipCode, certificate.OrganizationZipCodeAspects, OrganizationGroupName));
                // Юридический адрес - Улица, дом
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Address"),
                                             certificate.OrganizationAddress, certificate.OrganizationAddressAspects, OrganizationGroupName));
                // Банк
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Bank"),
                                             certificate.OrganizationBankName, certificate.OrganizationBankNameAspects, OrganizationGroupName));
                // БИК
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Bank ID"),
                                             certificate.OrganizationBankId, certificate.OrganizationBankIdAspects, OrganizationGroupName));
                // Корреспондентский счет
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Correspondent account"),
                                             certificate.OrganizationCorrAccount, certificate.OrganizationCorrAccountAspects,
                                             OrganizationGroupName));
                // Расчетный счет
                certificateListItems.Add(ToListItemContent(
                                             Translator.Instance.Translate(ExtensionCatalog.Certificate, "Checking account"),
                                             certificate.OrganizationAccount, certificate.OrganizationAccountAspects, OrganizationGroupName));
            }

            certificateTunableList.DisplayContent(certificateListItems);
            attachedIdentifierTunableList.DisplayContent(certificate.AttachedIdentifierSummaries
                                                         .Select(ais => new ListItemContent(new AttachedIdentifierRecord(ais))
            {
                ImageKey = imageKey
            })
                                                         .ToList());
        }
Exemplo n.º 14
0
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.CreateTransfer);

            var origin =
                new AccountDropDownListOrigin(context.UnityContainer)
            {
                SelectedAccountNumber = context.Account.Number
            };

            origin.FilterCriteria.HasMoney             = true;
            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Transfer;

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            var templateWrapper = new CreateTransferFormTemplateWrapper(template);

            templateWrapper.Control3FromPurse.Items.Clear();
            templateWrapper.Control3FromPurse.Items.AddRange(itemTemplates);

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            var incomeValuesWrapper =
                new CreateTransferFormValuesWrapper
            {
                Control1TransferId = context.Session.SettingsService.AllocateTransferId()
            };

            form.ApplyTemplate(template, incomeValuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!CreateTransferFormValuesWrapper.Control2ToPurseCommandFindIdentifier.Equals(args.Command))
                {
                    return;
                }

                IdentifierDisplayHelper.ShowFindIdentifierForm(form, context, (string)args.Argument);
            };

            form.WorkCallback = (step, list) =>
            {
                var valuesWrapper   = new CreateTransferFormValuesWrapper(list);
                var transferService = context.UnityContainer.Resolve <ITransferService>();

                var originalTransfer = new OriginalTransfer(valuesWrapper.Control1TransferId,
                                                            valuesWrapper.Control3FromPurse, valuesWrapper.Control2ToPurse, valuesWrapper.Control4Amount,
                                                            valuesWrapper.Control5Description);

                if (valuesWrapper.Control6UsePaymentProtection)
                {
                    originalTransfer.ProtectionPeriod = valuesWrapper.Control7ProtectionPeriod;

                    if (!valuesWrapper.Control9ProtectionByTime)
                    {
                        originalTransfer.ProtectionCode = valuesWrapper.Control8ProtectionCode;
                    }
                }

                transferService.CreateTransfer(originalTransfer);

                return(new Dictionary <string, object>());
            };

            form.FinalAction = objects =>
            {
                EventBroker.OnPurseChanged(new DataChangedEventArgs {
                    FreshDataRequired = true
                });
                return(true);
            };

            return(form);
        }
        public Form GetForm(SessionContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var template =
                TemplateLoader.LoadTemplate <SubmitFormTemplate <WMColumnTemplate> >(context.ExtensionManager,
                                                                                     ExtensionCatalog.VerifyClient);

            var step1TemplateWrapper = new VerifyClientFormTemplateWrapper.Step1(template);

            // Добавляем список валют
            var itemTemplates =
                AccountDisplayHelper.BuildCurrencyDropDownListItemTemplates(context.UnityContainer,
                                                                            CurrencyCapabilities.Invoice);

            step1TemplateWrapper.Control3PurseType.Items.Clear();
            step1TemplateWrapper.Control3PurseType.Items.AddRange(itemTemplates);

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            form.ApplyTemplate(template);

            form.ServiceCommand += (sender, args) =>
            {
                switch (args.Command)
                {
                case VerifyClientFormValuesWrapper.Step1.Control6WmidCommandFindPassport:
                    var identifierValue = (string)args.Argument;
                    IdentifierDisplayHelper.ShowFindCertificateForm(form, context, identifierValue);
                    break;

                case "Copy":
                    Clipboard.SetText(((ResultRecord)args.Argument).Value, TextDataFormat.UnicodeText);
                    break;
                }
            };

            form.WorkCallback = (step, list) =>
            {
                switch (step)
                {
                case 0:
                {
                    SuspectedClientInfo suspectedClientInfo;

                    var step1Wrapper = new VerifyClientFormValuesWrapper.Step1(list);

                    var exchangeType = (ExchangeType)Enum.Parse(typeof(ExchangeType), step1Wrapper.Control1Instrument);
                    var currency     = context.UnityContainer.Resolve <ICurrencyService>()
                                       .RemovePrefix(step1Wrapper.Control3PurseType);
                    long identifier = long.Parse(step1Wrapper.Control6Wmid);

                    switch (exchangeType)
                    {
                    case ExchangeType.Cash:
                        suspectedClientInfo = SuspectedClientInfo.CreateCashPaymentVerification(
                            currency, step1Wrapper.Control4Amount,
                            identifier, step1Wrapper.Control9PassportNumber,
                            step1Wrapper.Control7FirstName, step1Wrapper.Control8SecondName);
                        break;

                    case ExchangeType.OfflineSystem:
                        suspectedClientInfo = SuspectedClientInfo.CreateOfflineSystemPaymentVerification(
                            currency, step1Wrapper.Control4Amount,
                            identifier, step1Wrapper.Control7FirstName,
                            step1Wrapper.Control8SecondName);
                        break;

                    case ExchangeType.BankAccount:
                        suspectedClientInfo = SuspectedClientInfo.CreateBankAccountPaymentVerification(
                            currency, step1Wrapper.Control4Amount,
                            identifier, step1Wrapper.Control7FirstName,
                            step1Wrapper.Control8SecondName, step1Wrapper.Control10BankName,
                            step1Wrapper.Control11BankAccount);
                        break;

                    case ExchangeType.Bankcard:
                        suspectedClientInfo = SuspectedClientInfo.CreateBankCardPaymentVerification(
                            currency, step1Wrapper.Control4Amount,
                            identifier, step1Wrapper.Control7FirstName,
                            step1Wrapper.Control8SecondName, step1Wrapper.Control10BankName,
                            step1Wrapper.Control12CardNumber);
                        break;

                    case ExchangeType.InternetSystem:
                        var paymentSystem = (PaymentSystem)Enum.Parse(typeof(PaymentSystem),
                                                                      step1Wrapper.Control13PaymentSystem);

                        suspectedClientInfo = SuspectedClientInfo.CreateInternetSystemPaymentVerification(
                            currency, step1Wrapper.Control4Amount,
                            identifier, paymentSystem,
                            step1Wrapper.Control14PaymentSystemClientId);
                        break;

                    case ExchangeType.Sms:
                        suspectedClientInfo =
                            SuspectedClientInfo.CreateSmsPaymentVerification(
                                currency, step1Wrapper.Control4Amount,
                                identifier, step1Wrapper.Control15Phone);
                        break;

                    case ExchangeType.Mobile:
                        suspectedClientInfo =
                            SuspectedClientInfo.CreateMobilePaymentVerification(
                                currency, step1Wrapper.Control4Amount,
                                identifier, step1Wrapper.Control15Phone);
                        break;

                    case ExchangeType.Blockchain:
                        var cryptoCurrency = (CryptoCurrency)Enum.Parse(typeof(CryptoCurrency),
                                                                        step1Wrapper.Control16CryptoCurrency);

                        suspectedClientInfo =
                            SuspectedClientInfo.CreateBlockchainPaymentVerification(
                                currency, step1Wrapper.Control4Amount,
                                identifier, cryptoCurrency,
                                step1Wrapper.Control17CryptoCurrencyAddress);
                        break;

                    default:
                        throw new InvalidOperationException(
                                  "valuesWrapper.Control1Instrument == " + step1Wrapper.Control1Instrument);
                    }

                    suspectedClientInfo.Output = step1Wrapper.Control2Direction.Equals(VerifyClientFormValuesWrapper
                                                                                       .Step1.Control2DirectionValueOutput);

                    var verificationService = context.UnityContainer.Resolve <IVerificationService>();
                    var verificationReport  = verificationService.VerifyClient(suspectedClientInfo);

                    var listItems = new List <ListItemContent>
                    {
                        new ListItemContent(new ResultRecord("Client name", verificationReport.ClientName)),
                        new ListItemContent(new ResultRecord("Client middle name", verificationReport.ClientMiddleName)),
                        new ListItemContent(new ResultRecord("Reference", verificationReport.Reference))
                    };

                    var step2Wrapper = new VerifyClientFormValuesWrapper.Step2 {
                        Control1Result = listItems
                    };

                    return(step2Wrapper.CollectIncomeValues());
                }

                case 1:
                    return(new Dictionary <string, object>());

                default:
                    throw new InvalidOperationException("step == " + step);
                }
            };

            return(form);
        }
        public Form GetForm(TransferContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var transfer = context.Transfer;

            var template = TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager,
                                                                 TransferType.Protected == context.Transfer.Type
                    ? ExtensionCatalog.RejectProtection
                    : ExtensionCatalog.Moneyback);

            var templateWrapper = new MoneybackFormTemplateWrapper(template);

            var currencyService = context.UnityContainer.Resolve <ICurrencyService>();

            templateWrapper.Control6ReturnAmount.CurrencyName =
                currencyService.AddPrefix(currencyService.ObtainCurrencyByAccountNumber(transfer.SourcePurse));
            templateWrapper.Control6ReturnAmount.AvailableAmount = transfer.Amount;
            templateWrapper.Control6ReturnAmount.DefaultValue    = transfer.Amount;

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            var formattingService = context.UnityContainer.Resolve <IFormattingService>();

            var incomeValuesWrapper = new MoneybackFormValuesWrapper
            {
                Control1SourcePurse = transfer.SourcePurse,
                Control2TargetPurse = transfer.TargetPurse,
                Control3Amount      = formattingService.FormatAmount(transfer.Amount),
                Control4Description = transfer.Description
            };

            form.ApplyTemplate(template, incomeValuesWrapper.CollectIncomeValues());

            form.ServiceCommand += (sender, args) =>
            {
                if (!MoneybackFormValuesWrapper.Control1SourcePurseCommandFindIdentifier.Equals(args.Command))
                {
                    return;
                }

                var purseNumber = (string)args.Argument;
                IdentifierDisplayHelper.ShowFindIdentifierForm(form, context, purseNumber);
            };

            form.WorkCallback = (step, list) =>
            {
                var valuesWrapper = new MoneybackFormValuesWrapper(list);

                var transferService = context.UnityContainer.Resolve <ITransferService>();

                if (TransferType.Protected == context.Transfer.Type)
                {
                    transferService.RejectProtection(transfer.PrimaryId);
                }
                else
                {
                    transferService.Moneyback(transfer.PrimaryId, valuesWrapper.Control5ReturnAmount);
                }

                return(new Dictionary <string, object>());
            };

            return(form);
        }