public async Task <ActionResult> AddPaymentKind([FromBody] PaymentKindDto paymentTerm)
        {
            int id          = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var logineduser = await _auth.VerifyUser(id);

            PaymentKind _newTerm = new PaymentKind()
            {
                Status  = true,
                Company = logineduser.Company
            };

            _context.PaymentKinds.Add(_newTerm);
            await _context.SaveChangesAsync();

            foreach (var item in paymentTerm.ContentForLang)
            {
                PaymentKindLanguage termLang = new PaymentKindLanguage()
                {
                    PaymentKind = _newTerm,
                    Language    = await _context.Languages.FirstOrDefaultAsync(s => s.code == item.Languagename),
                    Name        = item.Content
                };
                _context.PaymentKindLanguages.Add(termLang);
                await _context.SaveChangesAsync();
            }
            return(Ok());
        }
Ejemplo n.º 2
0
 protected PaymentMethod(Guid id, string name, PaymentKind kind, User user)
 {
     Id       = id;
     Name     = name;
     Kind     = kind;
     IsActive = true;
     User     = user;
     UserId   = user.Id;
 }
Ejemplo n.º 3
0
        public OkResult EditCategory(Guid id, string pattern, string category, PaymentKind kind)
        {
            var categoryObj = _objectRepository.Set <SpentCategoryModel>().First(v => v.Id == id);

            categoryObj.Pattern  = pattern;
            categoryObj.Category = category;
            categoryObj.Kind     = kind;

            return(Ok());
        }
Ejemplo n.º 4
0
 public SpentCategoryModel(string pattern, string category, PaymentKind kind)
 {
     _entity = new SpendCategoryEntity
     {
         Id       = Guid.NewGuid(),
         Pattern  = pattern,
         Category = category,
         Kind     = (int)kind
     };
 }
Ejemplo n.º 5
0
 public SpentCategoryModel(string pattern, string category, PaymentKind kind)
 {
     Id      = Guid.NewGuid();
     _entity = new SpendCategoryEntity
     {
         Pattern      = pattern,
         Category     = category,
         RowKey       = Id.ToString(),
         PartitionKey = nameof(SpendCategoryEntity),
         Kind         = (int)kind
     };
 }
Ejemplo n.º 6
0
        public static PaymentKind GetOpposite(this PaymentKind kind)
        {
            switch (kind)
            {
            case PaymentKind.Expense:
                return(PaymentKind.Income);

            case PaymentKind.Income:
                return(PaymentKind.Expense);

            default:
                return(kind);
            }
        }
Ejemplo n.º 7
0
 public PaymentModel(DateTime when, string what, double amount, PaymentKind kind, string ccy, string statementReference,
                     MoneyColumnMetadataModel column)
 {
     _entity = new PaymentEntity
     {
         Id                 = Guid.NewGuid(),
         When               = when,
         Amount             = amount,
         What               = what,
         Kind               = (int)kind,
         StatementReference = statementReference,
         ColumnId           = column?.Id
     };
     Ccy = ccy;
 }
Ejemplo n.º 8
0
        public IActionResult EditCategory(Guid id, string pattern, string category, PaymentKind kind)
        {
            var categoryObj = _objectRepository.Set <SpentCategoryModel>().First(v => v.Id == id);

            categoryObj.Pattern  = pattern;
            categoryObj.Category = category;
            categoryObj.Kind     = kind;

            foreach (var p in categoryObj.Payments)
            {
                p.Category = null;
            }

            return(RedirectToAction(nameof(SpentCategories)));
        }
Ejemplo n.º 9
0
        public IActionResult CreateCategory(string pattern, string category, PaymentKind kind)
        {
            try
            {
                // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
                Regex.Match("test", pattern);
            }
            catch
            {
                return(RedirectToAction(nameof(SpentCategories)));
            }

            _objectRepository.Add(new SpentCategoryModel(pattern, category, kind));
            return(RedirectToAction(nameof(SpentCategories)));
        }
Ejemplo n.º 10
0
        public OkResult CreateCategory(string pattern, string category, PaymentKind kind)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(pattern))
                {
                    // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
                    new Regex(pattern, RegexOptions.None, TimeSpan.FromSeconds(0.1)).Match("test");
                }
            }
            catch
            {
                pattern = "";
            }

            _objectRepository.Add(new SpentCategoryModel(pattern, category, kind));
            return(Ok());
        }
Ejemplo n.º 11
0
 /// <summary>
 /// 初始化所有的属性,包括引用类型的属性自己的属性
 /// </summary>
 public override void ReInitializeAllProperties()
 {
     ReInitializeProperties();
     if (PatientCondition != null)
     {
         PatientCondition.ReInitializeAllProperties();
     }
     if (Medicare != null)
     {
         Medicare.ReInitializeAllProperties();
     }
     if (PaymentKind != null)
     {
         PaymentKind.ReInitializeAllProperties();
     }
     if (PatientSource != null)
     {
         PatientSource.ReInitializeAllProperties();
     }
     if (PatientKind != null)
     {
         PatientKind.ReInitializeAllProperties();
     }
     if (Recorder != null)
     {
         Recorder.ReInitializeAllProperties();
     }
     if (PersonalInformation != null)
     {
         PersonalInformation.ReInitializeAllProperties();
         InitBaseInfo();
     }
     if (InfoOfAdmission != null)
     {
         InfoOfAdmission.ReInitializeAllProperties();
     }
 }
Ejemplo n.º 12
0
        private void ValidatePaymentKind(Player player, PaymentKind paymentKind)
        {
            switch (paymentKind)
            {
            case PaymentKind.Purchase1:
            case PaymentKind.Purchase2:
                // TODO: Share logic with controller
                if (player.PatreonLevel != 0 && player.PatreonEndDate > DateTime.UtcNow)
                {
                    throw new Exception($"Can't purchase subscription with existing level {player.PatreonLevel}");
                }

                break;

            case PaymentKind.UpgradeTo2:
                if (player.PatreonEndDate == null)
                {
                    throw new Exception("Can't upgrade subscription without existing end date");
                }

                if (player.PatreonEndDate < DateTime.UtcNow)
                {
                    throw new Exception("Can't upgrade expired subscription");
                }

                if (player.PatreonLevel != 1)
                {
                    throw new Exception($"Can't upgrade subscription level from {player.PatreonLevel}");
                }

                break;

            default:
                throw new Exception($"Unknown payment kind {paymentKind}");
            }
        }
Ejemplo n.º 13
0
        public IActionResult EditPayment(Guid id, double amount, string ccy, string what, PaymentKind kind)
        {
            var payment = _objectRepository.Set <PaymentModel>().First(v => v.Id == id);

            payment.Amount   = amount;
            payment.Ccy      = ccy;
            payment.What     = what;
            payment.Category = null;
            payment.Kind     = kind;
            return(RedirectToAction(nameof(Index)));
        }
Ejemplo n.º 14
0
        public async Task <string> CreateWeChatRequest(ulong steamId, ulong payerSteamId, long matchId, PaymentKind paymentKind)
        {
            var sourceCreateOptions = await CreateStripeSourceCreateOptions(steamId, payerSteamId, matchId, paymentKind);

            sourceCreateOptions.Type = "wechat";
            var source = await _sourceService.CreateAsync(sourceCreateOptions);

            // WeChat is in beta, so it's not typed yet
            var rawResult = JsonDocument.Parse(source.StripeResponse.Content).RootElement;
            var qrCodeUrl = rawResult.GetProperty("wechat").GetProperty("qr_code_url").GetString();
            var uri       = QueryHelpers.AddQueryString($"http://{_virtualHost}/payment/wechat", "qr", qrCodeUrl);

            return(uri);
        }
