public void RunAction(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var message = string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}",
                                        Translator.Instance.Translate(ExtensionCatalog.ClearMerchantKey, "Merchant key for purse"), context.Account.Number,
                                        Translator.Instance.Translate(ExtensionCatalog.ClearMerchantKey, "will be deleted permanently."));

            if (DialogResult.OK != MessageBox.Show(null, message,
                                                   Translator.Instance.Translate(ExtensionCatalog.ClearMerchantKey, "Сonfirm deletion"), MessageBoxButtons.OKCancel,
                                                   MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2))
            {
                return;
            }

            var purseService = context.UnityContainer.Resolve <IPurseService>();

            purseService.ClearMerchantKey(context.Account.Number);
            purseService.ClearSecretKeyX20(context.Account.Number);

            EventBroker.OnPurseChanged(new DataChangedEventArgs {
                FreshDataRequired = false
            });
        }
Exemple #2
0
        public bool CheckCompatibility(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(true);
        }
        public bool CheckCompatibility(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(context.Account.IsManuallyAdded);
        }
        public bool CheckCompatibility(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(context.Account.HasMerchantKey || context.Account.HasSecretKeyX20);
        }
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(GetForm(context, context.Account.Number));
        }
        public bool CheckCompatibility(PurseContext context)
        {
            if (context.Account.Amount > 0)
            {
                return(true);
            }

            return(false);
        }
Exemple #7
0
        public void RunAction(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            Copy(context.Account.Number);
        }
        private static void FillPurse(Purse purse, List <Currency> currencies, PurseContext ctx)
        {
            purse.Accounts = new List <Account>();
            var random = new Random();

            for (var i = 0; i < 3; i++)
            {
                ctx.Accounts.Add(new Account()
                {
                    Currency = currencies[random.Next(currencies.Count)],
                    Amount   = random.Next(1000, 30000),
                    Purse    = purse
                });
            }
        }
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var template = TemplateLoader.LoadTemplate <TunableGridTemplate>(context.ExtensionManager, ExtensionCatalog.TransferRegister);

            var form = new TransferRegisterForm(context, context.Account.Number);

            form.ApplyTemlate(template);

            return(form);
        }
Exemple #10
0
        public bool CheckCompatibility(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

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

            if (!currencyService.CheckCapabilities(currency, CurrencyCapabilities.Invoice))
            {
                return(false);
            }

            return(true);
        }
Exemple #11
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);
        }
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new PurseContext(
                       serviceProvider.GetRequiredService <
                           DbContextOptions <PurseContext> >()))
            {
                if (context.Users.Any())
                {
                    return;
                }

                string defaultSource = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml";
                var    currencies    = Currency.Import(defaultSource);
                if (currencies != null)
                {
                    currencies.ToList().ForEach(x => context.Currencies.Add(x));

                    var config = new Configuration()
                    {
                        CurrencySource = defaultSource,
                        Updated        = DateTime.Now.Date
                    };

                    context.Configuration.Add(config);
                    context.SaveChanges();
                }

                var user1 = new User {
                    Name = "Tom", Purse = new Purse()
                };
                var user2 = new User {
                    Name = "Ray", Purse = new Purse()
                };
                context.Users.AddRange(user1, user2);
                context.SaveChanges();

                FillPurse(user1.Purse, currencies.ToList(), context);
                FillPurse(user2.Purse, currencies.ToList(), context);

                context.SaveChanges();
            }
        }
        public bool CheckCompatibility(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

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

            if (!currencyService.CheckCapabilities(currency, CurrencyCapabilities.Actual | CurrencyCapabilities.Transfer))
            {
                return(false);
            }

            if (AuthenticationMethod.KeeperClassic != context.Session.AuthenticationService.AuthenticationMethod &&
                !context.Account.HasMerchantKey)
            {
                return(false);
            }

            return(true);
        }
 public Form GetForm(PurseContext context)
 {
     return(new Form1("Выбран кошелек: " + context.Account.Number));
 }
Exemple #15
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);
        }
Exemple #16
0
 public EFUnitOfWork(string connectionString)
 {
     db = new PurseContext(connectionString);
 }
