상속: MonoBehaviour
예제 #1
0
        public JsonResult CreateAccount(string userId, int currencyId)
        {
            Customer customer = _customerRepository.GetCustomerByUserId(userId);

            Balance balance  =  new Balance
            {
                CurrencyId = currencyId,
                AvialableFunds = 0
            };

            int balanceId = _balanceRepository.Add(balance);

            Account account = new Account
            {
                AccountNumber = GenerateUniqueNumericString(20),
                CustomerId = customer.Id,
                StartDate = DateTime.Now,
                ExpireDate = DateTime.Now.AddYears(4),
                LastCheckDate = DateTime.Now,
                BalanceId = balanceId
            };

            int accountId = _accountRepository.Add(account);

            if (accountId > 0)
            {
                return Json(new { Result = "Success"});
            }
            else
            {
                return Json(new { Result = "Error while creating an account." });
            }
        }
예제 #2
0
 public int Add(Balance balance)
 { 
     Dictionary<string, string> sqlParams = new Dictionary<string,string>();
     string query = "Insert into Balance OUTPUT Inserted.Id values (@CurrencyId, @AvialableFunds)";
     sqlParams.Add("@CurrencyId", balance.CurrencyId.ToString());
     sqlParams.Add("@AvialableFunds", balance.AvialableFunds.ToString());
     return _dbWriter.AddRecord(sqlParams, query);
 }
예제 #3
0
        public CashWithdrawnEvent(Guid id, Balance balance, Amount amount)
        {

            Id = id;
            DateTimeEventOccurred = DateTime.UtcNow;
            Balance = balance;
            Amount = amount;
        }
예제 #4
0
 public GraphInterpreterSpec(ITestOutputHelper output = null) : base(output)
 {
     _identity = GraphStages.Identity<int>();
     _detach = new Detacher<int>();
     _zip = new Zip<int, string>();
     _broadcast = new Broadcast<int>(2);
     _merge = new Merge<int>(2);
     _balance = new Balance<int>(2);
 }
예제 #5
0
 /// <summary>
 /// 删除一个对象
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
 {
     if (m_balance.ID > 0)
     {
         m_balance.Destory();
         m_balance = new Balance();
         SetFromStatus(winStatusEnum.查看);
     }
 }
예제 #6
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="status"></param>
        /// <param name="balance"></param>
        public DevBalance(winStatusEnum status, Balance balance = null)
        {
            InitializeComponent();
            if (balance != null)
                m_balance = balance;
            else
                m_balance = new Balance();

            SetFromStatus(status);
        }
예제 #7
0
        public void TestBalanceCRUD()
        {
            // 删除无用的测试数据
            List<Balance> list = Balance.Query("code = 'testcode'");
            foreach (Balance acc in list)
            {
                acc.Destory();
            }

            // 新增
            Balance a = new Balance();
            a.Code = "testcode";
            a.Name = "Name";
            a.CompanyDetailID = CompanyDetail.Query()[0].ID;
            a.Money = 1;
            a.BeginDate = DateTime.Now;
            a.EndDate = DateTime.Now;

            for (int i = 0; i < 10; i++)
            {
                BalanceDetail d = new BalanceDetail();
                d.Money = i;
                d.PayDate = DateTime.Now;
                a.DetailList.Add(d);
            }

            Assert.IsTrue(a.Save());
            Assert.IsTrue(a.ID > 0);

            // 查询
            list = Balance.Query("code = 'testcode'");
            Assert.IsTrue(list.Count == 1);
            Assert.IsTrue(list[0].ID == a.ID);
            Assert.IsTrue(list[0].DetailList.Count == 10);

            // 删除
            Assert.IsTrue(list[0].Destory());
            list = Balance.Query("code = 'testcode'");
            Assert.IsTrue(list.Count == 0);
        }
예제 #8
0
        public JsonResult CreateCreditCard(CardViewModel cardViewModel)
        {
            if (!ModelState.IsValid)
            {
                cardViewModel.CardTypes = new List<SelectListItem>
                {
                    new SelectListItem() {Text="Credit", Value="Credit"},
                    new SelectListItem() {Text="Debit", Value="Debit"}
                };
                
                return Json(new { Result = "Error. Please, check the input data."});
            }
            
            int balanceIdForAccount = _accountRepository.GetAccountById(cardViewModel.AccountId).BalanceId;
            Balance balanceForAccount = _balanceRepository.GetBalanceById(balanceIdForAccount);

            Balance balance = new Balance
            {
                CurrencyId = balanceForAccount.CurrencyId,
                AvialableFunds = 0
            };

            int balanceId = _balanceRepository.Add(balance);

            Card card = new Card
            {
                Number = CreateCardNumber(20),
                Type = cardViewModel.Type,
                CardholderName = cardViewModel.CardholderName,
                SecurityNumber = CreateCardNumber(7),
                BalanceId = balanceId,
                ExpireDate = DateTime.Now.AddYears(4),
                AccountId = cardViewModel.AccountId
            };
            _cardRepository.Add(card);

            return Json(new { Result = "Success"});
        }
예제 #9
0
 public ActionResult Purchase(Balance balance)
 {
     if (ModelState.IsValid)
     {
         var item = db.Products.Where(a => a.CatID == balance.CatID && a.ID == balance.ProductID).ToList();
         if (item.Count() == 0)
         {
             ModelState.AddModelError("", "კატეგორიას არ შეესაბამება პროდუქტი");
             ViewBag.CatID = new SelectList(db.Categories.Where(a => a.Disabled == false), "ID", "Name");
             ViewBag.ProductID = new SelectList(db.Products.Where(a => a.Disabled == false), "ID", "Name");
             return View(balance);
         }
         var result = from a in db.Balances where a.StorageID == balance.StorageID && a.CatID == balance.CatID && a.ProductID == balance.ProductID select a;
         if (result.ToList().Count() == 0)
         {
             db.Balances.Add(balance);
         }
         else
         {
             Balance b = result.First();
             b.Quantity = b.Quantity + balance.Quantity;
         }
         db.SaveChanges();
         return RedirectToAction("Index");
     }
     ViewBag.CatID = new SelectList(db.Categories.Where(a => a.Disabled == false), "ID", "Name");
     ViewBag.ProductID = new SelectList(db.Products.Where(a => a.Disabled == false), "ID", "Name");
     return View(balance);
 }