Ejemplo n.º 15
0
        protected PaymentModel Statement(DateTime when, string account, string what, double amount, PaymentKind kind, string ccy,
                                         string statementReference)
        {
            var column = Repository.Set <MoneyColumnMetadataModel>().FirstOrDefault(v => v.Provider == ProviderName && v.AccountName == account);

            if (column == null)
            {
                column = new MoneyColumnMetadataModel(ProviderName, account)
                {
                    UserFriendlyName = account
                };
                Repository.Add(column);
            }

            return(new PaymentModel(when, what, amount, kind, ccy, statementReference, column));
        }
Ejemplo n.º 16
0
        public OkResult EditPayment(Guid id, double amount, string ccy, string what, Guid?categoryId, Guid?columnId, Guid?debtId, PaymentKind kind)
        {
            var payment = _objectRepository.Set <PaymentModel>().First(v => v.Id == id);

            payment.Amount     = amount;
            payment.Ccy        = ccy;
            payment.What       = what;
            payment.Category   = null;
            payment.Kind       = kind;
            payment.Category   = categoryId == null ? null : _objectRepository.Set <SpentCategoryModel>().Find(categoryId.Value);
            payment.Column     = columnId == null ? null : _objectRepository.Set <MoneyColumnMetadataModel>().Find(columnId.Value);
            payment.Debt       = debtId == null ? null : _objectRepository.Set <DebtModel>().Find(debtId.Value);
            payment.UserEdited = true;

            new SpentCategoryProcessor(_objectRepository).Process();

            return(Ok());
        }
Ejemplo n.º 17
0
        public async Task <string> CreateAlipayRequest(ulong steamId, ulong payerSteamId, long matchId, PaymentKind paymentKind)
        {
            var sourceCreateOptions = await CreateStripeSourceCreateOptions(steamId, payerSteamId, matchId, paymentKind);

            sourceCreateOptions.Type = "alipay";
            var source = await _sourceService.CreateAsync(sourceCreateOptions);

            return(source.Redirect.Url);
        }
Ejemplo n.º 18
0
        private async Task <SourceCreateOptions> CreateStripeSourceCreateOptions(ulong steamId, ulong payerSteamId, long matchId, PaymentKind paymentKind)
        {
            var player = await _context.Players.FindAsync(steamId);

            if (player == null)
            {
                player = new Player {
                    SteamId = steamId
                };
                _context.Players.Add(player);
                await _context.SaveChangesAsync();
            }

            ValidatePaymentKind(player, paymentKind);

            // 1 AUD = $conversionRate CNY
            var conversionRate = 4.54665;
            // 50 CNY
            var priceTier1 = (int)Math.Floor(50 / conversionRate * 100);
            // 200 CNY
            var priceTier2 = (int)Math.Floor(200 / conversionRate * 100);

            var patreonDaysLeft = player.PatreonEndDate != null ? (player.PatreonEndDate - DateTime.UtcNow).Value.Days : 0;
            var amount          = paymentKind switch
            {
                PaymentKind.Purchase1 => priceTier1,
                PaymentKind.Purchase2 => priceTier2,
                PaymentKind.UpgradeTo2 => priceTier2 - (int)Math.Floor(priceTier1 * ((double)patreonDaysLeft / 30)),
                _ => throw new NotImplementedException(),
            };

            var statementDescriptor = paymentKind switch
            {
                PaymentKind.Purchase1 => "Basic Dota 2 Unofficial supporter status",
                PaymentKind.Purchase2 => "Advanced Dota 2 Unofficial supporter status",
                PaymentKind.UpgradeTo2 => "Upgrade to advanced supporter tier",
                _ => throw new NotImplementedException(),
            };

            return(new SourceCreateOptions
            {
                Amount = amount,
                Currency = "aud",
                StatementDescriptor = statementDescriptor,

                Redirect = new SourceRedirectOptions
                {
                    // TODO: Do we really need this?
                    ReturnUrl = $"http://{_virtualHost}/payment/loader"
                },
                Metadata = new Dictionary <string, string>
                {
                    ["steamId"] = steamId.ToString(),
                    ["payerSteamId"] = payerSteamId.ToString(),
                    ["matchId"] = matchId.ToString(),
                    ["paymentKind"] = paymentKind.ToString(),
                },
            });
        }