Exemple #17
0
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var origin = new FilterOrigin(context.ExtensionManager,
                                          ExtensionCatalog.OutgoingInvoiceFilter)
            {
                MenuItemsTagName  = ExtensionCatalog.Tags.OutgoingInvoiceExtension,
                CommandBarTagName = ExtensionCatalog.Tags.OutgoingInvoiceFilterExtension,
                ColumnsSettings   = context.Session.SettingsService.GetSettings().OutgoingInvoiceSettings
            };

            var template = FilterDisplayHelper.LoadFilterFormTemplate(origin);

            template.Title = string.Format(CultureInfo.InvariantCulture, "{0} {1}",
                                           Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "Outgoing invoices by purse"),
                                           context.Account.Number);

            // Отключаем кнопки.
            foreach (var templateCommandButton in template.FilterScreen.CommandButtons)
            {
                var purseFormProvider =
                    context.ExtensionManager.TryGetPurseFormProvider(templateCommandButton.Command);

                if (!(purseFormProvider?.CheckCompatibility(context) ?? false))
                {
                    templateCommandButton.Enabled = false;
                }
            }

            var form = new FilterForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            var now = DateTime.Now;

            var incomeValuesWrapper = new OutgoingInvoiceFilterFormValuesWrapper
            {
                Control1FromTime = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0, DateTimeKind.Local),
                Control2ToTime   = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59, DateTimeKind.Local)
            };

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

            // Сохранение документа
            form.SaveItemsCallback = (s, list) =>
            {
                var importExportService = context.UnityContainer.Resolve <IImportExportService>();
                importExportService.Save(list, s);
            };

            // Сохранение настроек
            form.FormClosing += (sender, args) =>
            {
                var settings = context.Session.SettingsService.GetSettings();
                var outgoingInvoiceSettings = settings.OutgoingInvoiceSettings;

                FilterDisplayHelper.UpdateColumnsSettings(outgoingInvoiceSettings, form.SelectGridSettings());

                context.Session.SettingsService.SetSettings(settings);
                context.Session.SettingsService.Save();
            };

            // Меню
            form.MenuItemResolver = (entity, command) =>
            {
                var invoice = form.CurrentEntity as IOutgoingInvoice;

                if (null == invoice)
                {
                    return(false);
                }

                var invoiceContext = new OutgoingInvoiceContext(context, invoice);

                var formProvider = context.ExtensionManager.TryGetOutgoingInvoiceFormProvider(command);
                return(formProvider?.CheckCompatibility(invoiceContext) ?? false);
            };

            // Обработка событий.
            form.ServiceCommand += (sender, args) =>
            {
                string command = args.Command;

                if (null == command)
                {
                    throw new InvalidOperationException("null == command");
                }

                if (command.StartsWith("CellContentClick:", StringComparison.Ordinal))
                {
                    return;
                }

                if (command.StartsWith("CellMouseDoubleClick:", StringComparison.Ordinal))
                {
                    command = ExtensionCatalog.Details;
                }

                var invoice = args.Argument as IOutgoingInvoice;

                // Кнопки
                if (null == invoice)
                {
                    var formProvider = context.ExtensionManager.TryGetPurseFormProvider(command);
                    formProvider?.GetForm(context).Show(form);
                }
                else
                {
                    // Системная
                    var formProvider = context.ExtensionManager.TryGetOutgoingInvoiceFormProvider(command);
                    formProvider?.GetForm(new OutgoingInvoiceContext(context, invoice))
                    .Show(form);
                }
            };

            // Команда Refresh
            form.WorkCallback = list =>
            {
                var valuesWrapper = new OutgoingInvoiceFilterFormValuesWrapper(list);

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

                var invoices = invoiceService.SelectOutgoingInvoices(context.Account.Number,
                                                                     valuesWrapper.Control1FromTime.ToUniversalTime(), valuesWrapper.Control2ToTime.ToUniversalTime(), true);

                var gridRowContentList = new List <GridRowContent>();
                var operationSettings  = context.Session.SettingsService.GetSettings().OperationSettings;

                decimal paid    = 0;
                decimal notPaid = 0;
                decimal refused = 0;

                foreach (var invoice in invoices)
                {
                    var gridRowContent = new GridRowContent(invoice.PrimaryId.ToString(), invoice);

                    switch (invoice.State)
                    {
                    case InvoiceState.Paid:
Paid:
                        gridRowContent.ForeColor          = operationSettings.OutcomeForeColor;
                        gridRowContent.SelectionForeColor = operationSettings.OutcomeForeColor;
                        break;

                    case InvoiceState.PaidWithProtection:
                        gridRowContent.BackColor          = operationSettings.ProtectedColor;
                        gridRowContent.SelectionBackColor =
                            ColorUtility.CalculateSelectionColor(operationSettings.ProtectedColor);
                        goto Paid;

                    case InvoiceState.Refusal:
                        gridRowContent.Strikeout = true;
                        break;
                    }

                    switch (invoice.State)
                    {
                    case InvoiceState.NotPaid:
                        notPaid += invoice.Amount;
                        break;

                    case InvoiceState.PaidWithProtection:
                    case InvoiceState.Paid:
                        paid += invoice.Amount;
                        break;

                    case InvoiceState.Refusal:
                        refused += invoice.Amount;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    gridRowContentList.Add(gridRowContent);
                }

                var chartPoint1 = new ChartPoint(Translator.Instance.Translate(ExtensionCatalog.OutgoingInvoiceFilter, "Paid"),
                                                 (double)paid);
                var chartPoint2 = new ChartPoint(
                    Translator.Instance.Translate(ExtensionCatalog.OutgoingInvoiceFilter, "Not paid"), (double)notPaid);
                var chartPoint3 = new ChartPoint(
                    Translator.Instance.Translate(ExtensionCatalog.OutgoingInvoiceFilter, "Refused"), (double)refused);

                var filterScreenContent = new FilterScreenContent();
                filterScreenContent.RowContentList.AddRange(gridRowContentList);

                if (paid > 0)
                {
                    filterScreenContent.ChartPoints.Add(chartPoint1);
                }

                if (notPaid > 0)
                {
                    filterScreenContent.ChartPoints.Add(chartPoint2);
                }

                if (refused > 0)
                {
                    filterScreenContent.ChartPoints.Add(chartPoint3);
                }

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

                var filterFormContent = new FilterFormContent(filterScreenContent);
                filterFormContent.LabelValues.Add(
                    $"{Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "PAID")}: {formattingService.FormatAmount(paid)}");
                filterFormContent.LabelValues.Add(
                    $"{Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "UNP")}: {formattingService.FormatAmount(notPaid)}");
                filterFormContent.LabelValues.Add(
                    $"{Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "REF")}: {formattingService.FormatAmount(refused)}");

                return(filterFormContent);
            };

            return(form);
        }
 public AccountRepository(PurseContext context)
 {
     this.db = context;
 }
 public RefillController(PurseContext context)
 {
     ctx = context;
 }
Exemple #20
0
 public TransactionRepository(PurseContext context)
 {
     this.db = context;
 }
Exemple #21
0
 public WithdrawController(PurseContext context)
 {
     ctx = context;
 }
Exemple #22
0
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var origin = new FilterOrigin(context.ExtensionManager,
                                          ExtensionCatalog.TransferFilter)
            {
                MenuItemsTagName  = ExtensionCatalog.Tags.TransferExtension,
                CommandBarTagName = ExtensionCatalog.Tags.TransferFilterExtension,
                ColumnsSettings   = context.Session.SettingsService.GetSettings().TransferSettings
            };

            var template = FilterDisplayHelper.LoadFilterFormTemplate(origin);

            template.Title = string.Format(CultureInfo.InvariantCulture, "{0} {1}",
                                           Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "History by purse"),
                                           context.Account.Number);

            // Отключаем кнопки.
            foreach (var buttonTemplate in template.FilterScreen.CommandButtons)
            {
                var formProvider =
                    context.ExtensionManager.TryGetPurseFormProvider(buttonTemplate.Command);

                if (!(formProvider?.CheckCompatibility(context) ?? false))
                {
                    buttonTemplate.Enabled = false;
                }
            }

            var form = new FilterForm();

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, form);

            form.ApplyTemplate(template);

            var now = DateTime.Now;

            var incomeValuesWrapper = new TransferFilterFormValuesWrapper
            {
                Control1FromTime = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0, DateTimeKind.Local),
                Control2ToTime   = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59, DateTimeKind.Local)
            };

            form.ApplyShapeValues(incomeValuesWrapper.CollectIncomeValues());

            // Сохранение документа
            form.SaveItemsCallback = (s, list) =>
            {
                var importExportService = context.UnityContainer.Resolve <IImportExportService>();
                importExportService.Save(list, s);
            };

            // Сохранение настроек
            form.FormClosing += (sender, args) =>
            {
                var settings         = context.Session.SettingsService.GetSettings();
                var transferSettings = settings.TransferSettings;

                FilterDisplayHelper.UpdateColumnsSettings(transferSettings, form.SelectGridSettings());

                context.Session.SettingsService.SetSettings(settings);
                context.Session.SettingsService.Save();
            };

            // Меню
            form.MenuItemResolver = (entity, command) =>
            {
                var transfer = form.CurrentEntity as ITransfer;

                if (null == transfer)
                {
                    return(false);
                }

                var transferContext = new TransferContext(context, transfer);

                var formProvider = context.ExtensionManager.TryGetTransferFormProvider(command);
                return(formProvider?.CheckCompatibility(transferContext) ?? false);
            };

            // Обработка событий.
            form.ServiceCommand += (sender, args) =>
            {
                string command = args.Command;

                if (null == command)
                {
                    throw new InvalidOperationException("null == command");
                }

                if (command.StartsWith("CellContentClick:", StringComparison.Ordinal))
                {
                    return;
                }

                if (command.StartsWith("CellMouseDoubleClick:", StringComparison.Ordinal))
                {
                    command = ExtensionCatalog.Details;
                }

                var transfer = args.Argument as ITransfer;

                // Кнопки
                if (null == transfer)
                {
                    var formProvider = context.ExtensionManager.TryGetPurseFormProvider(command);
                    formProvider?.GetForm(context).Show(form);
                }
                else
                {
                    // Системная
                    var formProvider = context.ExtensionManager.TryGetTransferFormProvider(command);
                    formProvider?.GetForm(new TransferContext(context, transfer))
                    .Show(form);
                }
            };

            // Команда Refresh
            form.WorkCallback = values =>
            {
                var valuesWrapper = new TransferFilterFormValuesWrapper(values);


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

                var transfers = tansferService.SelectTransfers(context.Account.Number,
                                                               valuesWrapper.Control1FromTime.ToUniversalTime(), valuesWrapper.Control2ToTime.ToUniversalTime(),
                                                               !valuesWrapper.Control3OfflineSearch);

                var gridRowContentList = new List <GridRowContent>();

                decimal income  = 0;
                decimal outcome = 0;

                var operationSettings = context.Session.SettingsService.GetSettings().OperationSettings;

                foreach (var transfer in transfers)
                {
                    var gridRowContent = new GridRowContent(transfer.PrimaryId.ToString(), transfer);

                    switch (transfer.Type)
                    {
                    case TransferType.Regular:
                        gridRowContent.SelectionBackColor = operationSettings.SelectionColor;
                        break;

                    case TransferType.Protected:
Protected:
                        gridRowContent.BackColor          = operationSettings.ProtectedColor;
                        gridRowContent.SelectionBackColor = ColorUtility.CalculateSelectionColor(operationSettings.ProtectedColor);
                        break;

                    case TransferType.Canceled:
                        gridRowContent.Strikeout = true;
                        goto Protected;
                    }

                    var foreColor = transfer.SourcePurse.Equals(context.Account.Number)
                        ? operationSettings.OutcomeForeColor
                        : operationSettings.IncomeForeColor;

                    gridRowContent.ForeColor          = foreColor;
                    gridRowContent.SelectionForeColor = foreColor;

                    if (TransferType.Canceled != transfer.Type &&
                        TransferType.Protected != transfer.Type)
                    {
                        if (transfer.SourcePurse.Equals(context.Account.Number))
                        {
                            outcome += transfer.Amount;
                        }
                        else
                        {
                            income += transfer.Amount;
                        }
                    }

                    gridRowContentList.Add(gridRowContent);
                }

                var chartPoint1 = new ChartPoint(
                    Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "Income"), (double)income)
                {
                    Color     = operationSettings.IncomeChartColor,
                    FontColor = ChartFontColor
                };
                var chartPoint2 = new ChartPoint(
                    Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "Outcome"), (double)outcome)
                {
                    Color     = operationSettings.OutcomeChartColor,
                    FontColor = ChartFontColor
                };

                var filterScreenContent = new FilterScreenContent();
                filterScreenContent.RowContentList.AddRange(gridRowContentList);

                if (income > 0)
                {
                    filterScreenContent.ChartPoints.Add(chartPoint1);
                }

                if (outcome > 0)
                {
                    filterScreenContent.ChartPoints.Add(chartPoint2);
                }

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

                var filterFormContent = new FilterFormContent(filterScreenContent);
                filterFormContent.LabelValues.Add(
                    $"{Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "IN")}: {formattingService.FormatAmount(income)}");
                filterFormContent.LabelValues.Add(
                    $"{Translator.Instance.Translate(ExtensionCatalog.TransferFilter, "OUT")}: {formattingService.FormatAmount(outcome)}");

                return(filterFormContent);
            };

            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);
        }