예제 #10
0
        /// <summary>
        /// 服务发送模型更改通知
        /// </summary>
        /// <param name="toClient"></param>
        internal void ServiceModelUpdateNotification(ToClientServiceModelUpdateNotification toClient)
        {
            try
            {
                switch (toClient.ModelType)
                {
                case ModelType.Product:

                    Product product    = toClient.Model.DeserializeObject <Product>();
                    Product oldProduct = Resources.Instance.Products.Where(x => x.ProductId == product.ProductId).FirstOrDefault();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.Products.Add(product);
                        break;

                    case OperateType.Edit:
                        Resources.Instance.Products.Remove(oldProduct);
                        Resources.Instance.Products.Add(product);
                        break;

                    case OperateType.Delete:
                        Resources.Instance.Products.Remove(oldProduct);
                        break;
                    }
                    Notification.Instance.ActionProduct(null, product, (int)toClient.OperateType);
                    break;

                case ModelType.ProductType:
                    ProductType productType    = toClient.Model.DeserializeObject <ProductType>();
                    ProductType oldProductType = Resources.Instance.ProductTypes.Where(x => x.ProductTypeId == productType.ProductTypeId).FirstOrDefault();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.ProductTypes.Add(productType);
                        break;

                    case OperateType.Edit:
                        Resources.Instance.ProductTypes.Remove(oldProductType);
                        Resources.Instance.ProductTypes.Add(productType);
                        break;

                    case OperateType.Delete:
                        Resources.Instance.ProductTypes.Remove(oldProductType);
                        break;
                    }
                    Notification.Instance.ActionProductType(null, productType, (int)toClient.OperateType);
                    break;

                case ModelType.Admin:
                    Admin admin    = toClient.Model.DeserializeObject <Admin>();
                    Admin oldAdmin = Resources.Instance.Admins.Where(x => x.AdminId == admin.AdminId).FirstOrDefault();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.Admins.Add(admin);
                        break;

                    case OperateType.Edit:
                        Resources.Instance.Admins.Remove(oldAdmin);
                        Resources.Instance.Admins.Add(admin);

                        if (Resources.Instance.AdminModel.AdminId == admin.AdminId)
                        {
                            Resources.Instance.AdminModel = admin;
                        }
                        break;

                    case OperateType.Delete:
                        Resources.Instance.Admins.Remove(oldAdmin);
                        break;
                    }
                    Notification.Instance.ActionAdmin(null, admin, (int)toClient.OperateType);
                    break;

                case ModelType.Device:
                    Device device    = toClient.Model.DeserializeObject <Device>();
                    Device oldDevice = Resources.Instance.Devices.Where(x => x.DeviceId == device.DeviceId).FirstOrDefault();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.Devices.Add(device);
                        break;

                    case OperateType.Edit:
                        Resources.Instance.Devices.Remove(oldDevice);
                        Resources.Instance.Devices.Add(device);
                        break;

                    case OperateType.Delete:
                        Resources.Instance.Devices.Remove(oldDevice);
                        break;
                    }
                    Notification.Instance.ActionDevice(null, device, (int)toClient.OperateType);
                    break;

                case ModelType.Printer:
                    Printer printer    = toClient.Model.DeserializeObject <Printer>();
                    Printer oldPrinter = Resources.Instance.Printers.Where(x => x.PrinterId == printer.PrinterId).FirstOrDefault();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.Printers.Add(printer);
                        break;

                    case OperateType.Edit:
                        Resources.Instance.Printers.Remove(oldPrinter);
                        Resources.Instance.Printers.Add(printer);
                        break;

                    case OperateType.Delete:
                        Resources.Instance.Printers.Remove(oldPrinter);
                        break;
                    }
                    Notification.Instance.ActionPrinter(null, printer, (int)toClient.OperateType);
                    break;

                case ModelType.Request:
                    Request request    = toClient.Model.DeserializeObject <Request>();
                    Request oldRequest = Resources.Instance.Requests.Where(x => x.RequestId == request.RequestId).FirstOrDefault();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.Requests.Add(request);
                        break;

                    case OperateType.Edit:
                        Resources.Instance.Requests.Remove(oldRequest);
                        Resources.Instance.Requests.Add(request);
                        break;

                    case OperateType.Delete:
                        Resources.Instance.Requests.Remove(oldRequest);
                        break;
                    }
                    Notification.Instance.ActionRequest(null, request, (int)toClient.OperateType);
                    break;

                case ModelType.Ppr:
                    List <Ppr> pprs       = toClient.Model.DeserializeObject <List <Ppr> >();
                    Product    theProduct = toClient.ModelRef.DeserializeObject <Product>();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.Pprs.AddRange(pprs);
                        break;

                    case OperateType.Edit:
                        foreach (var item in Resources.Instance.Pprs.Where(x => x.ProductId == theProduct.ProductId).ToList())
                        {
                            Resources.Instance.Pprs.Remove(item);
                        }
                        if (pprs.Count > 0)
                        {
                            Resources.Instance.Pprs.AddRange(pprs);
                        }

                        break;

                    case OperateType.Delete:
                        foreach (var item in Resources.Instance.Pprs.Where(x => x.ProductId == theProduct.ProductId).ToList())
                        {
                            Resources.Instance.Pprs.Remove(item);
                        }
                        break;
                    }
                    Notification.Instance.ActionPprs(null, pprs, theProduct, (int)toClient.OperateType);
                    break;

                case ModelType.Member:
                    Member member = toClient.Model.DeserializeObject <Member>();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        break;

                    case OperateType.Edit:
                        break;

                    case OperateType.Delete:
                        break;
                    }
                    Notification.Instance.ActionMember(null, member, (int)toClient.OperateType);
                    break;

                case ModelType.Balance:
                    Balance balance    = toClient.Model.DeserializeObject <Balance>();
                    Balance oldBalance = Resources.Instance.Balances.Where(x => x.BalanceId == balance.BalanceId).FirstOrDefault();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.Balances.Add(balance);
                        break;

                    case OperateType.Edit:
                        Resources.Instance.Balances.Remove(oldBalance);
                        Resources.Instance.Balances.Add(balance);
                        break;

                    case OperateType.Delete:
                        Resources.Instance.Balances.Remove(oldBalance);
                        break;
                    }
                    Notification.Instance.ActionBalance(null, balance, (int)toClient.OperateType);
                    break;

                case ModelType.Room:
                    Room room    = toClient.Model.DeserializeObject <Room>();
                    Room oldRoom = Resources.Instance.Rooms.Where(x => x.RoomId == room.RoomId).FirstOrDefault();

                    RoomModel oldRoomModel = Resources.Instance.RoomsModel.Where(x => x.RoomId == room.RoomId).FirstOrDefault();
                    RoomModel newRoomModel = toClient.ModelRef.DeserializeObject <RoomModel>();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        Resources.Instance.Rooms.Add(room);

                        if (null != newRoomModel && newRoomModel.RoomId > 0)
                        {
                            Resources.Instance.RoomsModel.Add(newRoomModel);
                        }
                        break;

                    case OperateType.Edit:
                        Resources.Instance.Rooms.Remove(oldRoom);
                        Resources.Instance.Rooms.Add(room);


                        if (null != oldRoomModel && oldRoomModel.RoomId > 0)
                        {
                            Resources.Instance.RoomsModel.Remove(oldRoomModel);
                        }
                        if (null != newRoomModel && newRoomModel.RoomId > 0 && newRoomModel.HideType != 1)
                        {
                            Resources.Instance.RoomsModel.Add(newRoomModel);
                        }


                        break;

                    case OperateType.Delete:
                        Resources.Instance.Rooms.Remove(oldRoom);

                        if (null != oldRoomModel && oldRoomModel.RoomId > 0)
                        {
                            Resources.Instance.RoomsModel.Remove(oldRoomModel);
                            Notification.Instance.ActionSendFromService(null, oldRoomModel.RoomId, null);
                        }

                        break;
                    }
                    Notification.Instance.ActionRoom(null, room, (int)toClient.OperateType);

                    if (null != newRoomModel && newRoomModel.RoomId > 0)
                    {
                        Notification.Instance.ActionSendFromService(null, newRoomModel.RoomId, null);
                    }

                    break;

                case ModelType.Config:
                    switch (toClient.OperateType)
                    {
                    case OperateType.Edit:
                        List <string> config = toClient.Model.DeserializeObject <List <string> >();
                        foreach (var item in config)
                        {
                            if (item.Contains("PrintInfo="))
                            {
                                string temp = item.Trim().TrimStart("PrintInfo=");
                                Resources.Instance.PrintInfo = JsonConvert.DeserializeObject <PrintInfo>(temp);
                            }
                        }
                        break;
                    }
                    Notification.Instance.ActionConfig(null, null, (int)toClient.OperateType);
                    break;

                case ModelType.Import:
                    Import import = toClient.Model.DeserializeObject <Import>();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        break;

                    case OperateType.Edit:
                        break;

                    case OperateType.Delete:
                        break;
                    }
                    Notification.Instance.ActionImport(null, import, (int)toClient.OperateType);
                    break;

                case ModelType.AdminLog:
                    AdminLog adminLog = toClient.Model.DeserializeObject <AdminLog>();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        break;

                    case OperateType.Edit:
                        break;

                    case OperateType.Delete:
                        break;
                    }
                    Notification.Instance.ActionAdminLog(null, adminLog, (int)toClient.OperateType);
                    break;

                case ModelType.Supplier:
                    Supplier supplier = toClient.Model.DeserializeObject <Supplier>();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Add:
                        break;

                    case OperateType.Edit:
                        break;

                    case OperateType.Delete:
                        break;
                    }
                    Notification.Instance.ActionSupplier(null, supplier, (int)toClient.OperateType);
                    break;

                // 各类支付暂时不用
                case ModelType.SupplierPay:

                    break;

                case ModelType.AdminPay:

                    break;

                case ModelType.MemberPay:

                    break;

                case ModelType.BalancePay:

                    break;

                case ModelType.CallBack:
                    List <NotificationCache> cache = toClient.Model.DeserializeObject <List <NotificationCache> >();
                    switch (toClient.OperateType)
                    {
                    case OperateType.Get:
                        foreach (var item in cache)
                        {
                            switch (item.Type)
                            {
                            case NotificationType.Send:
                                NotificationService.Instance.ServiceSendNotification(item.Notification.DeserializeObject <ToClientServiceSendNotification>());
                                break;

                            case NotificationType.ProductCountUpdate:
                                NotificationService.Instance.ServiceProductCountUpdateNotification(item.Notification.DeserializeObject <ToClientServiceProductCountUpdateNotification>());
                                break;

                            case NotificationType.OrderUpdate:
                                NotificationService.Instance.ServiceOrderUpdateNotification(item.Notification.DeserializeObject <ToClientServiceOrderUpdateNotification>());
                                break;

                            case NotificationType.OrderDetailsAdd:
                                NotificationService.Instance.ServiceOrderDetailsAddNotification(item.Notification.DeserializeObject <ToClientServiceOrderDetailsAddNotification>());
                                break;

                            case NotificationType.TakeoutUpdate:
                                NotificationService.Instance.ServiceTakeoutUpdateNotification(item.Notification.DeserializeObject <ToClientServiceTakeoutUpdateNotification>());
                                break;

                            case NotificationType.ModelUpdate:
                                NotificationService.Instance.ServiceModelUpdateNotification(item.Notification.DeserializeObject <ToClientServiceModelUpdateNotification>());
                                break;
                            }
                        }
                        break;
                    }
                    break;
                }
            }
            catch (Exception ex)
            {
                TradingSystemX.Server.QueueMessageBoxNotification.Instance.ActionMessageBox(null, null, Tools.CommandTitles.Instance.Information, "ServiceModelUpdateNotificationError: " + ex.Message + ex.StackTrace, VM.ViewModels.Controls.MessageBoxMode.Dialog, VM.ViewModels.Controls.MessageBoxImageMode.Information, VM.ViewModels.Controls.MessageBoxButtonMode.OK, null, null);
                ExceptionPro.ExpLog(ex);
            }
        }
