示例#1
0
        /// <summary>
        /// Buys the stock.
        /// </summary>
        /// <param name="selectedUser">The selected user.</param>
        public async Task BuyStock(object selectedUser, DateTime dateTime)
        {
            IsValidationMessageVisible = false;
            this.IsBusy = true;

            var basePrice     = Quantity * Price;
            var commission    = CalculateCommission(basePrice);
            var newPrice      = basePrice + commission;
            var transactionId = Guid.NewGuid();
            var portfolio     = new PostPortfolio()
            {
                TransactionId   = transactionId,
                Date            = dateTime.ToString(),
                Price           = Price,
                Company         = ShareName.ToUpper(),
                Quantity        = Quantity,
                Name            = selectedUser.ToString(),
                TransactionType = Constants.Buy,
                Total           = newPrice
            };
            await tmsService.PostPortfolioData(portfolio);

            await UpdateStockDB();
            await CalculateBuyAverage(selectedUser, newPrice, transactionId);

            ResetValue();
            this.IsBusy = false;
        }
示例#2
0
 /// <summary>
 /// Updates the stock database.
 /// </summary>
 private async Task UpdateStockDB()
 {
     if (ShareNameList.FirstOrDefault(x => x.StockName.Equals(ShareName.ToUpper())) == null)
     {
         var stock = new Stocks()
         {
             StockName = ShareName.ToUpper()
         };
         await tmsService.PostStockName(stock);
         await GetStockNameList();
     }
 }
示例#3
0
 public ConfigurationForInstance(
     ServerName localServer,
     ServerName remoteServer,
     DirectoryPath localDirectoryForBackup,
     DirectoryPath localDirectoryForShare,
     DirectoryPath localDircetoryForRestore,
     ShareName localShareName,
     int endpoint_ListenerPort,
     double backupExpiresAfterDays,
     int shutDownAfterNumberOfChecksForDatabaseState,
     int switchStateAfterNumberOfChecksInPrimaryRunningNoSecondaryState,
     int shutDownAfterNumberOfChecksInSecondaryRunningNoPrimaryState,
     int mirrorMonitoringUpdateMinutes,
     int remoteServerAccessTimeoutSeconds,
     string endpoint_Name,
     int serviceStartTimeoutSec,
     int checkMirroringStateSecondInterval,
     int primaryStartupWaitNumberOfChecksForMirroringTimeout,
     int secondaryStartupWaitNumberOfChecksForMirroringTimeout,
     int backupHourInterval,
     bool backupToMirrorServer,
     BackupTime backupTime,
     int backupDelayEmergencyBackupMin
     )
 {
     _localServer            = localServer;
     _remoteServer           = remoteServer;
     _localBackupDirectory   = localDirectoryForBackup;
     _localShareDirectory    = localDirectoryForShare;
     _localRestoreDircetory  = localDircetoryForRestore;
     _localShareName         = localShareName;
     _endpoint_ListenerPort  = endpoint_ListenerPort;
     _backupExpiresAfterDays = backupExpiresAfterDays;
     ShutDownAfterNumberOfChecksForDatabaseState = shutDownAfterNumberOfChecksForDatabaseState;
     SwitchStateAfterNumberOfChecksInPrimaryRunningNoSecondaryState = switchStateAfterNumberOfChecksInPrimaryRunningNoSecondaryState;
     ShutDownAfterNumberOfChecksInSecondaryRunningNoPrimaryState    = shutDownAfterNumberOfChecksInSecondaryRunningNoPrimaryState;
     MirrorMonitoringUpdateMinutes     = mirrorMonitoringUpdateMinutes;
     _remoteServerAccessTimeoutSeconds = remoteServerAccessTimeoutSeconds;
     _endpoint_Name      = endpoint_Name;
     ServiceStartTimeout = serviceStartTimeoutSec * 1000;
     CheckMirroringStateSecondInterval = checkMirroringStateSecondInterval;
     PrimaryStartupWaitNumberOfChecksForMirroringTimeout   = primaryStartupWaitNumberOfChecksForMirroringTimeout;
     SecondaryStartupWaitNumberOfChecksForMirroringTimeout = secondaryStartupWaitNumberOfChecksForMirroringTimeout;
     BackupHourInterval             = backupHourInterval;
     _backupToMirrorServer          = backupToMirrorServer;
     _backupTime                    = backupTime;
     _backupDelayEmergencyBackupMin = backupDelayEmergencyBackupMin;
 }
 public override int GetHashCode()
 => CacheControl.GetHashCode()
 ^ ContentDisposition.GetHashCode()
 ^ ContentEncoding.GetHashCode()
 ^ ContentLanguage.GetHashCode()
 ^ ContentType.GetHashCode()
 ^ ExpiryTime.GetHashCode()
 ^ FilePath.GetHashCode()
 ^ Identifier.GetHashCode()
 ^ IPRange.GetHashCode()
 ^ Permissions.GetHashCode()
 ^ Protocol.GetHashCode()
 ^ ShareName.GetHashCode()
 ^ StartTime.GetHashCode()
 ^ Version.GetHashCode()
 ;
