1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
StoreDocumentProductPositionRepository.php
См. документацию.
1<?php
2
4
12
22{
23 protected const PRODUCT_PRICE_TYPE = 'PURCHASING_PRICE';
24
26 private static $instance;
27
28 private array $documentProductPositionListCollection = [];
29 private int $catalogId;
30
35 {
36 if (is_null(static::$instance))
37 {
38 static::$instance = new static();
39 }
40
41 return static::$instance;
42 }
43
51 public function getList(int $documentId, int $limit = 10): array
52 {
53 $productPositionList = $this->fetchDocumentProductPositionList($documentId);
54 return array_slice($productPositionList, 0, $limit);
55 }
56
63 public function getCount(int $documentId): int
64 {
65 return count($this->fetchDocumentProductPositionList($documentId));
66 }
67
68
69 private function fetchDocumentProductPositionList(int $documentId): array
70 {
71 if (!Loader::includeModule('sale'))
72 {
73 return [];
74 }
75
76 if (!empty($this->documentProductPositionListCollection[$documentId]))
77 {
78 return $this->documentProductPositionListCollection[$documentId];
79 }
80
81 $documentProductListData = \CCatalogStoreDocsElement::getList(
82 [
83 'ID' => 'ASC',
84 ],
85 [
86 '=DOC_ID' => $documentId,
87 ],
88 false,
89 false,
90 [
91 'ID',
92 'ELEMENT_ID',
93 'ELEMENT_NAME',
94 'AMOUNT',
95 'PURCHASING_PRICE',
96 'BASE_PRICE',
97 ]
98 );
99
100 $documentProductList = [];
101 while ($product = $documentProductListData->Fetch())
102 {
103 unset($product['ID']);
104 $product['ELEMENT_ID'] = (int)$product['ELEMENT_ID'];
105 $documentProductList[] = $this->formProductPositionData($product);
106 }
107 unset(
108 $product,
109 $documentProductListData,
110 );
111
112 $this->documentProductPositionListCollection[$documentId] = $documentProductList;
113 return $documentProductList;
114 }
115
116 private function formProductPositionData(array $product): array
117 {
118 $productPositionData = [
119 'PRODUCT_NAME' => $product['ELEMENT_NAME'],
120 'SUM' => PriceMaths::roundPrecision((float)$product[self::PRODUCT_PRICE_TYPE] * (float)$product['AMOUNT']),
121 ];
122
123 $productId = $product['ELEMENT_ID'];
124 $productVariation = ServiceContainer::getRepositoryFacade()->loadVariation($product['ELEMENT_ID']);
125 if ($productVariation)
126 {
127 $image = $productVariation->getFrontImageCollection()->getFrontImage();
128 $productPositionData['PHOTO_URL'] = $image ? $image->getSource() : null;
129 $productPositionData['VARIATION_INFO'] = PropertyValue::getSkuPropertyDisplayValues($productVariation);
130
131 if (!State::isProductCardSliderEnabled())
132 {
133 $productId = $productVariation->getParent() ? $productVariation->getParent()->getId() : $productId;
134 }
135 }
136
137 $productPositionData['URL'] = $this->buildPositionUrl($productId);
138
139 return $productPositionData;
140 }
141
142 private function buildPositionUrl(int $productId): string
143 {
144 $urlBuilder = BuilderManager::getInstance()->getBuilder(InventoryBuilder::TYPE_ID);
145 if ($urlBuilder)
146 {
147 $urlBuilder->setIblockId($this->getCatalogId());
148 return $urlBuilder->getElementDetailUrl($productId);
149 }
150
151 return '';
152 }
153
154 private function getCatalogId(): int
155 {
156 if (!isset($this->catalogId))
157 {
158 $this->catalogId = 0;
159 if (\Bitrix\Main\Loader::includeModule('crm'))
160 {
161 $this->catalogId = \Bitrix\Crm\Product\Catalog::getDefaultId() ?? 0;
162 }
163 }
164
165 return $this->catalogId;
166 }
167}
static getSkuPropertyDisplayValues(BaseSku $sku)
Определения PropertyValue.php:23
Определения loader.php:13
static includeModule($moduleName)
Определения loader.php:67
static roundPrecision($value)
Определения pricemaths.php:16
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936