예제 #11
0
 public override void Activate()
 {
     Globals.gameHandler.GetPlayerFromID(playerID).AddDebt(-Balance.ModifyIncome(GetIncome(), Globals.gameHandler.GetPlayerFromID(playerID).GetHappiness()));
 }
예제 #12
0
        public ActionResult Move(MoveProducts mp)
        {
            if (ModelState.IsValid)
            {
                bool isOpen1 = db.Storages.First(a => a.ID == mp.StorageFromID).Closed == null;
                bool isOpen2 = db.Storages.First(a => a.ID == mp.StorageToID).Closed == null;
                if (!isOpen1 || !isOpen2)
                {
                    ModelState.AddModelError("", "დახურულ საწყობებზე შეუძლებელია ოპერაციის განხორციელება.");
                }
                else if (mp.StorageFromID == mp.StorageToID)
                {
                    ModelState.AddModelError("", "აირჩიეთ სხვადასხვა საწყობები.");
                }
                else
                {
                    var from = from a in db.Balances where a.StorageID == mp.StorageFromID && a.CatID == mp.CatID && a.ProductID == mp.ProductID select a;
                    var to = from a in db.Balances where a.StorageID == mp.StorageToID && a.CatID == mp.CatID && a.ProductID == mp.ProductID select a;

                    if (from.ToList().Count == 0)
                    {
                        ModelState.AddModelError("", "ასეთი პროდუქტი არ არსებობს საწყობში.");
                    }
                    else if (mp.Quantity > from.First().Quantity)
                    {
                        ModelState.AddModelError("", "მითითებული პროდუქციის რაოდენობა აღემატება საწყობის ნაშთს.");
                    }
                    else
                    {
                        if (to.ToList().Count == 0)
                        {
                            // ასეთი პროდუქტი დანიშნულების საწყობში არ არსებობს ჯერ და ამიტომ ახალს ვქმნით
                            Balance b = new Balance();
                            b.ProductID = mp.ProductID;
                            b.CatID = mp.CatID;
                            b.StorageID = mp.StorageToID;
                            b.Quantity = mp.Quantity;
                            db.Balances.Add(b);
                        }
                        else
                        {
                            to.First().Quantity = to.First().Quantity + mp.Quantity;
                        }
                        from.First().Quantity = from.First().Quantity - mp.Quantity;
                        db.SaveChanges();
                        return RedirectToAction("Index");
                    }

                }
            }
            ViewBag.StorageFromID = new SelectList(db.Storages.Where(a => a.Closed == null), "ID", "Name");
            ViewBag.StorageToID = new SelectList(db.Storages.Where(a => a.Closed == null), "ID", "Name");
            ViewBag.CatID = new SelectList(db.Categories.Where(a => a.Disabled == false), "ID", "Name");
            ViewBag.ProductID = new SelectList(db.Products.Where(a => a.Disabled == false), "ID", "Name");
            return View();
        }
예제 #13
0
        public bool FeedMoney(string input)
        {
            double feedInput = 0;

            try
            {
                feedInput = Convert.ToDouble(input);
            }
            catch
            {
                return(false);
            }
            bool valid = false;

            if (feedInput == 1 || feedInput == 2 || feedInput == 5 || feedInput == 10)
            {
                valid    = true;
                Balance += Convert.ToDouble(input);
                string[] feedAudit = new string[] { CurrentDateTime, "FEED MONEY", feedInput.ToString(), Balance.ToString() };
                AuditData.Add(feedAudit);
            }

            return(valid);
        }
예제 #14
0
 public override int?Selector(Balance b) => b.SubTitle;
