/// <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); }
/// <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); }