21 private const DOCUMENT_STATUS_ALLOWED = 0;
22 private const DOCUMENT_STATUS_CONDUCT = -1;
23 private const DOCUMENT_STATUS_ABSENT = -2;
31 return [
'DOCUMENT_ELEMENT' => $this->getViewFields()];
40 $documentId = (int)(
$fields[
'DOC_ID'] ?? 0);
43 $this->setDocumentNotFoundError();
48 $documentFields = $this->getDocumentFields($documentId);
51 $this->setDocumentNotFoundError();
55 elseif (!$this->checkDocumentAccess(ActionDictionary::ACTION_STORE_DOCUMENT_MODIFY, $documentFields))
64 switch ($this->getDocumentStatusById($documentId))
66 case self::DOCUMENT_STATUS_ALLOWED:
67 $addResult = CCatalogStoreDocsElement::add(
$fields);
70 return [
'DOCUMENT_ELEMENT' => $this->
get($addResult)];
73 $this->
addError(
new Error(
'Error of adding new document element'));
76 case self::DOCUMENT_STATUS_CONDUCT:
77 $this->setDocumentConductError();
81 $this->setDocumentNotFoundError();
98 $this->setDocumentNotFoundError();
102 elseif (!$this->checkDocumentAccess(ActionDictionary::ACTION_STORE_DOCUMENT_MODIFY, $documentFields))
111 switch ($this->getDocumentStatusByElementId($id))
113 case self::DOCUMENT_STATUS_ALLOWED:
118 return [
'DOCUMENT_ELEMENT' => $this->
get($id)];
121 $this->
addError(
new Error(
'Error of modifying new document'));
124 case self::DOCUMENT_STATUS_CONDUCT:
125 $this->setDocumentConductError();
129 $this->setDocumentNotFoundError();
143 if (!$documentFields)
145 $this->setDocumentNotFoundError();
149 elseif (!$this->checkDocumentAccess(ActionDictionary::ACTION_STORE_DOCUMENT_MODIFY, $documentFields))
153 elseif (!$this->checkStoresAccess($id))
158 switch ($this->getDocumentStatusByElementId($id))
160 case self::DOCUMENT_STATUS_ALLOWED:
161 $result = CCatalogStoreDocsElement::delete($id);
170 case self::DOCUMENT_STATUS_CONDUCT:
171 $this->setDocumentConductError();
175 $this->setDocumentNotFoundError();
195 bool $__calculateTotalCount =
true
200 $accessFilter = AccessController::getCurrent()->getEntityFilter(
201 ActionDictionary::ACTION_STORE_DOCUMENT_VIEW,
227 return [$this->getViewFields()];
233 parent::getDefaultPreFilters(),
245 return new \Bitrix\Catalog\StoreDocumentElementTable();
255 if (!AccessController::getCurrent()->check(Controller::CATALOG_STORE))
257 $r->addError(
new Error(
258 Controller::ERROR_ACCESS_DENIED,
259 'ERROR_DOCUMENT_RIGHTS'
271 !AccessController::getCurrent()->check(Controller::CATALOG_STORE)
272 && !AccessController::getCurrent()->check(Controller::CATALOG_READ)
275 $r->addError(
new Error(
276 Controller::ERROR_ACCESS_DENIED,
277 'ERROR_DOCUMENT_RIGHTS'
292 if (
$name ===
'fields')
294 return $this->checkGetFieldsPermissionEntity();
297 return parent::checkPermissionEntity(
$name, $arguments);
300 private function getDocumentStatusById(
int $documentId): int
302 return $this->getDocumentStatus(
303 $this->getDocumentFields($documentId)
307 private function getDocumentFields(
int $documentId): ?
array
316 '=ID' => $documentId,
321 private function getDocumentStatusByElementId(
int $elementId): int
323 return $this->getDocumentStatus(
332 'STORE_DOCUMENT_ID' =>
'DOC_ID',
333 'STATUS' =>
'DOCUMENT.STATUS',
334 'DOC_TYPE' =>
'DOCUMENT.DOC_TYPE',
342 $row[
'ID'] = $row[
'STORE_DOCUMENT_ID'];
343 unset($row[
'STORE_DOCUMENT_ID']);
349 private function getDocumentStatus($row): int
351 if (empty($row) || !is_array($row))
353 return self::DOCUMENT_STATUS_ABSENT;
356 $documentTypes = Catalog\Controller\Document::getAvailableRestDocumentTypes();
357 if (!isset($documentTypes[$row[
'DOC_TYPE']]))
359 return self::DOCUMENT_STATUS_ABSENT;
362 return ($row[
'STATUS'] ===
'N'
363 ? self::DOCUMENT_STATUS_ALLOWED
364 : self::DOCUMENT_STATUS_CONDUCT
368 private function setDocumentRightsError(): void
371 Controller::ERROR_ACCESS_DENIED,
372 'ERROR_DOCUMENT_RIGHTS'
376 private function setDocumentNotFoundError(): void
379 'Document not found',
380 'ERROR_DOCUMENT_STATUS'
384 private function setDocumentConductError(): void
387 'Conducted document',
388 'ERROR_DOCUMENT_STATUS'
400 private function checkDocumentAccess(
string $action,
array $documentFields): bool
402 $can = AccessController::getCurrent()->check(
404 StoreDocument::createFromArray($documentFields)
408 $this->setDocumentRightsError();
424 private function checkStoresAccess(
int $id,
array $fields = []): bool
428 $can = AccessController::getCurrent()->check(
429 ActionDictionary::ACTION_STORE_VIEW,
430 StoreDocumentElement::createFromArray(
$fields)
434 $this->setDocumentRightsError();
static getRow(array $parameters)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)