public virtual void AcceptTrade(Entity entity, Trade trade) { var side = trade.GetTradeSide(entity); if (side == TradeSideEnum.Destination) { trade.DestinationAccepted = true; } else { trade.SourceAccepted = true; } MethodResult result = CanFinishTrade(trade); if (result.isSuccess) { FinishTrade(trade); } else if (trade.DestinationAccepted && trade.SourceAccepted) { using (NoSaveChanges) { var tradeLink = TradeLinkCreator.Create(trade); var msg = $"{tradeLink} could not be finished due to : {result.Errors[0]}."; warningService.AddWarning(trade.SourceEntityID.Value, msg); warningService.AddWarning(trade.DestinationEntityID.Value, msg); trade.DestinationAccepted = trade.SourceAccepted = false; } } ConditionalSaveChanges(tradeRepository); }
public virtual Trade StartTrade(Entity source, Entity destination) { Trade trade = new Trade() { DateTime = DateTime.Now, Day = GameHelper.CurrentDay, DestinationAccepted = false, DestinationEntityID = destination.EntityID, DestinationUsedFuelAmount = null, SourceAccepted = false, SourceUsedFuelAmount = null, SourceEntityID = source.EntityID, TradeStatusID = (int)TradeStatusEnum.Ongoing, UpdatedDate = DateTime.Now, }; tradeRepository.Add(trade); ConditionalSaveChanges(tradeRepository); var sourceLink = EntityLinkCreator.Create(source); var tradeLink = TradeLinkCreator.Create(trade); var msg = $"{sourceLink} started {tradeLink} with you."; warningService.AddWarning(destination.EntityID, msg); return(trade); }
public virtual void FinishTrade(Trade trade) { using (var trs = transactionScopeProvider.CreateTransactionScope()) { trade.Set(TradeStatusEnum.Success); Entity destination = trade.Destination; Entity source = trade.Source; using (NoSaveChanges) { foreach (var money in trade.TradeMoneys.ToList()) { var secondSide = GetSecondSide(trade, money.Entity); walletService.AddMoney(secondSide.WalletID, new Money(money.CurrencyID, money.Amount)); if (secondSide.Is(EntityTypeEnum.Company)) { var company = secondSide.Company; companyFinanceSummaryService.AddFinances(company, new TradeBalanceFinance(money.Amount, money.CurrencyID)); } if (money.Entity.Is(EntityTypeEnum.Company)) { var company = money.Entity.Company; companyFinanceSummaryService.AddFinances(company, new TradeBalanceFinance(-money.Amount, money.CurrencyID)); } } foreach (var product in trade.TradeProducts.ToList()) { var secondSide = GetSecondSide(trade, product.Entity); equipmentService.GiveItem((ProductTypeEnum)product.ProductID, product.Amount, product.Quality, secondSide.Equipment); } var sourceFuelCost = GetNeededFuel(trade.Source, trade); var destinationFuelCost = GetNeededFuel(trade.Destination, trade); trade.DestinationUsedFuelAmount = destinationFuelCost; trade.SourceUsedFuelAmount = sourceFuelCost; if (sourceFuelCost > 0) { equipmentService.RemoveProductsFromEquipment(ProductTypeEnum.Fuel, sourceFuelCost.Value, 1, trade.Source.Equipment); } if (destinationFuelCost > 0) { equipmentService.RemoveProductsFromEquipment(ProductTypeEnum.Fuel, destinationFuelCost.Value, 1, trade.Destination.Equipment); } var tradeLink = TradeLinkCreator.Create(trade); string msg = $"{tradeLink} has been successfully finished"; warningService.AddWarning(destination.EntityID, msg); warningService.AddWarning(source.EntityID, msg); } ConditionalSaveChanges(tradeRepository); trs.Complete(); } }
public virtual void CancelTrade(Trade trade, Entity who) { using (NoSaveChanges) { returnProductAndMoneyFromTrade(trade); trade.Set(TradeStatusEnum.Cancel); if (trade.GetTradeSide(who) == TradeSideEnum.Destination) { trade.DestinationAccepted = false; } else { trade.SourceAccepted = false; } var entityLink = EntityLinkCreator.Create(who); var tradeLink = TradeLinkCreator.Create(trade); var msg = $"{entityLink} cancelled {tradeLink}."; var secondSide = GetSecondSide(trade, who); warningService.AddWarning(secondSide.EntityID, msg); } tradeRepository.SaveChanges(); }
public virtual void AbortTrade(Trade trade, string reason) { using (NoSaveChanges) { returnProductAndMoneyFromTrade(trade); trade.Set(TradeStatusEnum.Abort); var tradeLink = TradeLinkCreator.Create(trade); var msg = $"{tradeLink} was aborted due to {reason}."; warningService.AddWarning(trade.SourceEntityID.Value, msg); warningService.AddWarning(trade.DestinationEntityID.Value, msg); } tradeRepository.SaveChanges(); }