|
|
@@ -28,19 +28,22 @@ readonly class PortfolioManager
|
|
28
|
28
|
if ($portfolio) {
|
|
29
|
29
|
$this->logger->debug("Found existing portfolio with id: " . $portfolio->getId() . ', skipped..');
|
|
30
|
30
|
return false;
|
|
31
|
|
- } else {
|
|
32
|
|
- $newPortfolio = $this->savePortfolio($parsedPortfolio, $xmlString);
|
|
33
|
|
- $this->logger->debug("Saved new portfolio with id: " . $newPortfolio->getId());
|
|
34
|
|
- return true;
|
|
35
|
31
|
}
|
|
|
32
|
+
|
|
|
33
|
+ $newPortfolio = $this->savePortfolio($parsedPortfolio, $xmlString, $startDate, $endDate);
|
|
|
34
|
+ $this->logger->debug("Saved new portfolio with id: " . $newPortfolio->getId());
|
|
|
35
|
+
|
|
|
36
|
+ return true;
|
|
36
|
37
|
}
|
|
37
|
38
|
|
|
38
|
|
- private function savePortfolio(ParsedPortfolio $parsedPortfolio, string $xmlString): Portfolio
|
|
39
|
|
- {
|
|
|
39
|
+ private function savePortfolio(
|
|
|
40
|
+ ParsedPortfolio $parsedPortfolio,
|
|
|
41
|
+ string $xmlString,
|
|
|
42
|
+ \DateTime $startDate,
|
|
|
43
|
+ \DateTime $endDate,
|
|
|
44
|
+ ): Portfolio {
|
|
40
|
45
|
$this->logger->debug(print_r($parsedPortfolio, true));
|
|
41
|
46
|
|
|
42
|
|
- list($startDate, $endDate) = $parsedPortfolio->extractPeriod();
|
|
43
|
|
-
|
|
44
|
47
|
$portfolio = new Portfolio();
|
|
45
|
48
|
|
|
46
|
49
|
$portfolio->setClientAgreement($parsedPortfolio->getHeader()['Клиент']);
|
|
|
@@ -48,39 +51,41 @@ readonly class PortfolioManager
|
|
48
|
51
|
$portfolio->setEndDate(new \DateTimeImmutable($endDate->format('Y-m-d')));
|
|
49
|
52
|
$portfolio->setXmlData($xmlString);
|
|
50
|
53
|
|
|
51
|
|
- $this->entityManager->persist($portfolio);
|
|
52
|
|
-
|
|
53
|
|
- foreach ($parsedPortfolio->getDetails() as $parsedDetail) {
|
|
54
|
|
- $detail = new PortfolioDetail();
|
|
55
|
|
-
|
|
56
|
|
- $detail->setPortfolio($portfolio);
|
|
57
|
|
- $detail->setIssuer($parsedDetail['Эмитент']);
|
|
58
|
|
- $detail->setSecurity($parsedDetail['ЦБ']);
|
|
59
|
|
- $detail->setPriceStart($parsedDetail['НОЦена']);
|
|
60
|
|
- $detail->setPriceEnd($parsedDetail['КОЦена']);
|
|
61
|
|
- $detail->setQuantityStart($parsedDetail['КоличествоНО']);
|
|
62
|
|
- $detail->setQuantityEnd($parsedDetail['КоличествоКО']);
|
|
63
|
|
- $detail->setSumStart($parsedDetail['СуммаНКДНО']);
|
|
64
|
|
- $detail->setSumEnd($parsedDetail['СуммаНКДКО']);
|
|
65
|
|
-
|
|
66
|
|
- $this->entityManager->persist($detail);
|
|
67
|
|
- }
|
|
68
|
|
-
|
|
69
|
|
- foreach ($parsedPortfolio->getMovements() as $parsedMovement) {
|
|
70
|
|
- $movement = new PortfolioMovement();
|
|
71
|
|
-
|
|
72
|
|
- $movement->setPortfolio($portfolio);
|
|
73
|
|
- $movement->setSecurity($parsedMovement['ЦБ']);
|
|
74
|
|
- $movement->setPeriod(new \DateTimeImmutable($parsedMovement['Период']));
|
|
75
|
|
- $movement->setQuantityStart($parsedMovement['НО']);
|
|
76
|
|
- $movement->setQuantityEnd($parsedMovement['КО']);
|
|
77
|
|
- $movement->setQuantityIncome($parsedMovement['Приход']);
|
|
78
|
|
- $movement->setQuantityOutcome($parsedMovement['Расход']);
|
|
79
|
|
-
|
|
80
|
|
- $this->entityManager->persist($movement);
|
|
81
|
|
- }
|
|
82
|
|
-
|
|
83
|
|
- $this->entityManager->flush();
|
|
|
54
|
+ $this->entityManager->wrapInTransaction(function () use ($parsedPortfolio, $portfolio): void {
|
|
|
55
|
+ $this->entityManager->persist($portfolio);
|
|
|
56
|
+
|
|
|
57
|
+ foreach ($parsedPortfolio->getDetails() as $parsedDetail) {
|
|
|
58
|
+ $detail = new PortfolioDetail();
|
|
|
59
|
+
|
|
|
60
|
+ $detail->setPortfolio($portfolio);
|
|
|
61
|
+ $detail->setIssuer($parsedDetail['Эмитент']);
|
|
|
62
|
+ $detail->setSecurity($parsedDetail['ЦБ']);
|
|
|
63
|
+ $detail->setPriceStart($parsedDetail['НОЦена']);
|
|
|
64
|
+ $detail->setPriceEnd($parsedDetail['КОЦена']);
|
|
|
65
|
+ $detail->setQuantityStart($parsedDetail['КоличествоНО']);
|
|
|
66
|
+ $detail->setQuantityEnd($parsedDetail['КоличествоКО']);
|
|
|
67
|
+ $detail->setSumStart($parsedDetail['СуммаНКДНО']);
|
|
|
68
|
+ $detail->setSumEnd($parsedDetail['СуммаНКДКО']);
|
|
|
69
|
+
|
|
|
70
|
+ $this->entityManager->persist($detail);
|
|
|
71
|
+ }
|
|
|
72
|
+
|
|
|
73
|
+ foreach ($parsedPortfolio->getMovements() as $parsedMovement) {
|
|
|
74
|
+ $movement = new PortfolioMovement();
|
|
|
75
|
+
|
|
|
76
|
+ $movement->setPortfolio($portfolio);
|
|
|
77
|
+ $movement->setSecurity($parsedMovement['ЦБ']);
|
|
|
78
|
+ $movement->setPeriod(new \DateTimeImmutable($parsedMovement['Период']));
|
|
|
79
|
+ $movement->setQuantityStart($parsedMovement['НО']);
|
|
|
80
|
+ $movement->setQuantityEnd($parsedMovement['КО']);
|
|
|
81
|
+ $movement->setQuantityIncome($parsedMovement['Приход']);
|
|
|
82
|
+ $movement->setQuantityOutcome($parsedMovement['Расход']);
|
|
|
83
|
+
|
|
|
84
|
+ $this->entityManager->persist($movement);
|
|
|
85
|
+ }
|
|
|
86
|
+
|
|
|
87
|
+ $this->entityManager->flush();
|
|
|
88
|
+ });
|
|
84
|
89
|
|
|
85
|
90
|
return $portfolio;
|
|
86
|
91
|
}
|