Ejemplo n.º 1
0
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

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

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

            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Transfer;

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            var redeemPaymerFormTemplateWrapper = new RedeemPaymerFormTemplateWrapper(template);

            redeemPaymerFormTemplateWrapper.Control1RedeemTo.Items.Clear();
            redeemPaymerFormTemplateWrapper.Control1RedeemTo.Items.AddRange(itemTemplates);

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            form.ApplyTemplate(template);

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

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

                transferService.RedeemPaymer(valuesWrapper.Control1RedeemTo, valuesWrapper.Control2Number,
                                             valuesWrapper.Control3Code);

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

            return(form);
        }
Ejemplo n.º 2
0
        private Form GetForm(SessionContext context, string phone)
        {
            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.SendSms);

            var templateWrapper = new SendSmsFormTemplateWrapper(template);

            if (null != phone)
            {
                templateWrapper.Control1PhoneNumber.DefaultValue = phone;
            }

            var origin = new AccountDropDownListOrigin(context.UnityContainer);

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

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            form.ApplyTemplate(template);

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

                var smsService = context.UnityContainer.Resolve <ISmsService>();

                smsService.SendSms(null, valuesWrapper.Control1PhoneNumber,
                                   valuesWrapper.Control2Message, valuesWrapper.Control3UseTransliteration);

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

            return(form);
        }
Ejemplo n.º 3
0
        public TransferRegisterForm(SessionContext context, string accountNumber = null)
        {
            _context = context ?? throw new ArgumentNullException(nameof(context));

            _currencyService   = context.UnityContainer.Resolve <ICurrencyService>();
            _formattingService = context.UnityContainer.Resolve <IFormattingService>();

            InitializeComponent();

            var origin = new AccountDropDownListOrigin(context.UnityContainer);

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

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

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            var accountDropDownListTemplate = new AccountDropDownListTemplate("[empty]");

            accountDropDownListTemplate.Items.AddRange(itemTemplates);

            sourcePurseDropDownList.BeginUpdate();
            sourcePurseDropDownList.Items.Clear();
            sourcePurseDropDownList.ApplyTemplate(accountDropDownListTemplate);
            sourcePurseDropDownList.EndUpdate();

            mTunableGrid.ParseCellValue += ParseCellValue;

            bundleNameTextBox.Click += (sender, args) =>
            {
                mErrorProvider.SetError(bundleNameTextBox, null);
            };
        }
        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);
        }
Ejemplo n.º 5
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);
        }
        private Form GetForm(SessionContext context, string purseNumber, long?id, PaymentNumberKind numberKind)
        {
            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager, ExtensionCatalog.FindMerchantTransfer);

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

            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Invoice;

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            var step1TemplateWrapper = new FindMerchantTransferFormTemplateWrapper.Step1(template);

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

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            var incomeValuesWrapperStep1 = new FindMerchantTransferFormValuesWrapper.Step1();

            if (id.HasValue)
            {
                incomeValuesWrapperStep1.Control2Number = id.Value;
            }

            incomeValuesWrapperStep1.Control3NumberType = numberKind.ToString();

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

            form.WorkCallback = (step, list) =>
            {
                switch (step)
                {
                case 0:
                    var valuesWrapperStep1 = new FindMerchantTransferFormValuesWrapper.Step1(list);

                    var paymentService = context.UnityContainer.Resolve <IPaymentService>();

                    var merchantPayment = paymentService.FindPayment(valuesWrapperStep1.Control1FromPurse,
                                                                     valuesWrapperStep1.Control2Number,
                                                                     (PaymentNumberKind)Enum.Parse(typeof(PaymentNumberKind),
                                                                                                   valuesWrapperStep1.Control3NumberType));

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

                    var records = new List <ResultRecord>();
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "System transfer ID"),
                                    merchantPayment.TransferId.ToString()));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "System invoice ID"),
                                    merchantPayment.InvoiceId.ToString()));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Amount"),
                                    formattingService.FormatAmount(merchantPayment.Amount)));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Creation time"),
                                    formattingService.FormatDateTime(merchantPayment.CreationTime)));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Description"),
                                    merchantPayment.Description ?? string.Empty));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Source purse"),
                                    merchantPayment.SourcePurse ?? string.Empty));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Source WMID"),
                                    formattingService.FormatIdentifier(merchantPayment.SourceIdentifier)));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Is Capitaller"),
                                    merchantPayment.IsCapitaller.ToString()));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Is enum"),
                                    merchantPayment.IsEnum.ToString()));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "IP Address"),
                                    merchantPayment.IPAddress?.ToString()));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Telepat phone"),
                                    merchantPayment.TelepatPhone ?? string.Empty));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Telepat method"),
                                    merchantPayment.TelepatMethod?.ToString() ?? string.Empty));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Paymer number"),
                                    merchantPayment.PaymerNumber ?? string.Empty));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Paymer email"),
                                    merchantPayment.PaymerEmail ?? string.Empty));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Paymer type"),
                                    merchantPayment.PaymerType.ToString()));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Cashier number"),
                                    merchantPayment.CashierNumber ?? string.Empty));
                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Cashier date"),
                                    merchantPayment.CashierDate?.ToString() ?? string.Empty));

                    var cashierAmountValue = string.Empty;

                    if (null != merchantPayment.CashierAmount)
                    {
                        cashierAmountValue = formattingService.FormatAmount(merchantPayment.CashierAmount.Value);
                    }

                    records.Add(new ResultRecord(
                                    Translator.Instance.Translate(ExtensionCatalog.FindMerchantTransfer, "Cashier amount"),
                                    cashierAmountValue));
                    // TODO [M] добавить SDP
                    // records.Add(new ResultRecord("sdp_type", merchantPayment.));

                    var valuesWrapperStep2 = new FindMerchantTransferFormValuesWrapper.Step2();
                    valuesWrapperStep2.Control1Payment = records.Select(r => new ListItemContent(r)).ToList();

                    return(valuesWrapperStep2.CollectIncomeValues());

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

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

            if (null != id)
            {
                form.Load += (sender, args) =>
                {
                    form.Submit();
                };
            }

            return(form);
        }
Ejemplo n.º 8
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);
        }
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

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

            var step1TemplateWrapper = new CreatePaymentLinkFormTemplateWrapper.Step1(template);

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

            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Transfer;

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

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

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            var inputStep1ValuesWrapper =
                new CreatePaymentLinkFormValuesWrapper.Step1
            {
                Control2OrderId = context.Session.SettingsService.AllocateOrderId()
            };

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

            form.WorkCallback = (step, list) =>
            {
                switch (step)
                {
                case 0:
                    var step1ValuesWrapper = new CreatePaymentLinkFormValuesWrapper.Step1(list);

                    var paymentLinkRequest = new PaymentLinkRequest(step1ValuesWrapper.Control2OrderId,
                                                                    step1ValuesWrapper.Control1StorePurse, step1ValuesWrapper.Control3PaymentAmount,
                                                                    step1ValuesWrapper.Control5Description)
                    {
                        Lifetime = step1ValuesWrapper.Control4ValidityPeriod
                    };


                    var paymentService = context.UnityContainer.Resolve <IPaymentService>();
                    var link           = paymentService.CreatePaymentLink(paymentLinkRequest);

                    var step2ValuesWrapper = new CreatePaymentLinkFormValuesWrapper.Step2
                    {
                        Control1PaymentLink = link
                    };

                    return(step2ValuesWrapper.CollectIncomeValues());

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

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

            return(form);
        }
        public static Form CreateForm(SessionContext context, ITrust trust)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var template =
                TemplateLoader.LoadSubmitFormTemplate(context.ExtensionManager,
                                                      null == trust ? ExtensionCatalog.CreateTrust : ExtensionCatalog.UpdateTrust);

            if (null != trust)
            {
                template.Text = Translator.Instance.Translate(ExtensionCatalog.UpdateTrust, "Change trust");
            }

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

            origin.FilterCriteria.CurrencyCapabilities = CurrencyCapabilities.Actual;

            if (null != trust)
            {
                origin.Source = AccountSource.Trusts;
                origin.SelectedAccountNumber = trust.Purse;
            }

            var itemTemplates = AccountDisplayHelper.BuildAccountDropDownListItemTemplates(origin);

            var templateWrapper = new CreateTrustFormTemplateWrapper(template);

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

            if (null != trust)
            {
                templateWrapper.Control1MasterIdentifier.ReadOnly = true;
                templateWrapper.Control2PurseNumber.Enabled       = false;
            }

            var form = new SubmitForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            var incomeValuesWrapper = new CreateTrustFormValuesWrapper();

            if (null != trust)
            {
                var formattingService = context.UnityContainer.Resolve <IFormattingService>();

                incomeValuesWrapper.Control1MasterIdentifier =
                    formattingService.FormatIdentifier(trust.MasterIdentifier);
                incomeValuesWrapper.Control2PurseNumber     = trust.Purse;
                incomeValuesWrapper.Control3InvoiceAllowed  = trust.InvoiceAllowed;
                incomeValuesWrapper.Control4BalanceAllowed  = trust.BalanceAllowed;
                incomeValuesWrapper.Control5HistoryAllowed  = trust.HistoryAllowed;
                incomeValuesWrapper.Control6TransferAllowed = trust.TransferAllowed;

                if (trust.TransferAllowed)
                {
                    incomeValuesWrapper.Control7DailyAmountLimit    = trust.DayLimit;
                    incomeValuesWrapper.Control8DayAmountLimit      = trust.DayLimit;
                    incomeValuesWrapper.Control9WeeklyAmountLimit   = trust.WeekLimit;
                    incomeValuesWrapper.Control10MonthlyAmountLimit = trust.MonthLimit;
                }
            }

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

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

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

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

                var purse = null != trust ? trust.Purse : valuesWrapper.Control2PurseNumber;

                var originalTrust = new OriginalTrust(long.Parse(valuesWrapper.Control1MasterIdentifier), purse)
                {
                    InvoiceAllowed  = valuesWrapper.Control3InvoiceAllowed,
                    BalanceAllowed  = valuesWrapper.Control4BalanceAllowed,
                    HistoryAllowed  = valuesWrapper.Control5HistoryAllowed,
                    TransferAllowed = valuesWrapper.Control6TransferAllowed
                };

                if (valuesWrapper.Control6TransferAllowed)
                {
                    originalTrust.DayLimit   = valuesWrapper.Control8DayAmountLimit;
                    originalTrust.WeekLimit  = valuesWrapper.Control9WeeklyAmountLimit;
                    originalTrust.MonthLimit = valuesWrapper.Control10MonthlyAmountLimit;
                }

                var trustService = context.UnityContainer.Resolve <ITrustService>();
                trustService.CreateTrust(originalTrust);

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

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

            return(form);
        }
