public void Init(bool enable) { view.SetActive(enable); if (!enable) { Central.Instance.game_saver.SaveGame(SaveWhen.BetweenLevels); return; } foreach (MarketplaceObject obj in marketplace_objects) { FXRate rate = Marketplace.getFXRate(obj.ID); if (rate == null) { continue; } obj.Init(this, getCurrentAmount(obj.ID), rate, getDefaultCurrency()); } setSellAllButton(); updateDefaultCurrency(); }
public static FXRate getFXRate(MarketplaceID ID) { if (rates == null) initSettings(); FXRate rate = null; rates.TryGetValue(ID, out rate); if (rate == null) Debug.LogError("Tryin to get an exchange rate for an undefined type " + ID + "\n"); return rate; }
public bool Buy(MarketplaceID ID, int amount) { Debug.Log("Buy " + ID.ToString() + " " + amount + "\n"); FXRate rate = Marketplace.getFXRate(ID); _process(ID, amount); _process(default_currency, -amount * rate.buy_rate); getObject(ID).UpdateLabels(getCurrentAmount(ID), getDefaultCurrency()); setSellAllButton(); updateDefaultCurrency(); return(true); }
public static void InitResidual(dynamic budgetItem) { var rate = FXRate.GetPlanRate((Guid)budgetItem.CurrencyId); if (rate.HasValue) { budgetItem.Residual = (decimal)budgetItem.AmountWithoutVAT * (decimal)rate.Value * (1 + (decimal)(budgetItem.VAT / 100)); budgetItem.ResidualWithoutVat = (decimal)budgetItem.AmountWithoutVAT * (decimal)rate.Value; } budgetItem.Fact = 0; budgetItem.FactWithoutVAT = 0; budgetItem.Expense = 0; budgetItem.ExpenseWithoutVAT = 0; }
//public async Task<Client[]> GetRatesAsync(string BaseCurrency = "USD") //{ // HttpClient httpClient = new HttpClient(); // var azCustomersMongoDBUrl = "https://getcustomers.azurewebsites.net/api/{DONT PUT KEYS INLINE IN CODE}"; // FXRate[] FXRates = await httpClient.GetFromJsonAsync<Client[]>(new Uri(azCustomersMongoDBUrl)); // return clients; //} public static FXRate[] GetRates() { var rates = new FXRate[] { new FXRate { Base = "USD", To = "CHF", Rate = 0.91M, ValueDate = DateTime.Now }, new FXRate { Base = "USD", To = "GBP", Rate = 0.75M, ValueDate = DateTime.Now }, new FXRate { Base = "USD", To = "GBP", Rate = 0.84M, ValueDate = DateTime.Now } }; return(rates); }
public bool Sell(MarketplaceID ID, int amount, bool all) { if (all) { amount = getCurrentAmount(ID); } if (amount == 0) { return(true); } Debug.Log("Sell " + ID.ToString() + " " + amount + "\n"); FXRate rate = Marketplace.getFXRate(ID); _process(ID, -amount); _process(default_currency, amount * rate.sell_rate); getObject(ID).UpdateLabels(getCurrentAmount(ID), getDefaultCurrency()); setSellAllButton(); updateDefaultCurrency(); return(true); }
/// <summary> /// show fx details if fx'ed /// </summary> /// <returns></returns> public override string DisplayDividendString() { if (FXRate == 1) { return(base.DisplayDividendString()); } else { return(string.Format("{0},BaseDiv={1},Ccy={2},FX={3}", base.DisplayDividendString(), BaseAmount.ToString("0.000000"), Currency, FXRate.ToString("0.000000"))); } }
private static void OnBudgetItemUpdate(EntityMetadata metadata, List <ChangeOperation> changes) { //Полный пересчет если поменялись VAT или CurrencyId var toFullRecalc = changes.Where( i => i.Data.Any( d => d.PropertyName.Equals("VAT", StringComparison.InvariantCultureIgnoreCase) || d.PropertyName.Equals("CurrencyId", StringComparison.InvariantCultureIgnoreCase) )) .Select(i => (Guid)i.Entity.GetId()).ToList(); if (toFullRecalc.Any()) { Calc.RecalculateAccount(toFullRecalc, toFullRecalc.First()); } var changedAmounts = changes.Where( i => i.Data.Any( d => d.PropertyName.Equals("AmountWithoutVAT", StringComparison.InvariantCultureIgnoreCase)) && !toFullRecalc.Contains((Guid)i.Entity.GetId())) .ToList(); if (!changedAmounts.Any()) { return; } var budgetItemIds = changedAmounts.Select(i => (i.Entity as dynamic).Id).Distinct().ToList(); foreach (var budgetItemId in budgetItemIds) { Guid id = budgetItemId; var budgetItem = changes.First(bi => bi.Entity.GetId().Equals(budgetItemId)).Entity as dynamic; var amountToRecalc = changedAmounts.FirstOrDefault(c => (c.Entity as dynamic).Id == id); if (amountToRecalc == null) { continue; } var amountChange = amountToRecalc.Data.First( c => c.PropertyName.Equals("AmountWithoutVAT", StringComparison.InvariantCultureIgnoreCase)); var amountChangeWithVATinUSD = -((decimal)amountChange.NewValue - (decimal)amountChange.InitialValue); var rate = FXRate.GetPlanRate((Guid)budgetItem.CurrencyId); if (rate.HasValue) { amountChangeWithVATinUSD = amountChangeWithVATinUSD * (decimal)rate.Value; } amountChangeWithVATinUSD = amountChangeWithVATinUSD * (1 + (decimal)(budgetItem.VAT / 100)); var recalculateRequestDelta = new RecalculateRequestDelta() { AccountId = budgetItemId, Delta = amountChangeWithVATinUSD }; Calc.RecalculateAccountByDelta(new List <RecalculateRequestDelta>() { recalculateRequestDelta }, budgetItemId); } }
protected override List <Tuple <string, List <dynamic> > > Recalc(Tuple <List <dynamic>, List <dynamic> > accounts, Tuple <List <dynamic>, List <dynamic> > externalTransactions, Tuple <List <dynamic>, List <dynamic> > internalTransactions) { var rates = new Dictionary <Guid, double>(); var result = new List <Tuple <string, List <dynamic> > >(); var budgetItems = accounts.Item1; var invoiceBudgetItems = externalTransactions.Item2; var invoices = externalTransactions.Item1; var biSave = new Tuple <string, List <dynamic> >("BudgetItem", new List <dynamic>()); result.Add(biSave); var budgets = DynamicRepository.GetByEntity("Budget"); foreach (var budgetItem in budgetItems) { dynamic item = budgetItem; var currencyId = (Guid)item.CurrencyId; double rate = 0; if (rates.ContainsKey(currencyId)) { rate = rates[currencyId]; } else { var res = FXRate.GetPlanRate(currencyId); if (!res.HasValue) { throw new Exception(string.Format("Rate with Id = '{0}' not found", currencyId)); } rate = res.Value; rates.Add(currencyId, rate); } var amountInUsdWithVat = (decimal)item.AmountWithoutVAT * (decimal)rate * (1 + (decimal)(item.VAT / 100)); //С НДС var factSum = invoiceBudgetItems.Where( id => id.BudgetItemId.Equals(item.Id) && (id.NextPeriodYear == null || budgets.Any(c => c.Name == id.NextPeriodYear)) && invoices.Any(i => i.Id.Equals(id.InvoiceId) && i.State == (byte)InvoiceStatus.Paid)).Select(id => (decimal)id.Amount).Sum(); var residualWithVat = amountInUsdWithVat - factSum; var residualWithoutVat = residualWithVat / (1 + (decimal)(item.VAT / 100)); var factWithVat = factSum; var factWithoutVat = factWithVat / (1 + (decimal)(item.VAT / 100)); //if (item.Residual != residualWithVat || item.ResidualWithoutVAT != residualWithoutVat) //{ item.Residual = residualWithVat; item.ResidualWithoutVAT = residualWithoutVat; item.Fact = factWithVat; item.FactWithoutVAT = factWithoutVat; item.Expense = 0m; item.ExpenseWithoutVAT = 0m; biSave.Item2.Add(item); //} } return(result); }