Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.34 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:scoped_model/scoped_model.dart';
  3. import 'dart:math';
  4. import 'bpmiMap.dart';
  5. class CalculatorModel extends Model {
  6. bool _refinance = false;
  7. bool _cashOut = false;
  8. bool _investmentProperty = false;
  9. bool _manufactured = false;
  10. bool _secondHome = false;
  11. bool _multiUnit = false;
  12. bool _multiBorrower = false;
  13. String _creditScore = '';
  14. String _creditScoreActual = '';
  15. double _extraPayment = 50;
  16. double _loanAmount = 300000.0;
  17. double _downPayment= 10000.0;
  18. double _interestRate = 3.0;
  19. double _taxRate = 0.011;
  20. double _propertyInsuranceRate = .0035;
  21. double _maxPurchasePrice = 3000000.0;
  22. double _term = 30.0;
  23. String _program = "con";
  24. String _vaSubType = "unset";
  25. double _principleInterest = 0.0;
  26. double _tax = 0.0;
  27. double _propertyInsurance = 0.0;
  28. double _hoa = 0.0;
  29. double _mmi = 0.0;
  30. double _bpmi = 0.0;
  31. double _monthlyTotal = 0.0;
  32.  
  33. bool get refinance => _refinance;
  34. bool get cashOut => _cashOut;
  35. bool get investmentProperty => _investmentProperty;
  36. bool get manufactured => _manufactured;
  37. bool get secondHome => _secondHome;
  38. bool get multiUnit => _multiUnit;
  39. bool get multiBorrower => _multiBorrower;
  40. String get creditScore => _creditScore;
  41. String get creditScoreActual => _creditScoreActual;
  42. double get extraPayment => _extraPayment;
  43. double get loanAmount => _loanAmount;
  44. double get downPayment => _downPayment;
  45. double get interestRate => _interestRate;
  46. double get taxRate => _taxRate;
  47. double get propertyInsuranceRate => _propertyInsuranceRate;
  48. double get maxPurchasePrice => _maxPurchasePrice;
  49. double get term => _term;
  50. String get program => _program;
  51. String get vaSubType => _vaSubType;
  52. double get principleInterest => _principleInterest;
  53. double get tax => _tax;
  54. double get propertyInsurance => _propertyInsurance;
  55. double get hoa => _hoa;
  56. double get mmi => _mmi;
  57. double get bpmi => _bpmi;
  58. double get monthlyTotal => _monthlyTotal;
  59.  
  60. void update(bool value){
  61. if(value) {
  62. print('update');
  63. calcFunction();
  64. notifyListeners();
  65. }
  66. }
  67.  
  68. void updateRefinance(bool value) {
  69. _refinance = value;
  70. calcFunction();
  71. notifyListeners();
  72. }
  73. void updateCashOUt(bool value) {
  74. _cashOut = value;
  75. calcFunction();
  76. notifyListeners();
  77. }
  78. void updateInvestmentProperty(bool value) {
  79. _investmentProperty = value;
  80. calcFunction();
  81. notifyListeners();
  82. }
  83. void updateManufactured(bool value) {
  84. _manufactured = value;
  85. calcFunction();
  86. notifyListeners();
  87. }
  88. void updateSecondHome(bool value) {
  89. _secondHome = value;
  90. calcFunction();
  91. notifyListeners();
  92. }
  93. void updateMultiUnit(bool value) {
  94. _multiUnit = value;
  95. calcFunction();
  96. notifyListeners();
  97. }
  98. void updateMultiBorrower(bool value) {
  99. _multiBorrower = value;
  100. calcFunction();
  101. notifyListeners();
  102. }
  103. void updateCreditScores(String cs, String csa) {
  104. _creditScore = cs;
  105. _creditScoreActual = csa;
  106. calcFunction();
  107. notifyListeners();
  108. }
  109. void updateExtraPayment(double value) {
  110. _extraPayment = value;
  111. extraPayments();
  112. notifyListeners();
  113. }
  114. void updateLoanAmount(double value) {
  115. _loanAmount = value;
  116. calcFunction();
  117. notifyListeners();
  118. }
  119. void updateDownPayment(double value) {
  120. _downPayment = value;
  121. calcFunction();
  122. notifyListeners();
  123. }
  124. void updateInterestRate(double value) {
  125. _interestRate = value;
  126. calcFunction();
  127. notifyListeners();
  128. }
  129. void updateTaxRate(double value) {
  130. _taxRate = value;
  131. calcFunction();
  132. notifyListeners();
  133. }
  134. void updatePropertyInsuranceRate(double value) {
  135. _propertyInsuranceRate = value;
  136. calcFunction();
  137. notifyListeners();
  138. }
  139. void updateMaxPurchasePrice(double value) {
  140. _maxPurchasePrice = value;
  141. calcFunction();
  142. notifyListeners();
  143. }
  144. void updateTerm(double value) {
  145. _term = value;
  146. calcFunction();
  147. notifyListeners();
  148. }
  149. void updateProgram(String value) {
  150. _program = value;
  151. calcFunction();
  152. notifyListeners();
  153. }
  154. void updateVaSubType(String value) {
  155. _vaSubType = value;
  156. calcFunction();
  157. notifyListeners();
  158. }
  159. void updatePrincipleInterest(double value) {
  160. _principleInterest = value;
  161. calcFunction();
  162. notifyListeners();
  163. }
  164. void updateTax(double value) {
  165. _tax = value;
  166. calcFunction();
  167. notifyListeners();
  168. }
  169. void updatePropertyInsurance(double value) {
  170. _propertyInsurance = value;
  171. calcFunction();
  172. notifyListeners();
  173. }
  174. void updateHoa(double value) {
  175. _hoa = value;
  176. calcFunction();
  177. notifyListeners();
  178. }
  179. void updateMmi(double value) {
  180. _mmi = value;
  181. calcFunction();
  182. notifyListeners();
  183. }
  184. void updateBpmi(double value) {
  185. _bpmi = value;
  186. calcFunction();
  187. notifyListeners();
  188. }
  189. void updateMonthlyTotal(double value) {
  190. _monthlyTotal = value;
  191. calcFunction();
  192. notifyListeners();
  193. }
  194.  
  195. alert(String item, BuildContext context){
  196. return showDialog(context: context, builder: (context){
  197. return AlertDialog(
  198. title: Text('text'),
  199. );
  200. });
  201. }
  202.  
  203. calcFunction() {
  204. double __total = 0.0;
  205. double __loanAmount = _loanAmount;
  206. double __downPayment = _downPayment < _loanAmount &&
  207. _downPayment <= _maxPurchasePrice / 6 ? _downPayment : 0.0;
  208. double __bpmi = 0.0;
  209. String __bpmiTerm = _term > 20 ? 'more' : 'less';
  210. double __adjustedAmount = _refinance == true ? __loanAmount : __loanAmount -
  211. __downPayment;
  212. double __ltvActual = __adjustedAmount / __loanAmount;
  213. double __ltvCon = 0.97;
  214. double __ltvFha = 0.965;
  215.  
  216. String __ltvString = __ltvActual > 95.001 && __ltvActual <= 97 ? '97' :
  217. __ltvActual > 90.001 && __ltvActual <= 95 ? '95' :
  218. __ltvActual > 85.001 && __ltvActual <= 90 ? '90' :
  219. __ltvActual < 85 ? '85' : null;
  220. switch (_program) {
  221. case "usda":
  222. {
  223. __adjustedAmount = 1.005 * __adjustedAmount;
  224. }
  225. break;
  226. case "con":
  227. {
  228. if ((1 - __downPayment / __loanAmount) > __ltvCon && !_refinance) {
  229. __downPayment = (1 - __ltvCon) * __loanAmount;
  230. }
  231. }
  232. break;
  233. case "fha":
  234. {
  235. __adjustedAmount = 1.0175 * __adjustedAmount;
  236. if ((1 - __downPayment / __loanAmount) > __ltvFha && !_refinance) {
  237. __downPayment = (1 - __ltvFha) * __loanAmount;
  238. }
  239. }
  240. break;
  241. case "va":
  242. {
  243. switch (_vaSubType) {
  244. case "first":
  245. {
  246. __adjustedAmount = (1.0215 * __adjustedAmount);
  247. }
  248. break;
  249. case "disability":
  250. {
  251. __adjustedAmount = __adjustedAmount;
  252. }
  253. break;
  254. default:
  255. { //not first or disabled.
  256. __adjustedAmount = (1.033 * __adjustedAmount);
  257. }
  258. }
  259. }
  260.  
  261. break;
  262. default:
  263. {}
  264. break;
  265. }
  266. double __totalAmount = __adjustedAmount;
  267. double __apr = _interestRate / 1200;
  268. double __months = _term * 12;
  269.  
  270. double __principleAndInterest = (__apr + (__apr / (pow((1 + __apr), __months) - 1))) *
  271. __totalAmount;
  272. double __tax = (_taxRate * _loanAmount / 12);
  273. double __insurance = (_propertyInsuranceRate * _loanAmount / 12);
  274. double __mmi = 0.0;
  275. if (_program == 'fha') {
  276. __mmi = (__downPayment / __loanAmount) > .05
  277. ? ((.008 * __adjustedAmount / 12))
  278. : ((.0085 * __adjustedAmount / 12));
  279. }
  280. if (_program == 'usda') {
  281. __mmi = (.0035 * __adjustedAmount / 12);
  282. }
  283. if (_program == 'con') {
  284. print('Enter the BPMI Dome');
  285. switch (_creditScore) {
  286. case '760':
  287. print('760');
  288. __bpmi = bpmiMap['760'][__ltvString][__bpmiTerm];
  289. __bpmi = !!_cashOut ? __bpmi + .0018 : __bpmi;
  290. __bpmi = !!_investmentProperty ? __bpmi + .0034 : __bpmi;
  291. __bpmi = !!_manufactured ? __bpmi + .0018 : __bpmi;
  292. __bpmi = !!_secondHome ? __bpmi + .0012 : __bpmi;
  293. __bpmi = !!_multiUnit ? __bpmi + .0034 : __bpmi;
  294. print(__bpmi);
  295. if(_multiBorrower){
  296. switch(__ltvString){
  297. case'97':
  298. __bpmi -= .0013;
  299. break;
  300. case'95':
  301. __bpmi -= .0009;
  302. break;
  303. case'90':
  304. __bpmi -= .0007;
  305. break;
  306. case'85':
  307. __bpmi -= .0003;
  308. break;
  309. default:
  310. break;
  311. }
  312. }
  313. print(__bpmi);
  314. __bpmi = __bpmi * __loanAmount / 12;
  315. print(__bpmi);
  316. break;
  317. case '740':
  318.  
  319. print('740');
  320. __bpmi = bpmiMap['740'][__ltvString][__bpmiTerm];
  321. print(__bpmi);
  322. __bpmi = !!_cashOut ? __bpmi + .0020 : __bpmi;
  323. __bpmi = !!_investmentProperty ? __bpmi + .0038 : __bpmi;
  324. __bpmi = !!_manufactured ? __bpmi + .0020 : __bpmi;
  325. __bpmi = !!_secondHome ? __bpmi + .0013 : __bpmi;
  326. __bpmi = !!_multiUnit ? __bpmi + .0038 : __bpmi;
  327. print(__bpmi);
  328. if(_multiBorrower){
  329. switch(__ltvString){
  330. case'97':
  331. __bpmi -= .0013;
  332. break;
  333. case'95':
  334. __bpmi -= .0009;
  335. break;
  336. case'90':
  337. __bpmi -= .0007;
  338. break;
  339. case'85':
  340. __bpmi -= .0003;
  341. break;
  342. default:
  343. break;
  344. }
  345. }
  346. print(__bpmi);
  347. __bpmi = __bpmi * __loanAmount / 12;
  348. print(__bpmi);
  349. break;
  350. case '720':
  351. print('720');
  352. __bpmi = bpmiMap['720'][__ltvString][__bpmiTerm];
  353. __bpmi = !!_cashOut ? __bpmi + .0020 : __bpmi;
  354. __bpmi = !!_investmentProperty ? __bpmi + .0038 : __bpmi;
  355. __bpmi = !!_manufactured ? __bpmi + .0020 : __bpmi;
  356. __bpmi = !!_secondHome ? __bpmi + .0014 : __bpmi;
  357. __bpmi = !!_multiUnit ? __bpmi + .0038 : __bpmi;
  358. print(__bpmi);
  359. if(_multiBorrower){
  360. switch(__ltvString){
  361. case'97':
  362. __bpmi -= .0013;
  363. break;
  364. case'95':
  365. __bpmi -= .0009;
  366. break;
  367. case'90':
  368. __bpmi -= .0007;
  369. break;
  370. case'85':
  371. __bpmi -= .0003;
  372. break;
  373. default:
  374. break;
  375. }
  376. }
  377. print(__bpmi);
  378. __bpmi = __bpmi * __loanAmount / 12;
  379. print(__bpmi);
  380. break;
  381. case '700':
  382. print('700');
  383. __bpmi = bpmiMap['700'][__ltvString][__bpmiTerm];
  384. __bpmi = !!_cashOut ? __bpmi + .0025 : __bpmi;
  385. __bpmi = !!_investmentProperty ? __bpmi + .0047 : __bpmi;
  386. __bpmi = !!_manufactured ? __bpmi + .0025 : __bpmi;
  387. __bpmi = !!_secondHome ? __bpmi + .0017 : __bpmi;
  388. __bpmi = !!_multiUnit ? __bpmi + .0047 : __bpmi;
  389. print(__bpmi);
  390. if(_multiBorrower){
  391. switch(__ltvString){
  392. case'97':
  393. __bpmi -= .0013;
  394. break;
  395. case'95':
  396. __bpmi -= .0010;
  397. break;
  398. case'90':
  399. __bpmi -= .0007;
  400. break;
  401. case'85':
  402. __bpmi -= .0003;
  403. break;
  404. default:
  405. break;
  406. }
  407. }
  408. print(__bpmi);
  409. __bpmi = __bpmi * __loanAmount / 12;
  410. print(__bpmi);
  411. break;
  412. case '680':
  413. print('680');
  414. __bpmi = bpmiMap['680'][__ltvString][__bpmiTerm];
  415. __bpmi = !!_cashOut ? __bpmi + .0025 : __bpmi;
  416. __bpmi = !!_investmentProperty ? __bpmi + .0050 : __bpmi;
  417. __bpmi = !!_manufactured ? __bpmi + .0030 : __bpmi;
  418. __bpmi = !!_secondHome ? __bpmi + .0020 : __bpmi;
  419. print(__bpmi);
  420. if(_multiBorrower){
  421. switch(__ltvString){
  422. case'97':
  423. __bpmi -= .0014;
  424. break;
  425. case'95':
  426. __bpmi -= .0011;
  427. break;
  428. case'90':
  429. __bpmi -= .0008;
  430. break;
  431. case'85':
  432. __bpmi -= .0003;
  433. break;
  434. default:
  435. break;
  436. }
  437. }
  438. print(__bpmi);
  439. __bpmi = __bpmi * __loanAmount / 12;
  440. print(__bpmi);
  441. break;
  442. case '660':
  443. print('660');
  444. __bpmi = bpmiMap['660'][__ltvString][__bpmiTerm];
  445. __bpmi = !!_cashOut ? __bpmi + .0050 : __bpmi;
  446. __bpmi = !!_manufactured ? __bpmi + .0050 : __bpmi;
  447. __bpmi = !!_secondHome ? __bpmi + .0035 : __bpmi;
  448. print(__bpmi);
  449. if(_multiBorrower){
  450. switch(__ltvString){
  451. case'97':
  452. __bpmi -= .0015;
  453. break;
  454. case'95':
  455. __bpmi -= .0012;
  456. break;
  457. case'90':
  458. __bpmi -= .0009;
  459. break;
  460. case'85':
  461. __bpmi -= .0003;
  462. break;
  463. default:
  464. break;
  465. }
  466. }
  467. print(__bpmi);
  468. __bpmi = __bpmi * __loanAmount / 12;
  469. print(__bpmi);
  470. break;
  471. case '640':
  472. print('640');
  473. __bpmi = bpmiMap['640'][__ltvString][__bpmiTerm];
  474. print(__bpmi);
  475. __bpmi = !!_cashOut ? __bpmi + .0055 : __bpmi;
  476. __bpmi = !!_manufactured ? __bpmi + .0055 : __bpmi;
  477. __bpmi = !!_secondHome ? __bpmi + .0040 : __bpmi;
  478. print(__bpmi);
  479. if(_multiBorrower){
  480. switch(__ltvString){
  481. case'97':
  482. __bpmi -= .0016;
  483. break;
  484. case'95':
  485. __bpmi -= .0014;
  486. break;
  487. case'90':
  488. __bpmi -= .0009;
  489. break;
  490. case'85':
  491. __bpmi -= .0003;
  492. break;
  493. default:
  494. break;
  495. }
  496. }
  497. print(__bpmi);
  498. __bpmi = __bpmi * __loanAmount / 12;
  499. print(__bpmi);
  500. break;
  501. case '620':
  502. print('620');
  503. __bpmi = bpmiMap['620'][__ltvString][__bpmiTerm];
  504. __bpmi = !!_cashOut ? __bpmi + .0060 : __bpmi;
  505. __bpmi = !!_manufactured ? __bpmi + .0060 : __bpmi;
  506. __bpmi = !!_secondHome ? __bpmi + .0045 : __bpmi;
  507. print(__bpmi);
  508. if(_multiBorrower){
  509. switch(__ltvString){
  510. case'97':
  511. __bpmi -= .0018;
  512. break;
  513. case'95':
  514. __bpmi -= .0016;
  515. break;
  516. case'90':
  517. __bpmi -= .0010;
  518. break;
  519. case'85':
  520. __bpmi -= .0004;
  521. break;
  522. default:
  523. break;
  524. }
  525. }
  526. print(__bpmi);
  527. __bpmi = __bpmi * __loanAmount / 12;
  528. print(__bpmi);
  529. break;
  530. default:
  531. __bpmi = 0.0;
  532. break;
  533. }
  534. }
  535.  
  536. __total = __principleAndInterest + __tax + __insurance + __mmi + _hoa + __bpmi;
  537.  
  538. _principleInterest = __principleAndInterest;
  539. _tax = __tax;
  540. _propertyInsurance = __insurance;
  541. _downPayment = __downPayment;
  542. _mmi = __mmi;
  543. _bpmi = __bpmi;
  544. _monthlyTotal = __total;
  545.  
  546.  
  547.  
  548. }
  549.  
  550. extraPayments(){
  551. double __totalAmount = _loanAmount;
  552. double __apr = _interestRate / 1200;
  553. double __months = _term * 12;
  554.  
  555. double __principleAndInterest = (__apr + (__apr / (pow((1 + __apr), __months) - 1))) *
  556. __totalAmount;
  557. double __remainingBalance = _loanAmount;
  558. double __totalInterest = 0.0;
  559. double __monthsLeft = _term * 12;
  560.  
  561.  
  562. for (double month = 1; month < _term * 12; month++) {
  563. double __interestPaid = __remainingBalance * _interestRate / 12 / 100;
  564. double __principlePaid = __principleAndInterest - __interestPaid;
  565.  
  566. print({
  567. __remainingBalance,
  568. __interestPaid,
  569. __principlePaid,
  570. __principleAndInterest
  571. });
  572. if (__remainingBalance > 0.0) {
  573. __remainingBalance =
  574. __remainingBalance - (__principlePaid + _extraPayment);
  575. __totalInterest = __totalInterest + __interestPaid;
  576. __monthsLeft = __monthsLeft - 1;
  577. }
  578. }
  579.  
  580. print({
  581. __totalInterest.toStringAsFixed(2),
  582. __monthsLeft,
  583. __remainingBalance,
  584. __principleAndInterest
  585. });
  586.  
  587. }
  588.  
  589. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement