1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.data.statics;
18
19 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
20 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
21 import io.github.tonywasher.joceanus.oceanus.resource.OceanusBundleId;
22
23
24
25
26 public enum MoneyWiseTransCategoryClass
27 implements MoneyWiseCategoryInterface {
28
29
30
31 TAXEDINCOME(1, 4),
32
33
34
35
36 RENTALINCOME(2, 5),
37
38
39
40
41 ROOMRENTALINCOME(3, 6),
42
43
44
45
46 INTEREST(4, 7),
47
48
49
50
51 DIVIDEND(5, 8),
52
53
54
55
56 VIRTUALINCOME(6, 9),
57
58
59
60
61 GROSSINCOME(7, 10),
62
63
64
65
66 PENSIONCONTRIB(8, 11),
67
68
69
70
71 GIFTEDINCOME(9, 12),
72
73
74
75
76 INHERITED(10, 13),
77
78
79
80
81 LOANINTERESTEARNED(11, 14),
82
83
84
85
86 LOYALTYBONUS(12, 15),
87
88
89
90
91 CASHBACK(13, 16),
92
93
94
95
96 RECOVEREDEXPENSES(14, 17),
97
98
99
100
101 OTHERINCOME(15, 18),
102
103
104
105
106 OPTIONSEXERCISE(16, 19),
107
108
109
110
111 UNITSADJUST(17, 20),
112
113
114
115
116 STOCKSPLIT(18, 21),
117
118
119
120
121 STOCKDEMERGER(19, 22),
122
123
124
125
126 SECURITYREPLACE(20, 23),
127
128
129
130
131 SECURITYCLOSURE(21, 24),
132
133
134
135
136 STOCKTAKEOVER(22, 25),
137
138
139
140
141 STOCKRIGHTSISSUE(23, 26),
142
143
144
145
146 PORTFOLIOXFER(24, 27),
147
148
149
150
151 OPTIONSGRANT(25, 28),
152
153
154
155
156 OPTIONSVEST(26, 29),
157
158
159
160
161 OPTIONSEXPIRE(27, 30),
162
163
164
165
166 PENSIONDRAWDOWN(28, 31),
167
168
169
170
171 PENSIONTAXFREE(29, 32),
172
173
174
175
176 TRANSFER(30, 33),
177
178
179
180
181 EXPENSE(31, 34),
182
183
184
185
186 BADDEBTCAPITAL(32, 35),
187
188
189
190
191 BADDEBTINTEREST(33, 36),
192
193
194
195
196 LOCALTAXES(34, 37),
197
198
199
200
201 WRITEOFF(35, 38),
202
203
204
205
206 LOANINTERESTCHARGED(36, 39),
207
208
209
210
211 RENTALEXPENSE(37, 40),
212
213
214
215
216 ANNUITYPURCHASE(38, 41),
217
218
219
220
221 TAXRELIEF(39, 42),
222
223
224
225
226 INCOMETAX(40, 43),
227
228
229
230
231 TAXEDINTEREST(41, 44),
232
233
234
235
236 GROSSINTEREST(42, 45),
237
238
239
240
241 TAXFREEINTEREST(43, 46),
242
243
244
245
246 PEER2PEERINTEREST(44, 47),
247
248
249
250
251 SHAREDIVIDEND(45, 48),
252
253
254
255
256 UNITTRUSTDIVIDEND(46, 49),
257
258
259
260
261 FOREIGNDIVIDEND(47, 50),
262
263
264
265
266 TAXFREEDIVIDEND(48, 51),
267
268
269
270
271 TAXEDLOYALTYBONUS(49, 52),
272
273
274
275
276 GROSSLOYALTYBONUS(50, 53),
277
278
279
280
281 TAXFREELOYALTYBONUS(51, 54),
282
283
284
285
286 CHARGEABLEGAIN(52, 55),
287
288
289
290
291 RESIDENTIALGAIN(53, 56),
292
293
294
295
296 CAPITALGAIN(54, 57),
297
298
299
300
301 TAXFREEGAIN(55, 58),
302
303
304
305
306 MARKETGROWTH(56, 59),
307
308
309
310
311 CURRENCYFLUCTUATION(57, 60),
312
313
314
315
316
317
318
319 WITHHELD(58, 61),
320
321
322
323
324
325
326 OPENINGBALANCE(59, 62),
327
328
329
330
331
332
333 EMPLOYEENATINS(60, 63),
334
335
336
337
338
339
340 EMPLOYERNATINS(61, 64),
341
342
343
344
345
346
347
348 INCOMETOTALS(62, 1),
349
350
351
352
353
354
355
356 EXPENSETOTALS(63, 2),
357
358
359
360
361
362
363
364 SECURITYPARENT(64, 3),
365
366
367
368
369
370
371
372 TOTALS(65, 0);
373
374
375
376
377 private String theName;
378
379
380
381
382 private final int theId;
383
384
385
386
387 private final int theOrder;
388
389
390
391
392
393
394
395 MoneyWiseTransCategoryClass(final int uId,
396 final int uOrder) {
397 theId = uId;
398 theOrder = uOrder;
399 }
400
401 @Override
402 public int getClassId() {
403 return theId;
404 }
405
406 @Override
407 public int getOrder() {
408 return theOrder;
409 }
410
411 @Override
412 public String toString() {
413
414 if (theName == null) {
415
416 theName = bundleIdForCategoryClass(this).getValue();
417 }
418
419
420 return theName;
421 }
422
423
424
425
426
427
428
429
430 public static MoneyWiseTransCategoryClass fromId(final int id) throws OceanusException {
431 for (MoneyWiseTransCategoryClass myClass : values()) {
432 if (myClass.getClassId() == id) {
433 return myClass;
434 }
435 }
436 throw new MoneyWiseDataException("Invalid ClassId for " + MoneyWiseStaticDataType.TRANSTYPE.toString() + ":" + id);
437 }
438
439
440
441
442
443
444 public boolean isHiddenType() {
445 return switch (this) {
446 case SHAREDIVIDEND, UNITTRUSTDIVIDEND, FOREIGNDIVIDEND, TAXFREEDIVIDEND, TAXEDINTEREST, GROSSINTEREST,
447 TAXFREEINTEREST, PEER2PEERINTEREST, TAXEDLOYALTYBONUS, GROSSLOYALTYBONUS, TAXFREELOYALTYBONUS,
448 MARKETGROWTH, CURRENCYFLUCTUATION, WITHHELD, TAXRELIEF, CHARGEABLEGAIN, RESIDENTIALGAIN, CAPITALGAIN,
449 TAXFREEGAIN, VIRTUALINCOME, EMPLOYEENATINS, EMPLOYERNATINS, OPENINGBALANCE, TOTALS -> true;
450 default -> false;
451 };
452 }
453
454
455
456
457
458
459 public boolean isSecretPayee() {
460 return switch (this) {
461 case INTEREST, DIVIDEND, CASHBACK, LOYALTYBONUS, LOANINTERESTEARNED, RENTALINCOME, ROOMRENTALINCOME,
462 WRITEOFF, LOANINTERESTCHARGED, OPTIONSEXERCISE -> true;
463 default -> false;
464 };
465 }
466
467
468
469
470
471
472 public boolean isSwitchDirection() {
473 return switch (this) {
474 case INTEREST, DIVIDEND, CASHBACK, LOYALTYBONUS, RENTALINCOME, ROOMRENTALINCOME, WRITEOFF,
475 LOANINTERESTCHARGED, TRANSFER -> true;
476 default -> false;
477 };
478 }
479
480
481
482
483
484
485
486 public boolean isSingular() {
487 return INCOMETAX.equals(this) || isHiddenType();
488 }
489
490
491
492
493
494
495 public boolean isIncome() {
496 return switch (this) {
497 case TAXEDINCOME, VIRTUALINCOME, GROSSINCOME, PENSIONCONTRIB, LOYALTYBONUS, CASHBACK, OTHERINCOME,
498 RECOVEREDEXPENSES, GIFTEDINCOME, INTEREST, TAXEDINTEREST, GROSSINTEREST, TAXFREEINTEREST,
499 PEER2PEERINTEREST, DIVIDEND, SHAREDIVIDEND, UNITTRUSTDIVIDEND, FOREIGNDIVIDEND, TAXFREEDIVIDEND,
500 TAXEDLOYALTYBONUS, GROSSLOYALTYBONUS, TAXFREELOYALTYBONUS, INHERITED, LOANINTERESTEARNED, RENTALINCOME,
501 ROOMRENTALINCOME, OPTIONSEXERCISE, EMPLOYEENATINS, EMPLOYERNATINS, OPENINGBALANCE, INCOMETOTALS ->
502 true;
503 default -> false;
504 };
505 }
506
507
508
509
510
511
512 public boolean isExpense() {
513 return !isIncome() && !isTransfer();
514 }
515
516
517
518
519
520
521 public boolean isDilutable() {
522 return switch (this) {
523 case STOCKSPLIT, STOCKDEMERGER -> true;
524 default -> false;
525 };
526 }
527
528
529
530
531
532
533 public boolean isDividend() {
534 return switch (this) {
535 case DIVIDEND, SHAREDIVIDEND, UNITTRUSTDIVIDEND, FOREIGNDIVIDEND, TAXFREEDIVIDEND -> true;
536 default -> false;
537 };
538 }
539
540
541
542
543
544
545 public boolean isInterest() {
546 return switch (this) {
547 case INTEREST, TAXEDINTEREST, GROSSINTEREST, TAXFREEINTEREST, PEER2PEERINTEREST -> true;
548 default -> false;
549 };
550 }
551
552
553
554
555
556
557 public boolean isStockAdjustment() {
558 return switch (this) {
559 case STOCKSPLIT, UNITSADJUST, STOCKDEMERGER, SECURITYREPLACE, STOCKTAKEOVER, PORTFOLIOXFER, OPTIONSGRANT,
560 OPTIONSVEST, OPTIONSEXPIRE -> true;
561 default -> false;
562 };
563 }
564
565
566
567
568
569
570 public boolean needsNullAmount() {
571 return switch (this) {
572 case STOCKSPLIT, UNITSADJUST, STOCKDEMERGER, STOCKTAKEOVER, PORTFOLIOXFER, OPTIONSGRANT, OPTIONSVEST,
573 OPTIONSEXPIRE, SECURITYREPLACE -> true;
574 default -> false;
575 };
576 }
577
578
579
580
581
582
583
584 public boolean canParentCategory() {
585 return switch (this) {
586 case INCOMETOTALS, EXPENSETOTALS, SECURITYPARENT, TOTALS -> true;
587 default -> false;
588 };
589 }
590
591
592
593
594
595
596
597 public boolean isSubTotal() {
598 return switch (this) {
599 case INCOMETOTALS, EXPENSETOTALS, SECURITYPARENT -> true;
600 default -> false;
601 };
602 }
603
604
605
606
607
608
609 public boolean isTransfer() {
610 return this == TRANSFER || isSecurityTransfer();
611 }
612
613
614
615
616
617
618 public boolean isNatInsurance() {
619 return switch (this) {
620 case TAXEDINCOME, PENSIONCONTRIB -> true;
621 default -> false;
622 };
623 }
624
625
626
627
628
629
630 public boolean isSecurityTransfer() {
631 return switch (this) {
632 case UNITSADJUST, STOCKSPLIT, STOCKDEMERGER, SECURITYREPLACE, STOCKTAKEOVER, STOCKRIGHTSISSUE,
633 PORTFOLIOXFER, OPTIONSGRANT, OPTIONSVEST, OPTIONSEXPIRE, SECURITYCLOSURE, SECURITYPARENT,
634 PENSIONDRAWDOWN, PENSIONTAXFREE -> true;
635 default -> false;
636 };
637 }
638
639
640
641
642
643
644 public boolean isSecurityClosure() {
645 return this == SECURITYCLOSURE;
646 }
647
648 @Override
649 public boolean isTotals() {
650 return this == TOTALS;
651 }
652
653
654
655
656
657
658
659 private static OceanusBundleId bundleIdForCategoryClass(final MoneyWiseTransCategoryClass pClass) {
660
661 return switch (pClass) {
662 case TAXEDINCOME -> MoneyWiseStaticResource.TRANSTYPE_TAXEDINCOME;
663 case RENTALINCOME -> MoneyWiseStaticResource.TRANSTYPE_RENTALINCOME;
664 case ROOMRENTALINCOME -> MoneyWiseStaticResource.TRANSTYPE_ROOMRENTINCOME;
665 case INTEREST -> MoneyWiseStaticResource.TRANSTYPE_INTEREST;
666 case DIVIDEND -> MoneyWiseStaticResource.TRANSTYPE_DIVIDEND;
667 case VIRTUALINCOME -> MoneyWiseStaticResource.TRANSTYPE_VIRTUALINCOME;
668 case GROSSINCOME -> MoneyWiseStaticResource.TRANSTYPE_GROSSINCOME;
669 case PENSIONCONTRIB -> MoneyWiseStaticResource.TRANSTYPE_PENSIONCONTRIB;
670 case GIFTEDINCOME -> MoneyWiseStaticResource.TRANSTYPE_GIFTEDINCOME;
671 case INHERITED -> MoneyWiseStaticResource.TRANSTYPE_INHERITED;
672 case LOANINTERESTEARNED -> MoneyWiseStaticResource.TRANSTYPE_LOANINTEARNED;
673 case CASHBACK -> MoneyWiseStaticResource.TRANSTYPE_CASHBACK;
674 case LOYALTYBONUS -> MoneyWiseStaticResource.TRANSTYPE_LOYALTYBONUS;
675 case RECOVEREDEXPENSES -> MoneyWiseStaticResource.TRANSTYPE_RECOVEREDEXPENSES;
676 case OTHERINCOME -> MoneyWiseStaticResource.TRANSTYPE_OTHERINCOME;
677 case TRANSFER -> MoneyWiseStaticResource.TRANSTYPE_TRANSFER;
678 case UNITSADJUST -> MoneyWiseStaticResource.TRANSTYPE_UNITSADJUST;
679 case STOCKSPLIT -> MoneyWiseStaticResource.TRANSTYPE_STOCKSPLIT;
680 case STOCKDEMERGER -> MoneyWiseStaticResource.TRANSTYPE_STOCKDEMERGER;
681 case STOCKTAKEOVER -> MoneyWiseStaticResource.TRANSTYPE_STOCKTAKEOVER;
682 case SECURITYREPLACE -> MoneyWiseStaticResource.TRANSTYPE_SECURITYREPLACE;
683 case SECURITYCLOSURE -> MoneyWiseStaticResource.TRANSTYPE_SECURITYCLOSURE;
684 case STOCKRIGHTSISSUE -> MoneyWiseStaticResource.TRANSTYPE_STOCKRIGHTSISSUE;
685 case PORTFOLIOXFER -> MoneyWiseStaticResource.TRANSTYPE_PORTFOLIOXFER;
686 case OPTIONSGRANT -> MoneyWiseStaticResource.TRANSTYPE_OPTIONSGRANT;
687 case OPTIONSVEST -> MoneyWiseStaticResource.TRANSTYPE_OPTIONSVEST;
688 case OPTIONSEXPIRE -> MoneyWiseStaticResource.TRANSTYPE_OPTIONSEXPIRE;
689 case OPTIONSEXERCISE -> MoneyWiseStaticResource.TRANSTYPE_OPTIONSEXERCISE;
690 case PENSIONDRAWDOWN -> MoneyWiseStaticResource.TRANSTYPE_PENSIONDRAWDOWN;
691 case PENSIONTAXFREE -> MoneyWiseStaticResource.TRANSTYPE_PENSIONTAXFREE;
692 case EXPENSE -> MoneyWiseStaticResource.TRANSTYPE_EXPENSE;
693 case BADDEBTCAPITAL -> MoneyWiseStaticResource.TRANSTYPE_BADDEBTCAPITAL;
694 case BADDEBTINTEREST -> MoneyWiseStaticResource.TRANSTYPE_BADDEBTINTEREST;
695 case LOCALTAXES -> MoneyWiseStaticResource.TRANSTYPE_LOCALTAXES;
696 case WRITEOFF -> MoneyWiseStaticResource.TRANSTYPE_WRITEOFF;
697 case RENTALEXPENSE -> MoneyWiseStaticResource.TRANSTYPE_RENTALEXPENSE;
698 case ANNUITYPURCHASE -> MoneyWiseStaticResource.TRANSTYPE_ANNUITYPURCHASE;
699 case LOANINTERESTCHARGED -> MoneyWiseStaticResource.TRANSTYPE_LOANINTCHARGE;
700 case TAXRELIEF -> MoneyWiseStaticResource.TRANSTYPE_TAXRELIEF;
701 case INCOMETAX -> MoneyWiseStaticResource.TRANSTYPE_INCOMETAX;
702 case TAXEDINTEREST -> MoneyWiseStaticResource.TRANSTYPE_TAXEDINTEREST;
703 case TAXFREEINTEREST -> MoneyWiseStaticResource.TRANSTYPE_TAXFREEINTEREST;
704 case PEER2PEERINTEREST -> MoneyWiseStaticResource.TRANSTYPE_PEER2PEERINTEREST;
705 case GROSSINTEREST -> MoneyWiseStaticResource.TRANSTYPE_GROSSINTEREST;
706 case SHAREDIVIDEND -> MoneyWiseStaticResource.TRANSTYPE_SHAREDIVIDEND;
707 case UNITTRUSTDIVIDEND -> MoneyWiseStaticResource.TRANSTYPE_UTDIVIDEND;
708 case FOREIGNDIVIDEND -> MoneyWiseStaticResource.TRANSTYPE_FOREIGNDIVIDEND;
709 case TAXFREEDIVIDEND -> MoneyWiseStaticResource.TRANSTYPE_TAXFREEDIVIDEND;
710 case TAXEDLOYALTYBONUS -> MoneyWiseStaticResource.TRANSTYPE_TAXEDLOYALTYBONUS;
711 case GROSSLOYALTYBONUS -> MoneyWiseStaticResource.TRANSTYPE_GROSSLOYALTYBONUS;
712 case TAXFREELOYALTYBONUS -> MoneyWiseStaticResource.TRANSTYPE_TAXFREELOYALTYBONUS;
713 case CHARGEABLEGAIN -> MoneyWiseStaticResource.TRANSTYPE_CHARGEABLEGAIN;
714 case TAXFREEGAIN -> MoneyWiseStaticResource.TRANSTYPE_TAXFREEGAIN;
715 case RESIDENTIALGAIN -> MoneyWiseStaticResource.TRANSTYPE_RESIDENTIALGAIN;
716 case CAPITALGAIN -> MoneyWiseStaticResource.TRANSTYPE_CAPITALGAIN;
717 case MARKETGROWTH -> MoneyWiseStaticResource.TRANSTYPE_MARKETGROWTH;
718 case CURRENCYFLUCTUATION -> MoneyWiseStaticResource.TRANSTYPE_CURRFLUCT;
719 case WITHHELD -> MoneyWiseStaticResource.TRANSTYPE_WITHHELD;
720 case EMPLOYERNATINS -> MoneyWiseStaticResource.TRANSTYPE_EMPLOYERNATINS;
721 case EMPLOYEENATINS -> MoneyWiseStaticResource.TRANSTYPE_EMPLOYEENATINS;
722 case OPENINGBALANCE -> MoneyWiseStaticResource.TRANSTYPE_OPENINGBALANCE;
723 case INCOMETOTALS -> MoneyWiseStaticResource.TRANSTYPE_INCOMETOTALS;
724 case EXPENSETOTALS -> MoneyWiseStaticResource.TRANSTYPE_EXPENSETOTALS;
725 case SECURITYPARENT -> MoneyWiseStaticResource.TRANSTYPE_SECURITYPARENT;
726 case TOTALS -> MoneyWiseStaticResource.TRANSTYPE_TOTALS;
727 default -> throw new IllegalArgumentException();
728 };
729 }
730 }