public CommisionManager() { _commisionOperation = new CommisionOperation(); }
public VarlikResult ApproveAdmin(long idMainOrder, string idTransactionState, bool commissionable, decimal confirmableMoneyAmount = -1) { var result = new VarlikResult(); using (var ctx = new VarlikContext()) { var mainOrder = ctx.MainOrderLog .FirstOrDefault(l => l.Id == idMainOrder && l.IdTransactionState != TransactionStateEnum.Completed); var order = ctx.UserCoinTransactionOrder .FirstOrDefault(l => l.IdMainOrderLog == idMainOrder && l.IdTransactionState != TransactionStateEnum.Completed && l.IdTransactionType == mainOrder.IdTransactionType); if (mainOrder == null || order == null) { return(result); } if (idTransactionState == TransactionStateEnum.Completed) { mainOrder.IdTransactionState = TransactionStateEnum.Completed; mainOrder.TransactionDate = DateTime.Now; ctx.UserCoinTransactionOrder.Remove(order); //write tx log var commissinMoney = 0M; if (mainOrder.IdTransactionType == TransactionTypeEnum.ToBank) { commissinMoney = 2.5M; } var commissionCoinCount = 0M; if (mainOrder.IdTransactionType == TransactionTypeEnum.ToWallet) { var commissionMAnager = new CommisionOperation(); var commissionR = commissionMAnager.GetTransferCommissionByIdCoinType(mainOrder.IdCoinType); if (commissionR.IsSuccess) { commissionCoinCount = commissionR.Data; } } var moneyAmount = order.MoneyAmount; if (confirmableMoneyAmount > 0M) { moneyAmount = confirmableMoneyAmount; } var coinAmount = mainOrder.CoinAmount - commissionCoinCount; if (!commissionable) { coinAmount = mainOrder.CoinAmount; commissionCoinCount = 0; } var tx = new UserTransactionLog() { MoneyAmount = moneyAmount, IdTransactionState = TransactionStateEnum.Completed, IdTransactionType = mainOrder.IdTransactionType, TransactionDate = mainOrder.TransactionDate.Value, IsSucces = true, IdUser = mainOrder.IdUser, IdMainOrderLog = idMainOrder, CoinAmount = coinAmount, CoinUnitPrice = mainOrder.CoinUnitPrice, IdCoinType = mainOrder.IdCoinType, CommissionMoney = commissinMoney, CommissionCoinCount = commissionCoinCount }; ctx.UserCoinTransactionLog.Add(tx); try { ctx.SaveChanges(); result.Success(); } catch (Exception e) { Log.Error("ApproveFromBankAdmin", e); } } else if (idTransactionState == TransactionStateEnum.CancelledByAdmin) { ctx.UserCoinTransactionOrder.Remove(order); mainOrder.IdTransactionState = TransactionStateEnum.CancelledByAdmin; mainOrder.TransactionDate = DateTime.Now; try { ctx.SaveChanges(); result.Success(); } catch (Exception e) { Log.Error("ApproveFromBankAdmin", e); } } } return(result); }