Exemplo n.º 1
0
    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();
    }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
 /// <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")));
     }
 }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 9
0
        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);
        }