示例#5
0
        /// <summary>
        /// Sells the stock.
        /// </summary>
        /// <param name="selectedUser">The selected user.</param>
        public async Task SellStock(object selectedUser, DateTime dateTime)
        {
            IsValidationMessageVisible = false;
            this.IsBusy = true;
            var basePrice     = Quantity * Price;
            var commission    = CalculateCommission(basePrice);
            var newPrice      = basePrice - commission;
            var transactionId = Guid.NewGuid();
            var portfolio     = new PostPortfolio()
            {
                TransactionId   = transactionId,
                Date            = dateTime.ToString(),
                Price           = Price,
                Company         = ShareName.ToUpper(),
                Quantity        = Quantity,
                Name            = selectedUser.ToString(),
                TransactionType = Constants.Sell,
                Total           = newPrice
            };

            await CalculateSellAverage(selectedUser, newPrice, transactionId);

            if (!IsBalanceNegative)
            {
                await tmsService.PostPortfolioData(portfolio);
                await UpdateStockDB();

                ResetValue();
            }
            else
            {
                this.IsBusy = false;
                UserDialogs.Instance.Alert("Selling quantity is more than available quantity.", okText: "OK");
            }
            this.IsBusy = false;
        }
示例#6
0
 /// <summary>
 /// Calculates the specific average.
 /// </summary>
 /// <param name="prevAvgData">The previous average data.</param>
 /// <param name="newAvg">The new average.</param>
 /// <param name="multiplier">The multiplier.</param>
 /// <param name="newPrice">The new price.</param>
 private async Task CalculateSpecificAverage(Average prevAvgData, Average newAvg, int multiplier, double newPrice)
 {
     if (prevAvgData != null)
     {
         var    finalPrice = multiplier * newPrice;
         double totalQuantity;
         if (multiplier == 1)
         {
             totalQuantity = prevAvgData.Quantity + Quantity;
         }
         else
         {
             totalQuantity = prevAvgData.Quantity - Quantity;
         }
         if (totalQuantity != 0)
         {
             var totalAvg = (prevAvgData.TotalPrice + finalPrice) / totalQuantity;
             var postAvg  = new Average()
             {
                 TotalPrice   = totalQuantity * totalAvg,
                 Quantity     = totalQuantity,
                 ShareName    = this.ShareName.ToUpper(),
                 AveragePrice = totalAvg
             };
             await tmsService.PostAverageData(postAvg, "Total");
         }
         else
         {
             await tmsService.DeleteSpecificShareData("Total", ShareName.ToUpper());
         }
     }
     else
     {
         await tmsService.PostAverageData(newAvg, "Total");
     }
 }
 public ConfigurationForDatabase(
     DatabaseName databaseName,
     DirectoryPath localDirectoryForBackup,
     DirectoryPath localDirectoryForShare,
     DirectoryPath localDircetoryForRestore,
     ShareName localShareName,
     ServerName remoteServer,
     ShareName remoteShareName,
     SubDirectory localTransferSubDircetory,
     SubDirectory remoteTransferSubDircetory,
     SubDirectory remoteDeliverySubDirectory
     )
 {
     _databaseName               = databaseName;
     _localBackupDirectory       = localDirectoryForBackup;
     _localShareDirectory        = localDirectoryForShare;
     _localRestoreDircetory      = localDircetoryForRestore;
     _localShareName             = localShareName;
     _remoteServer               = remoteServer;
     _remoteShareName            = remoteShareName;
     _localTransferSubDircetory  = localTransferSubDircetory;
     _remoteTransferSubDircetory = remoteTransferSubDircetory;
     _remoteDeliverySubDirectory = remoteDeliverySubDirectory;
 }
示例#8
0
        /// <summary>
        /// Calculates the sell average.
        /// </summary>
        /// <param name="selectedUser">The selected user.</param>
        /// <param name="newPrice">The new price.</param>
        public async Task CalculateSellAverage(object selectedUser, double newPrice, Guid transactionId)
        {
            var newQuantity = -Quantity;
            var postAvg     = await PostCalculatedAverage(selectedUser, newPrice, newQuantity, -1, transactionId);

            if (!IsBalanceNegative)
            {
                var shareSpecificTotalAvg = await tmsService.GetSpecificAverageData("Total", ShareName.ToUpper());
                await CalculateSpecificAverage(shareSpecificTotalAvg, postAvg, -1, newPrice);

                if (postAvg != null)
                {
                    await tmsService.PostAverageData(postAvg, selectedUser.ToString());
                }
                else
                {
                    await tmsService.DeleteSpecificShareData(selectedUser.ToString(), ShareName.ToUpper());
                }
                SelectedNameValue = selectedUser.ToString();
                await GetUserAverageData(selectedUser.ToString());
            }
        }
示例#9
0
        /// <summary>
        /// Calculates the buy average.
        /// </summary>
        /// <param name="selectedUser">The selected user.</param>
        /// <param name="newPrice">The new price.</param>
        public async Task CalculateBuyAverage(object selectedUser, double newPrice, Guid transactionId)
        {
            var newQuantity = Quantity;
            var postAvg     = await PostCalculatedAverage(selectedUser, newPrice, newQuantity, 1, transactionId);

            var shareSpecificTotalAvg = await tmsService.GetSpecificAverageData("Total", ShareName.ToUpper());

            await CalculateSpecificAverage(shareSpecificTotalAvg, postAvg, 1, newPrice);

            await tmsService.PostAverageData(postAvg, selectedUser.ToString());

            SelectedNameValue = selectedUser.ToString();
            await GetUserAverageData(selectedUser.ToString());
        }
示例#10
0
        /// <summary>
        /// Posts the calculated average.
        /// </summary>
        /// <param name="selectedUser">The selected user.</param>
        /// <param name="newPrice">The new price.</param>
        /// <param name="quantity">The quantity.</param>
        /// <param name="multiplier">The multiplier.</param>
        /// <returns></returns>
        public async Task <Average> PostCalculatedAverage(object selectedUser, double newPrice, double quantity, double multiplier, Guid transactionId)
        {
            double totalPrice;
            double totalQuantity;
            double averagePrice;

            IsBalanceNegative = false;

            var avgResult = await tmsService.GetSpecificAverageData(selectedUser.ToString(), ShareName.ToUpper());

            if (avgResult != null)
            {
                var previousAvg        = avgResult.AveragePrice;
                var previousQty        = avgResult.Quantity;
                var totalPreviousPrice = previousAvg * previousQty;
                totalQuantity = previousQty + quantity;
                if (totalQuantity > 0)
                {
                    if (multiplier == 1)
                    {
                        averagePrice = (totalPreviousPrice + newPrice) / totalQuantity;
                    }
                    else
                    {
                        averagePrice = (totalPreviousPrice - newPrice) / totalQuantity;
                    }
                    totalPrice = totalQuantity * averagePrice;
                }
                else if (totalQuantity == 0)
                {
                    var    profitLossValue = newPrice - avgResult.TotalPrice;
                    string pLIdentifier;
                    if (profitLossValue > 0)
                    {
                        pLIdentifier = "Profit";
                    }
                    else if (profitLossValue < 0)
                    {
                        pLIdentifier = "Loss";
                    }
                    else
                    {
                        pLIdentifier = "Even";
                    }
                    profitLossValue = Math.Abs(profitLossValue);
                    var postPL = new ProfitLoss()
                    {
                        TransactionId        = transactionId,
                        Company              = avgResult.ShareName,
                        Date                 = DateTime.UtcNow.ToString(),
                        Name                 = selectedUser.ToString(),
                        Price                = profitLossValue,
                        ProfitLossIdentifier = pLIdentifier,
                    };
                    await tmsService.LogProfitLoss(postPL);

                    var currentBalance = await tmsService.GetPreviousBalanceDetails(selectedUser.ToString());

                    var balanceDetails = new Balance()
                    {
                        TotalBalance = currentBalance.TotalBalance + (newPrice - avgResult.TotalPrice)
                    };
                    await tmsService.PutUpdatedBalanceDetails(balanceDetails, selectedUser.ToString());

                    return(null);
                }
                else
                {
                    IsBalanceNegative = true;
                    return(null);
                }
            }
            else
            {
                totalQuantity = quantity;
                totalPrice    = newPrice;
                averagePrice  = newPrice / totalQuantity;
            }
            var postAvg = new Average()
            {
                TotalPrice   = totalPrice,
                Quantity     = totalQuantity,
                ShareName    = this.ShareName.ToUpper(),
                AveragePrice = averagePrice
            };

            return(postAvg);
        }