public void Implant(ImplantClientData data) { var receiverAcc = UserContext.Accounts.GetOrFail(data.Receiver, data.ReceiverPass); var sellerAcc = UserContext.Accounts.GetOrFail(data.Seller); var parentAcc = UserContext.Accounts.Get(sellerAcc.ParentID) ?? sellerAcc; _rightsManager.CheckForAccessOverSlave(sellerAcc, AccountAccessRoles.Withdraw); Try.Condition(parentAcc.Role.IsCompany(), $"Продавать импланты может только компания"); Try.Condition(receiverAcc.Role == AccountRole.Person, $"Получать импланты может только персона"); int indexCost = data.Index; if (receiverAcc.Insurance == InsuranceType.SuperVip || parentAcc == UserContext.Insurances.GetIssuerFromType(receiverAcc.Insurance)) { var discount = UserContext.Constants.GetDiscount(receiverAcc.EffectiveLevel); indexCost = (int)Math.Ceiling(indexCost * (1 - discount)); } Try.Condition(parentAcc.Index >= indexCost, $"Недостаточно индекса"); data.Description = ParseImplantDescription(data.Description, indexCost > 0); var tdata = new TransferClientData(receiverAcc.Login, sellerAcc.Login, data.Price) { Description = data.Description }; var trList = P2BTransfer(receiverAcc, sellerAcc, tdata); using (var dbTransact = UserContext.Data.Database.BeginTransaction()) { UserContext.Data.BeginFastSave(); trList.ForEach(TransactiontoDb); parentAcc.Index -= indexCost; dbTransact.Commit(); } if (indexCost > 0) { if (parentAcc != sellerAcc) { UserContext.AddGameEvent(parentAcc.Login, GameEventType.Index, $"Имплант за {indexCost} индекса установлен магазином {sellerAcc.Fullname}", true); } UserContext.AddGameEvent(sellerAcc.Login, GameEventType.Index, $"Имплант за {indexCost} индекса установлен {receiverAcc.Fullname}", true); UserContext.AddGameEvent(receiverAcc.Login, GameEventType.Index, $"Получен имплант от {sellerAcc.Fullname}", true); } }
public IHttpActionResult TransferImplant(ImplantClientData data) { UserContext.Transactions.Implant(data); return(Ok()); }