예제 #15
0
 private bool TransactionExists(Balance balance)
 {
     return(Items.Any(i => i.Ether == balance.Ether &&
                      i.Token == balance.Token &&
                      i.Message == balance.Message));
 }
        public static async Task <HttpResponseMessage> PayInterestRun(
            [HttpTrigger(AuthorizationLevel.Function, "POST", Route = @"PayInterest/{accountnumber}")] HttpRequestMessage req,
            string accountnumber,
            [EventStream("Bank", "Account", "{accountnumber}")]  EventStream bankAccountEvents,
            [Projection("Bank", "Account", "{accountnumber}", nameof(InterestDue))] Projection prjInterestDue,
            [Projection("Bank", "Account", "{accountnumber}", nameof(Balance))] Projection prjBankAccountBalance,
            [Projection("Bank", "Account", "{accountnumber}", nameof(OverdraftLimit))] Projection prjBankAccountOverdraft)
        {
            // Set the start time for how long it took to process the message
            DateTime startTime = DateTime.UtcNow;

            if (!await bankAccountEvents.Exists())
            {
                // You cannot pay interest if the account does not exist
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 true,
                                                                                                                 $"Account {accountnumber} does not exist",
                                                                                                                 0),
                                                                       FunctionResponse.MEDIA_TYPE));
            }

            // get the interest owed / due as now
            InterestDue interestDue = await prjInterestDue.Process <InterestDue>();

            if (null != interestDue)
            {
                // if the interest due is negative we need to make sure the account has sufficient balance
                if (interestDue.Due < 0.00M)
                {
                    Balance balance = await prjBankAccountBalance.Process <Balance>();

                    if (null != balance)
                    {
                        decimal availableBalance = balance.CurrentBalance;

                        // is there an overdraft?
                        OverdraftLimit overdraft = await prjBankAccountOverdraft.Process <OverdraftLimit>();

                        if (null != overdraft)
                        {
                            availableBalance += overdraft.CurrentOverdraftLimit;
                        }

                        if (availableBalance < interestDue.Due)
                        {
                            // can't pay the interest
                            return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                                   ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                             true,
                                                                                                                             $"Unable to pay interest of {interestDue.Due} as available balance is only {availableBalance}",
                                                                                                                             interestDue.CurrentSequenceNumber),
                                                                                   FunctionResponse.MEDIA_TYPE));
                        }
                    }
                }

                // pay the interest
                decimal amountToPay = decimal.Round(interestDue.Due, 2, MidpointRounding.AwayFromZero);
                if (amountToPay != 0.00M)
                {
                    InterestPaid evInterestPaid = new InterestPaid()
                    {
                        AmountPaid = decimal.Round(interestDue.Due, 2, MidpointRounding.AwayFromZero),
                        Commentary = $"Interest due {interestDue.Due} as at {interestDue.CurrentSequenceNumber}"
                    };
                    await bankAccountEvents.AppendEvent(evInterestPaid);

                    return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.OK,
                                                                           ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                     false,
                                                                                                                     evInterestPaid.Commentary,
                                                                                                                     interestDue.CurrentSequenceNumber),
                                                                           FunctionResponse.MEDIA_TYPE));
                }
                else
                {
                    return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.OK,
                                                                           ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                     false,
                                                                                                                     $"No interest due so none was paid out",
                                                                                                                     interestDue.CurrentSequenceNumber),
                                                                           FunctionResponse.MEDIA_TYPE));
                }
            }
            else
            {
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 true,
                                                                                                                 $"Unable to get interest due for account {accountnumber} for interest payment",
                                                                                                                 0),
                                                                       FunctionResponse.MEDIA_TYPE
                                                                       ));
            }
        }