Ejemplo n.º 11
0
        public static List <AccountDropDownListItemTemplate> BuildAccountDropDownListItemTemplates(
            AccountDropDownListOrigin origin)
        {
            if (null == origin)
            {
                throw new ArgumentNullException(nameof(origin));
            }

            var purseService    = origin.Container.Resolve <IPurseService>();
            var currencyService = origin.Container.Resolve <ICurrencyService>();
            var transferService = origin.Container.Resolve <ITransferService>();

            List <IAccount> accounts;

            switch (origin.Source)
            {
            case AccountSource.CurrentIdentifier:
                accounts = purseService.SelectAccounts().ToList();
                break;

            case AccountSource.MasterIdentifier:
                accounts = purseService.SelectAccounts(false, true).ToList();
                break;

            case AccountSource.Trusts:
            {
                var fastAccounts = new List <Account>();

                var trustService = origin.Container.Resolve <ITrustService>();
                var trusts       = trustService.SelectTrusts();

                foreach (var trust in trusts)
                {
                    fastAccounts.Add(new Account(trust.Purse, null, null));
                }

                foreach (var account in purseService.SelectAccounts().ToList())
                {
                    var fastAccount = fastAccounts.FirstOrDefault(a => a.Number == account.Number);

                    if (null != fastAccount)
                    {
                        fastAccount.Name   = account.Name;
                        fastAccount.Amount = account.Amount;
                    }
                }

                accounts = new List <IAccount>();
                accounts.AddRange(fastAccounts);
            }
            break;

            default:
                throw new ArgumentException("origin.Source == " + origin.Source);
            }

            var result = new List <AccountDropDownListItemTemplate>();

            foreach (var account in accounts)
            {
                var currency = currencyService.ObtainCurrencyByAccountNumber(account.Number);

                if (null != origin.FilterCriteria)
                {
                    if (null != origin.FilterCriteria.Currency && !currency.Equals(origin.FilterCriteria.Currency))
                    {
                        continue;
                    }

                    if (origin.FilterCriteria.HasMoney &&
                        null != account.Amount &&
                        0 == account.Amount.Value)
                    {
                        continue;
                    }

                    if (!currencyService.CheckCapabilities(currency, origin.FilterCriteria.CurrencyCapabilities))
                    {
                        continue;
                    }
                }

                decimal?amount            = account.Amount;
                decimal?recommendedAmount = null;

                if (null != amount)
                {
                    decimal commission = 0.01M;

                    if (amount >= 0.01M)
                    {
                        commission = transferService.CalculateCommission(amount.Value, currency);
                    }

                    if (commission > amount.Value)
                    {
                        recommendedAmount = 0;
                    }
                    else
                    {
                        recommendedAmount = amount - commission;
                    }
                }

                result.Add(new AccountDropDownListItemTemplate(account.Number)
                {
                    Amount            = amount,
                    AvailableAmount   = amount,
                    RecommendedAmount = recommendedAmount,
                    Currency          = currencyService.AddPrefix(currency),
                    Name = account.Name
                });
            }

            if (null != origin.SelectedAccountNumber)
            {
                foreach (var itemTemplate in result)
                {
                    if (itemTemplate.Number.Equals(origin.SelectedAccountNumber))
                    {
                        itemTemplate.Selected = true;
                        break;
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 12
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);
        }