1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.quicken.file;
18
19 import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
20 import io.github.tonywasher.joceanus.oceanus.date.OceanusDateFormatter;
21 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusDecimalParser;
22 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusMoney;
23 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusPrice;
24 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusRatio;
25 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusUnits;
26 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
27 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTransaction;
28 import io.github.tonywasher.joceanus.moneywise.quicken.definitions.MoneyWiseQActionType;
29 import io.github.tonywasher.joceanus.moneywise.quicken.definitions.MoneyWiseQPortfolioLineType;
30 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFCategoryAccountLine;
31 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFCategoryLine;
32 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFClearedLine;
33 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFDateLine;
34 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFMoneyLine;
35 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFPayeeLine;
36 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFPriceLine;
37 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFRatioLine;
38 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFSecurityLine;
39 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFStringLine;
40 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFUnitsLine;
41 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFXferAccountLine;
42
43 import java.util.List;
44
45
46
47
48 public class MoneyWiseQIFPortfolioEvent
49 extends MoneyWiseQIFEventRecord<MoneyWiseQPortfolioLineType> {
50
51
52
53 private final OceanusDate theDate;
54
55
56
57
58 private final Boolean isCleared;
59
60
61
62
63 private final MoneyWiseQActionType theAction;
64
65
66
67
68
69
70
71
72 protected MoneyWiseQIFPortfolioEvent(final MoneyWiseQIFFile pFile,
73 final MoneyWiseTransaction pTrans,
74 final MoneyWiseQActionType pAction) {
75
76 super(pFile, MoneyWiseQPortfolioLineType.class);
77
78
79 theDate = pTrans.getDate();
80 isCleared = pTrans.isReconciled();
81 theAction = pAction;
82
83
84 addLine(new MoneyWiseQIFPortfolioDateLine(theDate));
85 addLine(new MoneyWiseQIFPortfolioActionLine(theAction));
86 addLine(new MoneyWiseQIFPortfolioClearedLine(isCleared));
87
88
89 final String myComment = pTrans.getComments();
90 if (myComment != null) {
91 addLine(new MoneyWiseQIFPortfolioCommentLine(myComment));
92 }
93 }
94
95
96
97
98
99
100
101
102 protected MoneyWiseQIFPortfolioEvent(final MoneyWiseQIFFile pFile,
103 final OceanusDataFormatter pFormatter,
104 final List<String> pLines) {
105
106 super(pFile, MoneyWiseQPortfolioLineType.class);
107
108
109 OceanusDate myDate = null;
110 MoneyWiseQActionType myAction = null;
111 Boolean myCleared = null;
112
113
114 final OceanusDateFormatter myDateParser = pFormatter.getDateFormatter();
115 final OceanusDecimalParser myDecParser = pFormatter.getDecimalParser();
116
117
118 for (String myLine : pLines) {
119
120 final MoneyWiseQPortfolioLineType myType = MoneyWiseQPortfolioLineType.parseLine(myLine);
121 if (myType != null) {
122
123 final String myData = myLine.substring(myType.getSymbol().length());
124
125
126 switch (myType) {
127 case DATE:
128 final OceanusDate myDateDay = myDateParser.parseDateBase(myData, MoneyWiseQIFWriter.QIF_BASEYEAR);
129 addLine(new MoneyWiseQIFPortfolioDateLine(myDateDay));
130 myDate = myDateDay;
131 break;
132 case CLEARED:
133 final Boolean myFlag = myData.equals(MoneyWiseQIFLine.QIF_RECONCILED);
134 addLine(new MoneyWiseQIFPortfolioClearedLine(myFlag));
135 myCleared = myFlag;
136 break;
137 case AMOUNT:
138 OceanusMoney myMoney = myDecParser.parseMoneyValue(myData);
139 addLine(new MoneyWiseQIFPortfolioAmountLine(myMoney));
140 break;
141 case COMMENT:
142 addLine(new MoneyWiseQIFPortfolioCommentLine(myData));
143 break;
144 case ACTION:
145 myAction = MoneyWiseQActionType.parseLine(myData);
146 addLine(new MoneyWiseQIFPortfolioActionLine(myAction));
147 break;
148 case PRICE:
149 final OceanusPrice myPrice = myDecParser.parsePriceValue(myData);
150 addLine(new MoneyWiseQIFPortfolioPriceLine(myPrice));
151 break;
152 case COMMISSION:
153 myMoney = myDecParser.parseMoneyValue(myData);
154 addLine(new MoneyWiseQIFPortfolioCommissionLine(myMoney));
155 break;
156 case PAYEE:
157 addLine(new MoneyWiseQIFPortfolioPayeeDescLine(myData));
158 break;
159 case QUANTITY:
160 final OceanusUnits myUnits = myDecParser.parseUnitsValue(myData);
161 addLine(new MoneyWiseQIFPortfolioQuantityLine(myUnits));
162 break;
163 case SECURITY:
164 addLine(new MoneyWiseQIFPortfolioSecurityLine(pFile.getSecurity(myData)));
165 break;
166 case XFERACCOUNT:
167
168 final MoneyWiseQIFAccount myAccount = MoneyWiseQIFXferAccountLine.parseAccount(pFile, myData);
169 final MoneyWiseQIFEventCategory myCategory = MoneyWiseQIFCategoryLine.parseCategory(pFile, myData);
170 List<MoneyWiseQIFClass> myClasses = MoneyWiseQIFXferAccountLine.parseAccountClasses(pFile, myData);
171 if (myAccount == null) {
172 myClasses = MoneyWiseQIFCategoryLine.parseCategoryClasses(pFile, myData);
173 addLine(new MoneyWiseQIFPortfolioCategoryLine(myCategory, myClasses));
174 convertPayee();
175 } else if (myCategory == null) {
176 addLine(new MoneyWiseQIFPortfolioAccountLine(myAccount, myClasses));
177 } else {
178 addLine(new MoneyWiseQIFPortfolioCategoryAccountLine(myCategory, myAccount, myClasses));
179 convertPayee();
180 }
181 break;
182 case XFERAMOUNT:
183 myMoney = myDecParser.parseMoneyValue(myData);
184 addLine(new MoneyWiseQIFPortfolioXferAmountLine(myMoney));
185 break;
186 default:
187 break;
188 }
189 }
190 }
191
192
193 if (MoneyWiseQActionType.STKSPLIT.equals(myAction)) {
194 convertSplit();
195 }
196
197
198 theDate = myDate;
199 theAction = myAction;
200 isCleared = myCleared;
201 }
202
203 @Override
204 public OceanusDate getDate() {
205 return theDate;
206 }
207
208 @Override
209 public Boolean isCleared() {
210 return isCleared;
211 }
212
213
214
215
216
217
218 public MoneyWiseQActionType getAction() {
219 return theAction;
220 }
221
222
223
224
225
226
227 protected void recordSecurity(final MoneyWiseQIFSecurity pSecurity) {
228
229 addLine(new MoneyWiseQIFPortfolioSecurityLine(pSecurity));
230 }
231
232
233
234
235
236
237 protected void recordCategory(final MoneyWiseQIFEventCategory pCategory) {
238
239 addLine(new MoneyWiseQIFPortfolioCategoryLine(pCategory));
240 }
241
242
243
244
245
246
247
248 protected void recordCategory(final MoneyWiseQIFEventCategory pCategory,
249 final List<MoneyWiseQIFClass> pClasses) {
250
251 addLine(new MoneyWiseQIFPortfolioCategoryLine(pCategory, pClasses));
252 }
253
254
255
256
257
258
259 protected void recordAmount(final OceanusMoney pAmount) {
260
261 addLine(new MoneyWiseQIFPortfolioAmountLine(pAmount));
262 }
263
264
265
266
267
268
269 protected void recordPayee(final String pPayee) {
270
271 addLine(new MoneyWiseQIFPortfolioPayeeDescLine(pPayee));
272 }
273
274
275
276
277
278
279 protected void recordPayee(final MoneyWiseQIFPayee pPayee) {
280
281 addLine(new MoneyWiseQIFPortfolioPayeeLine(pPayee));
282 }
283
284
285
286
287
288
289
290 protected void recordXfer(final MoneyWiseQIFAccount pAccount,
291 final OceanusMoney pAmount) {
292
293 addLine(new MoneyWiseQIFPortfolioAccountLine(pAccount));
294 addLine(new MoneyWiseQIFPortfolioXferAmountLine(pAmount));
295 }
296
297
298
299
300
301
302
303
304 protected void recordXfer(final MoneyWiseQIFAccount pAccount,
305 final List<MoneyWiseQIFClass> pClasses,
306 final OceanusMoney pAmount) {
307
308 addLine(new MoneyWiseQIFPortfolioAccountLine(pAccount, pClasses));
309 addLine(new MoneyWiseQIFPortfolioXferAmountLine(pAmount));
310 }
311
312
313
314
315
316
317
318 protected void recordXfer(final MoneyWiseQIFEventCategory pCategory,
319 final OceanusMoney pAmount) {
320
321 addLine(new MoneyWiseQIFPortfolioCategoryLine(pCategory));
322 addLine(new MoneyWiseQIFPortfolioXferAmountLine(pAmount));
323 }
324
325
326
327
328
329
330 protected void recordQuantity(final OceanusUnits pQuantity) {
331
332 addLine(new MoneyWiseQIFPortfolioQuantityLine(pQuantity));
333 }
334
335
336
337
338
339
340 protected void recordQuantity(final OceanusRatio pRatio) {
341
342 addLine(new MoneyWiseQIFPortfolioSplitRatioLine(pRatio));
343 }
344
345
346
347
348
349
350 protected void recordPrice(final OceanusPrice pPrice) {
351
352 addLine(new MoneyWiseQIFPortfolioPriceLine(pPrice));
353 }
354
355
356
357
358
359
360 protected void recordCommission(final OceanusMoney pCommission) {
361
362 addLine(new MoneyWiseQIFPortfolioCommissionLine(pCommission));
363 }
364
365
366
367
368 private void convertPayee() {
369
370 final MoneyWiseQIFLine<MoneyWiseQPortfolioLineType> myLine = getLine(MoneyWiseQPortfolioLineType.PAYEE);
371 if (myLine instanceof MoneyWiseQIFPortfolioPayeeDescLine myDesc) {
372
373 final String myName = myDesc.getValue();
374
375
376 final MoneyWiseQIFPayee myPayee = getFile().registerPayee(myName);
377 addLine(new MoneyWiseQIFPortfolioPayeeLine(myPayee));
378 }
379 }
380
381
382
383
384 private void convertSplit() {
385
386 final MoneyWiseQIFLine<MoneyWiseQPortfolioLineType> myLine = getLine(MoneyWiseQPortfolioLineType.QUANTITY);
387 if (myLine instanceof MoneyWiseQIFPortfolioQuantityLine myQuantity) {
388
389 final OceanusUnits myUnits = myQuantity.getUnits();
390
391
392 final OceanusRatio myRatio = new OceanusRatio(myUnits.toString());
393 addLine(new MoneyWiseQIFPortfolioSplitRatioLine(myRatio));
394 }
395 }
396
397
398
399
400 public static class MoneyWiseQIFPortfolioDateLine
401 extends MoneyWiseQIFDateLine<MoneyWiseQPortfolioLineType> {
402
403
404
405
406
407 protected MoneyWiseQIFPortfolioDateLine(final OceanusDate pDate) {
408
409 super(pDate);
410 }
411
412 @Override
413 public MoneyWiseQPortfolioLineType getLineType() {
414 return MoneyWiseQPortfolioLineType.DATE;
415 }
416 }
417
418
419
420
421 public static class MoneyWiseQIFPortfolioCommentLine
422 extends MoneyWiseQIFStringLine<MoneyWiseQPortfolioLineType> {
423
424
425
426
427
428 protected MoneyWiseQIFPortfolioCommentLine(final String pComment) {
429
430 super(pComment);
431 }
432
433 @Override
434 public MoneyWiseQPortfolioLineType getLineType() {
435 return MoneyWiseQPortfolioLineType.COMMENT;
436 }
437
438
439
440
441
442
443 public String getComment() {
444 return getValue();
445 }
446 }
447
448
449
450
451 public static class MoneyWiseQIFPortfolioClearedLine
452 extends MoneyWiseQIFClearedLine<MoneyWiseQPortfolioLineType> {
453
454
455
456
457
458 protected MoneyWiseQIFPortfolioClearedLine(final Boolean pCleared) {
459
460 super(pCleared);
461 }
462
463 @Override
464 public MoneyWiseQPortfolioLineType getLineType() {
465 return MoneyWiseQPortfolioLineType.CLEARED;
466 }
467 }
468
469
470
471
472 public static class MoneyWiseQIFPortfolioAmountLine
473 extends MoneyWiseQIFMoneyLine<MoneyWiseQPortfolioLineType> {
474
475
476
477
478
479 protected MoneyWiseQIFPortfolioAmountLine(final OceanusMoney pAmount) {
480
481 super(pAmount);
482 }
483
484 @Override
485 public MoneyWiseQPortfolioLineType getLineType() {
486 return MoneyWiseQPortfolioLineType.AMOUNT;
487 }
488
489
490
491
492
493
494 public OceanusMoney getAmount() {
495 return getMoney();
496 }
497 }
498
499
500
501
502 public static class MoneyWiseQIFPortfolioCommissionLine
503 extends MoneyWiseQIFMoneyLine<MoneyWiseQPortfolioLineType> {
504
505
506
507
508
509 protected MoneyWiseQIFPortfolioCommissionLine(final OceanusMoney pCommission) {
510
511 super(pCommission);
512 }
513
514 @Override
515 public MoneyWiseQPortfolioLineType getLineType() {
516 return MoneyWiseQPortfolioLineType.COMMISSION;
517 }
518
519
520
521
522
523
524 public OceanusMoney getCommission() {
525 return getMoney();
526 }
527 }
528
529
530
531
532 public static class MoneyWiseQIFPortfolioPriceLine
533 extends MoneyWiseQIFPriceLine<MoneyWiseQPortfolioLineType> {
534
535
536
537
538
539 protected MoneyWiseQIFPortfolioPriceLine(final OceanusPrice pPrice) {
540
541 super(pPrice);
542 }
543
544 @Override
545 public MoneyWiseQPortfolioLineType getLineType() {
546 return MoneyWiseQPortfolioLineType.PRICE;
547 }
548 }
549
550
551
552
553 public static class MoneyWiseQIFPortfolioQuantityLine
554 extends MoneyWiseQIFUnitsLine<MoneyWiseQPortfolioLineType> {
555
556
557
558
559
560 protected MoneyWiseQIFPortfolioQuantityLine(final OceanusUnits pUnits) {
561
562 super(pUnits);
563 }
564
565 @Override
566 public MoneyWiseQPortfolioLineType getLineType() {
567 return MoneyWiseQPortfolioLineType.QUANTITY;
568 }
569 }
570
571
572
573
574 public static class MoneyWiseQIFPortfolioSplitRatioLine
575 extends MoneyWiseQIFRatioLine<MoneyWiseQPortfolioLineType> {
576
577
578
579
580
581 protected MoneyWiseQIFPortfolioSplitRatioLine(final OceanusRatio pRatio) {
582
583 super(pRatio);
584 }
585
586 @Override
587 public MoneyWiseQPortfolioLineType getLineType() {
588 return MoneyWiseQPortfolioLineType.QUANTITY;
589 }
590 }
591
592
593
594
595 public static class MoneyWiseQIFPortfolioActionLine
596 extends MoneyWiseQIFLine<MoneyWiseQPortfolioLineType> {
597
598
599
600 private final MoneyWiseQActionType theAction;
601
602
603
604
605
606
607 protected MoneyWiseQIFPortfolioActionLine(final MoneyWiseQActionType pAction) {
608
609 theAction = pAction;
610 }
611
612 @Override
613 public MoneyWiseQPortfolioLineType getLineType() {
614 return MoneyWiseQPortfolioLineType.ACTION;
615 }
616
617
618
619
620
621
622 public MoneyWiseQActionType getAction() {
623 return theAction;
624 }
625
626 @Override
627 protected void formatData(final OceanusDataFormatter pFormatter,
628 final StringBuilder pBuilder) {
629
630 pBuilder.append(theAction.getSymbol());
631 }
632 }
633
634
635
636
637 public static class MoneyWiseQIFPortfolioSecurityLine
638 extends MoneyWiseQIFSecurityLine<MoneyWiseQPortfolioLineType> {
639
640
641
642
643
644 protected MoneyWiseQIFPortfolioSecurityLine(final MoneyWiseQIFSecurity pSecurity) {
645
646 super(pSecurity);
647 }
648
649 @Override
650 public MoneyWiseQPortfolioLineType getLineType() {
651 return MoneyWiseQPortfolioLineType.SECURITY;
652 }
653 }
654
655
656
657
658 public static class MoneyWiseQIFPortfolioPayeeLine
659 extends MoneyWiseQIFPayeeLine<MoneyWiseQPortfolioLineType> {
660
661
662
663
664
665 protected MoneyWiseQIFPortfolioPayeeLine(final MoneyWiseQIFPayee pPayee) {
666
667 super(pPayee);
668 }
669
670 @Override
671 public MoneyWiseQPortfolioLineType getLineType() {
672 return MoneyWiseQPortfolioLineType.PAYEE;
673 }
674 }
675
676
677
678
679 public static class MoneyWiseQIFPortfolioPayeeDescLine
680 extends MoneyWiseQIFStringLine<MoneyWiseQPortfolioLineType> {
681
682
683
684
685
686 protected MoneyWiseQIFPortfolioPayeeDescLine(final String pPayee) {
687
688 super(pPayee);
689 }
690
691 @Override
692 public MoneyWiseQPortfolioLineType getLineType() {
693 return MoneyWiseQPortfolioLineType.PAYEE;
694 }
695 }
696
697
698
699
700 public static class MoneyWiseQIFPortfolioAccountLine
701 extends MoneyWiseQIFXferAccountLine<MoneyWiseQPortfolioLineType> {
702
703
704
705
706
707 protected MoneyWiseQIFPortfolioAccountLine(final MoneyWiseQIFAccount pAccount) {
708
709 super(pAccount);
710 }
711
712
713
714
715
716
717
718 protected MoneyWiseQIFPortfolioAccountLine(final MoneyWiseQIFAccount pAccount,
719 final List<MoneyWiseQIFClass> pClasses) {
720
721 super(pAccount, pClasses);
722 }
723
724 @Override
725 public MoneyWiseQPortfolioLineType getLineType() {
726 return MoneyWiseQPortfolioLineType.XFERACCOUNT;
727 }
728 }
729
730
731
732
733 public static class MoneyWiseQIFPortfolioCategoryLine
734 extends MoneyWiseQIFCategoryLine<MoneyWiseQPortfolioLineType> {
735
736
737
738
739
740 protected MoneyWiseQIFPortfolioCategoryLine(final MoneyWiseQIFEventCategory pCategory) {
741
742 super(pCategory);
743 }
744
745
746
747
748
749
750
751 protected MoneyWiseQIFPortfolioCategoryLine(final MoneyWiseQIFEventCategory pCategory,
752 final List<MoneyWiseQIFClass> pClasses) {
753
754 super(pCategory, pClasses);
755 }
756
757 @Override
758 public MoneyWiseQPortfolioLineType getLineType() {
759 return MoneyWiseQPortfolioLineType.XFERACCOUNT;
760 }
761 }
762
763
764
765
766 public static class MoneyWiseQIFPortfolioCategoryAccountLine
767 extends MoneyWiseQIFCategoryAccountLine<MoneyWiseQPortfolioLineType> {
768
769
770
771
772
773
774 protected MoneyWiseQIFPortfolioCategoryAccountLine(final MoneyWiseQIFEventCategory pCategory,
775 final MoneyWiseQIFAccount pAccount) {
776
777 super(pCategory, pAccount);
778 }
779
780
781
782
783
784
785
786
787 protected MoneyWiseQIFPortfolioCategoryAccountLine(final MoneyWiseQIFEventCategory pCategory,
788 final MoneyWiseQIFAccount pAccount,
789 final List<MoneyWiseQIFClass> pClasses) {
790
791 super(pCategory, pAccount, pClasses);
792 }
793
794 @Override
795 public MoneyWiseQPortfolioLineType getLineType() {
796 return MoneyWiseQPortfolioLineType.XFERACCOUNT;
797 }
798 }
799
800
801
802
803 public static class MoneyWiseQIFPortfolioXferAmountLine
804 extends MoneyWiseQIFMoneyLine<MoneyWiseQPortfolioLineType> {
805
806
807
808
809
810 protected MoneyWiseQIFPortfolioXferAmountLine(final OceanusMoney pAmount) {
811
812 super(pAmount);
813 }
814
815 @Override
816 public MoneyWiseQPortfolioLineType getLineType() {
817 return MoneyWiseQPortfolioLineType.XFERAMOUNT;
818 }
819
820
821
822
823
824
825 public OceanusMoney getAmount() {
826 return getMoney();
827 }
828 }
829 }