Ejemplo n.º 1
0
 /// <summary>
 /// Gives credit. Checks inside. Just wouldn't give money if can't
 /// </summary>
 public bool GiveLackingMoneyInCredit(Agent taker, MoneyView desirableSum)
 {
     if (taker.Country.Science.IsInvented(Invention.Banking))// find money in bank?
     {
         MoneyView lackOfSum = desirableSum.Copy().Subtract(taker.getMoneyAvailable(), false);
         if (lackOfSum.isNotZero())
         {
             return(GiveCredit(taker, lackOfSum));
         }
         else
         {
             return(false);
         }
     }
     return(false);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Checks inside. Wouldn't pay if can't. Takes back deposit from bank if needed
        /// Registers moneyIncomeThisTurn, pays tax. Returns true if was able to pay
        /// </summary>
        public bool Pay(Agent incomeReceiver, MoneyView howMuch, Register.Account account, bool showMessageAboutNegativeValue = true)
        {
            if (howMuch.isNotZero())
            {
                if (PayWithoutRecord(incomeReceiver, howMuch, account, showMessageAboutNegativeValue)) // pays here
                {
                    Money howMuchPayReally = howMuch.Copy();

                    if (incomeReceiver is Market) // Market wouldn't pay taxes cause it's abstract entity
                    {
                        return(true);
                    }

                    Agent payer = this;

                    // foreigners income tax calculation
                    if (payer is Market == false && //&& incomeReceiver is Market == false
                        payer.Country != incomeReceiver.Country &&
                        payer is Factory)    // pay taxes in enterprise jurisdiction only if it's factory
                    {
                        var payed = payer.Country.TakeIncomeTaxFrom(incomeReceiver, howMuchPayReally, false);
                        howMuchPayReally.Subtract(payed);//and reduce taxable base
                    }

                    // in rest cases only pops pay taxes
                    var popReceiver = incomeReceiver as PopUnit;
                    if (popReceiver != null)
                    {
                        incomeReceiver.Country.TakeIncomeTaxFrom(popReceiver, howMuchPayReally, popReceiver.Type.isPoorStrata());
                    }
                    //else // if it's not Pop than it should by dividends from enterprise..
                    //{
                    //    //var countryPayer = incomeReceiver as Country;
                    //    //if (countryPayer != null)
                    //        incomeReceiver.Country.TakeIncomeTaxFrom(incomeReceiver, howMuchPayReally, false);
                    //}
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }