Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'package:flutter/material.dart';
- import 'package:scoped_model/scoped_model.dart';
- import 'dart:math';
- import 'bpmiMap.dart';
- class CalculatorModel extends Model {
- bool _refinance = false;
- bool _cashOut = false;
- bool _investmentProperty = false;
- bool _manufactured = false;
- bool _secondHome = false;
- bool _multiUnit = false;
- bool _multiBorrower = false;
- String _creditScore = '';
- String _creditScoreActual = '';
- double _extraPayment = 50;
- double _loanAmount = 300000.0;
- double _downPayment= 10000.0;
- double _interestRate = 3.0;
- double _taxRate = 0.011;
- double _propertyInsuranceRate = .0035;
- double _maxPurchasePrice = 3000000.0;
- double _term = 30.0;
- String _program = "con";
- String _vaSubType = "unset";
- double _principleInterest = 0.0;
- double _tax = 0.0;
- double _propertyInsurance = 0.0;
- double _hoa = 0.0;
- double _mmi = 0.0;
- double _bpmi = 0.0;
- double _monthlyTotal = 0.0;
- bool get refinance => _refinance;
- bool get cashOut => _cashOut;
- bool get investmentProperty => _investmentProperty;
- bool get manufactured => _manufactured;
- bool get secondHome => _secondHome;
- bool get multiUnit => _multiUnit;
- bool get multiBorrower => _multiBorrower;
- String get creditScore => _creditScore;
- String get creditScoreActual => _creditScoreActual;
- double get extraPayment => _extraPayment;
- double get loanAmount => _loanAmount;
- double get downPayment => _downPayment;
- double get interestRate => _interestRate;
- double get taxRate => _taxRate;
- double get propertyInsuranceRate => _propertyInsuranceRate;
- double get maxPurchasePrice => _maxPurchasePrice;
- double get term => _term;
- String get program => _program;
- String get vaSubType => _vaSubType;
- double get principleInterest => _principleInterest;
- double get tax => _tax;
- double get propertyInsurance => _propertyInsurance;
- double get hoa => _hoa;
- double get mmi => _mmi;
- double get bpmi => _bpmi;
- double get monthlyTotal => _monthlyTotal;
- void update(bool value){
- if(value) {
- print('update');
- calcFunction();
- notifyListeners();
- }
- }
- void updateRefinance(bool value) {
- _refinance = value;
- calcFunction();
- notifyListeners();
- }
- void updateCashOUt(bool value) {
- _cashOut = value;
- calcFunction();
- notifyListeners();
- }
- void updateInvestmentProperty(bool value) {
- _investmentProperty = value;
- calcFunction();
- notifyListeners();
- }
- void updateManufactured(bool value) {
- _manufactured = value;
- calcFunction();
- notifyListeners();
- }
- void updateSecondHome(bool value) {
- _secondHome = value;
- calcFunction();
- notifyListeners();
- }
- void updateMultiUnit(bool value) {
- _multiUnit = value;
- calcFunction();
- notifyListeners();
- }
- void updateMultiBorrower(bool value) {
- _multiBorrower = value;
- calcFunction();
- notifyListeners();
- }
- void updateCreditScores(String cs, String csa) {
- _creditScore = cs;
- _creditScoreActual = csa;
- calcFunction();
- notifyListeners();
- }
- void updateExtraPayment(double value) {
- _extraPayment = value;
- extraPayments();
- notifyListeners();
- }
- void updateLoanAmount(double value) {
- _loanAmount = value;
- calcFunction();
- notifyListeners();
- }
- void updateDownPayment(double value) {
- _downPayment = value;
- calcFunction();
- notifyListeners();
- }
- void updateInterestRate(double value) {
- _interestRate = value;
- calcFunction();
- notifyListeners();
- }
- void updateTaxRate(double value) {
- _taxRate = value;
- calcFunction();
- notifyListeners();
- }
- void updatePropertyInsuranceRate(double value) {
- _propertyInsuranceRate = value;
- calcFunction();
- notifyListeners();
- }
- void updateMaxPurchasePrice(double value) {
- _maxPurchasePrice = value;
- calcFunction();
- notifyListeners();
- }
- void updateTerm(double value) {
- _term = value;
- calcFunction();
- notifyListeners();
- }
- void updateProgram(String value) {
- _program = value;
- calcFunction();
- notifyListeners();
- }
- void updateVaSubType(String value) {
- _vaSubType = value;
- calcFunction();
- notifyListeners();
- }
- void updatePrincipleInterest(double value) {
- _principleInterest = value;
- calcFunction();
- notifyListeners();
- }
- void updateTax(double value) {
- _tax = value;
- calcFunction();
- notifyListeners();
- }
- void updatePropertyInsurance(double value) {
- _propertyInsurance = value;
- calcFunction();
- notifyListeners();
- }
- void updateHoa(double value) {
- _hoa = value;
- calcFunction();
- notifyListeners();
- }
- void updateMmi(double value) {
- _mmi = value;
- calcFunction();
- notifyListeners();
- }
- void updateBpmi(double value) {
- _bpmi = value;
- calcFunction();
- notifyListeners();
- }
- void updateMonthlyTotal(double value) {
- _monthlyTotal = value;
- calcFunction();
- notifyListeners();
- }
- alert(String item, BuildContext context){
- return showDialog(context: context, builder: (context){
- return AlertDialog(
- title: Text('text'),
- );
- });
- }
- calcFunction() {
- double __total = 0.0;
- double __loanAmount = _loanAmount;
- double __downPayment = _downPayment < _loanAmount &&
- _downPayment <= _maxPurchasePrice / 6 ? _downPayment : 0.0;
- double __bpmi = 0.0;
- String __bpmiTerm = _term > 20 ? 'more' : 'less';
- double __adjustedAmount = _refinance == true ? __loanAmount : __loanAmount -
- __downPayment;
- double __ltvActual = __adjustedAmount / __loanAmount;
- double __ltvCon = 0.97;
- double __ltvFha = 0.965;
- String __ltvString = __ltvActual > 95.001 && __ltvActual <= 97 ? '97' :
- __ltvActual > 90.001 && __ltvActual <= 95 ? '95' :
- __ltvActual > 85.001 && __ltvActual <= 90 ? '90' :
- __ltvActual < 85 ? '85' : null;
- switch (_program) {
- case "usda":
- {
- __adjustedAmount = 1.005 * __adjustedAmount;
- }
- break;
- case "con":
- {
- if ((1 - __downPayment / __loanAmount) > __ltvCon && !_refinance) {
- __downPayment = (1 - __ltvCon) * __loanAmount;
- }
- }
- break;
- case "fha":
- {
- __adjustedAmount = 1.0175 * __adjustedAmount;
- if ((1 - __downPayment / __loanAmount) > __ltvFha && !_refinance) {
- __downPayment = (1 - __ltvFha) * __loanAmount;
- }
- }
- break;
- case "va":
- {
- switch (_vaSubType) {
- case "first":
- {
- __adjustedAmount = (1.0215 * __adjustedAmount);
- }
- break;
- case "disability":
- {
- __adjustedAmount = __adjustedAmount;
- }
- break;
- default:
- { //not first or disabled.
- __adjustedAmount = (1.033 * __adjustedAmount);
- }
- }
- }
- break;
- default:
- {}
- break;
- }
- double __totalAmount = __adjustedAmount;
- double __apr = _interestRate / 1200;
- double __months = _term * 12;
- double __principleAndInterest = (__apr + (__apr / (pow((1 + __apr), __months) - 1))) *
- __totalAmount;
- double __tax = (_taxRate * _loanAmount / 12);
- double __insurance = (_propertyInsuranceRate * _loanAmount / 12);
- double __mmi = 0.0;
- if (_program == 'fha') {
- __mmi = (__downPayment / __loanAmount) > .05
- ? ((.008 * __adjustedAmount / 12))
- : ((.0085 * __adjustedAmount / 12));
- }
- if (_program == 'usda') {
- __mmi = (.0035 * __adjustedAmount / 12);
- }
- if (_program == 'con') {
- print('Enter the BPMI Dome');
- switch (_creditScore) {
- case '760':
- print('760');
- __bpmi = bpmiMap['760'][__ltvString][__bpmiTerm];
- __bpmi = !!_cashOut ? __bpmi + .0018 : __bpmi;
- __bpmi = !!_investmentProperty ? __bpmi + .0034 : __bpmi;
- __bpmi = !!_manufactured ? __bpmi + .0018 : __bpmi;
- __bpmi = !!_secondHome ? __bpmi + .0012 : __bpmi;
- __bpmi = !!_multiUnit ? __bpmi + .0034 : __bpmi;
- print(__bpmi);
- if(_multiBorrower){
- switch(__ltvString){
- case'97':
- __bpmi -= .0013;
- break;
- case'95':
- __bpmi -= .0009;
- break;
- case'90':
- __bpmi -= .0007;
- break;
- case'85':
- __bpmi -= .0003;
- break;
- default:
- break;
- }
- }
- print(__bpmi);
- __bpmi = __bpmi * __loanAmount / 12;
- print(__bpmi);
- break;
- case '740':
- print('740');
- __bpmi = bpmiMap['740'][__ltvString][__bpmiTerm];
- print(__bpmi);
- __bpmi = !!_cashOut ? __bpmi + .0020 : __bpmi;
- __bpmi = !!_investmentProperty ? __bpmi + .0038 : __bpmi;
- __bpmi = !!_manufactured ? __bpmi + .0020 : __bpmi;
- __bpmi = !!_secondHome ? __bpmi + .0013 : __bpmi;
- __bpmi = !!_multiUnit ? __bpmi + .0038 : __bpmi;
- print(__bpmi);
- if(_multiBorrower){
- switch(__ltvString){
- case'97':
- __bpmi -= .0013;
- break;
- case'95':
- __bpmi -= .0009;
- break;
- case'90':
- __bpmi -= .0007;
- break;
- case'85':
- __bpmi -= .0003;
- break;
- default:
- break;
- }
- }
- print(__bpmi);
- __bpmi = __bpmi * __loanAmount / 12;
- print(__bpmi);
- break;
- case '720':
- print('720');
- __bpmi = bpmiMap['720'][__ltvString][__bpmiTerm];
- __bpmi = !!_cashOut ? __bpmi + .0020 : __bpmi;
- __bpmi = !!_investmentProperty ? __bpmi + .0038 : __bpmi;
- __bpmi = !!_manufactured ? __bpmi + .0020 : __bpmi;
- __bpmi = !!_secondHome ? __bpmi + .0014 : __bpmi;
- __bpmi = !!_multiUnit ? __bpmi + .0038 : __bpmi;
- print(__bpmi);
- if(_multiBorrower){
- switch(__ltvString){
- case'97':
- __bpmi -= .0013;
- break;
- case'95':
- __bpmi -= .0009;
- break;
- case'90':
- __bpmi -= .0007;
- break;
- case'85':
- __bpmi -= .0003;
- break;
- default:
- break;
- }
- }
- print(__bpmi);
- __bpmi = __bpmi * __loanAmount / 12;
- print(__bpmi);
- break;
- case '700':
- print('700');
- __bpmi = bpmiMap['700'][__ltvString][__bpmiTerm];
- __bpmi = !!_cashOut ? __bpmi + .0025 : __bpmi;
- __bpmi = !!_investmentProperty ? __bpmi + .0047 : __bpmi;
- __bpmi = !!_manufactured ? __bpmi + .0025 : __bpmi;
- __bpmi = !!_secondHome ? __bpmi + .0017 : __bpmi;
- __bpmi = !!_multiUnit ? __bpmi + .0047 : __bpmi;
- print(__bpmi);
- if(_multiBorrower){
- switch(__ltvString){
- case'97':
- __bpmi -= .0013;
- break;
- case'95':
- __bpmi -= .0010;
- break;
- case'90':
- __bpmi -= .0007;
- break;
- case'85':
- __bpmi -= .0003;
- break;
- default:
- break;
- }
- }
- print(__bpmi);
- __bpmi = __bpmi * __loanAmount / 12;
- print(__bpmi);
- break;
- case '680':
- print('680');
- __bpmi = bpmiMap['680'][__ltvString][__bpmiTerm];
- __bpmi = !!_cashOut ? __bpmi + .0025 : __bpmi;
- __bpmi = !!_investmentProperty ? __bpmi + .0050 : __bpmi;
- __bpmi = !!_manufactured ? __bpmi + .0030 : __bpmi;
- __bpmi = !!_secondHome ? __bpmi + .0020 : __bpmi;
- print(__bpmi);
- if(_multiBorrower){
- switch(__ltvString){
- case'97':
- __bpmi -= .0014;
- break;
- case'95':
- __bpmi -= .0011;
- break;
- case'90':
- __bpmi -= .0008;
- break;
- case'85':
- __bpmi -= .0003;
- break;
- default:
- break;
- }
- }
- print(__bpmi);
- __bpmi = __bpmi * __loanAmount / 12;
- print(__bpmi);
- break;
- case '660':
- print('660');
- __bpmi = bpmiMap['660'][__ltvString][__bpmiTerm];
- __bpmi = !!_cashOut ? __bpmi + .0050 : __bpmi;
- __bpmi = !!_manufactured ? __bpmi + .0050 : __bpmi;
- __bpmi = !!_secondHome ? __bpmi + .0035 : __bpmi;
- print(__bpmi);
- if(_multiBorrower){
- switch(__ltvString){
- case'97':
- __bpmi -= .0015;
- break;
- case'95':
- __bpmi -= .0012;
- break;
- case'90':
- __bpmi -= .0009;
- break;
- case'85':
- __bpmi -= .0003;
- break;
- default:
- break;
- }
- }
- print(__bpmi);
- __bpmi = __bpmi * __loanAmount / 12;
- print(__bpmi);
- break;
- case '640':
- print('640');
- __bpmi = bpmiMap['640'][__ltvString][__bpmiTerm];
- print(__bpmi);
- __bpmi = !!_cashOut ? __bpmi + .0055 : __bpmi;
- __bpmi = !!_manufactured ? __bpmi + .0055 : __bpmi;
- __bpmi = !!_secondHome ? __bpmi + .0040 : __bpmi;
- print(__bpmi);
- if(_multiBorrower){
- switch(__ltvString){
- case'97':
- __bpmi -= .0016;
- break;
- case'95':
- __bpmi -= .0014;
- break;
- case'90':
- __bpmi -= .0009;
- break;
- case'85':
- __bpmi -= .0003;
- break;
- default:
- break;
- }
- }
- print(__bpmi);
- __bpmi = __bpmi * __loanAmount / 12;
- print(__bpmi);
- break;
- case '620':
- print('620');
- __bpmi = bpmiMap['620'][__ltvString][__bpmiTerm];
- __bpmi = !!_cashOut ? __bpmi + .0060 : __bpmi;
- __bpmi = !!_manufactured ? __bpmi + .0060 : __bpmi;
- __bpmi = !!_secondHome ? __bpmi + .0045 : __bpmi;
- print(__bpmi);
- if(_multiBorrower){
- switch(__ltvString){
- case'97':
- __bpmi -= .0018;
- break;
- case'95':
- __bpmi -= .0016;
- break;
- case'90':
- __bpmi -= .0010;
- break;
- case'85':
- __bpmi -= .0004;
- break;
- default:
- break;
- }
- }
- print(__bpmi);
- __bpmi = __bpmi * __loanAmount / 12;
- print(__bpmi);
- break;
- default:
- __bpmi = 0.0;
- break;
- }
- }
- __total = __principleAndInterest + __tax + __insurance + __mmi + _hoa + __bpmi;
- _principleInterest = __principleAndInterest;
- _tax = __tax;
- _propertyInsurance = __insurance;
- _downPayment = __downPayment;
- _mmi = __mmi;
- _bpmi = __bpmi;
- _monthlyTotal = __total;
- }
- extraPayments(){
- double __totalAmount = _loanAmount;
- double __apr = _interestRate / 1200;
- double __months = _term * 12;
- double __principleAndInterest = (__apr + (__apr / (pow((1 + __apr), __months) - 1))) *
- __totalAmount;
- double __remainingBalance = _loanAmount;
- double __totalInterest = 0.0;
- double __monthsLeft = _term * 12;
- for (double month = 1; month < _term * 12; month++) {
- double __interestPaid = __remainingBalance * _interestRate / 12 / 100;
- double __principlePaid = __principleAndInterest - __interestPaid;
- print({
- __remainingBalance,
- __interestPaid,
- __principlePaid,
- __principleAndInterest
- });
- if (__remainingBalance > 0.0) {
- __remainingBalance =
- __remainingBalance - (__principlePaid + _extraPayment);
- __totalInterest = __totalInterest + __interestPaid;
- __monthsLeft = __monthsLeft - 1;
- }
- }
- print({
- __totalInterest.toStringAsFixed(2),
- __monthsLeft,
- __remainingBalance,
- __principleAndInterest
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement