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