Exemple #24
0
        public Form GetForm(PurseContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var incomeValuesWrapper = new SetMerchantKeyFormValuesWrapper();

            if (context.Account.HasMerchantKey)
            {
                incomeValuesWrapper.Control1HasSecretKey = true;
                incomeValuesWrapper.Control2SecretKey    = KeyMask;
            }

            if (context.Account.HasSecretKeyX20)
            {
                incomeValuesWrapper.Control3HasSecretKeyX20 = true;
                incomeValuesWrapper.Control4SecretKeyX20    = KeyMask;
            }

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

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

                var purseService = context.UnityContainer.Resolve <IPurseService>();

                if (valuesWrapper.Control1HasSecretKey)
                {
                    if (!KeyMask.Equals(valuesWrapper.Control2SecretKey, StringComparison.Ordinal))
                    {
                        purseService.SetMerchantKey(context.Account.Number, valuesWrapper.Control2SecretKey);
                    }
                }
                else
                {
                    purseService.ClearMerchantKey(context.Account.Number);
                }

                if (valuesWrapper.Control3HasSecretKeyX20)
                {
                    if (!KeyMask.Equals(valuesWrapper.Control4SecretKeyX20, StringComparison.Ordinal))
                    {
                        purseService.SetSecretKeyX20(context.Account.Number, valuesWrapper.Control4SecretKeyX20);
                    }
                }
                else
                {
                    purseService.ClearSecretKeyX20(context.Account.Number);
                }

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

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

            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 TransferController(PurseContext context)
 {
     ctx = context;
 }
 public DetailsController(PurseContext context)
 {
     ctx = context;
 }
        public Control GetScreen(ScreenContainerContext context)
        {
            _context = context ?? throw new ArgumentNullException(nameof(context));

            var origin =
                new AccountListScreenOrigin(context, ExtensionCatalog.PursesScreen)
            {
                MenuItemsTagName  = ExtensionCatalog.Tags.PurseExtension,
                CommandBarTagName = ExtensionCatalog.Tags.PursesScreenExtension
            };

            var template = AccountDisplayHelper.LoadListScreenTemplate(origin);

            _screen = new ListScreen
            {
                Dock = DockStyle.Fill
            };

            ErrorFormDisplayHelper.ApplyErrorAction(context.ExtensionManager, _screen);

            EventBroker.PurseChanged += OnPurseChanged;

            _screen.Disposed += (sender, args) =>
            {
                EventBroker.PurseChanged -= OnPurseChanged;
            };

            _screen.ApplyTemplate(template);

            // Команда Refresh
            _screen.RefreshCallback += () => SelectAccounts(true);

            _screen.MenuItemResolver = (entity, command) =>
            {
                var account = _screen.CurrentEntity as IAccount;

                if (null == account)
                {
                    return(false);
                }

                var purseContext = new PurseContext(context, account);

                if (command.Equals(ExtensionCatalog.CopyPurseNumber) ||
                    command.Equals(ExtensionCatalog.ClearMerchantKey) || command.Equals(ExtensionCatalog.RemovePurse))
                {
                    var actionProvider = context.ExtensionManager.TryGetPurseActionProvider(command);
                    return(actionProvider?.CheckCompatibility(purseContext) ?? false);
                }

                var formProvider = context.ExtensionManager.TryGetPurseFormProvider(command);
                return(formProvider?.CheckCompatibility(purseContext) ?? false);
            };

            // Обработка событий.
            _screen.ServiceCommand += (sender, args) =>
            {
                string command = args.Command;

                if (null == command)
                {
                    throw new InvalidOperationException("null == command");
                }

                switch (command)
                {
                case "BeginRefresh":
                    context.ScreenContainer.OnStartProgress();
                    break;

                case "EndRefresh":
                    context.ScreenContainer.OnStopProgress();
                    break;

                default:
                {
                    var account = args.Argument as IAccount;

                    // Кнопки
                    if (null == account)
                    {
                        var formProvider = context.ExtensionManager.TryGetTopFormProvider(command);
                        formProvider?.GetForm(context).Show(context.ScreenContainer);
                    }
                    else
                    {
                        if (command.Equals(TunableList.CellMouseDoubleClickCommandName))
                        {
                            command = ExtensionCatalog.TransferFilter;
                        }

                        var purseContext = new PurseContext(context, account);

                        // Системная
                        if (command.Equals(ExtensionCatalog.CopyPurseNumber) ||
                            command.Equals(ExtensionCatalog.ClearMerchantKey) ||
                            command.Equals(ExtensionCatalog.RemovePurse))
                        {
                            var actionProvider = context.ExtensionManager.TryGetPurseActionProvider(command);
                            actionProvider?.RunAction(purseContext);
                        }
                        else
                        {
                            var formProvider = context.ExtensionManager.TryGetPurseFormProvider(command);
                            formProvider?.GetForm(purseContext)
                            .Show(context.ScreenContainer);
                        }
                    }
                }
                break;
                }
            };

            _screen.DisplayContent(SelectAccounts(false));

            return(_screen);
        }