예제 #17
0
 public void OnReceiveBalance(object sender, Balance e) => BeginInvoke(new Action(() =>
예제 #18
0
        public void WithDraw(double amount)
        {
            if (amount > WithDrawLimit)
            {
                throw new DomainException("Limite para saque ultrapassado. Limite: $" + WithDrawLimit.
                                          ToString("F2", CultureInfo.InvariantCulture));
            }
            if (amount > Balance)
            {
                throw new DomainException("Não há saldo suficiente para saque. Saldo: $" + Balance.
                                          ToString("F2", CultureInfo.InvariantCulture));
            }

            Balance -= amount;
        }
예제 #19
0
        public IHttpActionResult Add(TransactionDto transactionDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            var transaction = Mapper.Map <TransactionDto, Transaction>(transactionDto);

            _context.Transactions.Add(transaction);

            if (transaction.TransactionTypeId == TransactionType.Income)
            {
                if (_context.Balances.Where(b => b.BalanceDate == transaction.TransactionDate.Date).Count() == 0)
                {
                    DateTime?lastUpdatedBalanceDate = _context.Balances.
                                                      Where(b => b.BalanceDate < transaction.TransactionDate.Date)
                                                      .Max(b => (DateTime?)b.BalanceDate);
                    lastUpdatedBalanceDate = lastUpdatedBalanceDate == null ? transaction.TransactionDate.Date : lastUpdatedBalanceDate;

                    Balance balance = _context.Balances.SingleOrDefault(b => b.BalanceDate == lastUpdatedBalanceDate);

                    _context.Balances.Add(new Balance {
                        BalanceDate = transaction.TransactionDate.Date, Amount = transaction.Amount + (balance == null ? 0 : balance.Amount)
                    });

                    List <Balance> balances = _context.Balances.Where(b => b.BalanceDate > transaction.TransactionDate.Date).ToList();
                    foreach (Balance item in balances)
                    {
                        item.Amount += transaction.Amount;
                    }
                }
                else
                {
                    List <Balance> balances = _context.Balances.Where(b => b.BalanceDate >= transaction.TransactionDate.Date).ToList();
                    foreach (Balance item in balances)
                    {
                        item.Amount += transaction.Amount;
                    }
                }
            }

            if (transaction.TransactionTypeId == TransactionType.Expense)
            {
                if (_context.Balances.Where(b => b.BalanceDate == transaction.TransactionDate.Date).Count() == 0)
                {
                    DateTime?lastUpdatedBalanceDate = _context.Balances.
                                                      Where(b => b.BalanceDate < transaction.TransactionDate.Date)
                                                      .Max(b => (DateTime?)b.BalanceDate);
                    lastUpdatedBalanceDate = lastUpdatedBalanceDate == null ? transaction.TransactionDate.Date : lastUpdatedBalanceDate;

                    Balance balance = _context.Balances.SingleOrDefault(b => b.BalanceDate == lastUpdatedBalanceDate);

                    _context.Balances.Add(new Balance {
                        BalanceDate = transaction.TransactionDate, Amount = (balance == null ? 0 : balance.Amount) - transaction.Amount
                    });

                    List <Balance> balances = _context.Balances.Where(b => b.BalanceDate > transaction.TransactionDate.Date).ToList();
                    foreach (Balance item in balances)
                    {
                        item.Amount -= transaction.Amount;
                    }
                }
                else
                {
                    List <Balance> balances = _context.Balances.Where(b => b.BalanceDate >= transaction.TransactionDate.Date).ToList();
                    foreach (Balance item in balances)
                    {
                        item.Amount -= transaction.Amount;
                    }
                }
            }

            _context.SaveChanges();

            return(Created(Request.RequestUri + "/" + transaction.Id, transaction));
        }
예제 #20
0
 public ValueIapData()
 {
     Values = new Balance();
 }
예제 #21
0
 public void OnAfterDeserialize()
 {
     RuntimeValue = InitialValue;
 }
예제 #22
0
 public int Post([FromBody] Balance value)
 {
     return(_balancesRepository.CreateNew(value));
 }
예제 #23
0
        public async Task <Result <IGameResult, ErrorCode> > Spin(RequestContext <SpinArgs> requestContext)
        {
            using (logger.BeginScope(new Dictionary <string, object>
            {
                ["SessionKey"] = requestContext.UserSession.SessionKey,
                ["UserId"] = requestContext.UserSession.UserId,
                ["GameKey"] = requestContext.GameKey,
                ["Platform"] = requestContext.Platform,
                ["BettingLines"] = requestContext.Parameters.BettingLines,
                ["LineBet"] = requestContext.Parameters.LineBet,
                ["Multiplier"] = requestContext.Parameters.Multiplier
            }))
            {
                var        module      = gameModules.GetModule(requestContext.GameKey);
                var        userSession = requestContext.UserSession;
                SpinResult result      = null;
                var        level       = await userService.GetLevel(requestContext.UserGameKey);

                try
                {
                    var transaction = await transactionService.GenerateGameTransactionId(requestContext.UserGameKey, GameTransactionType.Spin);

                    requestContext.GameTransaction = transaction;

                    var roundId = await transactionService.GenerateAutoNumber(CounterType.RoundId);

                    requestContext.CurrentRound = roundId;

                    var lastSpinData = await userService.GetLastSpinData(userSession, requestContext.Game);

                    var totalBet = module.CalculateTotalBet(lastSpinData, requestContext);

                    logger.LogInformation("User spin on level {Level}, trx id {GameTransactionId}, round {CurrentRoundId}, total bet {TotalBet}", level, transaction.Id, roundId, totalBet);

                    var deductBet = await payoutService.DeductBetFromWallet(requestContext, totalBet);

                    // TODO we should check the wallet result if it's success

                    var spinResult = module.ExecuteSpin(level, lastSpinData, requestContext);
                    if (spinResult.IsError)
                    {
                        return(spinResult.Error);
                    }

                    result               = spinResult.Value;
                    result.Bet           = totalBet;
                    result.RoundId       = roundId;
                    result.TransactionId = transaction.Id;
                    result.UniqueID      = result.TransactionId.ToString();
                    result.DateTimeUtc   = transaction.DateTimeUtc;
                    result.ExchangeRate  = deductBet.ExchangeRate;
                    result.Balance       = Balance.Create(deductBet.Balance);

                    if (result.HasBonus)
                    {
                        logger.LogInformation("User got bonus");
                        var bonusCreated = module.CreateBonus(result);
                        if (bonusCreated.IsError)
                        {
                            logger.LogWarning("Create bonus got error {Error} with {SpinResult}", bonusCreated.Error, JsonHelper.FullString(result));
                            return(ErrorCode.InternalError);
                        }

                        var bonus = bonusCreated.Value;
                        bonus.SpinTransactionId = transaction.Id;
                        bonus.GameResult        = result;
                        var entity = new BonusEntity
                        {
                            UserId       = userSession.UserId,
                            GameId       = requestContext.Game.Id,
                            Guid         = bonus.Guid.ToString("N"),
                            Data         = bonus.ToByteArray(),
                            BonusType    = bonus.GetType().Name,
                            Version      = 3,
                            IsOptional   = bonus.IsOptional,
                            IsStarted    = bonus.IsStarted,
                            RoundId      = roundId,
                            BetReference = deductBet.BetReference
                        };
                        await bonusService.UpdateBonus(userSession, entity);

                        await userService.UpdateGameState(requestContext, UserGameState.ForBonus(roundId));
                    }
                    else
                    {
                        await userService.UpdateGameState(requestContext, UserGameState.ForNormal(roundId));
                    }

                    var paied = await payoutService.PayoutToUser(requestContext, result, new BonusExtraInfo { RoundId = roundId, BetId = deductBet.BetReference }, !result.HasBonus, deductBet.Guid);

                    result.ExchangeRate = deductBet.ExchangeRate;
                    result.Balance      = Balance.Create(paied.Balance);

                    await transactionService.ProfileSpinBet(requestContext);

                    await userService.UpdateLastSpinData(userSession, requestContext.Game, result);

                    if (!userSession.IsFunPlay)
                    {
                        await userService.UpdateUserGameData(new UserGameData
                        {
                            UserId = userSession.UserId,
                            GameId = requestContext.Game.Id,
                            Bet    = requestContext.Parameters.LineBet,
                            Lines  = requestContext.Game.Lines,
                        });
                    }
                }
                catch (InsufficientBalanceException ex)
                {
                    logger.LogInformation(ex, ex.Message);
                    return(ErrorCode.InsufficientCredit);
                }
                catch (Exception ex)
                {
                    logger.LogError(ex, ex.Message);
                    throw;
                }
                finally
                {
                    await TrySaveGameHistory(requestContext, result);
                }
                return(result);
            }
        }
        public static async Task <HttpResponseMessage> AccrueInterestRun(
            [HttpTrigger(AuthorizationLevel.Function, "POST", Route = @"AccrueInterest/{accountnumber}")] HttpRequestMessage req,
            string accountnumber,
            [EventStream("Bank", "Account", "{accountnumber}")]  EventStream bankAccountEvents,
            [Projection("Bank", "Account", "{accountnumber}", nameof(Balance))] Projection prjBankAccountBalance,
            [Classification("Bank", "Account", "{accountnumber}", nameof(InterestAccruedToday))] Classification clsAccruedToday)
        {
            // Set the start time for how long it took to process the message
            DateTime startTime = DateTime.UtcNow;

            if (!await bankAccountEvents.Exists())
            {
                // You cannot accrue interest if the account does not exist
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 true,
                                                                                                                 $"Account {accountnumber} does not exist",
                                                                                                                 0)));
            }

            ClassificationResponse isAccrued = await clsAccruedToday.Classify <InterestAccruedToday>();

            if (isAccrued.Result == ClassificationResponse.ClassificationResults.Include)
            {
                // The accrual for today has been performed for this account
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 true,
                                                                                                                 $"Interest accrual already done on account {accountnumber} today",
                                                                                                                 isAccrued.AsOfSequence),
                                                                       FunctionResponse.MEDIA_TYPE
                                                                       ));
            }


            // get the request body...
            InterestAccrualData data = await req.Content.ReadAsAsync <InterestAccrualData>();

            // Get the current account balance, as at midnight
            Balance projectedBalance = await prjBankAccountBalance.Process <Balance>(DateTime.Today);

            if (null != projectedBalance)
            {
                Account.Events.InterestAccrued evAccrued = new Account.Events.InterestAccrued()
                {
                    Commentary           = data.Commentary,
                    AccrualEffectiveDate = DateTime.Today  // set the accrual to midnight today
                };

                if (projectedBalance.CurrentBalance >= 0)
                {
                    // Using the credit rate
                    evAccrued.AmountAccrued = data.CreditInterestRate * projectedBalance.CurrentBalance;
                }
                else
                {
                    // Use the debit rate
                    evAccrued.AmountAccrued = data.DebitInterestRate * projectedBalance.CurrentBalance;
                }

                try
                {
                    await bankAccountEvents.AppendEvent(evAccrued, isAccrued.AsOfSequence);
                }
                catch (EventSourcingOnAzureFunctions.Common.EventSourcing.Exceptions.EventStreamWriteException exWrite)
                {
                    return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                           ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                     true,
                                                                                                                     $"Failed to write interest accrual event {exWrite.Message}",
                                                                                                                     projectedBalance.CurrentSequenceNumber),
                                                                           FunctionResponse.MEDIA_TYPE));
                }

                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.OK,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 false,
                                                                                                                 $"Interest accrued for account {accountnumber} is {evAccrued.AmountAccrued}",
                                                                                                                 projectedBalance.CurrentSequenceNumber),
                                                                       FunctionResponse.MEDIA_TYPE));
            }
            else
            {
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 true,
                                                                                                                 $"Unable to get current balance for account {accountnumber} for interest accrual",
                                                                                                                 0),
                                                                       FunctionResponse.MEDIA_TYPE
                                                                       ));
            }
        }
예제 #25
0
 public virtual string ToPrint()  //this will be the Method used when the status of the account needs to appear; virtual means that the ToPrint for Checking data and ToPrint for Saving data will print when called in the Program for the monthly balance.
 {
     return("Acct Name=" + Owner.Fullname + ", Id=" + Id.ToString() + ", Desc=" + Description + ", Bal=" + Balance.ToString());
 }
        public static async Task <HttpResponseMessage> ExtendOverdraftForInterestRun(
            [HttpTrigger(AuthorizationLevel.Function, "POST", Route = @"ExtendOverdraftForInterest/{accountnumber}")] HttpRequestMessage req,
            string accountnumber,
            [EventStream("Bank", "Account", "{accountnumber}")]  EventStream bankAccountEvents,
            [Projection("Bank", "Account", "{accountnumber}", nameof(InterestDue))] Projection prjInterestDue,
            [Projection("Bank", "Account", "{accountnumber}", nameof(Balance))] Projection prjBankAccountBalance,
            [Projection("Bank", "Account", "{accountnumber}", nameof(OverdraftLimit))] Projection prjBankAccountOverdraft
            )
        {
            // Bolierplate: Set the start time for how long it took to process the message
            DateTime startTime = DateTime.UtcNow;

            // Check the balance is negative
            // get the interest owed / due as now
            InterestDue interestDue = await prjInterestDue.Process <InterestDue>();

            if (null != interestDue)
            {
                // if the interest due is negative we need to make sure the account has sufficient balance
                if (interestDue.Due < 0.00M)
                {
                    Balance balance = await prjBankAccountBalance.Process <Balance>();

                    if (null != balance)
                    {
                        decimal availableBalance = balance.CurrentBalance;

                        // is there an overdraft?
                        OverdraftLimit overdraft = await prjBankAccountOverdraft.Process <OverdraftLimit>();

                        if (null != overdraft)
                        {
                            availableBalance += overdraft.CurrentOverdraftLimit;
                        }

                        if (availableBalance < interestDue.Due)
                        {
                            decimal           newOverdraft = overdraft.CurrentOverdraftLimit;
                            decimal           extension    = 10.00M + Math.Abs(interestDue.Due % 10.00M);
                            OverdraftLimitSet evNewLimit   = new OverdraftLimitSet()
                            {
                                OverdraftLimit = newOverdraft + extension,
                                Commentary     = $"Overdraft extended to pay interest of {interestDue.Due} ",
                                Unauthorised   = true
                            };

                            await bankAccountEvents.AppendEvent(evNewLimit);

                            return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.OK,
                                                                                   ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                             false,
                                                                                                                             $"Extended the overdraft by {extension} for payment of interest {interestDue.Due} for account {accountnumber}",
                                                                                                                             interestDue.CurrentSequenceNumber),
                                                                                   FunctionResponse.MEDIA_TYPE));
                        }
                    }
                }

                // Not needed
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.OK,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 false,
                                                                                                                 $"Extending the overdraft for interest not required for account {accountnumber}",
                                                                                                                 interestDue.CurrentSequenceNumber),
                                                                       FunctionResponse.MEDIA_TYPE));
            }
            else
            {
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 true,
                                                                                                                 $"Unable to extend the overdraft for account {accountnumber} for interest payment",
                                                                                                                 0),
                                                                       FunctionResponse.MEDIA_TYPE
                                                                       ));
            }
        }
예제 #27
0
 public override string ToString() => $"| {Date.ToShortDateString()} | {DepositStatement} | {WithdrawalStatement} | {Balance.ToString()} |";
예제 #28
0
        public string Purchase(string input)
        {
            string oldBalance  = Balance.ToString();
            string nameAndSlot = "";
            double getPrice    = 0;
            bool   canPurchase = false;

            foreach (VendingMachineItem x in items)
            {
                if (x.Slot.ToLower().Equals(input))
                {
                    getPrice = Convert.ToDouble(x.Price);
                    if (Balance > getPrice && x.Quantity > 0)
                    {
                        canPurchase = true;
                        nameAndSlot = x.Name + " " + x.Slot;
                    }
                    else if (getPrice > Balance)
                    {
                        canPurchase = false;
                        return("Not enough funds!");
                    }
                    else if (x.Quantity == 0)
                    {
                        canPurchase = false;
                        return("Item is sold out!");
                    }
                    if (canPurchase)
                    {
                        Balance    -= getPrice;
                        x.Quantity -= 1;
                        string[] feedAudit = new string[] { CurrentDateTime, nameAndSlot, oldBalance, Balance.ToString() };
                        AuditData.Add(feedAudit);

                        return("You have succesfully purchased " + nameAndSlot);
                    }
                }
            }

            return("Item not found!");
        }
예제 #29
0
 /// <summary>
 /// 新增一个对象
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnNew_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
 {
     m_balance = new Balance();
     Object2Form();
     SetFromStatus(winStatusEnum.新增);
 }
예제 #30
0
        public async ValueTask DisposeAsync()
        {
            await Balance.DisposeAsync();

            await Hermes.DisposeAsync();
        }
예제 #31
0
        /// <summary>
        /// bithumb 거래소 회원 지갑 정보
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <Balance> FetchBalanceAsync(string base_name, string quote_name, Dictionary <string, object> args = null)
        {
            var _result = new Balance();

            var _currency_id = await publicApi.LoadCurrencyIdAsync(base_name);

            if (_currency_id.success == true)
            {
                privateClient.ExchangeInfo.ApiCallWait(TradeType.Private);

                var _params = new Dictionary <string, object>();
                {
                    _params.Add("currency", _currency_id.result);

                    privateClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await privateClient.CallApiPost1Async("/info/balance", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = privateClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _json_data = privateClient.DeserializeObject <BBalance>(_json_value.Content);
                    if (_json_data.success == true)
                    {
                        var _base_id = _currency_id.result;

                        if (_json_data.data.SelectToken($"total_{_base_id}") != null)
                        {
                            var _balance = new BBalanceItem()
                            {
                                currency = base_name,

                                free  = _json_data.data[$"available_{_base_id}"].Value <decimal>(),
                                used  = _json_data.data[$"in_use_{_base_id}"].Value <decimal>(),
                                total = _json_data.data[$"total_{_base_id}"].Value <decimal>(),

                                misu       = _json_data.data[$"misu_{_base_id}"].Value <decimal>(),
                                xcoin_last = _json_data.data[$"xcoin_last"].Value <decimal>()
                            };

                            _result.result = _balance;
                        }
                    }
                    else
                    {
                        _json_result.SetResult(_json_data);
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_currency_id);
            }

            return(_result);
        }
예제 #32
0
        private IEnumerable <Balance> CalculateEqualForOneUser(IEnumerable <Result> both, String username, String password)
        {
            bool           sign      = false;
            var            array     = both.ToArray();
            List <Balance> tBalances = new List <Balance>();

            for (int i = 0; i < array.Count(); i++)
            {
                if (i != array.Count() - 1)
                {
                    if (array[i].monthAndYear == array[i + 1].monthAndYear)
                    {
                        sign = true;
                        if (array[i].Year == DateTime.Now.Year && array[i].Month == DateTime.Now.Month)
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (array[i].amount - array[i + 1].amount) + RecurringIncomeController.Instance().OneUserMonthlyIncome(username, password),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                        else
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (array[i].amount - array[i + 1].amount),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                    }
                    else if (array[i].Type == "Expense" && sign == false)
                    {
                        if (array[i].Year == DateTime.Now.Year && array[i].Month == DateTime.Now.Month)
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (-array[i].amount) + RecurringIncomeController.Instance().OneUserMonthlyIncome(username, password),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                        else
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (-array[i].amount),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                    }
                    else if (array[i].Type == "Income" && sign == false)
                    {
                        if (array[i].Year == DateTime.Now.Year && array[i].Month == DateTime.Now.Month)
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (array[i].amount) + RecurringIncomeController.Instance().OneUserMonthlyIncome(username, password),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                        else
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (array[i].amount),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                    }
                    else
                    {
                        sign = false;
                    }
                }
                else
                {
                    if (array[i].Type == "Expense" && sign == false)
                    {
                        if (array[i].Year == DateTime.Now.Year && array[i].Month == DateTime.Now.Month)
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (-array[i].amount) + RecurringIncomeController.Instance().OneUserMonthlyIncome(username, password),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                        else
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (-array[i].amount),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                    }
                    else if (array[i].Type == "Income" && sign == false)
                    {
                        if (array[i].Year == DateTime.Now.Year && array[i].Month == DateTime.Now.Month)
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (array[i].amount) + RecurringIncomeController.Instance().OneUserMonthlyIncome(username, password),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                        else
                        {
                            Balance tBalance = new Balance()
                            {
                                Amount       = (array[i].amount),
                                monthAndYear = array[i].monthAndYear,
                                Year         = array[i].Year,
                                Month        = array[i].Month
                            };
                            tBalances.Add(tBalance);
                        }
                    }
                    else
                    {
                        sign = false;
                    }
                }
            }
            return(tBalances);
        }
예제 #33
0
 public override string Selector(Balance b) => b.User;
예제 #34
0
 //
 // GET: /Storages/Purchase/5
 public ActionResult Purchase(int id = 0)
 {
     Balance b = new Balance();
     b.StorageID = id;
     ViewBag.CatID = new SelectList(db.Categories.Where(a => a.Disabled == false), "ID", "Name");
     ViewBag.ProductID = new SelectList(db.Products.Where(a => a.Disabled == false), "ID", "Name");
     return View(b);
 }
        public static async Task <HttpResponseMessage> WithdrawMoneyRun(
            [HttpTrigger(AuthorizationLevel.Function, "POST", Route = @"WithdrawMoney/{accountnumber}")] HttpRequestMessage req,
            string accountnumber,
            [EventStream("Bank", "Account", "{accountnumber}")]  EventStream bankAccountEvents,
            [Projection("Bank", "Account", "{accountnumber}", nameof(Balance))] Projection prjBankAccountBalance,
            [Projection("Bank", "Account", "{accountnumber}", nameof(OverdraftLimit))] Projection prjBankAccountOverdraft)
        {
            // Set the start time for how long it took to process the message
            DateTime startTime = DateTime.UtcNow;

            if (!await bankAccountEvents.Exists())
            {
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.NotFound,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 true,
                                                                                                                 $"Account {accountnumber} does not exist",
                                                                                                                 0),
                                                                       FunctionResponse.MEDIA_TYPE));
            }
            else
            {
                // get the request body...
                MoneyWithdrawnData data = await req.Content.ReadAsAsync <MoneyWithdrawnData>();

                // get the current account balance
                Balance projectedBalance = await prjBankAccountBalance.Process <Balance>();

                if (null != projectedBalance)
                {
                    OverdraftLimit projectedOverdraft = await prjBankAccountOverdraft.Process <OverdraftLimit>();

                    decimal overdraftSet = 0.00M;
                    if (null != projectedOverdraft)
                    {
                        if (projectedOverdraft.CurrentSequenceNumber != projectedBalance.CurrentSequenceNumber)
                        {
                            // The two projections are out of synch.  In a real business case we would retry them
                            // n times to try and get a match but here we will just throw a consistency error
                            return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                                   ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                             true,
                                                                                                                             $"Unable to get a matching state for the current balance and overdraft for account {accountnumber}",
                                                                                                                             0),
                                                                                   FunctionResponse.MEDIA_TYPE));
                        }
                        else
                        {
                            overdraftSet = projectedOverdraft.CurrentOverdraftLimit;
                        }
                    }

                    if ((projectedBalance.CurrentBalance + overdraftSet) >= data.AmountWithdrawn)
                    {
                        // attempt the withdrawal
                        DateTime dateWithdrawn = DateTime.UtcNow;
                        Account.Events.MoneyWithdrawn evWithdrawn = new Account.Events.MoneyWithdrawn()
                        {
                            LoggedWithdrawalDate = dateWithdrawn,
                            AmountWithdrawn      = data.AmountWithdrawn,
                            Commentary           = data.Commentary
                        };
                        try
                        {
                            await bankAccountEvents.AppendEvent(evWithdrawn, projectedBalance.CurrentSequenceNumber);
                        }
                        catch (EventSourcingOnAzureFunctions.Common.EventSourcing.Exceptions.EventStreamWriteException exWrite)
                        {
                            return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                                   ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                             true,
                                                                                                                             $"Failed to write withdrawal event {exWrite.Message}",
                                                                                                                             0),
                                                                                   FunctionResponse.MEDIA_TYPE));
                        }

                        return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.OK,
                                                                               ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                         false,
                                                                                                                         $"{data.AmountWithdrawn } withdrawn from account {accountnumber} (New balance: {projectedBalance.CurrentBalance - data.AmountWithdrawn}, overdraft: {overdraftSet} )",
                                                                                                                         projectedBalance.CurrentSequenceNumber),
                                                                               FunctionResponse.MEDIA_TYPE));
                    }
                    else
                    {
                        return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                               ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                         true,
                                                                                                                         $"Account {accountnumber} does not have sufficent funds for the withdrawal of {data.AmountWithdrawn} (Current balance: {projectedBalance.CurrentBalance}, overdraft: {overdraftSet} )",
                                                                                                                         projectedBalance.CurrentSequenceNumber),
                                                                               FunctionResponse.MEDIA_TYPE));
                    }
                }
                else
                {
                    return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                           ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                     true,
                                                                                                                     $"Unable to get current balance for account {accountnumber}",
                                                                                                                     projectedBalance.CurrentSequenceNumber),
                                                                           FunctionResponse.MEDIA_TYPE));
                }
            }
        }
예제 #36
0
 public override string ToString()
 {
     return("New Balance: " +
            Balance.ToString("F2", CultureInfo.InvariantCulture));
 }
        public static async Task <HttpResponseMessage> SetOverdraftLimitRun(
            [HttpTrigger(AuthorizationLevel.Function, "POST", Route = @"SetOverdraftLimit/{accountnumber}")] HttpRequestMessage req,
            string accountnumber,
            [EventStream("Bank", "Account", "{accountnumber}")]  EventStream bankAccountEvents,
            [Projection("Bank", "Account", "{accountnumber}", nameof(Balance))] Projection prjBankAccountBalance)
        {
            // Set the start time for how long it took to process the message
            DateTime startTime = DateTime.UtcNow;

            if (!await bankAccountEvents.Exists())
            {
                // You cannot set an overdraft if the account does not exist
                return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                       ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                 true,
                                                                                                                 $"Account {accountnumber} does not exist",
                                                                                                                 0)));
            }
            else
            {
                // get the request body...
                OverdraftSetData data = await req.Content.ReadAsAsync <OverdraftSetData>();

                // get the current account balance
                Balance projectedBalance = await prjBankAccountBalance.Process <Balance>();

                if (null != projectedBalance)
                {
                    if (projectedBalance.CurrentBalance >= (0 - data.NewOverdraftLimit))
                    {
                        // attempt to set the new overdraft limit
                        Account.Events.OverdraftLimitSet evOverdraftSet = new Account.Events.OverdraftLimitSet()
                        {
                            OverdraftLimit = data.NewOverdraftLimit,
                            Commentary     = data.Commentary
                        };
                        try
                        {
                            await bankAccountEvents.AppendEvent(evOverdraftSet, projectedBalance.CurrentSequenceNumber);
                        }
                        catch (EventSourcingOnAzureFunctions.Common.EventSourcing.Exceptions.EventStreamWriteException exWrite)
                        {
                            return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                                   ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                             true,
                                                                                                                             $"Failed to write overdraft limit event {exWrite.Message}",
                                                                                                                             projectedBalance.CurrentSequenceNumber),
                                                                                   FunctionResponse.MEDIA_TYPE));
                        }

                        return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.OK,
                                                                               ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                         false,
                                                                                                                         $"{data.NewOverdraftLimit } set as the new overdraft limit for account {accountnumber}",
                                                                                                                         projectedBalance.CurrentSequenceNumber),
                                                                               FunctionResponse.MEDIA_TYPE));
                    }
                    else
                    {
                        return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                               ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                         true,
                                                                                                                         $"Account {accountnumber} has an outstanding balance beyond the new limit {data.NewOverdraftLimit} (Current balance: {projectedBalance.CurrentBalance} )",
                                                                                                                         projectedBalance.CurrentSequenceNumber),
                                                                               FunctionResponse.MEDIA_TYPE
                                                                               ));
                    }
                }
                else
                {
                    return(req.CreateResponse <ProjectionFunctionResponse>(System.Net.HttpStatusCode.Forbidden,
                                                                           ProjectionFunctionResponse.CreateResponse(startTime,
                                                                                                                     true,
                                                                                                                     $"Unable to get current balance for account {accountnumber}",
                                                                                                                     0),
                                                                           FunctionResponse.MEDIA_TYPE
                                                                           ));
                }
            }
        }
