/// <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; }
/// <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(); } }
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() ;
/// <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; }
/// <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; }
/// <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()); } }
/// <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()); }
/// <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); }