1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
store_docs.php
См. документацию.
1<?php
2
7
8require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/catalog/general/store_docs.php");
9
11{
17 public static function add($arFields)
18 {
19 global $DB;
21
22 foreach (GetModuleEvents("catalog", "OnBeforeDocumentAdd", true) as $arEvent)
23 {
24 if (ExecuteModuleEventEx($arEvent, [&$arFields]) === false)
25 {
26 return false;
27 }
28 }
29
30 if (array_key_exists('DATE_CREATE', $arFields))
31 {
32 unset($arFields['DATE_CREATE']);
33 }
34 if (array_key_exists('DATE_MODIFY', $arFields))
35 {
36 unset($arFields['DATE_MODIFY']);
37 }
38
39 $arFields['~DATE_MODIFY'] = $DB->GetNowFunction();
40 $arFields['~DATE_CREATE'] = $DB->GetNowFunction();
41
42 $arFields['WAS_CANCELLED'] = 'N';
43
44 if (!self::checkFields('ADD', $arFields))
45 {
46 return false;
47 }
48
49 if (!static::checkRequiredFields($arFields, $arFields['DOC_TYPE']))
50 {
51 return false;
52 }
53
54 self::increaseDocumentTypeNumber($arFields['DOC_TYPE']);
55 if (empty($arFields['TITLE']))
56 {
57 $arFields['TITLE'] = self::getCurrentDocumentNameByNumber($arFields['DOC_TYPE']);
58 }
59
60 $arInsert = $DB->PrepareInsert("b_catalog_store_docs", $arFields);
61
62 $strSql = "INSERT INTO b_catalog_store_docs (".$arInsert[0].") VALUES(".$arInsert[1].")";
63
64 $res = $DB->Query($strSql);
65 if (!$res)
66 {
67 return false;
68 }
69 $lastId = (int)$DB->LastID();
70
71 $typeTableClass = StoreDocumentTableManager::getTableClassByType($arFields['DOC_TYPE']);
72 if ($typeTableClass)
73 {
74 $USER_FIELD_MANAGER->Update($typeTableClass::getUfId(), $lastId, $arFields);
75 }
76
77 $item = [
78 'id' => $lastId,
79 'data' => [
80 'fields' => $arFields,
81 ],
82 ];
83
84 PullManager::getInstance()->sendDocumentAddedEvent([
85 $item
86 ]);
87
88 if (isset($arFields["ELEMENT"]) && is_array($arFields["ELEMENT"]))
89 {
90 self::saveElements($lastId, $arFields['ELEMENT']);
91 }
92
93 if (isset($arFields["DOCUMENT_FILES"]) && is_array($arFields["DOCUMENT_FILES"]))
94 {
95 static::saveFiles($lastId, $arFields['DOCUMENT_FILES']);
96 }
97
98 foreach (GetModuleEvents("catalog", "OnDocumentAdd", true) as $arEvent)
99 {
101 }
102
103 return $lastId;
104 }
105
106 private static function saveElements($documentID, $elements)
107 {
108 foreach($elements as $arElement)
109 {
110 $lastDocElementId = 0;
111 if(isset($arElement['ID']))
112 {
113 unset($arElement['ID']);
114 }
115 $arElement['DOC_ID'] = $documentID;
116 if (is_array($arElement))
117 {
118 $lastDocElementId = CCatalogStoreDocsElement::add($arElement);
119 }
120 if(isset($arElement['BARCODE']) && $lastDocElementId && is_array($arElement['BARCODE']))
121 {
122 foreach($arElement['BARCODE'] as $barcode)
123 {
125 'DOC_ID' => $documentID,
126 'DOC_ELEMENT_ID' => $lastDocElementId,
127 'BARCODE' => $barcode,
128 ]);
129 }
130 }
131 }
132 }
133
134 public static function getList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
135 {
136 global $DB;
137 if (empty($arSelectFields))
138 $arSelectFields = array("ID", "DOC_TYPE", "SITE_ID", "CONTRACTOR_ID", "CURRENCY", "STATUS", "DATE_DOCUMENT", "TOTAL", "DATE_STATUS", "COMMENTARY");
139
141 "ID" => array("FIELD" => "CD.ID", "TYPE" => "int"),
142 "DOC_TYPE" => array("FIELD" => "CD.DOC_TYPE", "TYPE" => "char"),
143 "SITE_ID" => array("FIELD" => "CD.SITE_ID", "TYPE" => "string"),
144 "CURRENCY" => array("FIELD" => "CD.CURRENCY", "TYPE" => "string"),
145 "CONTRACTOR_ID" => array("FIELD" => "CD.CONTRACTOR_ID", "TYPE" => "int"),
146 "DATE_CREATE" => array("FIELD" => "CD.DATE_CREATE", "TYPE" => "datetime"),
147 "DATE_MODIFY" => array("FIELD" => "CD.DATE_MODIFY", "TYPE" => "datetime"),
148 "DATE_DOCUMENT" => array("FIELD" => "CD.DATE_DOCUMENT", "TYPE" => "datetime"),
149 "DATE_STATUS" => array("FIELD" => "CD.DATE_STATUS", "TYPE" => "datetime"),
150 "CREATED_BY" => array("FIELD" => "CD.CREATED_BY", "TYPE" => "int"),
151 "MODIFIED_BY" => array("FIELD" => "CD.MODIFIED_BY", "TYPE" => "int"),
152 "RESPONSIBLE_ID" => array("FIELD" => "CD.RESPONSIBLE_ID", "TYPE" => "int"),
153 "STATUS_BY" => array("FIELD" => "CD.STATUS_BY", "TYPE" => "int"),
154 "STATUS" => array("FIELD" => "CD.STATUS", "TYPE" => "char"),
155 "TOTAL" => array("FIELD" => "CD.TOTAL", "TYPE" => "double"),
156 "COMMENTARY" => array("FIELD" => "CD.COMMENTARY", "TYPE" => "string"),
157 'TITLE' => ['FIELD' => 'CD.TITLE', 'TYPE' => 'string'],
158 'ITEMS_ORDER_DATE' => ['FIELD' => 'CD.ITEMS_ORDER_DATE', 'TYPE' => 'datetime'],
159 'ITEMS_RECEIVED_DATE' => ['FIELD' => 'CD.ITEMS_RECEIVED_DATE', 'TYPE' => 'datetime'],
160 'DOC_NUMBER' => ['FIELD' => 'CD.DOC_NUMBER', 'TYPE' => 'string'],
161 'WAS_CANCELLED' => ['FIELD' => 'CD.WAS_CANCELLED', 'TYPE' => 'char'],
162
163 "PRODUCTS_ID" => array("FIELD" => "DE.ID", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
164 "PRODUCTS_DOC_ID" => array("FIELD" => "DE.DOC_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
165 "PRODUCTS_STORE_FROM" => array("FIELD" => "DE.STORE_FROM", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
166 "PRODUCTS_STORE_TO" => array("FIELD" => "DE.STORE_TO", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
167 "PRODUCTS_ELEMENT_ID" => array("FIELD" => "DE.ELEMENT_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
168 "PRODUCTS_AMOUNT" => array("FIELD" => "DE.AMOUNT", "TYPE" => "double", "FROM" => "INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
169 "PRODUCTS_PURCHASING_PRICE" => array("FIELD" => "DE.PURCHASING_PRICE", "TYPE" => "double", "FROM" => "INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
170 );
171 $arSqls = CCatalog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
172 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
173
174 if (empty($arGroupBy) && is_array($arGroupBy))
175 {
176 $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_store_docs CD ".$arSqls["FROM"];
177 if (!empty($arSqls["WHERE"]))
178 $strSql .= " WHERE ".$arSqls["WHERE"];
179 if (!empty($arSqls["GROUPBY"]))
180 $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
181
182 $dbRes = $DB->Query($strSql);
183 if ($arRes = $dbRes->Fetch())
184 return $arRes["CNT"];
185 else
186 return false;
187 }
188
189 $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_store_docs CD ".$arSqls["FROM"];
190 if (!empty($arSqls["WHERE"]))
191 $strSql .= " WHERE ".$arSqls["WHERE"];
192 if (!empty($arSqls["GROUPBY"]))
193 $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
194 if (!empty($arSqls["ORDERBY"]))
195 $strSql .= " ORDER BY ".$arSqls["ORDERBY"];
196
197 $intTopCount = 0;
198 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
199 if ($boolNavStartParams && array_key_exists('nTopCount', $arNavStartParams))
200 {
201 $intTopCount = intval($arNavStartParams["nTopCount"]);
202 }
203 if ($boolNavStartParams && 0 >= $intTopCount)
204 {
205 $strSql_tmp = "SELECT COUNT('x') as CNT FROM b_catalog_store_docs CD ".$arSqls["FROM"];
206 if (!empty($arSqls["WHERE"]))
207 $strSql_tmp .= " WHERE ".$arSqls["WHERE"];
208 if (!empty($arSqls["GROUPBY"]))
209 $strSql_tmp .= " GROUP BY ".$arSqls["GROUPBY"];
210
211 $dbRes = $DB->Query($strSql_tmp);
212 $cnt = 0;
213 if (empty($arSqls["GROUPBY"]))
214 {
215 if ($arRes = $dbRes->Fetch())
216 $cnt = $arRes["CNT"];
217 }
218 else
219 {
220 $cnt = $dbRes->SelectedRowsCount();
221 }
222
223 $dbRes = new CDBResult();
224
225 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
226 }
227 else
228 {
229 if ($boolNavStartParams && 0 < $intTopCount)
230 {
231 $strSql .= " LIMIT ".$intTopCount;
232 }
233 $dbRes = $DB->Query($strSql);
234 }
235
236 return $dbRes;
237 }
238
239 private static function increaseDocumentTypeNumber(string $type): void
240 {
241 $name = self::getDocumentTypeNumberName($type);
242 $value = (int)Option::get('catalog', $name) + 1;
243 Option::set('catalog', $name, $value);
244 }
245
246 public static function getCurrentDocumentNameByNumber(string $type): string
247 {
248 $value = Option::get(
249 'catalog',
250 self::getDocumentTypeNumberName($type)
251 );
252 return Loc::getMessage(
253 'CATALOG_STORE_DOCUMENT_TITLE_DEFAULT_NAME_' . $type,
254 [
255 '%DOCUMENT_NUMBER%' => $value,
256 ]
257 );
258 }
259
260 public static function getNextDocumentNameByNumber(string $type): string
261 {
262 $value = (int)Option::get(
263 'catalog',
264 self::getDocumentTypeNumberName($type)
265 ) + 1;
266 return Loc::getMessage(
267 'CATALOG_STORE_DOCUMENT_TITLE_DEFAULT_NAME_' . $type,
268 [
269 '%DOCUMENT_NUMBER%' => $value,
270 ]
271 );
272 }
273
274 private static function getDocumentTypeNumberName(string $type): string
275 {
276 return 'store_document_numbers_' . $type;
277 }
278}
$type
Определения options.php:106
Определения store_docs.php:14
static PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
Определения catalog.php:389
Определения store_docs.php:11
static getList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения store_docs.php:134
static getNextDocumentNameByNumber(string $type)
Определения store_docs.php:260
static getCurrentDocumentNameByNumber(string $type)
Определения store_docs.php:246
static add($arFields)
Определения store_docs.php:17
static add($arFields)
Определения store_docs_barcode.php:7
static add($arFields)
Определения store_docs_element.php:7
Определения dbresult.php:88
if(!\Bitrix\Main\Loader::includeModule('clouds')) $lastId
Определения sync.php:68
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
global $USER_FIELD_MANAGER
Определения attempt.php:6
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
$name
Определения menu_edit.php:35
$arRes
Определения options.php:104
$arFilter
Определения user_search.php:106
$dbRes
Определения yandex_detail.php:168