예제 #38
0
        public int Create([FromBody] Balance balance)

        {
            return(us.AddBalance(balance));
        }
 public void Subscribe(BalanceChanged type)
 {
     CurrentBalance = type.CurrentBalance;
 }
예제 #40
0
        public int Edit([FromBody] Balance balance)

        {
            return(us.UpdateBalance(balance));
        }
예제 #41
0
 private BalanceDetail GetCurrenceData(Balance balance, string currency) =>
 balance.Data.First(f => f.Currency_code == currency);
        /// <summary>
        /// Saves the whole transaction for
        /// </summary>
        /// <param name="orderID">The order ID.</param>
        /// <param name="dvOutstandingPickList">The dv outstanding pick list.</param>
        /// <param name="remark">The remark.</param>
        /// <param name="issuedBy">The issued by.</param>
        /// <param name="etCurrentDate">The et current date.</param>
        /// <returns></returns>
        /// <exception cref="System.Exception"></exception>
        public static Order SaveIssueTransaction(int orderID, ref DataView dvOutstandingPickList, string remark, string issuedBy, DateTime etCurrentDate)
        {
            // Add the IssueDocID field
            dvOutstandingPickList.Table.Columns.Add("IssueDocID");
            PickList plst = new PickList();
            IssueDoc issDoc = new IssueDoc();
            ReceiveDoc recDoc = new ReceiveDoc();
            BLL.Order ord = new BLL.Order();
            ord.LoadByPrimaryKey(orderID);
            plst.LoadByOrderID(ord.ID);

            foreach (DataRowView drv in dvOutstandingPickList)
            {
                // Pseudo:
                // for each row in the picklist
                // undate the issue document
                // subtract the issued quantity from the receive doc
                // subtract the issued quantity from recieve pallet
                // subtract the issued the reserved quantity irregardless of the quantity issued.

                //Saving the new Issue issue
                if (Convert.ToDecimal(drv["BUPICKED"]) == 0)
                {
                    continue;

                }

                if (Convert.ToDecimal(drv["SKUPicked"]) != Convert.ToDecimal(drv["SKUTOPICK"]))
                {
                    drv["Cost"] = Convert.ToDecimal(drv["SKUPicked"]) * Convert.ToDecimal(drv["UnitPrice"]);
                }

                // Select the receive doc that is associated with this issue.
                recDoc.LoadByPrimaryKey(Convert.ToInt32(drv["ReceiveDocID"]));

                issDoc.AddNew();
                issDoc.StoreId = Convert.ToInt32(drv["StoreID"]);
                issDoc.RefNo = ord.RefNo;
                if (!ord.IsColumnNull("RequestedBy"))
                    issDoc.ReceivingUnitID = ord.RequestedBy;
                // TOFIX:
                // TODO:
                // Lord have mercy kind of hack to avoid the feb date problem
                // this needs to be fixed for pagume also
                issDoc.Date = etCurrentDate;
                issDoc.EurDate = DateTimeHelper.ServerDateTime;
                issDoc.RecievDocID = Convert.ToInt32(drv["ReceiveDocID"]);
                issDoc.IsApproved = true;
                issDoc.IsTransfer = false;
                issDoc.Remark = remark;
                issDoc.ItemID = Convert.ToInt32(drv["ItemID"]);
                issDoc.Quantity = Convert.ToDecimal(drv["BUPICKED"]);
                issDoc.NoOfPack = Convert.ToDecimal(drv["SKUPICKED"]);
                issDoc.QtyPerPack = Convert.ToInt32(drv["SKUBU"]);
                issDoc.BatchNo = drv["BatchNumber"].ToString();
                issDoc.UnitID = recDoc.UnitID;
                issDoc.ManufacturerID = recDoc.ManufacturerId;
                if (drv["Cost"] != DBNull.Value)
                {
                    issDoc.Cost = Convert.ToDouble(drv["Cost"]);

                    issDoc.SellingPrice = Convert.ToDecimal(drv["UnitPrice"]);
                    if (!recDoc.IsColumnNull("Cost"))
                    {
                        issDoc.UnitCost = Convert.ToDecimal(recDoc.Cost);
                    }
                }
                issDoc.OrderID = orderID;
                issDoc.IssuedBy = issuedBy;
                // TODO: is this the right place where we need to pick the physical store ID from?
                // check it against the receipt pallet physical store.
                if (!recDoc.IsColumnNull("PhysicalStoreID"))
                {
                    issDoc.PhysicalStoreID = recDoc.PhysicalStoreID;
                }
                if (!recDoc.IsColumnNull("InventoryPeriodID"))
                {
                    //Todo: Remove for Inventory
                    issDoc.InventoryPeriodID = recDoc.InventoryPeriodID;
                }
                if (!recDoc.IsColumnNull("Margin"))
                {
                    issDoc.Margin = (decimal)recDoc.Margin;
                }
                //Replaced by
                issDoc.PLDetailID = Convert.ToInt32(drv["PLDetailID"]);
                BLL.Balance bal = new Balance();
                BLL.ReceiveDoc rd = new ReceiveDoc();
                rd.LoadByPrimaryKey(issDoc.RecievDocID);
                decimal currentBalance = bal.GetSoh(issDoc.ItemID, rd.UnitID, issDoc.StoreId, issDoc.Date.Month, issDoc.Date.Year);
                if (currentBalance < issDoc.NoOfPack)
                {
                    throw new Exception(string.Format("The item {0} is not available in {1} Qty.", drv["FullItemName"].ToString(), issDoc.NoOfPack));
                }

                // This is a field that is not applicable on the hub edition
                // It is about the dispensing unit quantity and there is no such thing as Dispensing unit
                // in the hub edition
                issDoc.DUSOH = 0;
                issDoc.RecomendedQty = 0;// ((recQty > 0) ? Convert.ToInt64(recQty) : 0);
                // End DU
                issDoc.DispatchConfirmed = false;
                issDoc.Save();
                drv["IssueDocID"] = issDoc.ID;
                // updating the receiving doc

                //long prevQuantityLeft = recDoc.QuantityLeft;

                recDoc.QuantityLeft = recDoc.QuantityLeft - issDoc.Quantity;

                if (recDoc.QuantityLeft < 0)
                {
                    //Possibly the wrong ReceiveDoc Entry chosen
                    BLL.Item itm = new Item();
                    itm.LoadByPrimaryKey(recDoc.ItemID);
                    throw new Exception(string.Format("Quantity problem detected for the item {0}", itm.FullItemName));
                }
                //long
                recDoc.Out = (recDoc.QuantityLeft == 0) ? true : false;
                recDoc.Save();

                ReceivePallet rp = new ReceivePallet();
                int id = Convert.ToInt32(drv["ReceivePalletID"]);
                rp.LoadByPrimaryKey(id);
                if (rp.IsColumnNull("Balance"))
                {
                    rp.Balance = rp.ReceivedQuantity;
                }
                rp.Balance -= issDoc.Quantity;

                if (rp.Balance < 0)
                {
                    BLL.Item itm = new Item();
                    itm.LoadByPrimaryKey(recDoc.ItemID);
                    throw new Exception(string.Format("Quantity problem detected for the item {0}", itm.FullItemName));
                }

                decimal totReservedQty = Convert.ToDecimal(drv["QuantityInBU"]);

                if (rp.IsColumnNull("ReservedStock"))
                    rp.ReservedStock = 0;

                rp.ReservedStock -= totReservedQty;
                if (rp.ReservedStock < 0) //If there has been a quantity problem somewhere
                    rp.ReservedStock = 0;
                rp.Save();
            }
            plst.IsConfirmed = true;
            ord.ChangeStatus(OrderStatus.Constant.ISSUED, CurrentContext.UserId);
            plst.Save();
            ord.Save();
            return ord;
        }
예제 #43
0
 public abstract T Selector(Balance b);