{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"tessa.tessa.platform\"","webpack:///external \"tessa.tessa.cards\"","webpack:///external \"tessa.tessa.ui\"","webpack:///external \"tessa.tessa.cards.service\"","webpack:///./src/cdScripts/Helpers/CdCardTypes.ts","webpack:///external \"tessa.tessa.extensions\"","webpack:///./src/cdScripts/UI/CdUIHelper.ts","webpack:///./src/cdScripts/Helpers/CdDocStates.ts","webpack:///./src/pkScripts/Helpers/PkCardTypes.ts","webpack:///external \"tessa.tessa.platform.validation\"","webpack:///./src/cdScripts/Helpers/CdCommonHelper.ts","webpack:///external \"tessa.tessa.ui.cards.controls\"","webpack:///external \"tessa.tessa.ui.tiles\"","webpack:///external \"tessa.tessa.ui.cards\"","webpack:///./src/pkScripts/Helpers/PkRequestTypes.ts","webpack:///external \"tessa.tessa.ui.uiHost\"","webpack:///./src/cdScripts/Helpers/CdRequestTypes.ts","webpack:///external \"tessa.common.utility\"","webpack:///./src/pkScripts/Helpers/ChFileCategories.ts","webpack:///./src/pkScripts/Helpers/PkCommonHelper.ts","webpack:///external \"tessa.tessa.files\"","webpack:///external \"tessa.tessa.views.metadata\"","webpack:///external \"tessa.tessa.views\"","webpack:///./node_modules/util/util.js","webpack:///./src/cdScripts/Helpers/CdFdProcessHelper.ts","webpack:///external \"mobx\"","webpack:///./src/cdScripts/Helpers/CdFdTaskTypes.ts","webpack:///external \"tessa.tessa\"","webpack:///./src/pkScripts/Helpers/PkClientHelper.ts","webpack:///./src/cdScripts/Helpers/CdTaskTypes.ts","webpack:///./src/comfortScripts/helpers/ComfortCardTypes.ts","webpack:///./src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper.ts","webpack:///./src/pkScripts/Helpers/ChRequestTypes.ts","webpack:///./src/pkScripts/Helpers/ChTaskTypes.ts","webpack:///./src/cdScripts/Helpers/CdFileTypes.ts","webpack:///external \"tessa.tessa.ui.views.content\"","webpack:///external \"React\"","webpack:///external \"tessa.tessa.ui.files\"","webpack:///./src/cdScripts/Helpers/Dictionaries/ApproversRoleID.ts","webpack:///./src/cdScripts/Helpers/CdCardFlagsInfo.ts","webpack:///./src/cdScripts/Helpers/CdDssCspType.ts","webpack:///./src/pkScripts/Helpers/PkOutgoingKinds.ts","webpack:///external \"tessa.tessa.cards.extensions\"","webpack:///./src/cdScripts/Helpers/Cards/CdRequestForMaterialsSharedHelper.ts","webpack:///./src/cdScripts/Helpers/CdEDSHelper.ts","webpack:///external \"tessa.tessa.workflow\"","webpack:///external \"tessa.tessa.ui.cards.tasks\"","webpack:///./src/cdScripts/Helpers/CdProcessHelper.ts","webpack:///./src/cdScripts/Helpers/CdCardHelper.ts","webpack:///./src/cdScripts/Helpers/CdDSSHelper.ts","webpack:///external \"tessa.ui\"","webpack:///./src/pkScripts/Helpers/Enums/DocumentSections.ts","webpack:///external \"tessa.tessa.ui.views.extensions\"","webpack:///./src/comfortScripts/helpers/ECMRequestTypes.ts","webpack:///./src/cdScripts/Helpers/CdExecutiveSchemeTypes.ts","webpack:///./node_modules/prop-types/index.js","webpack:///./src/pkScripts/Views/PkMatrixWorkplaceHelper.ts","webpack:///external \"tessa.tessa.localization\"","webpack:///external \"tessa.tessa.ui.views\"","webpack:///external \"mobxReact\"","webpack:///./src/cdScripts/Helpers/Cards/CdExecutiveSchemeSharedHelper.ts","webpack:///./src/cdScripts/Helpers/Cards/CdTechnicalDocumentationClientHelper.ts","webpack:///./src/cdScripts/Helpers/CdRdStages.ts","webpack:///./src/pkScripts/Helpers/ChContextRoles.ts","webpack:///./src/cdScripts/Helpers/CdExtensionHelper.ts","webpack:///./src/cdScripts/Helpers/CdApprovalListHelper.ts","webpack:///external \"Moment\"","webpack:///./src/cdScripts/Helpers/CdStaticRoles.ts","webpack:///./src/cdScripts/Helpers/DefaultCompletionOptions.ts","webpack:///external \"tessa.common.utility.userSession\"","webpack:///./src/cdScripts/Helpers/CdRdListHelper.ts","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/file-dialog/file-dialog.min.js","webpack:///external \"tessa.tessa.views.workplaces\"","webpack:///external \"tessa.common.cards\"","webpack:///external \"tessa.tessa.platform.storage\"","webpack:///external \"tessa.tessa.cards.service.cardRequest\"","webpack:///external \"tessa.tessa.cards.service.cardService\"","webpack:///external \"tessa.tessa.ui.cards.forms\"","webpack:///external \"tessa.tessa.cards.types\"","webpack:///external \"tessa.tessa.ui.views.workplaces.tree\"","webpack:///./src/pkScripts/Helpers/ChCardFlagsInfo.ts","webpack:///./src/pkScripts/Helpers/ChProcessHelper.ts","webpack:///./src/pkScripts/Helpers/PkIncomingKinds.ts","webpack:///./src/pkScripts/helpers/PkSettingsCardSingletones.ts","webpack:///./src/pkScripts/Helpers/ChStaticRoles.ts","webpack:///./src/pkScripts/Helpers/ChMetaRoles.ts","webpack:///./src/pkScripts/Tiles/ChChanceryTileExtension.ts","webpack:///./src/pkScripts/Helpers/PkFileTypes.ts","webpack:///./src/pkScripts/Helpers/PkExportToCsv.ts","webpack:///./src/pkScripts/Tiles/PkCardTileExtension.ts","webpack:///./src/pkScripts/Tiles/PkDeleteTileOfViewExtension.ts","webpack:///./src/pkScripts/Helpers/PkPrimaryDocsHelper.ts","webpack:///./src/pkScripts/Helpers/PkRoleCalculationType.ts","webpack:///./src/pkScripts/Helpers/PkTaskTypes.ts","webpack:///./src/pkScripts/Helpers/PkFdProcessHelper.ts","webpack:///./src/pkScripts/Helpers/CdClassHelper.ts","webpack:///./src/pkScripts/Helpers/PkSigningTypes.ts","webpack:///./src/pkScripts/Helpers/ArCompleteOptions.ts","webpack:///./src/pkScripts/Helpers/PkEnums.ts","webpack:///./src/pkScripts/Helpers/PkCardHelper.ts","webpack:///./src/pkScripts/Helpers/PkMemoKinds.ts","webpack:///./src/pkScripts/Helpers/ArDiadocDocumentKindsEnum.ts","webpack:///./src/pkScripts/Helpers/PkLetterCreditKinds.ts","webpack:///./src/pkScripts/helpers/PkOutgoingKinds.ts","webpack:///./src/pkScripts/Helpers/PkMemoNomenclatureKinds.ts","webpack:///./src/pkScripts/Helpers/PkCourtTypes.ts","webpack:///./src/pkScripts/Helpers/PkCourtRoles.ts","webpack:///./src/pkScripts/helpers/PkOutgoinClaimType.ts","webpack:///./src/pkScripts/helpers/ArHelper.ts","webpack:///./src/pkScripts/Helpers/PkIncomingRefundTypesEnum.ts","webpack:///./src/pkScripts/Helpers/PkOutgoingReceivingMethods.ts","webpack:///./src/pkScripts/UI/ChUIHelper.ts","webpack:///./src/pkScripts/Helpers/ArTaskTypes.ts","webpack:///./src/pkScripts/UI/PkUIHelper.ts","webpack:///./src/pkScripts/Helpers/ArTypeProcedure.ts","webpack:///./src/pkScripts/Helpers/ArContractCategory.ts","webpack:///./src/cdScripts/Helpers/ArEDocumentFdStates.ts","webpack:///./src/pkScripts/Helpers/PkLinkHelper.ts","webpack:///./src/pkScripts/UI/ArUIHelper.ts","webpack:///./src/pkScripts/Tiles/PkFileDownloadTileExtension.ts","webpack:///./src/pkScripts/Helpers/PkContractUIHelper.ts","webpack:///./src/cdScripts/Helpers/CdFdStages.ts","webpack:///./src/pkScripts/Helpers/PkCorrespondenceSendingTypes.ts","webpack:///./src/cdScripts/Helpers/ArContractFdStates.ts","webpack:///./src/pkScripts/Helpers/ArCostItems.ts","webpack:///./src/pkScripts/Tiles/ArContractTileExtension.ts","webpack:///./src/pkScripts/Helpers/PkInnerDocumentKinds.ts","webpack:///./src/pkScripts/Tiles/PkInnerDocumentTileExtension.ts","webpack:///./src/pkScripts/Tiles/PkPersonnelDocumentTileExtension.ts","webpack:///./src/pkScripts/Tiles/PkPersonnelPacketVirtualTileExtension.ts","webpack:///./src/pkScripts/Tiles/PkEksInfoTileExtension.ts","webpack:///./src/pkScripts/Helpers/PkConfidantTypes.ts","webpack:///./src/pkScripts/Helpers/PkKCKPartners.ts","webpack:///./src/pkScripts/Tiles/ArPowerOfAttorneyTileExtension.ts","webpack:///./src/pkScripts/Tiles/ArContractsCompletionTileExtension.ts","webpack:///./src/pkScripts/Helpers/PkItSystems.ts","webpack:///./src/pkScripts/Tiles/ArActRecalculateAmountsTileExtension.ts","webpack:///./src/pkScripts/Tiles/PkCorrespondenceSendingRequestTileExtension.ts","webpack:///./src/pkScripts/Tiles/PkEnvelopeTileExtension.ts","webpack:///./src/pkScripts/Tiles/ArPowerOfAttorneyAdditionalTileExtension.ts","webpack:///./src/pkScripts/Tiles/arActTileExtension.ts","webpack:///./src/pkScripts/Tiles/IrdDocumentTileExtension.ts","webpack:///./src/pkScripts/Tiles/PkHideInnerDocumentTileExtension.ts","webpack:///./src/pkScripts/Tiles/PersonalRoleUpdateDataInMDSTileExtension.ts","webpack:///./src/pkScripts/Tiles/Registrator.ts","webpack:///./src/pkScripts/UI/PkArticles.ts","webpack:///./src/pkScripts/UI/Cards/ArActUIExtension.ts","webpack:///./src/pkScripts/Helpers/PermissionsSharedHelper.ts","webpack:///./src/pkScripts/Helpers/ArFileHelper.ts","webpack:///./src/pkScripts/Helpers/ArContractControlsWithField.ts","webpack:///./src/pkScripts/Helpers/ArContractSharedHelper.ts","webpack:///./src/pkScripts/Helpers/PkAccreditationPerimeters.ts","webpack:///./src/pkScripts/Helpers/TypeProcedureMappingData.ts","webpack:///./src/pkScripts/UI/Cards/ArContractUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArEDocumentUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArPacketVirtualUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ChAssignmentUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ChIncommingUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkClientDocumentUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkClientPacketUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ChInternalDocumentUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ChLetterCreditUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ChMemoUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ChOutgoingUIExtension.ts","webpack:///./src/pkScripts/Helpers/ArPoAApproversCacheHelper.ts","webpack:///./src/pkScripts/Helpers/PkRdndKinds.ts","webpack:///./src/pkScripts/Helpers/PkRdndTypes.ts","webpack:///./src/pkScripts/UI/Cards/ChRdndUIExtension.ts","webpack:///./src/pkScripts/Helpers/PkExecutiveDocumentationHelper.ts","webpack:///./src/pkScripts/Helpers/DocumentKind.ts","webpack:///./src/pkScripts/UI/Cards/PkPdFillNumberDateUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkProtocolTenderUIExtension.ts","webpack:///./src/pkScripts/helpers/PkDecorationHelper.ts","webpack:///./src/pkScripts/UI/Cards/PkProtocolUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkSzAdresseeFillAndReadonly.ts","webpack:///./src/pkScripts/UI/Cards/PkWorkOrderUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArActSavingUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkRecevingDocumentsFromDiadocPluginSettingsUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ChInstructionUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArUnitsOfDiadocUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArUsersOfDiadocUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkPersonalRoleUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkRequestForMaterialsUIExtension.ts","webpack:///./src/pkScripts/Helpers/PkDepartmentHelper.ts","webpack:///./src/pkScripts/Helpers/ArHelper.ts","webpack:///./src/pkScripts/UI/Cards/ArPowerOfAttorneyUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkInnerDocumentUIExtension.ts","webpack:///./src/cdScripts/Helpers/CdSignDssMessagesInfoState.ts","webpack:///./src/pkScripts/UI/Cards/PkPersonnelDocumentUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkPersonnelPacketVirtualUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/DepartmentRoleUIExtension.ts","webpack:///./src/pkScripts/helpers/PkTCOfferSharedHelper.ts","webpack:///./src/pkScripts/UI/Cards/PkTCOfferUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkArticleStickerUIExtension.ts","webpack:///./src/pkScripts/helpers/PkEnums.ts","webpack:///./src/pkScripts/UI/Cards/PkCovenantUIExtension.ts","webpack:///./src/pkScripts/helpers/PkFileTypes.ts","webpack:///./src/pkScripts/UI/Cards/PkPackageOfOriginalDocumentsUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkMdsSettingsCardUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArRolePerformersUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkPartnerExceptionUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkMemoTemplateUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArPowerOfAttorneyAuthorityUIExtension.ts","webpack:///./src/pkScripts/Helpers/PkAddressTypes.ts","webpack:///./src/pkScripts/Helpers/ArContractStageKinds.ts","webpack:///./src/pkScripts/UI/Cards/ArContractCustomParticipantsUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ECMPersonalControlUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArHeadersBlanksForPowerOfAttorneyUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArContractHiddenNotUserChanges.ts","webpack:///./src/pkScripts/UI/Cards/PkCorrespondenceSendingRequestUIExtension.ts","webpack:///./src/pkScripts/Helpers/PkDispatchTypes.ts","webpack:///./src/pkScripts/UI/Cards/PkEnvelopeUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkDocumentRecognitionServiceSettingsCardUIExtension.ts","webpack:///./src/pkScripts/Helpers/MatrixFdProcess.ts","webpack:///./src/pkScripts/UI/Cards/ArContractMatrixRestartFromStageUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkSettingsContractorInPerimetrUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArFinanceTaxAuthorityRegistrationUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkForceMessageHandlingByJsonUIExtension.ts","webpack:///./src/pkScripts/Helpers/IrdDocumentFieldAliases.ts","webpack:///./src/pkScripts/Helpers/IrdDocumentKinds.ts","webpack:///./src/pkScripts/Helpers/IrdKindsFields.ts","webpack:///./src/pkScripts/Helpers/IrdKindsFieldsSettings.ts","webpack:///./src/pkScripts/UI/Cards/IrdDocumentUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArKonturPoAApiSettingsUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/ArPoASettingsUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkContractCategoryUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/Registrator.ts","webpack:///./src/pkScripts/Helpers/PkDocumentRecognitionFileHelper.ts","webpack:///./src/pkScripts/Cards/ChCardsGetExtensions/PkLetterCreditGetExtension.ts","webpack:///./src/pkScripts/Cards/ChCardsGetExtensions/PkPacketGetExtension.ts","webpack:///./src/pkScripts/Cards/ChCardsGetExtensions/PkRefreshOpenedCardsGetExtension.ts","webpack:///./src/pkScripts/Cards/ChCardsGetExtensions/PkIncomingGetExtension.ts","webpack:///./src/pkScripts/Cards/ChCardsGetExtensions/Registrator.ts","webpack:///./src/pkScripts/UI/ArTableUIExtension.ts","webpack:///./src/pkScripts/UI/ChArStateHideUIExtension.ts","webpack:///./src/pkScripts/UI/ChCaseNomenclatureUIExtension.ts","webpack:///./src/pkScripts/UI/PkAddVirtualFileUIExtension.ts","webpack:///./src/pkScripts/UI/PkCardGridViewsUIExtension.ts","webpack:///./src/pkScripts/Helpers/PkCardPreviewHelper.ts","webpack:///./src/pkScripts/UI/PkCardPreviewUIExtension.ts","webpack:///./src/pkScripts/UI/PkContractFilesVirtualUIExtension.ts","webpack:///./src/pkScripts/UI/AddSignedIconToVirtualFilesUIExtension.ts","webpack:///./src/pkScripts/UI/ArDocumentConstructorUIExtension.ts","webpack:///./src/pkScripts/UI/PkUISettingsUIExtension.ts","webpack:///./src/pkScripts/Helpers/PkUISettingsSharedHelper.ts","webpack:///./src/pkScripts/UI/PkDocumentRecognitionUIExtension.ts","webpack:///./src/pkScripts/Helpers/PkMatrixStageHelper.ts","webpack:///./src/pkScripts/Helpers/PkMatrixApprovementRoleHelper.ts","webpack:///./src/pkScripts/UI/PkMatrixUIExtension.ts","webpack:///./src/pkScripts/UI/ChangesUIExtension.ts","webpack:///./src/pkScripts/UI/HistoryContextMenuFileExtensions.ts","webpack:///./src/pkScripts/UI/Registrator.ts","webpack:///./src/pkScripts/UI/Tasks/ChCompleteTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkApproversAgreementUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkHideOptionsTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkSignInDiadokTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkSigningTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/ArContractTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkTCOfferTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkHideControlTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkWorkOrderTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkArticleStickerTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkActBecameResponsibleTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Cards/PkEksSettingsUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/ArActTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/PkInnerDocumentTaskUIExtension.ts","webpack:///./src/pkScripts/Helpers/PkMatrixRemarks.ts","webpack:///./src/pkScripts/UI/Tasks/ArContractMatrixTaskUIExtension.ts","webpack:///./src/pkScripts/UI/Tasks/Registrator.ts","webpack:///./src/pkScripts/Cards/ChCardsStoreExtension/OpenDiadocDocumentStoreExtension.ts","webpack:///./src/pkScripts/Cards/ChCardsStoreExtension/PkIncomingStoreExtension.ts","webpack:///./src/pkScripts/Cards/ChCardsStoreExtension/Registrator.ts","webpack:///./src/pkScripts/Cards/PkCardsStoreExtension/PkCheckPacketFieldsStoreExtension.ts","webpack:///./src/pkScripts/Cards/PkCardsStoreExtension/ArActStoreExtension.ts","webpack:///./src/pkScripts/Cards/PkCardsStoreExtension/ArEDocumentStoreExtension.ts","webpack:///./src/pkScripts/helpers/PkValidationKeys.ts","webpack:///./src/pkScripts/Helpers/ArContractReasonChange.ts","webpack:///./src/pkScripts/Cards/PkCardsStoreExtension/ArContractStoreExtension.ts","webpack:///./src/pkScripts/Cards/PkCardsStoreExtension/ArContractAdditionalExecutionStoreExtension.ts","webpack:///./src/pkScripts/Cards/PkCardsStoreExtension/Registrator.ts","webpack:///./src/pkScripts/Cards/PkCardsNewExtension/PkExpertNewExtension.ts","webpack:///./src/pkScripts/Cards/PkCardsNewExtension/Registrator.ts","webpack:///./src/pkScripts/Views/MyTasksView.tsx","webpack:///./src/pkScripts/Views/MyTasksViewModel.tsx","webpack:///./src/pkScripts/Views/MyTasksExtension.tsx","webpack:///./src/pkScripts/Views/PkCompleteTasksWorkplaceComponentViewModel.tsx","webpack:///./src/pkScripts/Views/PkCompleteTasksWorkplaceComponentView.tsx","webpack:///./src/pkScripts/Views/PkCompleteTasksWorkplaceComponentExtension.tsx","webpack:///./src/pkScripts/Views/PkContractDownloadReportComponentViewModel.tsx","webpack:///./src/pkScripts/Views/PkContractDownloadReportComponentView.tsx","webpack:///./src/pkScripts/Views/PkContractDownloadReportComponentExtension.tsx","webpack:///./src/pkScripts/Views/PkActDownloadReportComponentViewModel.tsx","webpack:///./src/pkScripts/Views/PkActDownloadReportComponentView.tsx","webpack:///./src/pkScripts/Views/PkActDownloadReportComponentExtension.tsx","webpack:///./src/pkScripts/Views/PkMatrixWorkplaceComponentViewModel.tsx","webpack:///./src/pkScripts/Views/PkMatrixWorkplaceComponentView.tsx","webpack:///./src/pkScripts/Views/PkMatrixWorkplaceComponentExtension.tsx","webpack:///./src/default/eds/cryptoProEDSProvider.ts","webpack:///./src/pkScripts/Views/PkSignDocumentsWorkplaceComponentViewModel.tsx","webpack:///./src/pkScripts/Views/PkSignDocumentsWorkplaceComponentView.tsx","webpack:///./src/pkScripts/Views/PkSignDocumentsWorkplaceComponentExtension.tsx","webpack:///./src/pkScripts/Views/RefreshMyTasksExtension.tsx","webpack:///./src/pkScripts/Views/UserSubsetsExtension.tsx","webpack:///./src/pkScripts/Views/OrderingNodesInFolderExtension.ts","webpack:///./src/pkScripts/Views/Registrator.ts","webpack:///./src/pkScripts/Files/ApprovalListsFileMenu.ts","webpack:///./src/pkScripts/Files/ArContractFileControlMenu.ts","webpack:///./src/pkScripts/Files/ArPoaFileControlMenu.ts","webpack:///./src/pkScripts/Files/PkAccessibilityContextMenuButtonsFileExtension.ts","webpack:///./src/pkScripts/Files/ArPoaFileMenu.ts","webpack:///./src/pkScripts/Files/ArContractFileMenu.ts","webpack:///./src/pkScripts/Files/IdpFileMenu.ts","webpack:///./src/pkScripts/Files/Registrator.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","tessa","platform","cards","ui","service","CdCardTypes","ArContractTypeID","ArPowerOfAttorneyTypeID","ArPowersOfAttorneyAuthorityTypeID","ArDocumentIdpTypeID","TechnicalDocumentationTypeID","PkExecutiveDocumentationTypeID","PkExecutiveSchemeTypeID","PkDevelopmentScenarionTypeID","PkRequestForMaterialsTypeID","PkCaseNewTypeID","RdDivisionRoleTypeID","ProjectTypeID","PkKCKPartnerTypeID","PersonalRoleTypeID","PkGlazingOrderTypeID","PkAdditionalWorksContractOrderTypeID","PkZosRvDocumentypeID","ArPowersOfAttorneyAuthorityTypeName","ArHeadersBlanksForPowerOfAttorneyTypeID","ArFinanceTaxAuthorityRegistrationTypeID","PkIncomingTypeID","PkMemoTypeID","PkOutgoingTypeID","RdndTypeID","PkInternalDocumentationTypeID","PkAssignmentTypeID","PkLetterCreditTypeID","InstructionTypeID","ArActTypeID","PkProtocolTenderTypeID","ArEDocumentTypeID","PkPacketVirtualTypeID","PkWorkOrderTypeID","PkProtocolTypeID","PkProxyTypeID","PkTCOfferTypeID","IrdDocumentTypeID","IrdDocumentTypeName","IrdTEPTypeID","IrdTEPTypeName","CopyTileCardTypes","TileExecutionAcquaintanceCardTypes","TypesOfDocumentsWithApprovalLists","RefsTableSupportedCardTypes","extensions","CdUIHelper","partnerExternalID","аccreditationPerimetrName","everBeen","request","CardRequest","requestType","CdRequestTypes","CheckPartnerInPerimeter","info","createTypedField","DotNetType","Int64","String","Boolean","response","CardService","instance","validationResult","isSuccessful","error","_a","Error","$value","showError","IsPartnerInPerimeter","readOnlyValue","controls","forEach","control","isReadOnly","isVisible","visibility","Visibility","Visible","Collapsed","controlVisibility","model","tabCaptions","length","forms","form","some","x","LocalizationManager","localize","tabCaption","context","ArContractsUser","card","sections","tryGet","fields","fieldChanged","add","async","e","fieldName","fieldValue","GetAuthorDepartment","Guid","showNotEmpty","build","CdCommonHelper","SetFieldToSection","OrganizationID","OrganizationName","OrganizationExternalID","OrganizationGuid1C","AuthorDepartmentID","AuthorDepartmentName","set","AuthorID","row","arContractPartners","arContractsUser","rows","partner","find","state","CardRowState","Deleted","isTransferToUSReadonlyFields","session","objects","isProhibitModify","hasFlag","permissions","resolver","getSectionPermissions","CardPermissionFlags","ProhibitModify","fieldPermissions","this","AllowEditESUDDocs","DocumentSections","ContractArticleIdp","isAmountAllowModify","_b","AllowModify","isAmountAllAllowModify","_c","isCostItemAllowModify","_d","isObjectAllowModify","_e","isPaymentTermAllowModify","_f","isProjectAllowModify","_g","isStageNameAllowModify","_h","isVatRateAllowModify","_j","isPercentPrepaymentAllowModify","_k","rowInitializing","rowModel","objectID","GetUIControlFromModel","project","residentialComplex","stageName","costItem","amount","amountAll","paymentTerm","percentPrepayment","vatRate","storeMode","CardStoreMode","Insert","SetReadOnlyToControls","cardPermissions","canEdit","CheckCanEditTechnicalArticle","e2","objectId","GetRegionCityAndProjectByObject","SetFieldToRow","ProjectID","ProjectName","ObjectName","ObjectExtID","Guid1C","ObjectNumber","ResidentialComplexID","ResidentialComplexName","projectID","tryGetField","RequestByResidentialComplexOrProjectWithNoAvailable","setTimeout","SetAutoCompleteEntryValueIfOneAsync","residentialComplexID","action","GridRowAction","Opening","IsRowCreatedAfterTransferToUS","cardModel","controlsBag","section","transferDate","createdDate","documentCommonInfoSection","pkoSection","rowInvoked","objectsSection","pkOutgoingVirtual","objsList","filter","Deleting","rowId","objectIds","map","getField","v","a","indexOf","join","PkOutgoingKinds","ClaimId","claimContractControl","isOneObject","isDepartmentEmpty","claimPerformersSection","Update","prow","Inserted","remove","rowEditorClosing","objectControlmodel","objectid","message","islocked","GetBuildDocsLockedState","hasActiveValidation","validationFunc","fieldChangedSubscribers","Array","from","events","clear","subscriber","cancel","rowEditorClosed","rowAdding","realEstate","floor","OutgoingClaimFieldChanges","CommonFieldChanges","IsObjectLockedRequestTypeID","IsLocked","RegionID","RegionName","CityID","CityName","LivingComplex","AddressPost","RequestByResidentialComplexOrProject","controlViewModel","fieldID","itemsSource","findItems","then","res","obj","displayFields","requestValue","GetProjectAndLivingComplex","GetProjectAndLivingComplexWithNoAvailable","tasks","equals","typeId","toLowerCase","CdFdTaskTypes","PkTechnicalDocumentationAgreementOnRenovationInFRTypeID","task","count","sectionName","splice","rdPropsSection","rdDivisionId","regionId","cityId","projectId","isRenovation","GetTechnicalDocumentationApprovers","id","createdById","ClearAutoCompleteTableWithMarkingkDeletedItems","uksApprovers","UksApprovers","projectGroup","ProjectGroup","contractors","Contractors","gipApprovers","GipApprovers","ospApprovers","OspApprovers","designers","Designers","usersInTheDepartmentProductRole","UsersInTheDepartmentProductRole","signersOfTD","SignersOfTD","tdClerks","TdClerks","tDPtoEngineers","TDPtoEngineers","tDEngineersGroup","TDEngineersGroup","projectManagers","ProjectManagers","pkQualityControlSpecialist","PkQualityControlSpecialist","pkTDPtoEngineers","PkTDPtoEngineers","pkCustomerServiceEngineerHeatSupply","PkCustomerServiceEngineerHeatSupply","pkElectricalEngineer","PkElectricalEngineer","pkCustomerServiceEngineerVK","PkCustomerServiceEngineerVK","pkCustomerServiceEngineerEOM","PkCustomerServiceEngineerEOM","pkCustomerServiceEngineerSS","PkCustomerServiceEngineerSS","pkMechanicalEngineer","PkMechanicalEngineer","pkCustomerProjectTeam","PkCustomerProjectTeam","pkMainConstructionControl","PkMainConstructionControl","pkConstructionControlSSEngineer","PkConstructionControlSSEngineer","pkPIKProjectGroup","PkPIKProjectGroup","pkGip","PkGip","CardRow","newGuid","Int32","RoleID","RoleName","push","expert","item","adiSection","contractID","polSectionRows","None","ardapSectionRows","ArDocumentIDPVirtualInfo","ContractDate","ardapSection","PartnerInfo","Category","INN","FullName","ExtID","olSection","ObjectInfo","AddressPostValue","CityIDValue","CityNameValue","Guid1CValue","LivingComplexValue","ObjectIDValue","ObjectNameValue","ProjectIDValue","ProjectNameValue","RealEstateIDValue","RealEstateNameValue","RegionIDValue","RegionNameValue","ResidentialComplexIDValue","ResidentialComplexNameValue","typeID","GroupingID","GroupingName","documentKindID","empty","ArDocumentKind","VehaBopName","VehaBopCode","VehaBopId","controlName","viewModelBase","isCheckControlName","block","blocks","result","fileNames","files","file","categoryId","ChFileCategories","ElectronicSignatures","CdGeneralDocumentationClientHelper","PdfForPrint","CardFileState","Replaced","showMessage","lastVersion","getFileContentRequest","CardGetFileContentRequest","cardId","cardTypeId","cardTypeName","typeName","fileId","fileName","versionRowId","fileTypeId","fileTypeName","getFileContentResponse","getFileContent","content","size","type","CardSectionType","Table","regExp","keyDown","addWithDispose","event","search","preventDefault","documentSections","IsAllowEditESUDDocs","isAdmin","AllowEditForContractArticleIdp","ArContractPartnersTable","AllowEditForArContractPartnersTable","partnerPerformer","partnersPartner","partnerAccountant","partnerSigned","partnerContractCategory","partnerDepartment","IsDocFromESUD","IsActiveOrFulfilled","pkdci","CdDocStates","Active","Fulfilled","acu","adc","PkDocState","caption","Project","UksApproval","ExternalOrganizationApproval","Rework","Irrelevant","Canceled","Production","PgApproval","GipApproval","OspApproval","Consideration","Performance","Complete","Agreement","Signing","PreparationForSigning","AgreementUdo","AgreementManager","NotSigned","OnCheck","Signed","Rejected","AgreementPerformer","OnRegistration","Registered","AgreementLegalDepartment","AgreementPgCustomer","Agreed","RegisteredLC","AgreementPurchasingDepartment","AgreementHeadUDO","DownloadScanCopy","UploadedToTUS","WaitingForSending","Sent","ToSend","OnAgreement","InPreparationForSigning","Considered","Disapproved","Executed","OnApproval","AgreementOSP","AgreementHead","TransformSKP","Approval","Archive","TransferredToCustomers","AgreementScopeWork","AgreementNZ","AgreementAccountant","AgreementCalculation","AtTheSigner","FormationCosting","Received","WaitingForDiadocResult","WorkflowCompleted","AtTheResponsibleForAct","OrderTicketConfirmation","MovedToRemote","Revocated","Draft","OnApprovalContractor","OnApprovalEconomist","OnAdditionalApprovalCustomer","OnApprovalGP","OnApprovalCustomer","OnApprovalOperatingOrganization","WaitingForAccounting","NotRelevant","OnApprovalGPExecutorWorks","OnApprovalUBK","OnApprovalAuthorSupervision","OnSigningAndScanning","OrganizationSigningAndScanning","OnConfirmation","OnApprovalWithTheCustomer","ApproveOfCost","ApproveOfVolumes","OrderTicketReview","CalculateOfCost","CalculateOfVolumes","ApproveWithSelesDirector","ApproveWithConstructionDirectorate","ApproveByTheSalesDepartment","ApproveByClerk","Duplicate","AtTheAccountant","PreparationForApproval","CompletionOfCustomer","NegotiatingCost","PreProject","OnSigningGP","OnSigningGPExecutorWorks","OnSigningContractor","OnSigningAuthorSupervision","OnSigningCustomer","OnSigningOperatingOrganization","Converting","EsudProcessingCompleted","WaitingProcessing","DefineDocumentType","EsudTransfer","EsudTransferSuccessfully","DiadicRevocated","DiadocRejected","DiadocSigned","OnConsideringPM","OnConsideringPTO","ConsiderationOfPTOComments","RevisionPTOComments","PresetPrinting","ApprovalFundRenovation","FinalizeCommentsExternalOrganizations","OnPreparationContractor","InitializationApprovalProcess","ReworkSupplier","LentToHands","OnApprovalSubcontractor","OnSigningSubcontractor","AgreementGeneralManager","AgreementFinancier","AgreementSmuGipPto","AgreementDeputyGD","RequiresSigningNotice","SigningError","RequiresSigningInDiadoc","RevocationRequested","RevocationRequestRecieved","RevocationRejected","SignatureContragentRejected","AtTheAdditionalApprover","DirectorSMU","CommercialDirector","DeputyDirectorSMR","FirstDeputyDirector","FixingProblems","AtPTOContractor","FormationPDC","SendingToArchive","OnApprovalASEngeneer","OnApprovalDirectorOfInitiator","OnApprovalDirectorOnDemand","OnApprovalControllerComfort","Operate","Modification","Terminated","CheckingCommentsBeforeSending","OnSigningInDiadocInCompany","OnSigningInDiadocWithPartner","CheckSigningInDiadoc","ModificationAfterSigningInDiadoc","PreparationDocumentForSigning","OnSigningInCompany","OnSigningAtPartner","ControlReturnOriginal","CurrentVersion","Recalled","Expired","SetAmount","OnDssSigning","OnRevocation","RestartingProcesses","SignedAndApproved","LostForces","OnMatching","WaitMainDocument","CreatedKSD","FormationKSD","FixProblems","ConfirmTransferDocument","EditSpecialistPrimaryProcurementControl","NumberAssigned","HasBeenSent","Delivered","ReadyToSend","SentFromUdo","SentByRussianPost","Done","NotDone","NotDelivered","NotSent","Actual","Archived","PendingVerification","ErrorSigning","PkCardTypes","PkDocVisionProtocolTypeID","RdndTypeName","PkPacketVirtualTypeName","PkClientDocumentTypeID","PkClientPacketVirtualTypeID","PkRecevingDocumentsFromDiadocPluginSettings","ArUnitsOfDiadocTypeID","ArUserOfDiadocTypeID","PkInnerDocumentTypeID","PkPersonnelDocumentTypeID","PkPersonnelPacketVirtualTypeID","PkDialogsTypeID","PkDialogsTypeName","DepartmentRoleTypeID","PkArticleStickerTypeID","PkCovenantTypeID","PkPackageOfOriginalDocumentsTypeID","PkMdsSettingsCardTypeID","PkEksSettingsCardTypeID","ArRolePerformersTypeID","PkPartnerExceptionTypeID","PkMemoTemplateTypeID","PkExpertTypeID","ContractTypeID","ECMContractDocumentTypeID","PkMatrixAccountantTypeID","PkMatrixAccountantOHRTypeID","PkMatrixEditorHistoricalDocumentsTypeID","PkMatrixConsolidatingTypeID","PkMatrixLawyerTypeID","PkMatrixRemarkTypeID","PkCorrespondenceSendingRequestTypeID","PkEnvelopeTypeID","PkSettingsContractorInPerimetrTypeID","PkForceMessageHandlingByJsonTypeID","PkContractCategoryTypeID","PkOutgoingTypeName","PkMatrixLandAssetCompaniesTypeID","PkCreatorsContractsTechnicalCategoryTypeID","PkDocumentRecognitionServiceSettingsCardTypeID","FdDialogsTypeID","FdDialogsTypeName","ArHRPersonalDataTypeID","ArKonturPoAApiSettingsTypeID","ArPoASettingsTypeID","PersonalRoleID","ChanceryCardTypes","PkUISettingsEnabledCardTypes","PkContractCardTypes","validation","tiles","PkRequestTypes","ArGetVATRate","AddDocumentToFavorites","RemoveDocumentFromFavorites","CalculateVatAmount","PkCalculateAmountWithoutVat","GetRdDivisionRoleProperties","GetPacketID","EDocumentConvertToAct","SignInfo","IsDirectual","GetApproversByObjects","ContractInfo","ArSendToKa","GetSameArDocuments","GetDealorPayerByPartnerKCK","GetObjectAndRealEstate","PkGetClientByContract","RejectCards","SendActToDiadoc","PkGetContractDate","RevokeTemplateInDiadoc","GetInfoFromMemoSettingsCard","PkCheckCustomSubject","PkWrkWithTemplateWeb","PkCheckVgoCard","PkGetVgoIdRequest","PkCheckActiveTasks","CompleteAutoSigningProcess","BankAccountInfo","PkContractGetDepartmentRequest","PkContractGetInfoByPartner","ArCheckRelatedConcession","ArCheckEditArticleIDP","ArCheckArticleUsageInAdditionalAgreement","CheckVoidTheContract","ArGetMostRecentDocumentDateFromTheLinked","PkTCOfferGetApprovers","PkTCOfferGetEmployee","PkRejectClientDocument","ArContractMakeItValid","PkCheckUserHasTasks","PkTCOfferGetUserName","PkTCOfferGetUserDepartment","PkGetContractInfoForCovenant","PkPrepareOutgoingForSendingDiadoc","CheckWorkOrderContractor","PkValidateSignTypeSelecting","ArGetExistContractEdoRequestID","ArGetAgreementEDORequestID","ArGetSetCancelEDORequestID","ArAttachDocumentsFromEDRequestID","PkPkGetSetUserSubsetsRequestID","IrdGetNotifyUsersRequestID","IrdCheckExistingVersions","IrdGetTepsByKindRequest","IrdGetVersionsRequest","PkGetCourtContractPartners","ArAddWordFileWithDocsToContract","PkGetArticleStickersByParent","PkGetArticleStickersFromContacrtByParent","GetDepartmentSystemInfo","PkGetArticleAmountFromContractBySticker","ArContractSetReasonChanges","PkGetEventPeriodicity","ChGetThemeTemplateIncomming","PkCopyAllCovenants","PkGetEksMessagesInfo","PkUpdateEksMessagesInfo","PkUpdateContractFromMdsRequest","ArCheckContractCategoryInKd","ArSendToKd","ArContractGetRolePerformers","ArGetxchangeRateByCurrency","PkGetDepartmentRolesRoleUsersID","PkGetPartnerKCKByExternalID","PkGetAnalyticsStickersAndMethodID","ArActRecalculateAmountsRequestID","PkGetINNbyExtIDPartnersRequest","DocumentRecognizeStartRequest","DocumentRecognizeCheckStatusRequest","PkGetVirtualSignerByDepartment","PkAgreementTerminationContractAccessRequest","ArContractPartnerstInfoRequest","ArContractGetContractKindIDByCardID","PkAgreementCessionContractAccessRequest","PkGetUncomplitedChildTasksRequest","PkGetEnvelopeInfo","PkGetReferencesInfo","ArContractCheckFilledMatrixExistsRequest","ArContractIsCanStartApprovalAdditionalAgreementRequest","PkGetFieldValue","DocumentRecognitionClearCacheRequest","PkContractCheckArticleExists","ArContractCheckMatrixUpToDate","ArPOAGetCredentialsTextRequest","PkGetContractSubjectRequest","PkOutgoingGetCulpritInfos","PkOutgoingGetActArticleIdpsInfos","ArPOARegisterRequest","PkOutgoingGetInfoForClaimHoldingAmountRequest","ArContractCheckCreatedOnBaseArEDocumentRequest","CleanDiadocInfoRequest","PkOutgoingGetIndividualsKCKRequest","PkUpdateFinanceTaxAuthorityRegistrationByMessageRequest","PkClearDiadocErrorRequest","PkCheckDeputyUsers","PkUpdateHRPersonalDataByMessageRequest","PkGetFRCOwnerRequest","PkGetContractCategoryIsFinancialAnalyticRequestID","ArGetAuthorizationUrlForKonturExtern","ArAuthorizeWithKonturExtern","PkCheckMultipleKCKLegalsInListRequest","PkGetChildContractCategoryRequest","uiHost","GetIsAdministrator","GetLegalEntity","GetUsersForTable","GetRdInfo","HiddenWorksInfo","CdCheckSignFile","CdCheckQrCodeFile","GetEsApproversByObjects","CdGetSroInfoByKCKID","CdGetSystemInfo","CdGetSpecialistnumber","CdGetGeodesicApproversByObjects","GetApprovementRoles","GetApprovementParticipants","GetRenovationAndProjectType","CheckUserInRole","CdContractGetArticleID","CdSetSelectedTechDocPage","GetParentRoleID","CheckCertificate","PkSignFilesByDss","GetUserCertInfo","CheckSigns","InsertSignDssMessageInfo","GetLastSignDssMessageInfo","GetSignatureHash","UnlockCards","RegisterCards","GetInfoByPdc","GetMyTasksCount","CdCheckFileSignaturesBySignerRoles","GetPartnerSynonymAliasByExternalID","CheckSettingsLegalEntitiesRequest","common","utility","FileCategory","Primary","DevelopmentScenario","RequestForMaterials","DssCertificates","PkTCOfferUnsigned","NepCertificates","AdditionalMaterials","Informational","DocumentID","Journal","PkTCOfferWorkSchedule","ImplementingSchemes","PkTCOfferSigned","LaboratoryTests","PkTCOfferUnsignedIrrelevant","TechnicalConclusions","PkTCOfferWorkScheduleIrrelevant","PassportsAndCertificates","PkTCOfferOther","OtherApplications","Revocation","AdditionalForContract","ANPT","PrintForms","FullPacket","FileCategories","PkCommonHelper","input","replace","addDay","dateNow","Date","setDate","getDate","getFullYear","ConvertTwoSymbols","getMonth","toLocaleTimeString","toString","list","element","parseFloat","Number","toFixed","reportName","byte","docType","blob","Blob","link","document","createElement","href","window","URL","createObjectURL","download","click","fileContent","arrayBuffer","data","Uint8Array","btoa","reduce","fromCharCode","base64","binaryString","atob","binaryLen","bytes","ascii","charCodeAt","roleId","ChRequestTypes","userSession","UserID","IsUserInRole","GroupBy","getKey","previous","currentItem","group","views","metadata","getOwnPropertyDescriptors","keys","descriptors","getOwnPropertyDescriptor","formatRegExp","format","f","isString","arguments","inspect","args","len","str","JSON","stringify","_","isNull","isObject","deprecate","fn","msg","process","noDeprecation","apply","warned","throwDeprecation","traceDeprecation","console","trace","debugEnviron","debugs","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","isFunction","constructor","ret","primitive","simple","isNumber","formatPrimitive","visibleKeys","array","hash","val","idx","arrayToHash","getOwnPropertyNames","isError","formatError","isRegExp","RegExp","isDate","output","base","braces","isArray","toUTCString","formatProperty","match","formatArray","pop","prev","cur","numLinesEst","reduceToSingleString","desc","split","line","substr","ar","arg","re","objectToString","pad","debuglog","NODE_DEBUG","toUpperCase","test","pid","isNullOrUndefined","isSymbol","isPrimitive","isBuffer","months","timestamp","time","getHours","getMinutes","getSeconds","prop","log","inherits","origin","kCustomPromisifiedSymbol","undefined","callbackifyOnRejected","reason","cb","newReason","promisify","original","TypeError","writable","configurable","promiseResolve","promiseReject","promise","Promise","resolve","reject","err","setPrototypeOf","getPrototypeOf","defineProperties","custom","callbackify","callbackified","maybeCb","self","nextTick","rej","CdFdProcessHelper","CreateAddAgreement","Sign","ForApproval","PkSendForSigning","Approve","ToArchive","SendForResubscription","PkSendForResigning","SignWithEDS","PkSignPaper","PkSignDocument","PkAgree","PkDisagree","PkCancelRevocation","PkAssingNumber","PkSendByRussianPost","PkSent","PkEnvelopePrepared","Confirm","Cancel","PkDone","PkNotDone","PkDelivered","PkNotDelivered","PkNotSent","CreateAgreementEDO","NewApprovalCycle","PkReturnToSigner","PkResendForApproval","PkFillOut","mobx","PkSignExecutiveDocumentationAgreementWithAgreementorTypeID","PkSignExecutiveDocumentationAgreementTypeID","PkSignExecutiveDocumentationCoordinationAuthorSupervisionTypeID","PkSignExecutiveDocumentationInitializingTypeID","PkExecutiveDocumentationAgreementWithAgreementorTypeID","PkFdInArchiveTypeID","PkExecutiveDocumentationInitializingTypeID","PkExecutiveDocumentationToReworkTypeID","PkSignExecutiveSchemeAgreementWithAgreementorTypeID","PkSignExecutiveSchemeAgreementTypeID","PkSignExecutiveSchemeInitializingTypeID","PkExecutiveSchemeToReworkTypeID","PkExecutiveSchemeCancelTypeID","PkExecutiveSchemeCanUseInEDActsTypeID","PkDevelopmentScenarioInitializingTypeID","PkDevelopmentScenarioAgreementWithAgreementorTypeID","PkDevelopmentScenarioToReworkTypeID","PkSignRequestForMaterialsInitializingTypeID","PkSignRequestForMaterialsToReworkTypeID","PkSignRequestForMaterialsSigningTypeID","PkSignRequestForMaterialsEngeneerPTOSigningTypeID","PkSignInDiadocTypeID","PkProcessIncomingResponseTypeID","PkReworkTaskTypeID","PkClientHelper","colection","callback","stateChanged","collectionChanged","added","e1","vatRateCaption","vatValue","contractSection","contractField","checkedField1","checkedField2","checkedSection1","checkedSection2","checkedSection1Sect","checkedSection2Sect","IsNullOrWhitespace","isFieldProhipit","getFieldPermissions","contractSectionSect","filterStickerRows","amountFieldName","outsum","stickerArticle","userId","roleID","ButtonForCopyingRows","gridName","Initialized","grid","selectedRows","sortingField","GetUIControl","rowsModel","b","UIButton","cardRowViewModel","sourceRow","newRow","keyValuePair","copy","disposer","setIsEnabled","IsEnabledCopyFunc","reaction","rightButtons","CdTaskTypes","PkCompleteTypeID","PkConsiderationTypeID","PkUksApprovalTaskTypeID","PkProjectGroupApprovalTaskTypeID","PkGipApprovalTaskTypeID","PkOspApprovalTaskTypeID","PkDepProductApprovalTaskTypeID","PkExternalApprovalTaskTypeID","PkStartAcquaintanceProcessTechDocTaskTypeID","PkTDComissionOnRenovationTypeID","ArPreparationForSigningTypeID","PkSigningTypeID","PkPersonnelDocumentCuratorReviewingTypeID","PkPersonnelDocumentSigningTypeID","PkPersonnelDocumentEtkTransitionTypeID","PkPersonnelDocumentCuratorRevocationAgreementTypeID","PkPersonnelDocumentEmployeeRevocationAgreementTypeID","ArPowerOfAttorneyExecutionTaskTypeID","ArApproveUDOTypeID","ArPrintingTheContractTypeID","ArEditBeforeSigningTypeID","ArSigningTypeID","PkAWCORvrBlockFillTypeID","PkAWCORvrBlockFillConfirmationTypeID","ECMDefaultCardTypes","ContractTypeName","ECMContractDocumentTypeName","ECMContractSection","ECMAccountWithoutContractTypeID","ECMAccountContractTypeID","ECMContractTypeID","ECMAdditionalAgreementTypeID","ECMTerminationAgreementTypeID","ECMContractCancelTypeID","ECMContractCancelTypeName","PkIncomingTypeName","FdCriteriaOperators","certificate","ValidationResultBuilder","unsignedHash","Result","UnsignedHash","showLoadingOverlay","CheckQrCode","ValidationResultType","items","fileWithStamp","GetRdWithWorkStampAsync","ownerOrganization","ownerName","companyAdr","fileData","File","ex","ValidationResult","fromError","details","taskTypes","unsignedFiles","findIndex","toLocaleLowerCase","CardTaskAction","optionId","fileCategory","categoryID","fileContainer","category","includes","selectedCert","CdEDSHelper","GetCertificatePlatformAsync","edsProvider","Certificate","technicalDocumentationResult","TechnicalDocumentationCheckFileAsync","ID","Hash","isAttachedSignature","CheckIsAttachedSignatureAsync","SignFilesByDSSAsync","edsResult","SignFilesAsync","ExecutiveDocumentationAdditionalSignFileLogicAsync","ExecutiveSchemeAdditionalSignFileLogicAsync","RequestForMaterialsAdditionalSignFileLogicAsync","has","signatures","CdExecutiveSchemeTypes","GeodeticSchemeType","userID","signingInfo","CdDSSHelper","GetSigningInfoAsync","employeeGuid1C","dssCspType","SignFilesByDssAsync","externalUserGuid","certInfo","pdciSection","taskTypeID","ChTaskTypes","PkSignerAgreementTypeID","taskID","versionRowID","cardID","fileID","certCompany","certOwner","certAdr","cardGetFileContentRequest","CdFileTypes","GetInWorkStampType","DateTime","cardGetFileContentResponse","roles","matchingSectionName","matchingRolesSectionName","mSection","rSection","j","role","esmSectionRow","SpecialRoleID","SpecialRoleName","DefaultOrder","ediSection","regionID","additionalFilters","Roles","index","ApprovementRolesCriteria","RowID","SectionName","FdCriteriaOperatorID","FieldName","Value","ApprovementRolesActiveCriteria","FilterRolesByActiveCriteria","operatorId","NonEquals","Equals","roleIds","roleApprovers","direction","investProjectInfoSection","rolesList","approvementRolesCriteria","rolesCriteria","totalApprovementRolesCriteria","cur_criteria","participants","Participants","roleParticipants","approversList","k","Name","OrderNumber","OrderDate","Approvers","GetApproversByRdDivisionRoles","GetApproversLegalEntityInfo","y","concat","arr","userInfoList","UsersInfo","ra","appr","userInfo","RoleKCKID","RolePosition","OrganizationKCKID","RoleKCKExternalID","OrganizationKCKExternalID","RoleKCKName","OrganizationKCKName","RoleEntityID","LegalEntityID","RoleEntityName","LegalEntityName","Position","objectList","CdExtensionHelper","GetObjectListFromPkObjectListSection","rolesByDivision","CdRequestForMaterialsSharedHelper","RolesFromRdDivision","guid","number","users","Users","roleApprover","GetRoles","FillTableApprovers","GetApprovers","clone","SetApprovers","matchingSection","matchingRolesSection","edrSection","edmSection","AddApproverFieldChanged","rowValidating","matchingRowID","cardRow","FillLegalEntityField","excludeRolesFromCheck","rSectionRows","mSectionRows","rolesToFill","CdExecutiveSchemeSharedHelper","IntID","ApprovementRoles","AdditionalApproversID","executiveSchemeInfo","performedWithDeviation","stack","Modified","step","sort","roleIDIndex","invalidApprovers","errorMessage","uiContext","UIContext","current","editor","cardEditor","dialogsType","MetadataStorage","cardMetadata","getCardTypeByName","CardNewRequest","new","windowCardModel","createCardModel","sectionRows","dialogForm","showFormDialog","_form","getOrAdd","Role","Invalid","Valid","btn","close","edMatchingSection","edRolesSection","matchingRoles","mr","currentRoleApprover","approver","matchingControl","CheckObjectsAreFilled","ApproversRoleID","Customer","hasChanges","isExternalBuilder","approversControl","isChecked","currentRow","ee","pkExecutiveDocumentationRolesSection","addExternalBuilderApproverDialog","approverRow","sectionRow","checkTaskTypes","checkTaskOptions","categoryList","taskTypesSigning","deletedTaskIndex","checkAddedFiles","CheckAddedFiles","checkAddNewMatchingRoles","CheckAddNewMatchingRoles","xt","checkContentFile","CheckContentFileAsync","checkApprovers","CheckApprovers","base64Data","contentType","byteCharacters","bytesLength","slicesCount","Math","ceil","byteArrays","sliceIndex","begin","end","min","offset","availibleFileExtensions","correctFile","ext","ModifiedAndReplaced","hasSign","confirm","mRow","Objects","FillMatching","PkChangeDiadocFolderInCards","SendMailIntoSupport","ArActContractPartnersForFlag","ArActContractArticleOhr","ArActContractArticleIdp","PkGetBookkeepers","GetCaseOfTheTopLevel","GetInstructionUrl","PkProtocolAssignmentTable","GetCrmDeal","GetPacketDocsInfo","PkOutgoingMailSenderRequest","PkGetExecutionDateByDocKind","PkProtocolGetRole","GetPayerByContract","ChUpdateOutgoingStamp","AttachCorrespondencePrintForm","ChSendEmailNotificationToClient","PkUpdateDataInMDS","PkPerformerTaskTypeID","PkRejectApprovalTypeID","PkStartAgreementProcessTypeID","PkRdndUdoTaskTypeID","PkApproversAgreementTypeID","PkApprovalTerminationTypeID","PkApprovalLawyerTypeID","PkApprovalOfTopsTypeID","PkOSSEmployeeCommentTypeID","PkRefundDDYTypeID","PkRevaluationTypeID","PkSendingByPostTypeID","PkEditTypeID","PkReviewLawyerTypeID","PkCheckCustomerDecisionTypeID","PkRevaluationForPDKPTypeID","PkApprovalByCoordinator","PkStartPerformanceProcessTaskTypeID","PkAcceptPackageOfDocumentsTypeID","PkSendAPackageOfDocumentsTypeID","PkRegisterFirstTastTypeID","PkReviewOutgoingTypeID","PkSignTypeSelectingTypeID","PkSendToContractorTypeID","PkSignerDiadocTypeID","DefaultFileType","FileType","VirtualAdded","EnhanceSignType","GetCSVReportType","GetFileForPrintType","GetCompiledPdfType","GetZipArchiveType","GetExecutiveDocumentationRegistryFile","GetZipArchiveWithoutDirectoriesType","React","Contractor","AuthorSupervision","OperatingOrganization","PTOEngeneer","ASEngeneer","DevelopersRepresentative","CdCardFlagsInfo","PkCanSavePartnersKckCard","PkExecutionTaskFlag","PkAcquaintanceTaskFlag","PkNotRelevantFlag","PkCreateChangesOrdFlag","PkRecallForRevisionFlag","PkCreatedBasedFlag","PkCopyCardFlag","PkEditRegistrationNumberFlag","PkCanMergeDuplicatesIDP","CdDssCspType","Caption","Qualified","NonQualified","GeneralDirectorID","GeneralDirectorName","DirectorConstructionID","DirectorConstructionName","DirectorSMUID","DirectorSMUName","SupplyDivisionLeadSpecialistID","SupplyDivisionLeadSpecialistName","PTOEngeneerID","PTOEngeneerName","PTOManagerID","PTOManagerName","PTOManagerSKBID","PTOManagerSKBName","SupplyDivisionID","SupplyDivisionName","DirectorRenovationID","DirectorRenovationName","DirectorCommercialID","DirectorCommercialName","AdditionalApproversName","CheckFileCategoryList","ApproverTaskStoreInfo","TaskStartProcessOptionsList","TaskStartProcessTypesList","TaskSignTypesList","ExtractCertInfo","certSubjectName","extract","extractStreet","what","certName","cadesplugin","async_spawn","oStore","CreateObjectAsync","Open","CAPICOM_CURRENT_USER_STORE","CAPICOM_MY_STORE","CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED","CertificatesObj","Certificates","Count","certs","cert","Item","subjectName","SubjectName","issuerName","IssuerName","validFrom","ValidFromDate","validTo","ValidToDate","serialNumber","SerialNumber","certificateStr","Export","CADESCOM_ENCODE_BASE64","extendedKeysUsageOids","extendedKeyUsage","ExtendedKeyUsage","ekus","EKUs","ekusCount","eku","ekuOid","OID","GetName","company","GetOwner","issuerFullName","GetCertOwnerName","GetCertOwnerOrganization","GetCertOwnerOrganizationAddress","Close","getLastError","GetParameter","marker","strArr","snIndex","_edsProvider","enhancedKey","_withComment","fcollection","GetCertsAsync","HasEnhancedKey","Comment","SelectCertificateAsync","certDatas","values","certData","validFromDay","validFromMonth","validFromYear","validToDay","validToMonth","validToYear","SelectedValue","selectedValue","showSelectionDialog","certResult","selectFileCerts","comment","isDetached","withoutEnchance","splashMessage","SetSignatureAsync","unsignedFile","versionID","GetFileHashAsync","enhanceSignedHash","signedHash","GetFileSignatureAsync","GetEnhanceSignatureByHashAsync","AddSignatureToFileAsync","certificateSerialNumber","fileHash","CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256","certificatesFromStore","certificatesCount","currentCertificate","oSigner","propset_Certificate","propset_Options","CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN","oHashedData","propset_Algorithm","SetHashValue","oSignedData","propset_ContentEncoding","CADESCOM_BASE64_TO_BINARY","SignHash","CADESCOM_CADES_BES","GetBase64String","AddDetachedSignatureToFileAsync","AddDetachedSignatureFileAsync","fileCard","fileVersion","signatureData","signatureToken","source","getSignatureCreationToken","eventType","FileSignatureEventType","signature","createSignature","notifySignAdded","signerName","signatureContent","fileSignatureName","getFileNameAndExtension","blobData","Base64ToBlob","fileSignature","createFile","addFile","fileVersionRowID","workflow","CdProcessHelper","Relocate","PerformanceProcessName","AcquaintanceProcess","SendForRevision","FdApprove","FdDisapprove","FdAdditionalExecution","CdCardHelper","CanStartExecutionProcess","CanChangeStateToIrrelevant","CanStartCreateBasedDocument","tryGetFromInfo","CheckSkp","CanAddToFavorites","CanRemoveToFavorites","CanCopyCard","CanStartSearchFileFromCards","cardType","isRejected","filed","visible","cardSectionPermissionInfo","sectionPermissions","completedTaskTypeID","signingFilesInfo","officeFormats","fileNameAndExt","fileExt","options","lastFileVersion","cardFile","pkfsaiSection","lastFileVersionContentResult","GetFileContentAsync","signingFileInfo","SigningFileInfo","isNeedSigning","checkMainCertificate","withoutNep","withoutPikProjectCheck","organizationExtID","organizationName","withSignatureContent","pkpdiSection","dssUserCert","GetUserCertInfoAsync","nepUserCert","isExistsDssCert","isExistsNepCert","isQualifiedOrg","IsOrganizationNeedQualifiedSignature","isCuratorPersonnelSigning","IsCuratorPersonnelSigning","certEnhancedKey","isNeedNepRelease","isAutoSigningPersonnelDocuments","ExternalUserGuid","EmployeeGuid1C","IsAutoSigningPersonnelDocuments","SignatureContent","certIssuerName","boxID","departmentID","CertCompany","CertAdr","CertOwner","companyExternalID","signingFilesInfoResult","GetSigningFilesInfoAsync","dssRequestFilesSigningInfo","readFileContentAsBase64","Version","isInWork","CardFile","dssRequestFileSigningInfo","DssRequestFileSigningInfo","IsInWork","dssSignRequest","dssSignResponse","dssResponseFilesSigningInfoJson","dssOperationStatusName","dssResponseFilesSigningInfo","parse","dssRequestInfo","VersionRowID","ContentInBase64","ContentBase64","SendCdSignRequest","withEdRoles","withRoles","withApprovementRoles","dssResult","Company","SignBase64","ValidFrom","ValidTo","pkfsRow","fileVersionContent","setContent","version","contentBase64","FileName","ECMRequestTypes","ECMGetCostItemByCategoryRequestID","VisibilityTileCreateContractDocument","ECMIsPartnerInComfortPerimeterRequestID","ECMResetProcessesRequestID","PkIsUserBelongsToRole","NonGeodeticSchemeType","PkMatrixWorkplaceHelper","requestIsUserInRole","responseIsUserInRole","alias","localization","mobxReact","string","docState","currentRole","templateFileRowID","CdTechnicalDocumentationClientHelper","_disposer","referencesGrid","selectedRow","refTypeName","setSectionPermissions","ProhibitDeleteRow","AllowDeleteRow","table","eorder","order","currentFile","currentRowName","fileVirtual","CdRdListHelper","RdListFileID","downloadFile","ensureContentLoaded","previewManager","showPreview","rdSection","stageID","rdDivisionID","cipherIsReadonly","SetRenovation","SetControlVisibility","ReadOnlyFields","VisabilityControls","CdRdStages","WorkingDocumentation","stateID","refreshApprovers","blockVisibility","onClick","FillApprovers","ClearFields","FillRegionCityAndProject","ProjectDocumentation","rdDivisionCipher","rdDivisionName","rdSubdivisionCipher","rdSubdivisionName","prpSection","IsRenovation","controlNamesOldAgreementTDProcess","controlNamesIfRenovation","controlNamesIfNotRenovation","ObjectCategoryID","ObjectCategoryName","fieldNames","controlNames","ChContextRoles","DirectionManager","ArContractAdditionalApprover","ArContractInitiatorLeader","AuthorId","CdApprovalListHelper","ApprovalListFileName","AcquaintanceListFileName","ApprovalListName","Moment","CdStaticRoles","CdSimpleSignAllowed","PoAAdminRoleID","CanWatchXmlInMachineReadablePoA","IrdAdministrators","УправлениеДострояИВосстановления","DefaultCompletionOptions","CreateChildResolution","Delegate","RdListFileName","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","func","symbol","any","arrayOf","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","runClearTimeout","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","fill","readUInt8","ctor","superCtor","super_","TempCtor","_typeof","iterator","g","multiple","setAttribute","accept","display","body","appendChild","h","addEventListener","removeChild","createEvent","initMouseEvent","dispatchEvent","workplaces","storage","cardRequest","cardService","types","tree","ChCardFlagsInfo","PkEditCaseFlag","PkCreatedBasedDVFlag","PkRegistrationWithoutAgreementFlag","PkStartReviewProcessFlag","PkStartAlignmentOutgoingProcessFlag","PkStartAlignmentMemoProcessFlag","PkStartAlignmentOrdProcessFlag","PkStartExecutionsAssignmentProcessFlag","PkReRegistrationFlag","PkReRegistrationORDFlag","PkAddPartnerFlag","PkStartLetterCreditProcessFlag","PkEditRegistrationDateFlag","PkUserInAnalyticsRole","PkCanSendMailIntoSupport","PkCanCustomDelete","PkCanRevocateDocument","ChProcessHelper","PkIncommingProcessName","PkOutgoingProcessName","PkMemoProcessName","PkLetterCreditProcess","PkAssignmentProcessName","PkRdndProcessName","ApprovalProcess","DocumentIsSigned","SendForResubscriptionID","PkReturnToCoordinator","PkReturnToCoordinators","SendToPerformer","PkStopAgreement","Reject","PkSignInDiadoc","PkSign","PkRegisterDocument","PkSendRepeat","PkIncomingKinds","PaymentToTheSupplierID","PaymentToTheSupplierName","ReturnToBuyerID","ReturnToBuyerName","ProvisionOfDocumentsID","ProvisionOfDocumentsName","CompensationID","CompensationName","RefundID","RefundName","RequireID","RequireName","PenaltyID","PenaltyName","COActID","COActName","PopulationID","PopulationName","AgendaID","AgendaName","DeclarationID","DeclarationName","JudgementID","JudgementName","PerfomanceListID","PerfomanceListName","ResolutionOfBailiffsID","ResolutionOfBailiffsName","RequestFromLawID","RequestFromLawName","DefinitionID","DefinitionName","RequestFromGovernmentID","RequestFromGovernmentName","WarrantyServiceID","WarrantyServiceName","TransmittalLetterID","TransmittalLetterName","NotificationsRequestsID","NotificationsRequestsName","FinesID","FinesName","CooperationID","CooperationName","TransferToCRMSDID","TransferToCRMSDName","ViolationOfTheTermID","ViolationOfTheTermName","RepairPaymentID","RepairPaymentName","PropertyID","PropertyName","FinishingBuilderID","FinishingBuilderName","RecalculationID","RecalculationName","TerminationOfDDUID","TerminationOfDDUName","TerminationOfPDKPID","TerminationOfPDKPName","PkSettingsCardSingletones","ChStaticRoles","ElectronicApplicationForPass","ObserverOnAllAgendasID","PkCoordinatorOGO","PkCoordinatorOGOName","AdministrativeGroupRoleID","CivilianCourtsMOID","CivilianCourtsMOName","ArbitraryCourtsID","ArbitraryCourtsName","SupportAdministratorID","SupportAdministratorName","AccessToDmsID","AccessToDmsName","ChMetaRoles","AllContractorsID","ChChanceryTileExtension","TileExtension","HiddenTilesForContractor","initializingGlobal","panel","workspace","leftPanel","Tile","icon","contextSource","TileGroups","Cards","command","ChChanceryTileExtensionHelper","startIncomingProcessAction","evaluating","canStartIncomingProcess","startOutgoingProcessAction","canStartOutgoingProcess","startMemoProcessAction","canStartMemoProcess","startLetterCreditProcessAction","canStartLetterCreditProcess","startAssignmentProcessAction","canStartAssignmentProcess","updateStamps","canUpdateStamps","canAttachCorrespondencePrintForm","sendEmailNotification","canSendEmailNotification","startRdndProcessAction","canStartRdndProcess","canStartVndProcess","startRegistrationWithoutAgreementAction","canStartRegistrationWithoutAgreement","startEditRegistrationDateAction","canStartEditRegistrationDate","startReRegistrationAction","canStartReRegistration","startReRegistrationORDAction","canStartReRegistrationORD","RevocateDocumentTileAction","CanRevocateDocument","editRegNumber","canEditRegistrationNumber","actionTile","tryGetTile","startPerformanceProcessAction","canStartExecutionTile","startAcquaintanceProcessAction","canStartAcquaintanceTile","changeStateToIrrelevantAction","canChangeStateToIrrelevant","createChangeAction","canStartCreateChange","startRecallForRevisionAction","canStartRecallForRevision","startCreateBasedDocumentAction","canStartCreateBasedDocument","chChangeStateToCompleted","canChangeStateToCompleted","startMergeDuplicatesIDPAction","canStartMergeDuplicatesIDP","sendMailIntoSupport","canSendMailIntoSupport","PkOutgoingMailSenderCommand","CanSeePkOutgoingMailSender","cardOthers","deleteCard","canDeleteCard","SetIsObserverOnAllAgendasAsync","rightPanel","OpenCourtsSettingsAsync","Settings","CanOpenCourtsSettings","typeid","IsUserContractor","HideTilesForContractor","otherTile","deleteTile","disableWithCollapsing","createFileFromTemplate","_isObserverOnAllAgendas","contractorRole","isEnabled","isCollapsed","openCard","PkCourtsSettingsCard","setIsEnabledWithCollapsing","currentTile","setIsCollapsed","pdiSection","kindID","isRefund","isDDY","isPDKP","cardTypeIDIsIncoming","exist","CategoryID","storeInfo","saveCard","showConfirm","GetDateTimeNow","success","rearDate","date","setMinutes","getTimezoneOffset","dateCheck","setHours","fullNumber","year","baseCard","requestInfo","baseCardToken","KrToken","tokenStorage","setInfo","LoadingOverlay","show","createCard","creationModeDisplayText","docKindID","projectIDs","slice","parameterList","getProjectsCriterial","getDocKindCriterial","getBesidesCardCriterial","selectDoublesCardsAndSave","showConfirmWithCancel","parameterMetadata","ViewParameterMetadata","hidden","dataType","DbType","RequestParameterBuilder","withMetadata","addCriteria","equalsCriteriaOperator","readOnly","asRequestParameter","nonEqualsCriteriaOperator","showViewsDialog","doubleCardIds","viewContext","Merge","defaultRolesResponse","parameters","selectedItem","saveBeforeCreatingCard","contractRequest","refreshView","view","deleteFlag","PkFileTypes","GetFilesFromCardType","GetInventoryContentType","CorrespondenceSendingRequestPrintForm","PkGetDownloadContractsReportContent","PkGetDownloadActsAndContractsReportContent","PkGetDownloadActsReportContent","PkGetDownloadLinkedDocsReportContent","CsvDataService","filename","separator","headers","columHearders","csvData","cell","toLocaleString","url","PkCardTileExtension","PkCardTileExtensionHelper","startApprovalProcessAction","canStartProcess","startProductionProcess","canStartProductionProcess","returnToRework","canReturnToRework","startExecutionProcessAction","canStartExecutionProcess","canStartAcquaintanceProcess","pkDownloadContractsReportRootTile","Bottom","canDownloadContractsReportRoot","Views","downloadContractsReportFiles","downloadContractsCsvFiles","pkDownloadActsReportRootTile","canDownloadActsReportRoot","downloadActsAndContractsFiles","downloadActsFiles","downloadActsCSVReportAsync","isWorkingDocumentation","CheckIsInvestment","techDocTileVis","CanStartAcquaintanceProcess","workplace","parent","text","mess","tryGetRows","reportVMInfo","listID","rowValue","dlgFileName","dlgDefaultExt","SaveFileContent","columnsArray","objectArray","readonlyMap","exportToCsv","PkDeleteTileOfViewExtension","viewDelete","AccessLevel","UserAccessLevel","Administrator","initializingLocal","tileDeleteCard","canCustomDelete","TessaActKinds","ActWorkServicesTessa","EmptyTessa","TorgTessa","InvoiceTessa","ProformaInvoiceTessa","UPDInvoiceTessa","UPDSetTessa","UPDTransferTessa","ReconciliationActTessa","ServiceDetailsTessa","NonformalizedEtcTessa","Ks2Tessa","Ks3Tessa","NotificationTessa","PrescriptionTessa","CorrespondenceTessa","PackageAttachmentTessa","ActTransferPermissionsTessa","PrepaymentInvoiceTessa","ActAttachmentWithUseAgreementTessaID","ActStartGuaranteeDeadlineTessaID","ActReceivingtTransferTessaID","UKDTessaID","AdjustmentInvoiceTessaID","AdjustmentActTessaID","AdjustmentActAndInvoiceTessaID","InvoiceRevisionTessaID","InvoiceCorrectionRevisionTessaID","UniversalCorrectionDocumentRevisionTessaID","UniversalTransferDocumentRevisionTessaID","ActKsAndInvoiceTessaID","ActWorkServicesAndInvoiceTessaID","SingleBuildingActTessaID","AdjustmentActs","TessaArContractKinds","ContractKindTessaID","AdditionalAgreementKindTessaID","CancellationAgreementKindTessaID","AccountWithoutContractKindTessaID","TechnicalContractKindTessaID","AssignmentKindTessaID","TessaEDocumentKinds","ContractTessa","SupplementaryAgreementTessa","NonformalizedUnidentifiedTessa","ContractCancellationTessa","AccountWithoutContractTessa","ContractAttachmentTessa","ContractSupplementTessa","ContractTechnicalDocumentationTessa","NonPikDocumentsTessa","AdjustmentInvoiceTessa","InvitationToEdoTessa","ConfidentialityAgreementNDA","LetterCreditTessa","UKDTessa","LetterTessa","EDocumentShouldBeConverted","EDocumentShouldSendRejectToDiadoc","TessaPersonnelDocumentKinds","EtkTransmitionAgreementID","EdoAgreementID","RemoteWorkTransmittionAgreementID","MolContractID","AdditionalAgreementID","EmploymentContractID","StaffReductionNotificationID","ResignationLetterID","PersonnelTransferT5FormID","AdditionalAgreementToTdIntellectualPropertyID","RemoteWorkContractID","RevokeResignationLetterID","WorkbookForwardingLetterID","WorkOnDayOffAgreementID","OvertimeWorkOnDayOffAndHolidayOrderID","ConnectToPayDaySystemLetterID","ShouldBeShowCopyReceivedStampKinds","ShowRefuseSigningActionKinds","ShouldBeSkippedCuratorSigningKinds","PkRoleCalculationType","DivisionRoles","AccountantEntity","Manual","Other","ByDepartment","Collection","PkTaskTypes","PkSignTaskTypeID","PkSigningInitiationTypeID","PkWorkScopeApprovingTypeID","PkEngineerPTOCheckContractorTypeID","PkLoadingDocumentsTypeID","PkAdditionalOrderConsiderationTypeID","PkStartAdditionalOrderConsiderationTypeID","PkApproversAgreementFEUTypeID","PkActBecameResponsibleTypeID","PkExecutionTaskTypeID","PkAcquaintanceEFSTypeID","ArMatrixApproveTypeID","ArMatrixEditTypeID","ArMatrixConfirmStartProcessTypeID","ArMatrixConfirmVgoStartProcessTypeID","ArMatrixStartProcessTypeID","ArMatrixFillEmptyRolesTypeID","ArMatrixVgoPerformerConfirmTypeID","ArMatrixEditForProcurementControlTypeID","ArFillFromAUDTypeID","PkFdProcessHelper","PkReturnToEdit","PkCancelTask","PkRefuseSigning","PkAskAboutDocument","Disapprove","SubmitForExecution","SubmitForReview","PkSendToFEU","DigitalSigning","FdDelegate","PkNotMyDoc","PkNoAnswer","PkReasonedRefusal","SendToMdsProcessID","UpdateContractFromESUDProcessID","UpdateCalculationFromKCProcessID","FillCalculationFromAUDProcessID","ResetCalculationProcess","PkPrepareOrder","SignatureInfo","organization","Organization","PkSigningType","ArCompleteOptions","Acquainted","Reply","RecallSignDiadoc","RecallRejectDiadoc","GoDiadoc","TransferSignature","TransferRejectionSignature","SendRemoteAccountant","SendNotification","StartReviewAct","SendToEsud","SubmitDocumentToResponsible","RejectToPartnerInDiadoc","PkSignDSS","CreateKSD","AttachDocument","DownloadType","PkPeriodicity","PkPeriod","PkDayType","PkWeekdays","ArticleType","PkMethodsEmbroideryOnStickersID","EfsAudMethodIds","PkMethodsEmbroideryOnStickers","Map","Manually","Excel","FromEsud","Script1To1","ConstructorOfActs","ArContractTypes","PkCardHelper","filterByArticleObjects","requiredApproversOnly","aaSection","contractIDs","GetActContractIDsString","objectIDs","GetObjectIDsFromTableArticleIdp","objectWithSumIDs","GetObjectWithSumIDsFromTableArticleIdp","livingComplexIDs","GetLivingComplexIDsFromTableArticleIdp","receiverKckExternalID","senderKckExternalID","articleType","articleOHRListSection","Ohr","Idp","financialResponsibilityCenterIDs","GetFinancialResponsibilityCenterIDsFromTableArticleOhr","objectOtherIDs","GetObjectOtherIDsFromTableArticleOhr","bookkeeperInfo","PkBookkeepersInfo","approversInfo","PkApproversInfo","requiredApproversInfo","PkRequiredApproversInfo","signersInfo","PkSignersInfo","executorsInfo","PkExecutorsInfo","FillRequiredApprovers","FillSigner","FillBookkeepers","FillExecutors","bookkeepersSection","IsNeedFillByObjects","calculationType","CalculationType","approversSection","requiredApproversSection","GuidDiadoc","executorsSection","every","acSection","isValid","idpSectionVirtual","ohrSectionVirtual","financialResponsibilityCenterID","objectOtherID","livingComplexID","oldValue","existingFile","insertModeID","signedInfo","showRole","showSignedDate","showCopyReceivedStamp","showOrganization","signaturesInfo","signed","fileForPrintName","existingFileForPrint","fileForPrint","OutgoingNeedSigningAsync","isNeedAddPrintForms","isNeedShowCopyReceivedStamp","signingType","pkOutgoing","Local","dciSection","cardsFilesInfo","withContent","cardFilesInfo","FileContainer","SigningInfo","Card","CompletedTask","hasErrors","DssCspType","filecContainer","completedTask","CardID","SigningCardInfo","companyExtID","companyName","IsNeedSigning","CertIssuerName","CertEnhancedKey","IsNeedDssSigning","CompanyExtID","CompanyName","IsNeedNepRelease","isNeedSigningResult","IsNeedSigningAsync","PrintFormsCardInfo","IsNeedAddPrintForms","IsNeedShowCopyReceivedStamp","isNeedAddPrintFormsResult","IsNeedAddPrintFormsAsync","CardFilesInfo","printFormsInfo","PrintFormsInfo","CreateAsync","PkMemoKinds","ArDiadocDocumentKindsEnum","ServiceDetails","SupplementaryAgreement","Nonformalized","TrustConnectionRequest","Torg12","AcceptanceCertificate","ProformaInvoice","PriceList","PriceListAgreement","CertificateRegistry","ReconciliationAct","Contract","Torg13","XmlAcceptanceCertificate","Invoice","InvoiceRevision","InvoiceCorrection","InvoiceCorrectionRevision","XmlTorg12","UniversalTransferDocument","UniversalTransferDocumentRevision","UniversalCorrectionDocument","UniversalCorrectionDocumentRevision","PkLetterCreditKinds","PaymentForServicesID","PaymentForServicesName","PkMemoNomenclatureKinds","PkCourtTypes","PkCourtRoles","PkOutgoinClaimType","RVR","ReimbursementOfFinesFromTheAuthorities","FinesFromTheQualityDepartment","ContractFees","Warranty","ArHelper","arArticleOhrListVirtual","ClearCollectionSection","RemoveRowFromCollectionSection","ClearArticlesOHR","ArticleOhrInfo","article","rowVirtual","ArticleID","ArticleName","HierarchicalCode","Decimal","arArticleIdpList","arArticleIdpListVirtual","dciSect","aaSect","arArticleIdpListRows","arArticleIdpListVirtualRows","articleIdpRow","articleIdpRowVirtual","amountVat","KCKPartnerGPMFSExtID","PkIncomingRefundTypesEnum","RefundCashBTI","RefundRepeatedMeasurementBTI","RefundCashOverpay","RefundCashByTermination","PkOutgoingReceivingMethods","ChUIHelper","kind","templateControls","pklciSection","pkiiSection","pkidiSection","pksmSection","vatRateID","VATAmount","departmentControl","addreseeControl","addreseeByBelongingControl","CheckBindingDepartmentWithAdressees","isAddButtonAvaible","isDeleteButtonAvaible","isRejectButtonAvaible","PackageContents","addRowButton2","AddClientDocumentLogicAsync","leftButtons","removeRowButton","isSelected","removeRow","rejectRowButton","GetParametersForClientDocsLogic","PkPackageOfOriginalVirtual","DocID","FullNumber","DocDate","Kind","PartnerName","partnerID","Subject","DocTypeName","dealNumber","json","GetDocListJson","requestParameter","parameterMetadata3","requestParameter3","pkIncomingInfo","ChangingFieldsByIncomingDocumentKind","AccessibilityOfEditingControlsByTask","customerRequest","IsDAiAP","ChangingFieldsByIncomingDocumentCustomerRequest","CheckCourtBlock","CheckLogicCourtBlock","flag","PkDocumentCommonInfo","UserFioOutgoingControl","AddreseeControl","AddreseeByBelongingControl","OutgoingVgoDocTypeControl","DepartmentID","extID","PkChanceryPartners","PkOutgoingPartnersKCK","PkOutgoingReceiverKCK","ShowVGOControls","IsVGO","PartnerExtID","IsNotAutomated","pkii","CheckNumberConrol","mail","row2","Email","AddPartnersEmail","PkOutgoingPartnersKCKCopy","PkOutgoingReceiverKCKCopy","PkChanceryPartnersCopy","pko","DocumentCommonInfo","RequesVGOPartners","PkIncomingInfo","RequesVGOPartnersForIncoming","UserFioIncomingVgoControl","FIOControl","button","CreateCardFromTaskIsVgo","Supported","PartnerKCKIsNotAutomated","IncomingNumberRef","CheckNumber","IncomingNumber","CourtBlock","FlagTwo","withClear","courtBlock","pkPartCourtSection","CheckVgoID","setOperationInProgress","IsVgo","saveCreationRequest","cardModifierAction","newCard","PkDCI","PkAddressees","ChangingFieldsByOutgoingDocumentCustomerRequest","departmentComplete","addreseeComplete","addreseeByBelongingComplete","pkaSection","pkabbSection","pkdciSection","caseNewId","CaseOfTheTopLevelId","CaseOfTheTopLevelName","canAddPartners","partners","canAddPartnersCopy","partnersCopy","kindControl","CheckBindingDepartmentWithMemoType","hasEmptyValue","signerControl","CheckBindingDepartmentWithSigner","signerComplete","pkMemoInfoSection","AdvanceReportId","pkpsSection","fileContentEditorControl","uploadFileContentButton","containerFileChanging","fileAdded","fileRemoved","removed","blobFile","reader","FileReader","readAsArrayBuffer","onload","readerEvent","target","base64string","editedText","ActionFileTemplate","pkRejectApprovalOnly","tryGetTasks","RemoveDocSigned","workspaceChanged","taskModel","actionIndexToRemove","taskWorkspace","actions","completionOption","additionalActionIndexToRemove","additionalActions","HideRegistrationUdoFlag","cardTypeID","flagControl","pkrpSection","contractControl","kCKName","payerName","pkDocumentCommonInfo","stateId","ArUIHelper","FillArticlesIDP","FillArticlesOHR","InserObjectByCustomerAsync","value2","tabs","articlesVirtSection","articlesSection","pkLetterCreditInfo","PlannedPaymentDate","ChangingFieldsByLetterCreditKind","prepaymentControl","deliveryPeriodFromControl","deliveryPeriodToControl","paymentTypeControl","nomenclatureControl","otherPaymentsControl","isFundingRequiredControl","prepaymentTermControl","articlesIDPBlock","ArticlesIDPControl","ArticlesIDVirtualPControl","contractorKCKControl","payerControl","refundType","tabscontrol","selectedTab","articlesIDPControl","articlesIDVirtualPControl","DateForExecution","pkadbblSection","removeRows","executionDate","caseNewControl","сaseOfTheTopLevel","receibingMethodControl","applicationControl","descriptionControl","paymentInformation","refundTypeControl","CulpritIdentified","AmountIsKnown","IsAmountAgreed","AgreedAmount","AgreedAmountOGO","isFinancialControl","TerminationBlock","ComentOSS","sender","incomingPayer","deal","incomingContractControl","canAddPartnersControl","receiverKCKControl","partnerCulpritControl","receiverKCKCopyControl","canAddPartnersCopyControl","partnersControl","partnersCopyControl","partnersKCKControl","partnersKCKCopyControl","NotificationOfTenderResultsId","claimSubTypeControl","CanAddPartnerPermission","MdsDealID","pkIncomingInfoSection","MdsDealNumber","MdsDealGuid1c","pkClientDocumentInfoSection","pkDocumentCommonInfoSection","field","mdsDealDict","MdsDealDict","Fields","ContainsKey","Keys","FirstOrDefault","Values","FieldValue","mdsObjectDict","MdsObjectDict","sields","prepayment","status","commentString","fComment","substring","pos","lastIndexOf","resultComment","open","InstructionUrl","pkObjects","contractInfoBlock","arfoBlock","claimPerformersBlock","rework","claimHoldingAmount","culpritResponse","сlaimTypeID","claimTypeControl","powerOfAttorneyBlock","claimPerformers","PowerOfAttorneyRevocationId","isSignResponseReqControl","receivingMethodID","ЭДО","receiverOrigin","ResponseToIndRequestId","Where","responseFieldsVisibility","taskHistory","pkcpSection","firstOrganization","targetOrganization","ppiSection","pkObjectListSection","FillAssignmentAndApprovementTable","objSection","ppdSection","patSection","membersCollection","approvalTable","AssignmentDict","assignments","member","rowsAT","currentRowAT","Decision","Availability","ApproverID","ApproverName","approverID","approverName","MembersDict","membersDict","StageID","UserName","polSection","docKind","objectNames","objectsControl","pcnSection","ChangingFieldsValuesByIncomingDocumentKind","ClearSenderFields","ChangeNotSavedDataCourt","CustomerRequest","ControllerCustomSubject","SupportsCustomSubject","PkSubject","PkSubjectCustom","PkHideCustomTheme","ShowCheckBoxCustomSubject","ShowCustomSubject","CulpritTypeID","AmountTypeID","Culprit","CulpritAmount","cardSection","ClearDealField","InsertADealByAContract","pkMemoInfo","CleaningInAMemo","LockTemplateControls","GetAndSetInfoFromSettingsCard","SetControlsVisibility","kindId","pkIncomingSection","IncomingPayer","ClearObjectTable","SetDateOfConclusion","InsertAPayerByAContract","PayerID","PayerExternalID","PayerName","ContractID","pkClientSection","documentCommonInfo","pkAddresseesRows","pkAddresseesByBelongingRows","pkPersonalSignersRows","pkApproversRows","perfomerControl","subjectControl","ObjectID","objectRow","ObjectFullName","ObjectCode1c","RealEstateID","RealEstateName","pkRdProperties","mainSettingCardList","MainSettingCardList","memoSettingsCardAddressees","MemoSettingsCardAddressees","memoSettingsCardAddresseesBB","MemoSettingsCardAddresseesBB","memoSettingsCardApprovers","MemoSettingsCardApprovers","memoSettingsCardSigners","MemoSettingsCardPersonalSigners","memoSettingsCardReadOnly","MemoSettingsCardReadOnly","BusinessTripId","CancellationWithoutSwitchingToAnotherONTypeID","CancellationByClientInitiativeTypeID","CancellationByBuilderCompanyInitiativeTypeID","PerfomerID","MotivationFinishingTypeID","MotivationVISTypeID","PerfomerName","Description","pkAddresseesSection","addresseeRow","AddresseeID","AddresseeName","pkAddresseesByBelongingSection","addresseeBBRow","AddresseeBBID","AddresseeBBName","signersSection","signerRow","SignerID","SignerName","AddreseeReadOnly","DepartmentReadOnly","PerfomerReadOnly","SignerReadOnly","SubjectReadOnly","DescriptionReadOnly","outgoingApprovers","ApproversReadOnly","ApproversRequired","ObjectListRequired","pkOutgoingSection","buttonControlModel","anyNavigator","navigator","clipboard","writeText","isCustomerDecision","isTermination","isRevaluation","isNotActiveTask","isPerformer","PkRevaluation","AmountDecryption","RefundedAmount","pkBankAccountToCreateSection","bankAccountToCreateBlock","bankAccountIncomingControl","ChangingFieldsByIncomingDocumentContractOrVATRate","ChangingFieldsByCreditLetterContractOrVATRate","pkcdiSection","Hidden","packetID","ContractforObject","DealforObject","PartnerKCKID","PartnerKCKExternalID","PartnerKCKName","PartnerKCKGuidCRM","InitializeOrdering","InitializeNomenclatures","InitializeVisiabilityOfExpenses","tableForOrdering","columnForOrdering","maxOrder","max","pkExpenseReportsSection","pkPersonalSignersSection","nomenclatureRefID","nomenclatureRefName","NotaryServicesID","PostageID","EconomicExpensesID","OtherExpensesID","readers","instructionHistoryTable","refundTypeID","paymentPurpose","GetPaymentPurposeByRefundType","contractNumber","tableName","params","memoInfo","setTableVisiability","captionVisibility","memoTypeId","InitVatCalculation","InitExpenseCopying","expenseReports","SubscribeForFieldChanging","vatCaption","sum","GetVatValue","financial","additionalExpenseControl","pkbtSection","pkbtvSection","pkbtGridView","addButton","employeeID","employeeName","GetPkBusinessTripsViewParameters","AddPkBusinessTripsVirualRows","of","selected","addedRow","kek","entries","existingRow","selectedValues","employeeParamMetadata","isSpecifiedInPkMemoParamMetadata","addedIDsParamMetadata","deletedIDsParamMetadata","employeeParam","isSpecifiedInPkMemoParam","isFalseCriteriaOperator","addedIDs","addedIDsString","addedIDsParam","deletedIDs","deletedIDsString","deletedIDsParam","subject","description","PkParticipantsCourt","CourtPartners","CourtPart","Ответчик","Истец","PartnerID","PartnerExternalID","addresseesByBelonging","Civilian","Arbitration","ClearSection","ArTaskTypes","ArReViewProcessTypeID","PkActConsiderationTypeID","PkActSignerDiadocTypeID","PkActApproversAgreementTypeID","PkActStartAgreementProcessTypeID","PkActAcceptanceAccountingTypeID","PkActAgreementOnPaperTypeID","PkActInitializingApprovalProcessTypeID","PkActOnAccountantAgreementTypeID","PkPrimaryDocsDiadocTaskTypeID","PkEDocumentProcessingTypeID","PkEDocumentSendToEsudTypeID","PkEDocumentAttachDocumentTypeID","PkEDocumentConfirmCreateKSDTypeID","PkArticleStickerSendToEsudTypeID","PkEDocumentDocumentTypeTypeID","ArCreateAgreementEDOTypeID","ArStartAgreementEDOTypeID","ArCancelCreateAgreementEDOTypeID","PkEDocumentKSDExceptionTypeID","PkEDocumentKSDAwaitTypeID","PkEDocumentKSDAccountTypeID","PkUIHelper","focus","sectionSticker","stickerTableControl","arArticleStickersRows","parentRowId","n1","n2","openRow","isOpenNext","ArTypeProcedure","WithoutTenderMonopolist","WithoutTenderMonopolistName","UnitPrices","UnitPricesName","WithoutTenderGovernmentStructure","WithoutTenderGovernmentStructureName","WithoutTenderLessThanOneMillion","WithoutTenderLessThanOneMillionName","WithoutTenderInGroup","WithoutTenderInGroupName","WithoutTenderProfitable","WithoutTenderProfitableName","HistoricTreatyOfMorton","HistoricTreatyOfMortonName","WithoutTenderOther","WithoutTenderOtherName","ANTP","ANTPName","WithoutTenderPartner","WithoutTenderPartnerName","ANTPElectronic","ANTPElectronicName","Tender","TenderName","WithoutTender","WithoutTenderName","ArContractCategory","DocumentManagementAgreement","ConfidentialityAgreements","DMS","ArEDocumentFdStates","DoneStateID","PkLinkHelper","range","createRange","removeAttribute","innerText","color","textDecoration","fontFamily","selectNode","selection","getSelection","removeAllRanges","addRange","successful","execCommand","tab","totalFilesSize","totalFilesCount","returnArchive","Cobine","getStorage","digest","FillPassportInfo","senderKCKForEnterprisesGroup","receiverKCKForEnterprisesGroup","getSingleBankAccountRequest","getSingleBankAccountsResponse","BankAccountID","BankAccountName","FillAnalyticsStickersAsync","ArticleButtonLogic","contracts","EditContractsRowFieldsHandle","isChanged","contractResponse","arActRequestDirectumCode","arActRequestNumber","arActRequestContractDate","FillObjects","ClearArticlesIDP","SetContractControlsVisibilityByDocumentKind","getDocumentKindFromCard","partnersControlModel","flag_multiple_partners","FillPartners","SetReadonlyContractWhileFieldIsNull","codeOKTMO","codeBC","SetOtherPaymentsControlsReadOnly","otherPayments","archiveActPermissions","vatAmountPermission","vatAmountControl","vatRateIDPermission","vatRateCaptionPermission","vatRateControl","documentCommonInfoPermissions","amountPermission","amountControl","pkResponsibleBookkepersPermissions","AllowInsertRow","responsibleBookkeepersControl","columnValues","isAnalyticsStickers","archiveActSection","articlesIdpVirtual","setVisibility","removeButton","withObject","arActArticleStickers","NeedDetailedArticlesIDP","objectName","ArticleIdpInfo","IDPObjectID","IDPObjectCode1c","ObjectAddress","VAT","ExtContractArticleIdpID","IDPHierarchicleCode","IDPProjectID","IDPProjectName","IDPCityID","IDPCityName","IDPRegionID","IDPRegionName","ObjectLivingComplex","IDPLivingComplexID","IDPLivingComplexName","SetArticleStickerInActAsync","objectsList","isSame","objRow","objectRequest","objectResponse","articlesIdp","er","ef","SetRowFieldValue","fieldTypedValue","HideArticleStickerTableInAct","ArticleStickerTableOnEdit","articlesOHRVirtual","rowID","stateInserted","documentDate","documentNumber","diadocSection","deleteMessageControl","pkdSection","BindLinkButton","docShipmentsTableModel","tooltip","BindMultipleLinkButton","BindMultipleCopyButton","SetButtonVisibility","toolTip","urls","Set","CopyTextToClipboardAsync","names","ClickLinkToDiadoc","packetControlControlModel","ppcvSection","packetRefControlControlModel","AddButtonLogic","pdpivSection","openPacketButton","moveDownButton","moveUpButton","PacketControlLogic","pkppcvSection","refsTable","rowViewModel","rowDocID","isExistSimpleTask","isExistMainTask","taskDocIDs","taskDocIDsMap","backgroundColor","cardIDForPacket","paramAlias","paramCaption","psmiSection","systemID","parameterITSystemOfRequestMetadata","ITSystemOfRequestRequestParameter","parameterDocTypeOfRequestMetadata","DocTypeOfRequestRequestParameter","GetParametersForAddButtonLogic","addDocID","isConcatPackets","IsConcatPackets","AddDoc","cardIDs","docsInfoFromPackets","getTypedFieldValue","DocsInfoFromPackets","cardIDList","pemi","sysObjectID","sysName","diadocKindID","vatAmount","ChangingIfContractExists","arContractsSection","ClearArContractsTable","viewID","contractsGridViewModel","q","acSectionRows","contractsControl","isReconciliationAct","CheckingIfContractExists","exists","worksAndServicesTable","receiverKckInn","worksTypeViewModel","trim","aaIdpSection","vAT","percentChanged","articleAmountGuarantee","setPercentGuranteeEditability","percentGuarantee","ep","IsCollapsedWorks","worksAndServicesListSection","worksAndServicesItemsSection","worksAndServicesItemsVirtualSection","documentKindDiadocID","WorksAndServicesRowFieldChanged","realRow","newState","FillItemsForCurrentRow","WorksAndServicesItemsVirtualTableSetVisibility","mainForm","realRows","virtualRow","SetVisibilityOfWorkTypes","InitLinksForWorksAndServices","itemRows","GetItemRows","itemRow","FillSumWithNDS","FillSumNDS","FillSumWithoutNDS","newCount","KolTov","CenaTov","NalStID","StTovUchNal","SumNal","InitClearingOfIdpList","arActWorksAndServicesList","articleIdpList","serv","tableControl","SetRoleCalculationTypeTableHandle","SetControlEnableByRoleCalculationTypeTableHandle","SetIsRequiredApproversContains","entryControl","SetRoleCalculationTypeEntryHandle","valueSet","aavSection","rawSet","CreateGoToPacketActionAndHideOther","TaskActionViewModel","TaskActionType","Custom","TaskGroupingType","Default","signerID","userCertInfo","removingCompletionOptionID","RemoveTaskAction","removingCompletionOptions","additionalAction","attachmentCommentControl","rejectionCommentControl","isAttachmentCommentControlNotEmpty","isRejectionCommentControlNotEmpty","SetConrolVisibility","showCardsInfo","availableCardsIDs","availableCardsInfo","documentKindName","cardInfo","cardsInfo","confirmComment","tessaComment","cardStoreRequest","confirmResult","fileSource","createCardFileSourceForCard","createCardFileContainer","init","cAdESProvider","signFilesByDssResult","SendFilesToDssSigningAsync","groups","SigningGroup","CardsFilesInfo","signingFilesResult","GetCertificateAsync","needNepReleaseCompanyNames","setSign","SignFileAsync","AddFileSignatureAsync","cardsIDs","dssResponseFileSigningInfo","messageID","insertMessageInfoRequest","insertMessageInfoResponse","AddPrintFormsAsync","idpTab","ohrTab","objTab","arArticleOhrList","switchTab","articlesIdpVirtualGrid","articlesOhrVirtualGrid","objectsGrid","targetFieldName","articleRowID","articleParentRowID","stickersList","stick","articleStickersBlock","blocksBag","isHide","nextOpenRow","arArticleStickersTableControl","nextOpenRowBool","filterStickRows","SumAmount","arArticleIDPListVirtual","editRow","rowInitialized","stickerAmountControl","SetFocusInControlAndSelectText","isFocused","NextRowButtonClickAsync","nextRowButton","archiveAct","convertIDButton","documentKind","ReceiverKCKExternalID","ReceiverKCKName","SenderKCKID","SenderKCKExternalID","SenderKCKName","ActDate","ArEDocumentCardID","openToTheRightOfSelectedTab","responceReceiverKCKExternalID","GetReceiverKCKExternalID","sectionDocumentCommonInfo","rowDocumentCommonInfo","sectionPkIncomingInfo","rowPkIncomingInfo","responceDocKind","GetDocumentKind","sectionPkDocumentCommonInfo","rowPkDocumentCommonInfo","DateTimeOffset","IncomingDocumentLink","PkEDocumentKSDTypeIDCheck","documentKindIDValue","pkReferencesVirtual","states","DocumentKindDocumentKindValue","FullNumberValue","ActDateValue","NameValue","AmountValue","SenderKCKExtIDValue","ReceiverKCKExtIDValue","ParentContractID","ParentContractName","ArContractPartners","SetDocumentKind","getRequest","CardGetRequest","getMode","CardGetMode","ReadOnly","parentArContractPartners","parentArContractsUser","firstPartnerField","partnerAutomated","partnerName","parentContractTypeID","parentContractTypeName","responceINN","GetINNbyExtIDPartners","ArGetLastAgreementEDOAsync","oldArContractsUser","arContractsUserFields","authorDepartmentGuid1C","authorDepartmentID","authorDepartmentName","authorGuid1C","authorID","authorName","arPrtnersInPerimeterLength","arPrtnersNotInPerimeterLength","newRoleID","newPartnerInPerimetr","storeRequest","CardStoreRequest","cardStoreResponse","store","Warning","parentContractID","subjectLink","sectionFdSatelliteCommonInfoVirtual","updateContext","partner1ExtID","partner2ExtID","StateID","fdTask","receiverKCKExternalID","responce","responceID","responceName","outgoingRefDocs","rowLink","rowLinkRef","constGuid","actDate","typeCaption","PkArticle","listSectionName","articlesSections","listSectionVirtualName","UpdateAmountArticlesRowHandle","RecalcArticleRowSumToPay","RecalcArticleRowVatAmount","UpdateAmount","articleRow","varAmount","round","amountAdvance","InitSettingAmountIfOneArticle","UpdateArticleAmounts","isSetFieldState","aaiavSection","remainsControl","distributedControl","distributed","tmp","remainsValue","distributedValue","remainsVATControl","distributedVATControl","distributedVAT","amountVAT","remainsVatValue","distributedVatValue","articleSection","InitPercentGaranteeEditability","InitPercentGaranteeCalculation","InitAmountWithoutVATCalculation","ButtonForAddingRows","refSection","AddButtonLogicAsync","rawVatId","vatName","GetParametersForView","PkFileDownloadTileExtension","DownloadAllFilesInCardAsync","CanDownloadAllFilesInCard","SaveArchivedFilesAsync","ChangeMethodEmbroideryOnStickers","PkContractUIHelper","side","stickerForCurrentForPartner1Button","stickerTable","SetStickersInVirtualSectionAsync","stickerForInitialForPartner1Button","sectionVirtualName","sectionStickersName","sectionParentArticlesName","parentRowIDCick","arArticleStickersVirtual","arArticleStickers","arArticleParentStickers","filterArArticleStickers","parentArticle","virtualStickRows","_l","_p","_o","_m","SetColorForRows","removeChanges","stickerSection","validationMessage","parentArticleSectionName","articleStickerSectionName","withoutRowID","arContractVirtual","stickSection","parentArticleSection","costItemID","parentRow","filteredRows","costItemIDs","clearChanges","objectExtID","parentRowID","isNeedStickersFromContract","stickRow","stickerSectionName","articleSectionName","arContractArticleStickers","SumStickerAmount","arContractArticleIdp","c1","c2","_value","arContractArticleStickersInitial","initArticleFields","curArticleFields","setMethodEmbroideryOnStickersAndAnalyticsStickers","initArticles","curArticles","IsIDPArticle","FieldChanged","setFrom","partnerTable","partnerValue","fromContractParentRowID","stickerList","GetArticleStickersByParentRequestAsync","stickRows","MdsID","CostItemIdpItemCode","ContractSickRowID","Amount","oldRow","toCardSectionName","isReadOnlyStickers","amountArticleControl","amountWithoutVatArticleControl","parentArticleRowGuid","parentArticleRowID","deleteRowID","acp","fcpv","accpv","fcprv","fcpu","acpRow","roleRow","userRows","partnerExtID","fcprs","accpt","fdCustomParticipantsTable","requiredRoles","projectRoles","satelliteRow","fcptColorRow","controlRow","accptColorRow","roleName","aes","HasGuidCrm","IsContractHistorical","containsField","arArticleStickersVirtualTableControl","planned","completed","docNumber","toLocaleDateString","parentCard","sectionTable","BasedOnArEDocument","idContractCategory","acpSection","contractCategoryID","CdFdStages","PkCorrespondenceSendingTypes","ArContractFdStates","ProjectStateID","ArCostItems","Technical","mdsID","ArContractTileExtension","documents","fdtile","basedOnContractKindID","GlobalCreateCardTileAction","tile","mainContractTileBasedOn","MainTileVisibleCreateBasedDocument","additionalAgreementTileBasedOn","CreateCardTileAction","ContractTileVisibleCreateAgreementBasedDocument","concessionContractTileBasedOn","ContractTileVisibleCreateBasedDocument","agreementTerminationTileBasedOn","CancellationAgreementTileVisible","makeItValid","MakeItValidTileAction","ContractTileVisibleMakeItValid","transferToUS_Tile","TransferToUS_TileAction","TransferToUS_TileVisibility","voidContractTile","VoidContractTileAction","VoidContractTileVisibility","rejectProcess","RejectProcessTileAction","RejectProcessTileVisibility","сancelApprovalProcess","CancelApprovalProcessTileAction","CancelApprovalProcessTileVisibility","transferToProjectTile","TransferToProjectTileAction","TransferToProjectTileVisibility","mainProcessGroupTile","mainProcessGroupTileVisibility","sendStatusToKaTile","SendStatusToKa","changeCategoryTile","EditCategoryTileAction","EditCategoryAndTypeTileVisibility","changeContractTypeTile","EditTypeTileAction","copyCardLink","CopyCardLinkTileAction","copyDesktopLinkTile","CopyCardLinkDesktopTileAction","CopyCardLinkTileVisibility","copyCardTile","CopyCard","CopyCardTileVisibility","clearDiadocInfoTile","ClearDiadocInfo","ClearDiadocInfoVisibility","AddChecksForSendToApproveTileAsync","systemTileRoot","startProcessTile","StartContractApprovalProcessTileVisibility","MoveTilesToGroup","showDeleteCardTile","notificationSubscriptionsTile","HideTileCreateCardCopyInAssignment","HideTilesCreateCardTemplate","groupTile","tileIDs","tileID","parentTileApprove","tileApprove","CheckStickers","IsCheckedForSendToApproveContractAsync","CheckPdcFromKcFlagAsync","CheckFRCBlockCompleteAsync","isCanStartApprovalAdditionalAgreement","IsTenderControlFilledInAssignmentAsync","HasParticipantsStages","CheckMatrixStages","CustomParticipantsIsEmpty","CardSavingRequest","CardSavingMode","KeepPreviousCard","IsNoIdpArticlesByIdpCategoryPartners","articlesRows","partnersRows","partnerRow","contractCategoryIsIdp","customParticipants","customParticipantsUsers","contractCustomParticipantsTable","filteredCustomParticipantsRows","filteredCustomParticipantsRow","contractCustomParticipantsColorRow","errorList","financialResponsibilityCenterBlock","arContractsUserSection","FRCForBFSection","objectOtherSection","IsCreatorsContractsTechnicalCategory","arConSection","isAllow","contractKindDocumentKindID","isDraft","isCanVoidAssignment","VoidContractRole","_q","_r","ContractMakeItValidRole","_s","TechnicalSupportEmployeeRole","ContractSendToUSRole","contractTransferToUsUnavailableStates","FdSatelliteCommonInfoVirtual","StateName","CheckFieldValue","isCanCreateAssignment","ErrorParentState","IsFieldRequiredAdditionalChecks","refreshCard","oldCardModel","oldCard","newDciSection","newAcuSection","oldAcuSection","newAcvSection","oldAcvSection","newAcpSection","oldAcpSection","filesApplication","sf","fod","saveAsync","tryGetInfo","isCanCreateCession","cessionSide","CessionSide","PartnersList","isCancelButton","ccsv","assigneeExternalID","cedentExternalID","Partner","ExternalID","Inn","Automated","newContractsSection","oldContractsSection","oldProps","newProps","_storage","GetActualPartnerFieldsAsync","xRoleID","arContractPartnersCedent","contractCategoryName","contractCategoryExtID","contractCategoryIsHopeless","contractCategoryIsOIDP","contractCategoryGuidDirectum","contractCategoryIsTechnical","departmentName","departmentGuid1C","performerID","performerName","performerDepartmentID","accountantID","accountantName","accountantGuid1C","signedID","signedName","partnerDepartmentID","performerGuid1C","signedGuid1C","signedAttorneyID","signedDiadocSigningID","signedProcuratoryID","partnerIsMain","partnerIsVGO","landAsset","partnerIsExternal","partnerInPerimetr","contractsUserSection","cedentExtID","assigneeExtID","newFRCForBFSection","oldFRCForBFSection","newObjectOtherSection","oldObjectOtherSection","Framework","acuSection","evaluate","arDocsConstructor","IsCanTransferToProject","IsAdminAndTpRole","ckID","pkVirtualSection","viewModel","arContractsPartners","tessaCode","buyer","seller","sellerNewCategoryId","buyerNewCategoryId","sellerNewCategoryName","buyerNewCategoryName","errorMsg","newTypeID","newTypeName","GetContractSubject","ClipboardCopyLink","pathname","createCardCopyTile","createCardTemplateTile","contractKindID","typeProcedureID","tenderControl","cdLinkRequest","PkInnerDocumentKinds","TransferDocumentID","PkInnerDocumentTileExtension","HideTilesAsync","PkPersonnelDocumentTileExtension","CreateCardTemplateTile","deleteCardTile","cardActionHistoryTile","exportCardTile","PkPersonnelPacketVirtualTileExtension","PkEksInfoTileExtension","AddEksInfoTile","OpenEksInfoAsync","CanOpenEksInfoAsync","EksMessagesInfo","pkemivSection","eksMessagesInfo","eksMessageInfo","TaskID","MessageID","StatusID","StatusName","DateModified","TaskTypeID","TaskTypeCaption","ProhibitInsertRow","dialogType","getCardTypeById","RefreshEksMessagesInfoSectionAsync","eksInfoTable","dateModifiedColumnIndex","columns","header","setSortingColumn","taskIDs","ResendEksMessagesAsync","PkConfidantTypes","OrganizationId","EmployeeId","EmployeeName","PkKCKPartners","PaoPikSzPartnerExternalID","PaoPikSzPartnerID","PaoPikSzPartnerName","ArPowerOfAttorneyTileExtension","CreateAuthorityCardTileAction","CreateAuthorityCardTileVisible","RevokePowerOfAttorneyFromCardAction","RevokePowerOfAttorneyFromCardTileVisible","ClearDiadocErrorForPowerOfAttorneyTileAction","PkClearDiadocErrorTileVisible","RevokePowerOfAttorneyFromViewAction","RevokePowerOfAttorneyFromViewTileVisible","arPowerOfAttorneySection","arConfidants","poaDci","arConfidantsRow","userName","userExternalID","userDictionaryName","dci","PowerOfAttorneyRevocationName","confidantType","GetConfidantType","parseInt","pps","ppsNewRow","arPowerOfAttorneyRevocationList","apoav","pkChanceryPartners","pcpNewRow","pdci","distinctSelectedOrgs","distinctSelectedForms","firstSelectedRow","dictionaryName","ArContractsCompletionTileExtension","commandActionAsync","setEnableForTile","tessaViewRequest","TessaViewRequest","viewResult","viewParameter","getData","cardIdColumnIndex","getColumnIndex","cardSubjectColumnIndex","PkItSystems","TUSID","OtherTUSID","DirectualID","PikProjectID","PikIndustryID","ZUPID","ArActRecalculateAmountsTileExtension","RecalculateAmounts","EnableOnArActCard","pkServiceMessageInfo","RussianPost","Couriers","ExpressDelivery","PkCorrespondenceSendingRequestTileExtension","HideTiles","InitializingCorrespondenceSendingRequestTile","otherCreateCardCopyTile","otherCreateCardTemplateTile","createCardTile","documentsTile","createCardTilesIterable","enumerateTiles","createCardTiles","parentCorrespondenceSendingRequestTile","correspondenceSendingRequestTile","CreateCorrespondenceSendingRequestAsync","sendingType","SendingTypeID","PkEnvelopeTileExtension","InitializingCreateEnvelopeTile","InitializingCreateCorrespondenceSendingRequestTile","parentEnvelopeTile","envelopeTile","dispatchTile","russianPostTile","CreateEnvelopeAsync","CreateCorrespondenceSendingRequestEvaluating","pkeiSection","pkrvSection","recipientRow","EnvelopeID","SenderID","SenderName","SenderDepartmentID","SenderOrganizationID","SenderOrganizationName","ReceiverOrganizationID","ReceiverOrganizationExternalID","ReceiverOrganizationName","ReceiverName","ReceiverAddress","isExistsOutgoingReference","ArPowerOfAttorneyAdditionalTileExtension","ReRegistrationPowerOfAttorneyTileAction","ReRegistrationTileVisible","statesList","ArActTileExtension","ArActTileExtensionHelper","changeDiadocFolderCommand","changeDiadocFolderTileVisible","createPacketCommand","createPacketTileVisible","CanRevokeTemplateInDiadoc","RefillPasportInfo","CanRefillPasportInfo","rejectCards","canRejectCards","reSendActToDiadocAsync","canReSendActToDiadoc","isDocIDsValid","getDocIDsResult","getDocIDs","docIDs","selectNewUnit","unitDiadocID","unitDiadocName","changeFolderInCards","atTheSigner","firstCardID","nameParamList","docId","pkDiadocCommonInfoSection","pkResponsibleBookkeepersSection","pkResponsibleExecutorsSection","IrdDocumentTileExtension","IrdDocumentTileExtensionHelper","SetIsUserInRole","irdDocument","irdCreateIrdDocument","irdCreateActualIrdDocument","CreateIrdTileAction","irdCreateArchiveIrdDocument","pkEksInfoTile","copyCard","cdCopyCard","сopyTileDefault","saveTile","saveCloseAndCreateCardTile","irdVersionsIDsToArchive","selectIrdVersionsToArchive","isCanceled","documentIds","isAll","_isUserAdminIRD","settings","CardSingletonCache","IrdSettingsCardName","IrdSettingsCardID","isNewArchive","IsCreateNewArchiveIrd","IrdDialogResult","irdGetVersionsRequest","irdGetVersionsResponse","listVersions","VersionList","closeBtn","buttonClicked","selectRow","dialogIrdDocVersionInfoListVirtual","ver","EntityID","EntityName","uiDialogIrdList","docID","_isAll","_documentIds","_isCanceled","PkHideInnerDocumentTileExtension","pkInnerDocumentTile","isHidden","PersonalRoleUpdateDataInMDSTileExtension","updateDataInMDS","UpdateDataInMDS","UpdateDataInMDSTileVisibility","sec","login","individualGuid1C","setChanged","isSupportAdmin","IsUserInRoleAsync","ExtensionContainer","registerExtension","extension","stage","ExtensionStage","AfterPlatform","PkArticles","InitSumToPayEditability","InitFieldSummation","InitSumToPayCalculation","InitVatToPayCalculation","ColapseOhrArticlesAddButton","InheritNdsFromActToOhr","mainSection","arArticleOHRListVirtual","rateID","rateCaption","getSumByRow","InitFieldCustomSummation","setSumToPay","sumToPay","vat","vatToPay","isSumToPayProhipit","isVatToPayProhipit","setEditablilityOfSumToPay","totalSectionName","totalFieldName","summandFieldName","isRawSet","articlesTables","setAmount","totalTable","amountAdvanceSum","collection","amountAdvanceChanged","fieldsToCalculate","ArActUIExtension","CardUIExtension","super","articles","ohrPkArticle","idpPkArticle","DocumentsIDPPartnersLogic","ContractSenderReceiverLogic","InitializeTableObjects","CalculateVATAmount","EditSenderHandle","EditReceiverHandle","EditContractHandle","EditContractsHandle","EditDocumentKindHandle","EditTableArticlesIdpHandle","UpdateInvoiceDateAndNumber","DocumentShipmentsReadonlySetting","DiadocDeleteLogic","PacketCardLogic","DiadocButtonLogic","InitializeTableWorksAndServices","ChangesInUIWhenContractsIsChanging","SetReadOnlyAmountAndAmountVAT","ApproversHandle","ResponsibleExecutorsHandle","ResponsibleBookkeepersHandle","RequiredApproversHandle","SignerHandle","GoToPacketActionLogic","SetDiadocControlsVisibility","InitIdpLookup","InitObjectCopying","DssSignActionLogicAsync","InitArticlesTabsSwitching","SetOtherPaymentsControlsEnable","SetPartnerExceptionListControlsEnable","EditTableArticlesOHRHandle","CheckAutoSigningProcessIsCompleted","lastData","lastStoreResponse","storeResponse","targetRow","actArticleIdpList","dialogArticleIDPListVirtual","uiDialogIdpList","PermissionsSharedHelper","fieldsPermissions","ArFileHelper","isHistorical","fileDialog","filesFileControl","selectFileCategory","IfCanUploadFileForCategory","isCardTypeInWithoutRenameDialogList","CheckCardNeedForRenameDialog","fileNameHandler","SetFileNameAsync","tessaFile","path","FileNameHandler","fileCounter","fileInfo","pkContractFilesVirtualSection","additionalFiles","sides","SetFileName","dateValue","moment","AllowInsertFile","ProhibitInsertFile","stateSection","currentStateId","currentStateName","req","currentCard","sectionCDInfoName","sectionCDInfo","isDocFromKd","isNewVersion","answer","isErrorCheckContractCategory","checkContractCategoryRequest","checkContractCategoryResponse","cdLinkResponse","requestJson","IsNeedPersonalDataAdded","commonInfo","arContractPartnersSection","ArContractControlsWithField","StickerFormControlsFromExcel","ControlName","ArContractSharedHelper","isIncome","firstPartnerRow","secondPartnerRow","sellerEverBeenInPerimeter","byer","amountCurrent","GetArticleRowByPartners","initial","byerAutomated","PkAccreditationPerimeters","GkPIKPerimeter","ContractorMappingData","TypeProcedureMappingData","PdcChangeFieldMessage","ArContractUIExtension","KDPdcFromKCEditFields","covenantCategories","CanEditArticleIDPCurrent","_isReadOnlyStickers","numbertab","isNeedValidationArticle","CopyRow","plannedExpensesTableRowFieldWasChanged","disableSaving","_listener","stop","entityAccGrid","eDocumentHistoryGrid","linkToDiadocButton","linkCovenantsGrid","linkCovenantsConditionGrid","startValuesForIsFromKD","GetValuesForIsFromKD","GetChangesForIsFromKD","SetVisibilityForDmsContractCategory","HideEntityAccountantsTab","HideEDocumentsHistoryTab","OpenEDocumentsHistoryLogic","ValidatingEntityAccountantsRows","ProhobotEditArContractPlannedExpensesTable","WorkWithAllSidePartnersTable","CopySumFromAmountBeginning","InitializeContractTableObjects","NeedsProhibitAfterTransferToUS","OnPdcFromKcEditFields","WorkWithInitialAmount","WorkWithInitialAmountByPartnersAsync","WorkWithInitialAmountCurrent","VisibilityParentCardControl","EnableDateCancelletionControl","DateCancelletionControlIsRequired","EnableAmountLimitControl","EnableContactsOwnerControl","GroupEnterpriseLogic","VisibilityControlByType","ChangeArticleIDPController","SetVisibilityForArContractPlannedExpensesBlock","WorkWithTenderBuyersSellers","WorkWithTenderNonpartyPartners","VisibilityPartnerIsMainControl","WorkLandAssetControlAsync","VisibilityMainContractorContractControl","WorkWithTenderControl","VisibilitySerialNumberControl","WorkWithAmmountBeginning","WorkWithPaEdoTabAsync","WorkWithEdoReasonFieldAsync","WorkWithAmmountTotal","WorkWithContractType","DiadocButtonLogicWithPkDiadocInfo","SetBlockControlsForHistoryContracts","TypeProcedureMappingLogic","StickerForCurrentForPartnerButtonClickAsync","StickerForInitialForPartnerButtonClickAsync","ShowPreviewFile","HideControlForUserByRole","SetContractConditionTabVisibility","CreateCovenantButtonControlLogicAsync","CopyCovenantButtonControlLogicAsync","OpenCovenantCardAsync","OpenCovenantConditionCardAsync","WorkDocDate","ValidatingDateControlByYear","WorkWithRate","WorkWithCurrencyAsync","WorkWithYe","WorkWithArticlesInitialControlAsync","WorkWithArticlesCurrentControl","IsCardCopying","ClearFieldsWhenCopyCard","initShowLinkedDocsViewButton","initDownloadLinkedDocsButton","CheckTypeOfSupplementaryAgreement","ArticleStickersChanged","SetArContractVirtualSection","SetColorForTaskHistoryVirtualRows","CheckCurrencyAndYeControlsAsync","SetReadOnlyControlsInAdditionalAgreementKindAsync","SetSelectTypeProcedureButtonVisibilityAsync","SelectTypeProcedureButtonControlAsync","SetReadOnlyCostItemInAdditionalAgreementAsync","DiadocMarkEnable","CheckAmountFromEDTask","RemoveIsFromKDLogic","RemoveIsFromKDAndIsPdcFromKCLogic","WorkWithPaStatus","CopyArticleInVgoAssignmentKindAsync","SetReadOnlyChangeArticleIDPButtons","SetReadOnlyArContractPartnersInIntegrationsDoc","RecalcVirtualAmountByPartner","SetANTPElectronicIfPartnerChanged","SetTenderInNewAssignmentAsync","SetReadOnlyTypeProcedureControl","DocCommentValidation","SetEditableFields","SetReadOnlyArContractPartnersAsync","FromCDButtonControlVisibility","MethodEmbroideryOnStickersChangedAsync","SetVisibilityForConsolidatingLawyerBlockAsync","AUDLimitReportButtonLogic","EnableAmountOfTheAssignmentControl","SetVisibilityForFinancialResponsibilityCenterBlockAsync","AddPartnerTableRowEditorClosing","DiadocSignControlDisable","IsContractCategoryPresent","isAccessToDms","pkDciSection","diadocSignControl","AutocompleteFRCOwner","contractKindId","isContractKinds","filteredPartners","isVgo","isExpenditurePaper","isFinancialAnalytic","ArCorfirmRejectEDOAsync","ArCreateAgreementEDOAsync","ArCheckAgreementEDOAsync","ArApproveCancelEDOAsync","FinancialResponsibilityCenterBlockAsync","CheckAnalyticksStickersInParentContractAsync","arContractMdsFrcForBf","arContractMdsObjectOther","ownerID","FRCOwnerID","OwnerID","OwnerName","audLimitReportButton","audLimitReportUrlControl","setControlVisibility","methodId","AUD","MakeTheContractValid","SendToUS","parentCardID","requestParentAnalyticksStickersAndMethod","responseParentAnalyticksStickersAndMethod","sync","arContractPartnersTable","contractCategoryControl","isAutomated","GetArContractPartnerstInfoAutomatedAsync","PdcFromKcDocumentFromKDAllowEditFields","CheckKDPdcFromKCEditFieldsChanged","arContractsPartnerTable","IsAdmin","partnerRole","partnerSection","partnerFlag","roleFlag","partnerIsReadOnly","roleIsReadOnly","isPdcFromKC","isFromKD","isTransferToUS","IsArticleRowReadonlyAfterTransferToUS","arContractArticleIdpForPartner1","arContractArticleIdpForPartner2","arPaStatus","SetNullAllFieldsPaStatus","ReasonsWithoutPDCIDCancelletionControlIsRequired","containerFileChanged","removeFile","notifyRemoved","ChangeIsFromKD","acptControl","isPdcFromKc","IsPdcFromKc","newValuesForIsFromKD","partnersEqual","EqualListPartners","Partners","objectsEqual","EqualListObjectsByArticle","ObjectByArticle","startValuesEqualNewValues","DocNumber","AmountBeginning","AmountTotal","IsFromKD","EqualPartners","p1","p2","ContractCategoryGuid1C","SignedID","listPartner1","listPartner2","EqualObjectByArticle","obj1","obj2","PartnerRelatedExternalID","listObjectsByArticle1","listObjectsByArticle2","docDate","amountBeginning","amountTotal","PartnerForIsFromKD","objectByArticle","ValuesForIsFromKD","showLinkedDocsViewButton","contractCardParameterMetadata","schemeType","paramCard","showView","viewAlias","displayValue","treeVisible","downloadLinkedDocsButton","linkedDocumentsView","ViewService","getByName","idParam","ctrName","maxYear","fieldCaption","dateControl","currentYear","selectedDate","toDate","exchangeRateControl","rate","RecalcAmountAll","multiplicity","ArticleIdpInitial","ArticleIdp","AmountAll","GetAmountAll","exchangeRateMultiplicity","exchangeRate","currencyID","isYE","isYe","adcSection","arCurrency","currencyId","FillExchangeRateAsync","exchangeRateRate","fdChangesTab","mainView","filesAdditional","isEmpty","fileView","ensureVersionsLoaded","manager","arContractUser","typeOfAdditionalAgreement","ContractPassportForm","UniversalProcessesForm","fcpt","historyTab","serialNumberControl","systNumber","iD_MDS","ID_KSD","oldAmountBegining","oldAmountTotallnRub","oldAmountCurrent","oldCurrentSumInRub","UpdateContractorsMappingData","mappingData","acvSection","contractorMappingData","ContractCategoryID","objectsLikeString","acptGridView","stateid","copyCovenantButton","copyContractSection","addCovenantButton","covenantSection","partnersSection","contractor","borrower","AdaptPartnerListToJson","pov","partnersList","PartnersLikeString","SetParameterMappingByPartner","actualPartners","contractTypeControl","amountTotalControl","created","pkDiadocInfo","pkDiadocCommonInfo","pcrpac","arEdoStatusTable","edoReason","tabPaEdo","formsBag","SetPropertiesForAllControlsInTab","amountBeginningControl","contractTypeID","amountBeginningSetEnabled","methodsEmbroideryOnStickersValue","procedureTypeId","IsCRM","mainContractorContractControl","PartnerIsMain","PartnerIsExternal","AddValueToRequestStoreInfo","partnerIsMainControl","landAssetControl","SetLandAssetControlReadOnlyAsync","isLandAsset","IsLandAsset","nonPartySection","RecalcArContractNonpartyPartnerVirtualAsync","deletedRow","existsPartners","getResponse","parentPartnersSection","parentPartnerExtID","parentRoleName","CopyPartnersNames","arTenderBuyersSellersVirtualSection","partnerBuyersNames","partnerSellersNames","AddStringFromListToField","BuildContractParameter","ContractId","paramMetadata","сontractPassportForm","IsAdministrator","eDocumentHistoryForm","pkAccountantVitrualSection","fromText","plannedExpensesTable","realArticleID","articleGuid1C","ArticleGuid1C","virtSect","arcticleIdpSect","rcIdsFilter","rcNamesFilter","setReadOnlyPropertyForTableRowControls","eventArgs","CheckRowFieldAndsGetError","displayName","CheckPartnerRow_PartnerDepartmentAndContractCategory","isPartnerExternal","contractCategoryChanged","deletedRowId","categoryName","categoryRow","arContractUserSection","ExternalPartnerChecks","FillHideFieldKA","getCardPermissions","arContractPartnersSectionPermissions","isPartnersTableReadOnly","IsEditableSection","setExternalPartner","isReadOnlyInAssignment","arContractArticleIdpPermissions","isAccountantAllowModify","isSignedAllowModify","isContractCategoryAllowModify","rowFormContext","origCloseFunc","IsAllowAddPartnerExternal","addRowButtonExternal","addRow","autorun","addRowButton","PartnerDepartment","PartnerPerformer","PartnerAccountant","PartnerSigned","CheckUserInRoleAsync","textError","isSpecificError","textSpecificError","isErrorForDms","textMessageForDms","ContractCategoryIsHopeless","PartnerAutomated","PartnerAutomated2","ContractCategoryIsHopeless2","CheckAccessToDmsAndContractCategoryAsync","bayer","cedent","assignee","RoleID2","DepartmentName","DepartmentGuid1C","partnerRoleID","PartnerINN","AuthorPerformerDepartmentID","partnerIsMainBool","partnerIsMainValue","ClearArticleIDPbyPartner","CheckClearTabArticle","AddTabArticle","isIDP","ContractCategoryIsOIDP","aContractPartners","CheckAmountLimitControl","CheckFieldProcedureType","isNotFound","allVGO","TypeProcedureID","amountLimitControl","arContractArticleIdp1","arContractArticleIdp2","arContractArticleIdpControl","arContractArticleIdpInitial","arContractArticleIdpInitial1","arContractArticleIdpInitial2","CheckVisibilityTabsArticle","largeNumberArticleMessageVisability","ReargeArticleIDP","ReargeCurrentArticleIDP","openDocLimitsButton1","InitDocsOpeningByIdp","openDocLimitsButton2","addButtonEnabled","readonlyFlagName","deleteButtonEnabled","IsContractPartnersChecked","RecalcAmountByPartner","removeRowButton2","ChangeArticleIDP1","Button","AddChangeArticleLogicAsync","ChangeArticleIDP2","isHasBuyer","isHasSeller","isHasAutomated","articlesBlock","ContractArticleIdpInitial","ControlInitialAmountIDP","ChangeArticleIDP","FirstPartnerExternalID","SecondPartnerExternalID","cnt","temp","messageVisibility","ArContractArticleIdpForPartner1","ArContractArticleIdpForPartner2","articleIdpForPartner1Counter","articleIdpForPartner2Counter","runInAction","SetArticlesBlockVisiblityAsync","ArContractCurrentArticleIdpForPartner1","ArContractCurrentArticleIdpForPartner2","BlockVisibility","SetBlockVisibility","withtab","ArContractArticleIdpInitial","ArContractArticleIdp","ArEdo","currentTab","myrow","ReplacePartnerRelatedInArticleAsync","ReplacePartnerInEdoAsync","ReplaceArticleIDPbyPartner","SetPartnerInArticle","GetSum","isDelta","MainArticles","mainRow","partnerRows","GetNotCrmArticlesSumAmountAsync","sellerExtID","CheckPartnerInPerimeterAsync","GetCrmCurrentArticlesSumAmountAsync","sum_amount","sum_amount2","CalculateAmountCRMContractAsync","CalculateAmountNotCRMContractAsync","sum_amountAll","initialAmountOnCreationString","ParentCurrentAmmount","changeIDPByFirstPartner","finalAmountByFirstPartner","changeIDPBySecondPartner","finalAmountBySecondPartner","initialAmountOnCreation","toFixedString","fixed","balanceLimit","oldAmountWithOutNDS","oldAmountAll","oldAmountAllInRub","isAdminAndTp","CheckIsHistorical","isCalculateAmountWithoutVat","isCalculateAmount","Double","AmountWithoutVat","objectIdp","isAutoGenerated","techArticlesEditableFields","isUsedInDS","CheckArticleAndStickerAmount","CheckExistsSticker","CheckArticleExistsInParent","CheckConfirmingArticleFields","CopyArticleRow","ClearStickersSectionByParentRowID","changeArticleID","partnerRelatedExternalID","Main","Tariff","arContractArticleIdpVirtual","CopyFieldsBySelectedRow","SetAndFillArticleStickerRowAsync","amountWithoutVat","partnerIdpList","stickers","IsNotAutoGenerated","GetFieldValue","contractParentCardControl","contractParentCardNumberControl","ArKindOfAssignment","ContractKindID","IsTransferToUS","ParentCardID","dsTypeId","acaii","acaiiRows","notEmpty","contractDateCancelletionControl","ContractReasonsWithoutPDCIDCancelletionControl","GetParametersForArticleLogic","ContractArticleIdpVirtualNew","RearrangeArticleTypes","initialSection","currentSection","acai","parameterMetadata2","requestParameter2","containsCriteriaOperator","amountCurrentControl","amountValueFromEDTask","contactsOwnerControl","arContractPlannedExpensesBlock","isArticle","arContractConsolidatingLawyerBlock","SetButtonUnderTableVisibility","gridView","iButton","SubscribeOnArticleStickersControlsFromExcel","ProhibitionEnteringAmountArticle","SubscribeOnArticleStickersControlAsync","CalcAmountFromContractArticleStickersAsync","SetVirualArticleStickersFillIDs","displayText","ClearStickersWhenFormClosed","CheckClarifyingStickersWhenFormClosed","ArtilceStickersControlVisibilityOfAnalyticsStickers","IsArticleTableControlReadonly","eMain","controlFromExcel","valueField","contractArticleIdpVirtualNew","CurrencyRubID","isYeControl","isPartnerControlsReadOnly","selectTenderButton","IsEditableField","arContractSectionVirtual","typeProcedureMappingData","isNewContract","buyerExtID","SetDiadocMarkEnable","eDocumentBasedOnID","partnersCount","costItemMdsID","costItemName","arContractArticleIdpSection","changeArtileButton1","changeArtileButton2","methodEmbroideryOnStickersID","IsParentFirstOrder","IsArContractFromIntegrationsDoc","isCanChangeContractor","stateCanModify","EFS","tenderID","typeProcedureControl","selectTypeProcedureButton","ExistsActiveConfirmStartProcessTask","docCommentControl","maxLength","acuSections","buyerINN","sellerINN","findrow","AddSingleTenderAsync","pkTender","creationDate","docDateParam","buyers","buyersParam","sellers","sellersParam","docKindParam","tenderProcedureTypeID","tenderProcedureTypeIDParam","cessionPartner1ExtID","cessionPartner1ExtIDParam","cessionPartner2ExtID","cessionPartner2ExtIDParam","cessionPartner2RoleName","cessionPartner2RoleNameParam","fromKSDCreationDate","fromKSDParam","isArchiveParam","cdButton","Id","HasExtID","docNumCtr","docDateCtr","validityDateCtr","cancDateCtr","reasonsWhyNotPdcCtr","reasonsWhyNotFromKDCtr","currencyControlCtr","amountBeginningCtr","contractTypeCtr","isYECtr","subjectCtr","commentCtr","typeProcedureCtr","IsCourtCase","IsUserAuthorOrPerformer","accountantCtr","amountOfTheAssignmentControl","finalized","ArEDocumentUIExtension","initialized","ArEDocumentConvertID","ArEDocumentAndArActConvertKSD","ArEDocumentAttachDocumentAsync","ArPacketVirtualUIExtension","_disposerSelectRow","packetCards","packetCardsModels","CheckIsDirectual","SetPacketCardsClientInfo","packetControl","filesVisibleControl","linkToDiadocControl","InitControls","cardTasks","complectID","GetPacketComplectRowID","GetPacketCardsModelsFromServerInfo","InitComplect","InitButtons","InitTasks","EditPacketFieldsLogic","PacketSelectRowLogic","CombinePacketFiles","filesHiddenControl","complectControl","unckeckButton","UncheckButtonLogic","IsEnabledUncheckFunc","isComplectWithoutSysObjectID","IsExistsCardWithSysObjectID","isCanAddRow","isCanRemoveRow","decoupleButton","DecoupleButtonLogic","IsEnabledDecoupleFunc","RemoveButtonLogic","docList","GetSelectedDocs","ChangeTasksVisible","packetBlock","PacketApprovementControlLogic","ChangeFilesVisible","ChangePacketCardFormVisible","docListWithTask","GetTasksDocs","cardTask","documentInfoControl","packetCardModel","tasksDocs","taskDocs","taskDoc","docListIndex","tasksDocsIndex","uicontext","AddListToInfo","parseUrls","pkpivSection","packetCardsServerInfo","packetCardServerInfo","packetCard","packetCardSectionRows","GetSectionRowsFromServerInfo","blockNames","CreateCardModel","cardSectionRowsInfo","MapStorage","packetCardsClientInfo","packetCardStorage","pkpivSect","showBlocks","showControls","isBlockNamesEmpty","isControlNamesEmpty","createCardFileSource","createCardForm","createCardEditorModel","cardUiExtensionContext","CardUIExtensionContext","dialogName","toolbar","bottomToolbar","bottomDialogButtons","uiExtensionExecuters","GetExtensionsByCardTypeID","executeInContext","execute","resolveExecutor","pksmiSection","btnCombineArPacketFiles","filteredFiles","SaveCombinedFilesAsync","ChAssignmentUIExtension","datePicker","label","ChIncommingUIExtension","IncomingControlInitialization","CheckVGOPartners","CheckFIOControl","BindingDepartmentWithAddressees","BundleCaseTopLevelCase","ChangesInUIWhenKindChangingIncomingDoc","ChangesInUIWhenDealOrContractIsChanging","ChangesInUIWhenContractIsChanging","ChangesInUIWhenContractOrVATRateChangingIncomingDoc","ChangingFlagsCulpritInIncomingDoc","ChangesCreateAnBankAccount","CheckClickOnCopyButton","CheckSubjectConrol","IncomingPutAnswerButtonOnClick","ControllerNumberConrol","InitIncomingEmailFilling","FillCourtContractPartner","FillCourtDefaultFields","PkClientDocumentUIExtension","ChangesFieldsInClientDocument","ChangesInUIWhenDealOrContractIsChangingInClientDocument","CheckAutocompliteDealOrContract","PkClientPacketUIExtension","InsertTable","ClearTable","setInterval","ChInternalDocumentUIExtension","BindingDepartmentWithSigner","HideDocumentSigned","HideShowUDORegistrationFlag","confirmOrderAsync","ChLetterCreditUIExtension","SetContractReadOnly","EditContractForPkLetterCredit","ClearFieldsWhenSomeOtherFieldsChanged","ChangesInUIWhenPrepaymentChanging","ChangesInUIWhenKindChanging","ControlInitialization","ChangesInUIWhenContractOrVATRateChangingLetterCreditDoc","InitArticlesTabsSwitchingForLetterCredit","InitializeContractWithRecipientVisiability","SetContractWithRecipientVisiability","senderExtId","recipientExtId","receiverInPerimetr","senderOrganizationInPerimetr","isPayment","isContractWithRecipientVisible","letterReceiverContractControl","contextInitialized","ChMemoUIExtension","BindingDepartmentWithMemoType","InitializeExpenses","ChangesInUIWhenMemoTypeIsChanging","InitializeExpensesTable","SetBusinessTripsTableLocic","ChOutgoingUIExtension","SignedInfo","OutgoingControlInitialization","IncomingVisibilityControlsVgo","ChangesInUIWhenKindChangingOutgoingDoc","ChangesInUIWhenReceivingMethodChangingOutgoingDocAsync","CheckChangesPartnersEmail","SetReadOnlyStatusForClaimHoldingAmountAsync","HideOrganizationFieldsByType","SetOrganizationCaption","ClearClaimFieldsByType","WrkWithATemplate","RevocationListControlLogic","SetTasksLogic","SetARFOTableLogic","SetClaimPerformersTableLogic","SetClaimContractControlLogic","SetOrganizationClaimLogic","HideClaimResponseFields","responseFieldVisibility","SendByRussianPostProcessAsync","ChangeRevocationListEditLogic","ChangeCredentialsText","refsSection","ChangeRevocationListCollectionEditLogic","addPrintFormsResult","vrc","SignByDssAsync","vrs","SignByStickAsync","UpsateSigningState","Info","GetDepartmentID","references","GetReferencesInfoAsync","enelopeReference","DocumentTypeID","ReferenceID","ReferenceCardTypeID","ReferenceCardTypeCaption","ReferenceCreationDate","ReferenceSubject","ReferenceFullNumber","ReferenceSecondaryFullNumber","ReferenceStateName","EnvelopeInfo","GetEnvelopeInfo","RecipientInfo","GetRecipientInfo","referencesInfoStorage","userDeputyID","check","CheckDeputy","userFioOutgoingControl","additionalEmailsForPartnersControl","pkorkSection","recipientInfo","firstAddresse","ContactPerson","ContactEmail","SetSendToContractorTaskLogic","HideAskAboutDocumentAction","HideNoAnswerAction","responseTask","plannedQuants","hideCompletionOptionID","RussianPostWithEmail","credentialsTextControl","poaID","credentialTextVirtualSection","GetPoACredentialsTextByID","UpdateRevocationPoAFormAfterRemovingPoA","removedRows","firstExistedRow","credentialsText","isCustomerRequest","isClaim","pkoSectionChange","isCulpritEmpty","arfoTable","receiverKCKSection","chanceryPartnersSection","arfoSection","DeleteChildRows","arfoID","culpritInfoStorage","culprit","NERID","NERName","arfoAmount","arfoId","parentFieldRowIDName","claimPerformersTable","isDeedAmountReadOnly","CheckCurrentUserIsDeputy","deedAmountControl","claimPerformersContractControl","actControl","actCostItemControl","isNotAllowModify","actCostItemReadOnly","actCostItemAmountStr","actID","deedAmount","outgoingARFOCulprit","outgoingARFO","outgoingClaimPerformers","ClearContractLinkedFields","ApproversCheckingStatus","PkRdndKind","PreparationOfConstructionDocumentation","SigningOfConstructionDocumentation","SpecialistOfGeodeticControl","PerformingWorkSubjectToExamination","ConstrationRepresentative","RegardingConstructionCon","IssueOfWorkingDocumentation","ConstractionRepresentativeOfIssuesOfCostructionControl","PIKComfortAsManagementAndOperationgOrganization","ResponsibleForOT_PB_ElectricalSafety","AcceptionForCountingOS","AcceptionForCountingPO","Inventory","DemolitionOfCapitalConstruction","WriteOffRelief","WriteOffExpenses","WriteOffOs","ListOfCountablePersons","OnWarehouseFormationAndMaterialPartEstablishment","OnCreationOfSeparateDivision","OnTemporaryDutyOfGeneralDirector","OnEstablishmentOfCommission","AboutProductionDowntime","AboutWriteoffGoodsAndMaterials","OnAppointmentOfTheChiefAccountant","AboutBecomingManager","OnAppointmentOfResponsibleForEnsuringFireSafety","AboutTheIntroductionOfStaffingTable","OnApprovalOfListMateriallyResponsiblePersons","OnTheAppointmentOfResponsiblePersonsGeneral","OnTheEstablishmentOfWorkingGroup","GetKindsWithoutEdApprovers","GetKindsWithEdApprovers","PkRdndTypes","Order","Directive","ManagementLetter","Protocol","ChRdndUIExtension","UnhideEdFieldMain","UpdateAcquaintanceAcquainted","FillThemeField","UnhideEdFieldLogic","rdndSection","hasType","hasKind","hasRdKind","hasOnEstablishmentOfCommission","rdndTypeID","rdndKindID","GuidID","rdndKindControl","edApprovers","rdCiphers","rndSection","paaSection","palSection","hasUser","acquaintedID","rowAcquaintanceList","rowAcquaintanceAcquainted","DocumentKind","UpdComplectID","BuildingPermitID","BuildingPermitName","PkPdFillNumberDateUIExtension","SetValueToSectionField","PkProtocolTenderUIExtension","PkDecorationHelper","PkFlatDecorationTypeID","PkFlatDecorationTypeName","PkMOPDecorationTypeID","PkMOPDecorationTypeName","PkPantryDecorationTypeID","PkPantryDecorationTypeName","PkProtocolUIExtension","_isAllowed","FillingUpAssignmentTable","ThemeCreation","pSection","decorationTypes","decorationTypesTable","pkSection","Allowed","comm","cont1","saving","section2","decorationTypesToFill","rowCount","rowExists","decorationID","CheckAllApproversFilled","sect","PkSzAdresseeFillAndReadonly","PkWorkOrderUIExtension","objectSection","workOrderSection","requestPG","responsePG","ProjectManagerID","ProjectManagerName","contractorKCKExternalID","department","executor","preliminaryCost","subContractorCost","SetSubContractorCostVisibilityAsync","subContractorKCKExternalID","FillRegionCityAndProjectAsync","SetControlsVisibilityAsync","ArActSavingUIExtension","CheckSameCardExists","senderKCKExternalID","contractId","IsSameDocumentExists","SameDocumentsMessage","PkRecevingDocumentsFromDiadocPluginSettingsUIExtension","includedTagsListSection","excludedTagsListSection","includedTagsSection","excludedTagsSection","inculdedTagsRow","SetActionForFieldChanged","exculdedTagsRow","tagsSection","tagsListSection","tagsRow","SetTagsText","textTags","ChInstructionUIExtension","HideReaders","InitializeTableInstructionHistory","ArUnitsOfDiadocUIExtension","IsUseAgreementLogic","arudSection","isBox","extIDControl","diadocDepartmentParentControl","serviceUserControl","lastSynchDateControl","isDownloadEnableControl","boxControlsVisibility","departmentControlsVisibility","isUseAgreementControl","ArUsersOfDiadocUIExtension","UnitsTableLogic","IsSyncBoxesEnableLogic","unitsControl","unitID","arusdSection","isSyncBoxesEnabletControl","PkPersonalRoleUIExtension","_curentRowID","InitializePkLegalEntitiesControl","InitializeModelFilesHandle","SetSendFilesAsAttachmentsToNotificationsReadOnly","SetFilesInfo","FilterFiles","FileContainerItemCheckingAsync","ValidateCategoryFile","ValidateCertFileAsync","fileContentString","certSerialNumber","pkLegalEntitiesControl","DeletingFiles","filterID","modelFileControl","GetUIControlFromForm","containerFile","PkRequestForMaterialsUIExtension","_disposers","PkDepartmentHelper","OXRAccountant","EscortAccountants","DivisionVicePresident","GeneralDirector","HeadOfDepartment","RegistrationCenterExecutors","RegistrarOfAStructuralUnit","UDOEmployee","ReadersOfTheStructuralUnit","ResponsibleByDispatchDocument","ArPoAApproversCacheHelper","approversCheckingStatus","addingInProgress","arCredentialListPOASection","arAdditionalApproversPOASection","additionalApproversPOASection","approverToAuthorityBindings","authorityId","AddAsync","authorityID","newApprovers","getAdditionalApproversByAuthorityIDAsync","row1","AddingInProgress","ContainsApprover","approverId","approversIDsToDelete","actualApproversIds","actualApproversIDsToDelete","rowUserId","resultArray","method","CardGetMethod","arAdditionalApproversSection","arCredentialSection","vicePresidentID","newApprover","ApproverToAuthorityBinding","ArPowerOfAttorneyUIExtension","_isUserPoAAdmin","CheckCurrentUserInRole","WorkWithCredentials","ArPowerOfAttorneyFieldChangedHandlers","PeriodLogic","PartnerKckOpenCardHandler","PoAFormChangedHandler","ConfidantsDictionaryNameHandler","btnCreate","changeButtonVisibilityForPowerOfAttorney","FilesFromDCUIInteractionLogic","AddMachineReadableTypeIDChangedHandler","AddTaxCodeUIHandler","HideXmlAndZipByConditionsAsync","SetMachineReadableVersionDropDownVisibilityAsync","PoAVersionChangedHandlerAsync","arCredentialListTable","CredentialSelectRowLogic","CredentialListChangesHandler","arCredentialsMachineReadableListSection","_approversCacheHelper","InitializeAsync","CheckExclusivityAsync","AddCredentialOnMachineReadableFreeFormat","CheckNewCredentialExclusivityAsync","FillMachineReadableCredentialsAsync","UpdateRelatedInfoOnCredentialsDeleted","OnAddingChecking","OnRemovingChecking","RemoveAsync","otherRows","IsDuplicateConstraintPassed","IsExclusiveConstraintPassed","IsByKindConstraintPassed","refID","kindIsExclusive","gridRow","credentialRefIdField","mrcSection","mrcTypeID","mrcTypeName","mrcID","mrcCode","mrcName","existedIDs","masterControl","selectedItemRowId","attorneyLimitsTabControl","documentAmountsLimitsTab","partnersLimitsTab","arAmountByDocKindsTable","_copyAttorneyLimitsTabs","AttorneyLimitsVisibility","InitializeTableByParentRowID","VirtualTableChangeHandler","virtualTableName","parentTableName","realSectionName","tryGetSections","cRow","RemoveFromGeneralTable","realTableName","arPowerOfAttorney","confidantListControl","multipleConfidantsAreAllowed","CheckMultipleConfidantsAreAllowed","CheckMultipleLegalConfidants","allUsedDictionaries","valueDeleted","ResetViewsForConfidants","poaSection","ShowPeriodFromWarningMessageByConditionASync","periodFrom","ConvertDateToString","vatRateSection","PrincipalOrganization","arCredentialList","arAmountsByDocKinds","arKCKPartnersList","depRoles","RoleUsers","signer","currentDate","openRefAction","reference","infoDict","isWithoutSignatureCheckBox","ChangeWithoutSignatureCheckBoxByConditionsAsync","refsControl","ClearConfidantsByCondition","confidantsSection","stopPropagation","formId","pkdcSection","prohibitedStatesArray","cleaningCase","stringToMatch","tabControl","amountsTabVisible","partnersTabVisible","debug","notifyUpdateValidation","typeSection","IsUserBelongsToRole","commonInfoSection","authorId","IsFsButtonCanExecute","mrTypeId","SetMachineReadableFreeFormatCheckBoxVisibility","mrFreeFormatControlModel","isFinite","arPoaSection","Int16","isNullCriteriaOperator","keysToUpdate","startsWith","typedKeyToUpdate","parentKey","childrenKeysCollection","modifiedKey","GetMatchKeyByParentKey","SetValueToRowField","SetFinanceTaxLinkControlVisibility","financeTaxLinkControlModel","allFilesControlViewModel","regex","machineReadableID","versionName","periodFromFromSettings","typedPeriodFromFromSettings","rowsToCheck","idsToCheck","HasMoreThanOneLegal","PkInnerDocumentUIExtension","InitVisiabilityOfSigningOptionsAsync","SignWithoutType","CdSignDssMessagesInfoState","NotSended","Sended","ResponseReceived","Completed","SendingError","ReceivingError","CompletingError","PkPersonnelDocumentUIExtension","PersonnelPacketCardLogic","SetTasksLogicAsync","ProcessDssSigningInfoAsync","BlockCardAsync","signingResult","SignFilesByGroupsAsync","CardRemoveChangesDeletedHandling","ResetToNone","SetTaskLogicAsync","HideRefuseSigningActionAsync","HideAskAboutDocumentActionAsync","HideAllActionsAsync","dssSigningAuthorID","dssSigningState","dssSigningCspType","dssSigningErrorMessage","ShowDssSigningInfoMessageAsync","prohibitAllPermissions","canAdd","FilePermissions","PkPersonnelPacketVirtualUIExtension","GetPacketCards","ProcessCompletingTasksAsync","packetCardsWithFilesInfo","GetCardsFilesInfoAsync","SignPacketCardsAsync","AddPrintFormsToPacketCardsAsync","StorePacketCardsAsync","relatedCardsIDs","relatedTasksIDs","relatedCardID","oldPacketCardTask","newPacketCardTask","cardFilesInfoWhichNeedPrintForms","secondaryFullNumber","kindName","systemInfos","DepartmentRoleUIExtension","WorkWithDepartmentRolesTable","SystemFlagsLogicAsync","PkDepartmentRolesTable","departmentRolesSection","departmentRolesUsersSection","roleInDepartmentSection","userRow","rowsToDelete","ur","roleIsFromCard","roleControl","IsConnected","TechnicalInformation","ConnectionDate","ResponsibleFromBusinessID","ResponsibleFromBusinessName","ITSystemResponsibleID","ITSystemResponsibleName","RowState","FlagID","CheckboxTableName","VirtualTableName","VirtualTableControlName","CheckFlags","SetSystemControlsVisabilityAll","checkboxInList","systemInfo","FillSystemTable","SetSystemControlsVisability","depSection","checkboxsWithConnection","checkboxName","systemsControl","systemTabsControl","isEntity","isDocumentFlow","checkboxTableName","virtualTableControlName","PkTCOfferSharedHelper","EngineerPTOLettersID","EngineerPTOLettersName","EngineerPTOID","EngineerPTOName","PTOChiefRegionsID","PTOChiefRegionsName","PTOChiefID","PTOChiefName","HeadOfTheSiteID","HeadOfTheSiteName","SchedulerID","SchedulerName","ContractorID","ContractorName","SMUChiefID","SMUChiefName","CostEstimatorID","CostEstimatorName","ConstructionControlSpecialistID","ConstructionControlSpecialistName","FinancialManagerID","FinancialManagerName","PkTCOfferUIExtension","accreditedContractorControl","unaccreditedContractorControl","employeeControl","isUnaccredited","fillEmployeeAsync","fillContractorAsync","objectsTable","fillAssignmentAndApprovementTableAsync","fillArticlesIDPAsync","articlesIDPTable","idpList","approversTable","pkTCOfferApprovalTable","fillUserDepartmentAsync","filesControlViewModel","getCurrentUserNameAsync","changeCategory","workScheduleFile","dateTime","changeName","pkTCOfferIDPList","objectListRow","pkTCOfferIDPListRow","assignmentObj","pkTCOfferRoles","clearCollectionSection","assignment","roww","StageId","StageName","pkTCOfferInfoSection","pkTCOfferInfo","matching","matchingRow","removeRowFromCollectionSection","stopFlag","PkArticleStickerUIExtension","arArticleParentStickersTableControl","ClearCollection","GetArticleStickersByParentRequest","CalcSumAmount","RecalcAmountWithoutVatAsync","amountPrepayment","SetValuesInArArticleParentStickers","currentAmountArticleContractControl","SetArticleStickersVirtualCollection","ClickOnParentRowTable","amountContact","GetAmountFromContractAsync","initialAmountControl","remainOfStickerControl","arArticleParentStickers1","sticker","pkArticleStickerVirtial","pkArticleSticker","filterParentStickRows","amountRemains","amountParent","PkCovenantUIExtension","eventStartDate","periodicity","periodicitySection","interval","period","weekdays","repeatAfter","days","daysType","afterDate","intervalMark","repeatMark","periodicityBlock","SetWeekdaysVisibility","isDaysAfter","covenantInfoSection","ContractorExternalID","ContractorINN","ContractorCategoryID","ContractorCategoryName","BorrowerID","BorrowerExternalID","BorrowerINN","BorrowerName","BorrowerCategoryID","BorrowerCategoryName","PeriodFrom","PeriodTo","FillContractInfo","SetPeriodicityBlockVisibility","SetPeriodicityControlsReadOnly","SetPeriodicityReadOnly","FillNextLaunch","weekdaysControl","eventSection","weekdaysSection","periodicityID","lastLaunchDate","nextLaunchDate","periodID","Daily","Weekly","Monthly","Quarterly","Yearly","CalculateNextLaunch","OnWeekDays","Monday","Tuesday","Wednesday","Thursday","Friday","daysAfter","dayType","NextLaunchDate","CalculateNextLaunchDays","contractDate","CheckContractDateRestriction","periodicityControl","intervalControl","periodControl","daysControl","daysTypeControl","afterDateControl","PkPackageOfOriginalDocumentsUIExtension","PackageContentsControlInitialization","InitPrintFormDownloadingAsync","InitializeBuildReportPermisions","isBuildReportAvaible","createAnInventory","executeOnClick","buildReportAsync","PkMdsSettingsCardUIExtension","contractSyncButton","pkCommonServiceSettingsVirtual","directumCode","createContractRequest","createContractResponse","ArRolePerformersUIExtension","_controlList","_isNewCard","WorkWithRolePerformerCriteriasTableAsync","rolePerformerCriteriasTable","arRolePerformerCriterias","arRolePerformerCriteriaValues","RemoveDuplicates","SetConrolVisible","SetListHandler","criteriaControl","ClearCriteria","сriteriaValues","isNeedRecalc","RecalcStringValue","stringValue","valueName","value2Name","SetControlsUnvisible","controlBag","Add","PkPartnerExceptionUIExtension","PkMemoTemplateUIExtension","departmentsTableControl","perimeterControl","perimeterSection","departmentSection","perimeterRow","perimeterID","ArPowerOfAttorneyAuthorityUIExtension","SetNameAsync","SetMRCListUniqueValuesHandler","SetMatrixOrgaizationsListControlLogicAsync","subtype","shortName","mrcListControl","mrcToCredentialSection","matrixOrgaizationsListControl","arCredentialsMatrixSigners","PkAddressTypes","ArContractStageKinds","ManagerApprovement","ManagerApprovementOrder","CFOApprovement","CFOApprovementOrder","ProcurementControlSpecialistApprovement","ProcurementControlSpecialistApprovementOrder","ANPTApprovement","ANPTApprovementOrder","BudgetaryControlApprovement","BudgetaryControlApprovementOrder","MatrixApprovement","MatrixApprovementOrder","LawyerConsolidation","LawyerConsolidationOrder","SigningOrder","MatrixStageList","ArContractCustomParticipantsUIExtension","_disposerSelectFcptRow","_disposerSelectAccptRow","_customParticipantsStatesList","RecalculateButtonControlLogicAsync","ArContractCustomParticipantsTable_AddButtonControlLogicAsync","ArContractCustomParticipantsTable_DeleteButtonControlLogicAsync","ArContractCustomParticipantsTable_EditRowLogicAsync","VisibilityUsersControl","FillArContractCustomParticipants","WorkWithFdCustomParticipantsTable","AddSinglePartnerIntoCustomParticipantsTable","fdEditRow","fdRow","arContractDeleteRows","fdDeleteRows","arRow","delRow","RemoveButtonRights","checkFeatureFlag","AddButtonRights","partnerOrder","signingRows","GetStageOrder","isAdditionalApprover","isInternalEmployee","partnerControl","stageControl","taskTimeLimitControl","usersControl","orderCustomControl","HaveParticipantsTableRights","buttonAction","RefreshButtonRights","cardState","pkKCKPartners_WithInstanceIDView","cardIDParam","isAutomatedParam","ECMPersonalControlUIExtension","controlIsOnControl","controlIsDelControl","OnControlButtonActionAsync","RemoveControlButtonActionAsync","ECMPersonalControlInfoVirtual","DateControl","SendRequestAsync","ECMRequestOnControl","ECMRequestRemoveControl","ArHeadersBlanksForPowerOfAttorneyUIExtension","SetFileHandlersAsync","OverloadKCKLinkAsync","headersBlanksSection","tryGetFields","fileList","containerFileAdding","ArContractHiddenNotUserChanges","SetChangedFalseByAutoclculateFields","Entry","PkAddressTypesDescriptions","Standart","Box","PkCorrespondenceSendingRequestUIExtension","SetSectionsFieldChangedLogic","SetCouriersControlLogic","SetSenderControlLogic","SetExpressDeliveryCompanyControlLogic","SetTrackNumberControlLogic","SetReceiverAddressControlsLogic","HideTabs","pkcsriSection","pkcsrivSection","UpdateAddressFull","ClearAddressFields","pkcSection","courierControl","sendingTypeID","isCourierControlVisible","ClearSectionRows","senderControl","expressDeliveryCompanyControl","isExpressDeliveryCompanyControlVisible","trackNumberControl","isTrackNumberControlVisible","isInitialized","addressTypeID","isManualInput","addressControl","manualInputControl","postalCodeControl","countryControl","regionControl","settlementControl","streetControl","houseControl","blockControl","flatControl","postalBoxControl","pkcsriPermissions","pkcsrivPermissions","IsFieldAllowModify","UpdateKeyValue","addressID","countryCode1C","postalCode","countryName","region","settlement","street","house","flat","postalBox","addressFullList","addressFull","PkDispatchTypes","Letter","LetterCustom","LetterValuable","LetterInternational","PkEnvelopeUIExtension","SetNoReturnControlLogic","SetRecipientsControlLogic","SetAttachmentsInventoryControlLogic","SetShipmentTrackingTabLogic","pkeSection","ClearRecipientsAddress","noReturnControl","dispatchTypeID","isNoReturnControlVisible","recipientsControl","SetRecipientsControlButtonsVisibility","SetRecipientRowLogic","ValidateRecipientRow","SetRecipientRowAddressType","SetRecipientRowManualInput","SetRecipientRowModelLogic","addressType","UpdateRowKeyValue","addRowsVisibility","contactPerson","CardValidatorTypes","notNullField","countryID","addressHintControl","ForbiddingCharacterInput","pkaiSection","attachmentsInventoryControl","isAttachmentsInventoryControlVisible","shpi","shipmentTrackingTab","PkDocumentRecognitionServiceSettingsCardUIExtension","MatrixFdProcess","Notification","AdditionalApprovement","ExceedingAmount","Approvement","StartApprovement","ArContractMatrixRestartFromStageUIExtension","processesTableViewModel","availableProcessesToRestartObj","availableProcessesToRestart","AddRestartFromStageButton","processIstanceRowID","processTemplateRowID","GetSelectedStageTemplateFromDialogAsync","selectedStageTemplateID","selectedProcessTemplateID","GetSelectedPartnerFromDialogAsync","externalID","IsRequiredRolesWithUsers","getInfo","OpenMarkedCard","processTemplateID","dialogSection","AddRows","cancelButton","ctrl","getStagesResponse","dialogStageTemplates","FdDialogStageTemplates","stageTemplateIDList","windowPartnersSection","cardPartnersSection","mark","proceedConfirmation","proceedAndSaveCardConfirmation","continuationOnSuccessFunc","operationInProgress","cardIsNew","saveCardBeforeOpening","token","isUpdatedServer","contextInstance","dispose","PkSettingsContractorInPerimetrUIExtension","contractorSettingsGrid","contractorSettingsControl","inPerimetrControl","commentControl","accreditationPerimetrControl","ArFinanceTaxAuthorityRegistrationUIExtension","OverloadKCKLinksAsync","SetSystemInfoBlockVisibility","KCKPartnerControl","KCKOverloadButtonLogicAsync","TaxAuthorityKckControl","systemInfoBlock","deleted","PkForceMessageHandlingByJsonUIExtension","forceHandleButton","TryHandleMessageAsync","pkMessageHandlingByJsonSection","CardTypeID","jsonString","formattedvalue","IrdDocumentFieldAliases","CreatedBy","CreationDate","DocKind","DocState","LegalEntity","UntilDate","Unlimited","NotifyUsers","TotalArea","Parts","CadastralNumbers","TEPs","Files","TessaCode","AutoBopState","MilestoneClosed","IrdVersions","IrdVersionsArchive","IrdDocumentKinds","AgreementIntegratedDevelopmentTerritoryID","AgreementIntegratedDevelopmentTerritoryName","AgreementDevelopmentBuiltUpAreaID","AgreementDevelopmentBuiltUpAreaName","AddAgreementVRIAndDAZID","AddAgreementVRIAndDAZName","RoadMapID","RoadMapName","ZOSID","ZOSName","AGRAdjustmentID","AGRAdjustmentName","ExpertiseAdjustmentID","ExpertiseAdjustmentName","PPMAccordingToPZZID","PPMAccordingToPZZName","PPMAccordingToPPTID","PPMAccordingToPPTName","ConstructionPermitID","ConstructionPermitName","RVEID","RVEName","AGRCertificateID","AGRCertificateName","AgreementImplementationOfInvestmentProjectID","AgreementImplementationOfInvestmentProjectName","TechnicalPlanID","TechnicalPlanName","PPTVolumesID","PPTVolumesName","SpecificationsDesignDocumentationID","SpecificationsDesignDocumentationName","ExpertiseID","ExpertiseName","GZKOnPreparationOfPPTID","GZKOnPreparationOfPPTName","GZKOnApprovalOfPPTID","GZKOnApprovalOfPPTName","GPZUID","GPZUName","DAZUID","DAZUName","ProtocolForPreliminaryAllocationOfAreasID","ProtocolForPreliminaryAllocationOfAreasName","IrdKindsFields","_visibleFields","_kinds","visibleFields","kinds","TableClontrolSectionAlias","_fieldAlias","_sectionAlias","fieldAlias","sectionAlias","IrdKindsFieldsSettings","DefaultVisibleFields","KindsFieldsVisibility","acc","curr","ReadonlyFieldsOnNewVersion","ReadonlyFieldsOnNotProjectState","irdDocumentFieldAlias","TableClontrolSectionAliases","IrdDocumentUIExtension","irdDocumentInfo","irdDocObjects","irdDocCadastralNumbers","CheckIrdActualVersionAsync","irdDocParts","irdDocNotifyUsers","SetFieldsVisibilityAsync","IrdDocumentFieldChangedAsync","PartsLogic","SetFieldsIsReadOnly","CadastralNumbersLogic","IrdDocObjectsLogic","UntilDateUnlimitedControlsLogic","IrdVersionsLogic","ArchiveIrdVersionsLogic","IrdTEPsChangeLogic","ShowTepsBySelectedObject","defaultVisibleFields","getKindVisibleFields","allAliases","getAllIRDFieldAliases","NumeratorViewModel","AutoCompleteEntryViewModel","DateTimeViewModel","CheckBoxViewModel","TextBoxViewModel","AutoCompleteTableViewModel","DecimalBoxViewModel","GridViewModel","getTableClontrolSectionAlias","rootVersionID","objectsID","actualVersionGuid","ExistingVersion","cadastralNotUniqueVersionGuid","ExistingVersionCadastralNumber","isProjectState","readonlyNewVersionFields","getReadonlyFieldsOnNewVersion","controlVM","readonlyNotProjectFields","getReadonlyFieldsOnNotProjectState","irdVersions","untilDateControl","unlimitedControl","unlimited","UntilDateUnlimitedControlsOnChangesLogic","fielName","objectTable","residentialComplexName","projectName","cadastralNumbersControl","cadastralNumbers","cadastralNumber","deletedN","curN","maxValue","cadastralNumberControl","validator","partsControl","pikPart","notPikPart","FillNotifyUsersAsync","FillTepsAsync","ClearFieldsByVisibility","ListUsers","user","irdDocTEPs","irdGetTepsByKindRequest","irdGetTepsByKindResponse","listTeps","ListTeps","irdDocKindTEPsVirtual","tep","irdDocTEPsInfoVirtual","srcRow","CheckOrFillIrdDocTEPs","irdObjectsGrid","dokKindTepsGrid","rowToDelete","selectedObject","teps","objTep","anyIrdDocKindTEPsVirtual","anyIrdDocObjects","docObject","ArKonturPoAApiSettingsUIExtension","SetAuthorizeButtonClickHandlerAsync","authorizeButton","deviceCode","verificationUriComplete","expiresIn","countOftryes","isSuccesful","ArPoASettingsUIExtension","PartnerKckOpenCardHandlerAsync","externMappingTable","kckControl","PkContractCategoryUIExtension","AvailabilityButtons","CopyFromParentContractCategoryButtonLogic","CopyToChildContractCategoryButtonLogic","DeleteInGroupAndChildContractCategoriesButtonLogic","CheckDuplicatePkDepartmentRolesUsersTable","copyFromParentContractCategoryButtonControl","copyToChildContractCategoryButtonControl","deleteInGroupAndChildContractCategoriesButtonControl","aCCSection","parentIDField","isGroupField","CopyContractCategoryAsync","CopyToChildContractCategoryAsync","ShowDialogAsync","pkDRUTableControl","usersList","childID","parentID","GetCard","aCCUParentSection","aCCUDParentSection","aCCUSection","aCCUDSection","tempRowID","rowDep","tempParentRowID","newRowDep","CCRList","CCR","aCCUChildSection","aCCUDChildSection","childParentRowID","DeleteInGroupAndChildContractCategories","MAX_VALUE","RecognitionStatuses","PkLetterCreditGetExtension","CardGetExtension","afterRequest","isCleared","objectType","PkPacketGetExtension","requestIsSuccessful","closePending","PkRefreshOpenedCardsGetExtension","RefreshOpenedPacketCard","RefreshingOpenedCard","cardsIDsToRefresh","GetCardsIDsToRefresh","$type","cardIDToRefresh","packetWorkPlace","WorkspaceStorage","tryGetCardByCardId","pkpcvSection","PkDocumentRecognitionFileHelper","pagesLimit","pagesCount","packageId","Timer","CurrentDocumentRecognitionPackageID","Status","Recognizing","Recognized","FillDocumentInfo","incomingInfoSection","defendantDepartmentId","defendantDepartmentName","addrRow","externalId","_t","_u","_v","_w","pkParticipantsCourtSection","pkParticipantsCourtRecognizedInfoSection","_x","lenDefendant","_y","_z","AddRowToParticipantsCourt","AddRowToParticipantsCourtRecognizedInfo","lenPlaintiff","_0","_1","lenPlaintiffRepresentative","_2","passport","address","inn","ogrn","_3","_4","_5","_6","_7","_8","_9","_10","_11","_12","_13","_14","_15","_16","_17","_18","_19","_20","_21","_22","_23","initialValue","addHours","userTimezoneOffset","getTime","setTime","counter","isBusy","intervalId","clearInterval","PkIncomingGetExtension","courtDate","ArTableUIExtension","aapvSection","partnerFullName","partnerINN","ChArStateHideUIExtension","arStateControl","ChCaseNomenclatureUIExtension","BundleCaseNomenclature","PkAddVirtualFileUIExtension","PkCardGridViewsUIExtension","PkCardPreviewHelper","ShowPreview","FileSize","FileFormats","PkCardPreviewUIExtension","getExtension","availableInPreview","availableForType","loadResult","fileControlManager","PkContractFilesVirtualUIExtension","AddSignedIconToVirtualFilesUIExtension","approvalListFileControl","isVirtual","fileViewModel","CheckSignFile","tag","FileTagViewModel","ArDocumentConstructorUIExtension","FromDragAndDropLogicAsync","FromFileButtonControlLogicAsync","FromCDButtonControlLogicAsync","AddFileFromFsAsync","IsCdButtonVisibleByState","IsCdButtonCanExecute","IsContractHasObjectAsync","AddFileFromCdAsync","PkUISettingsUIExtension","uiSettingsJson","evaluateControlsSettings","uiSettingsGroup","Conditions","condition","conditionsSatisfied","uISettingsGroup","EvaluateConditions","ControlSettings","CheckVisible","CheckEdit","AllowEdit","CheckRequired","Required","ActiveValidation","SectionSettings","CheckValue","Section","CleanValueIfConditionsSatisfied","Field","PkDocumentRecognitionUIExtension","UploadAndRecognizeDocumentButtonLogicAsync","addSetButtonVisibilityHandler","Kinds","UploadAndRecognizeDocumentStartAsync","CheckingDocumentRecognitionStatus","PkMatrixStageHelper","SigningID","SigningName","ConsolidationID","ConsolidationName","ProcurementControlSpecialistApprovementID","ProcurementControlSpecialistApprovementName","PkMatrixApprovementRoleHelper","ConsolidatingDepartmentID","ConsolidatingDepartmentName","ProcurementControlSpecialistID","ProcurementControlSpecialistName","PkMatrixUIExtension","SetVirtualFields","virtualFieldsBlock","matrixCriteriaDepartmentRolesUsersSectionVirtual","matrixCriteriaListSectionVirtual","critery","matrixCriteriaListSection","matrixCriteriaUserListSection","newrow","newrowtasktype","matrixCriteriaTaskTypeListSection","departmentMatrixVirtualSection","limitValue","orderValue","isActiveValue","isActiveRole","rolesTable","orderStageControl","limitStageControl","usersStageControl","criteriaBlock","SetFromVirtualFields","MatrixRelatedOrganizationsReplaceQuestionAsync","MatrixRelatedOrganizationsOpenCardAsync","MatrixParentMatrixWithChildQuestionAsync","rolesControl","copyFromDepartmentButton","copyToDepartmentButton","matrixDepartmentRoles","matrixCriteriaDefaultUserListSection","matrixCriteriaContractCategoryListSection","matrixCriteriaContractTypeListSection","matrixCriteriaCostItemListSection","matrixCriteriaPartnerListSection","matrixCriteriaInitiatorListSection","matrixCriteriaSignedListSection","matrixCriteriaContractKindListSection","matrixCriteriaRegionListSection","matrixCriteriaProjectListSection","matrixCriteriaObjectListSection","matrixCriteriaBuyerListSection","matrixCriteriaSellerListSection","matrixCriteriaOtherListSection","criteriaTable","SetCriteriaValue","nullFields","amountToControlControl","amountToTextControlControl","userControl","taskTypeControl","defaultUserControl","UsersLogic","departmentRole","defaultUserRows","virtualrow","realrow","CheckMatrixChanges","CheckMatrixConsolidatindAsync","autoCalculateControl","autoCalculateCFOControl","excludeApproveWithoutContractControl","chiefAccountantControl","accountantOHRControl","userDefinedManuallyControl","autoApproveControl","userDefinedManuallyCriteriaTypeID","autoCalculateCriteriaTypeID","taskTypesRows","isAutoCalculateCFORole","isExcludeApproveWithoutContract","isAccountant","isAutoCalculateRole","tabAlias","copyOnlySelectedRolesControl","sectionPkMatrixDialogs","departmentList","filedDepartmentID","confirmationMessage","pkDepartmentsSection","PkDepartmentsSection","getAllChanges","isFilledMatrixExists","pkMatrixRelatedOrganizationsControl","parentMatrixControl","pkMatrixRelatedOrganizationsSection","deleteItem","pkMatrixDepartmentRoles","ChangesUIExtension","getCardChangesDataRequestID","changesTab","isFdChangesTabVisible","fdChangesTableVirtualSection","dataWasLoaded","loadChangesTableData","responseResult","changesCard","tryGetFdChangesData","sourceChangesTableVirtualSection","loopTable","HistoryContextMenuFileExtensions","FileExtension","MenuAction","GetFileHistory","checkEDSActionIndex","requestparameters","ChCompleteTaskUIExtension","CheckCreateCopyCard","CheckDateRegistration","CheckDocumentIsSignedEvent","SendToESUD","CheckDefineDocumentType","CheckTaskUsers","ptcuSection","copyCardAction","needrefresh","changesMessage","convertedNewCardID","ConvertedNewCardID","usersID","pktpSection","ResultText","resulttext","PkApproversAgreementUIExtension","hideAddAgreementOprion","HideCreateAddAgreement","PkHideOptionsUIExtension","HideTaskOptions","RemoveHiddenActions","PkSignInDiadocTaskUIExtension","paperIndexToRemove","PkSigningTaskUIExtension","memoSection","EdoTypeID","PersonnelDocumentsTypeID","ArContractTaskUIExtension","PkTCOfferTaskUIExtension","getCard","cardUnsignedFileHash","storedUnsignedFileHash","PkHideControlTaskUIExtension","HideControl","PkWorkOrderTaskUIExtension","PkArticleStickerTaskUIExtension","CheckSendToESUDAsync","openUrl","PkActBecameResponsibleTaskUIExtension","taskAuthorCardRow","PkEksSettingsUIExtension","InitializeProcessingSentTasksErrorsTable","InitializeProcessingReceiveTasksErrorsTable","processingSentTasksErrorsTable","tasksCountColumnIndex","processingReceiveTasksErrorsTable","ArActTaskUIExtension","pkRequiredApproversSection","PkInnerDocumentTaskUIExtension","pk1CSignatureInfoSection","signerIDs","Signers","errors","warnings","IsAllowedToSign","HasDiadocAndCertificate","PkMatrixRemarks","IsCritical","IsHidden","NoRemarks","OutOfAppreverResponsibility","DateOrNumber","ForInfo","AccesOrAccreditation","ConsolidatorDecisionNotCritical","ConsolidatorDecisionCritical","KDorKC","KSD","ApprovementPath","NDS","OtherNotCritical","OtherCritical","ItemsOrSignatories","Limits","TechnicalTypo","ContractConditionsOrDSOrAdditions","PriceOrCalculation","DigitalSignatures","ArContractMatrixTaskUIExtension","DefaultFormTabWithTasksViewModel","hasNotFlag","flags","CardTypeFlags","AllowTasks","formWithTasks","taskViewModel","modifyWorkspace","ChangeInitialFormForMatrixOwner","TaskWorkspaceState","OptionForm","isTaskForThisUser","SetRemark","DelegateAction","AdditionalApprovementAction","ChangeFormForMatrixOwner","taskTypesForChecking","taskCompletionOptionsForChecking","taskCard","currentStageID","taskSection","remarkSelector","delegated","DefaultForm","taskAction","createNotMyDocTaskAction","taskNavigator","additionalApprovement","actionToHide","isMatrixOwner","actionsToHide","displayRoleName","matrixOwnerInfoControl","approveInfoControl","disapproveInfoControl","pkMatrixTask","Initial","formName","saveCardWithTaskModifier","pkMatrixTaskSection","fdTaskSection","initialDelegateId","initialDelegateName","getCaptionWithRightArrow","navigateToForm","createNavigateBackAction","newTaskModel","blockVM","NavigateToForm","OpenDiadocDocumentStoreExtension","CardStoreExtension","cardUrlList","PkIncomingStoreExtension","beforeRequest","recognitionKinds","PkCheckPacketFieldsStoreExtension","removeAllButChanged","currentDocumentKindID","currentDocumentKindName","PacketID","packetfillInfo","packetfillQuestion","contractChanged","requestInfoParams","requestInfoOptionalParams","idpSect","packetMainDocumentsCount","PacketMainDocumentsCount","packetMainDocumentsMessage","PacketMainDocumentsMessage","needToUpdateFields","ArActStoreExtension","SetRejectingIgnorePermissionsWarningFlag","CheckOtherPayments","ArEDocumentStoreExtension","PkValidationKeys","PartnerInDiadocMissing","PartnerInDiadocMissingText","DiadocBoxIDMissing","DiadocBoxIDMissingText","UncompletedExecutionTasks","UncompletedExecutionTasksText","ArContractReasonChange","ReorganizationID","UserErrorID","AssignmentID","VoidedID","ArContractStoreExtension","NeedDialog","Reason","StartDate","ReasonChangeID","ReasonChangeName","CheckExistsContractEdo","ValidateFields","CheckNeedDialogAsync","ArContractPartnersRows","contractAcuCki","ValidateDateField","VoidTheContract","dict","isRequiredReasonChangeControl","setRequired","rearDateControl","reasonChangeID","reasonChangeName","ArContractAdditionalExecutionStoreExtension","optionsToCheckChildExecution","opt","Tasks","PkExpertNewExtension","CardNewExtension","selectedExpertOrganizationId","criteriaValues","partnerKCK","PartnerKCK","organizationId","organizationExtId","pkExperts","MyTasksView","UnselectRows","UnselectRowsAsync","ButtonCommandDelegate","MarkAsReadCommand","MarkAsReadAsync","MarkAllAsExecuteCommand","MarkAllAsExecuteAsync","MarkAsExecuteCommand","MarkAsExecuteAsync","render","RaisedButton","className","disabled","IconButton","__decorate","observer","MyTasksViewModel","BaseContentItem","viewComponent","area","ContentPlaceArea","ToolBarPanel","ContentPlaceOrder","Middle","_selectedDocsIDs","_selectedDocs","_pageRowsChangingDisposer","_pageRowsSelectionChangingDisposer","_tableView","_filterButton","_component","initiailize","SetSelectionLogic","UpdateContextInfo","viewParams","IViewParametersEqual","cloneAsReadOnly","delete","RequestParameterEqual","first","second","fCrit","sCrit","criteriaName","fv","sv","arrFirst","arrSecond","elf","els","listTasks","GetTaskInfo","TasksDelegatedAsync","tasksCount","tasksInCards","groupBy","GetCardAsync","taskType","completionOptions","DelegateTaskInCardAsync","StoreCardAsync","errorsString","optionID","employeeId","restrictionFlags","CardGetRestrictionFlags","RestrictTaskHistory","RestrictSections","RestrictFiles","RestrictTasks","TasksCompletedAsync","typeParam","iTaskID","iCardID","iTypeID","iTypeCaption","CompleteTaskInCardAsync","Edit","TypeID","TypeCaption","keyValue","currArr","MyTasksExtension","WorkplaceViewComponentExtension","getExtensionName","initialize","contentFactories","MyTasksInitializeExtension","ApplicationExtension","ViewComponentRegistry","register","PkCompleteTasksWorkplaceComponentViewModel","taskTypesInfo","GetActiveTaskTypesInfoAsync","taskTypesInfoGroups","ShowTaskTypeChoosingDialogAsync","ShowCompleteTasksDialogAsync","TasksTypesInfo","taskTypesIDs","buttons","GetCompleteOptionCaptionAsync","dialogComment","commentColumnID","commentValidator","validators","tryGetFromSettings","validatorSettings","validationResultType","GetCardsAsync","CompleteTasksInCardsAsync","StoreCardsAsync","completionOptionID","PkCompleteTasksWorkplaceComponentView","CompleteTasksAsync","PkCompleteTasksWorkplaceComponentExtension","PkCompleteTasksWorkplaceComponentInitializeExtension","PkContractDownloadReportComponentViewModel","ContentPanel","PkContractDownloadReportComponentView","SelectRows","SelectRowsAsync","PkContractDownloadReportComponentExtension","PkContractDownloadReportComponentInitializeExtension","PkActDownloadReportComponentViewModel","PkActDownloadReportComponentView","PkActDownloadReportComponentExtension","PkActDownloadReportComponentInitializeExtension","PkMatrixWorkplaceComponentViewModel","doubleClickAction","openCardDoubleClickAction","OpenCardAsync","GetCardTypeByAlias","GetRoleIDByAlias","ref","isCard","openOnDoubleClick","getCardId","colPrefix","deleteRequest","CardDeleteRequest","PkMatrixWorkplaceComponentView","ButtonCommandCreate","ButtonCommandDelete","DeleteAsync","PkMatrixWorkplaceComponentExtension","PkMatrixWorkplaceComponentInitializeExtension","CryptoProEDSProvider","EDSProvider","getCerts","getName","getParameter","signFile","fileBase64Str","encryptAndDigestList","oCertificates","Find","CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME","oCertificate","publicKey","PublicKey","keyAlgo","Algorithm","publicOid","hashAlgoOid","getHashByPublicOid","hashAlgo","getHashAlgoByOid","propset_DataEncoding","oRawSignature","sRawSignature","sSignedMessage","buffer","binary","byteLength","arrayBufferToBase64","toByteArray","reverse","signatureAttributes","getAttributesFromSignature","hashOid","toHexString","sRawFileHash","valid","Import","oSignAttrsHashedData","signedAttributes","VerifyHash","propset_Content","VerifyCades","pair","encryptOid","digestOid","CADESCOM_HASH_ALGORITHM_CP_GOST_3411","CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256_HMAC","CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512","CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512_HMAC","CADESCOM_HASH_ALGORITHM_CP_GOST_3411_HMAC","CADESCOM_HASH_ALGORITHM_MD2","CADESCOM_HASH_ALGORITHM_MD4","CADESCOM_HASH_ALGORITHM_MD5","CADESCOM_HASH_ALGORITHM_SHA_256","CADESCOM_HASH_ALGORITHM_SHA_384","CADESCOM_HASH_ALGORITHM_SHA_512","CADESCOM_HASH_ALGORITHM_SHA1","hexString","byteArray","ViewActionDialogResult","PkSignDocumentsWorkplaceComponentViewModel","Refresh","_signButtonVisibility","SignButtonVisibility","GetSignButtonVisibility","GetReviewingTasksCardIDsAsync","signDiadlogResult","ShowDialogCommentAsync","dialogResult","reviewingTasksCardIDs","rowsData","GetRowsDataAsync","ConfirmSigningAsync","contentControlText","commentControlCaption","contentControl","Selected","All","viewActionDialogResult","filterCardIDs","columnName","columnValue","CompleteTaskAsync","rowData","cardsFilesInfoToSave","observable","computed","PkSignDocumentsWorkplaceComponentView","SignActionAsync","PkSignDocumentsWorkplaceComponentExtension","PkSignDocumentsWorkplaceComponentInitializeExtension","RefreshMyTasksExtension","TreeItemExtension","_lastCalculateTime","isActive","UpdateAsync","allTaskCount","_prevAllTaskCount","newTaskCount","_prevNewTaskCount","setSeconds","TasksCount","NewTasksCount","refreshNode","UserSubsetsExtension","_firstStart","_initialized","contextMenuGenerators","menuActions","SaveSubsetsAsync","SetLoadSubsetActivity","active","_jsonText","JsonText","UserSubsets","composition","compositionId","Parent","ShowSubsetsFromMemoryRecursive","activity","userSubsets","CollectionUsersSubsets","level","newElement","childItem","subsetTreeItem","Subset","levelUp","SearchChildForJsonRecursive","jsonText","setRequest","child","ChildSubsetCollection","treeItem","availableSubsets","subset","subsetMetaData","SubsetVisibility","OpenedAsDefault","expandingMode","ExpandingMode","Expanded","newItem","TreeItemFactory","showSubset","isLoading","IsLoading","SubParent","subItem","expand","ParentName","Level","SubsetPath","OrderingNodesInFolderExtension","OrderNodesInFolderByName","orderedItems","sortByLocalized","orderPos","singleton","ApprovalListsFileMenu","FileControlExtension","openingMenu","addFileActionNames","menuItemName","ArContractFileControlMenu","DownloadAllFiles","zipFileName","ArPoaFileControlMenu","PkAccessibilityContextMenuButtonsFileExtension","fPermission","filePermissions","ProhibitReplaceFile","canDelete","ProhibitDeleteFile","ArPoaFileMenu","listActionsToRemove","openForEdit","openInFolderForEdit","replaceFromTemplate","createCopy","addVersion","editImages","ArContractFileMenu","CheckCreatedOnBaseArEDocument","actionIndex","showWarning","executeAction","isConfirm","IdpFileMenu","SetFilesPermissions","pdiSect"],"mappings":"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","file":"pkScripts.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 86);\n","module.exports = tessa.tessa.platform;","module.exports = tessa.tessa.cards;","module.exports = tessa.tessa.ui;","module.exports = tessa.tessa.cards.service;","export class CdCardTypes {\r\n\r\n static ArContractTypeID = \"51596f1c-1829-40f4-b471-22c45a3978fd\";\r\n static ArPowerOfAttorneyTypeID = \"188211f8-2b2c-4ce0-a446-206e31d20fdf\";\r\n static ArPowersOfAttorneyAuthorityTypeID = \"0622e1af-e91f-4663-a37b-d586323587cb\";\r\n static ArDocumentIdpTypeID = \"8ef44c17-a3c6-4af4-9930-d34c4e5edcb3\";\r\n static TechnicalDocumentationTypeID = \"56de2e2d-a374-49b8-9639-a4cf7742a1d7\";\r\n static PkExecutiveDocumentationTypeID = \"70557f03-c6ab-4b62-a855-e6f513fae9b8\";\r\n static PkExecutiveSchemeTypeID = \"57087b16-185f-49e2-bcb0-24f8bd13547a\";\r\n static PkDevelopmentScenarionTypeID = \"5bb2dcd3-2f50-4214-89bb-da4503e5afe0\";\r\n static PkRequestForMaterialsTypeID = \"a28b3be6-c406-42e5-8647-60a6e3d0ea42\";\r\n static PkCaseNewTypeID = \"d57a5f2f-67f2-4ff8-a01e-5f022367c2d7\";\r\n static RdDivisionRoleTypeID = \"9f01a70a-fb62-4ddc-9c18-db928d243173\";\r\n static ProjectTypeID = \"c613dbdc-f52e-411c-a004-8f061688fec6\";\r\n static PkKCKPartnerTypeID = \"43d2051c-b7d7-47d9-ad69-623ae6513579\";\r\n static PersonalRoleTypeID = \"929ad23c-8a22-09aa-9000-398bf13979b2\";\r\n static PkGlazingOrderTypeID = \"a669b8e6-ebbb-4d86-a263-c09a0c48a359\";\r\n static PkAdditionalWorksContractOrderTypeID = \"c60ab7e3-82e8-43dc-8c03-e689b422c71a\";\r\n static PkZosRvDocumentypeID = \"092e84c3-1072-4db8-9a7d-911ad42078b5\";\r\n\r\n static ArPowersOfAttorneyAuthorityTypeName = \"ArPowersOfAttorneyAuthority\";\r\n\r\n static ArHeadersBlanksForPowerOfAttorneyTypeID = \"cce01cf4-8c23-44a8-96be-a6fa55739e6f\";\r\n static ArFinanceTaxAuthorityRegistrationTypeID = \"0425989a-061d-4409-950c-5057d82d1e39\";\r\n\r\n // из другого модуля, не удалось разделить\r\n static PkIncomingTypeID = \"0ca52091-fd54-4e72-bfba-b31ca18de901\";\r\n static PkMemoTypeID = \"debdbddb-030b-433b-b8df-8cf98a72344e\";\r\n static PkOutgoingTypeID = \"9485e570-954a-4d90-bbc7-6610fe9674e4\";\r\n static RdndTypeID = \"1b61abab-6643-40bd-852f-c7b0753b72aa\";\r\n static PkInternalDocumentationTypeID = \"65e9d23f-551c-4386-b49f-c0eb40c693fa\";\r\n static PkAssignmentTypeID = \"11929c1b-0aa0-48c8-99bc-2058378647cc\";\r\n static PkLetterCreditTypeID = \"10a3e047-6943-45df-8779-8a832a205978\";\r\n static InstructionTypeID = \"bb3719cc-5033-4c95-92ec-01411c170b97\";\r\n static ArActTypeID = \"29ea1af0-4cd0-4a34-9184-8dc275672e1a\";\r\n static PkProtocolTenderTypeID = \"d85b4a17-2e58-459e-bf80-958ad88a7c56\";\r\n static ArEDocumentTypeID = \"ba0c2336-267c-49b8-bb4c-78cd620cdd82\";\r\n static PkPacketVirtualTypeID = \"ae8e3ad3-3e30-4d20-969a-2565bd92c957\";\r\n static PkWorkOrderTypeID = \"502955b1-a3ad-4d90-99ea-0205ebc4d139\";\r\n static PkProtocolTypeID = \"0abe23f3-0d5a-485b-ba15-64ec86c0296b\";\r\n static PkProxyTypeID = \"3b3e09a9-4a17-46e5-b941-6d4afcccac13\";\r\n static PkTCOfferTypeID = \"6dca5b3d-7e33-4b30-ad3d-3849a4265ae8\";\r\n static IrdDocumentTypeID = 'c2b8a9a1-16eb-4ada-9842-7709bc236ee1';\r\n static IrdDocumentTypeName = 'IrdDocument';\r\n static IrdTEPTypeID = '820516e2-a9fc-49c8-8800-cd163580d11f';\r\n static IrdTEPTypeName = 'IrdTEP';\r\n\r\n static CopyTileCardTypes: string[] = [\r\n CdCardTypes.PkExecutiveDocumentationTypeID,\r\n CdCardTypes.TechnicalDocumentationTypeID,\r\n CdCardTypes.ArDocumentIdpTypeID,\r\n CdCardTypes.RdndTypeID,\r\n CdCardTypes.PkInternalDocumentationTypeID,\r\n CdCardTypes.PkAssignmentTypeID,\r\n CdCardTypes.PkMemoTypeID,\r\n CdCardTypes.PkOutgoingTypeID,\r\n CdCardTypes.PkIncomingTypeID,\r\n CdCardTypes.PkLetterCreditTypeID,\r\n CdCardTypes.ArActTypeID,\r\n CdCardTypes.PkProtocolTypeID,\r\n CdCardTypes.ArEDocumentTypeID,\r\n CdCardTypes.PkProtocolTenderTypeID,\r\n CdCardTypes.PkWorkOrderTypeID,\r\n CdCardTypes.PkExecutiveSchemeTypeID,\r\n CdCardTypes.PkDevelopmentScenarionTypeID,\r\n CdCardTypes.PkRequestForMaterialsTypeID,\r\n CdCardTypes.PkGlazingOrderTypeID\r\n ];\r\n\r\n static TileExecutionAcquaintanceCardTypes: string[] = [\r\n CdCardTypes.PkExecutiveDocumentationTypeID,\r\n CdCardTypes.PkExecutiveSchemeTypeID,\r\n CdCardTypes.PkProtocolTenderTypeID,\r\n CdCardTypes.PkWorkOrderTypeID\r\n ];\r\n\r\n static TypesOfDocumentsWithApprovalLists: string[] = [\r\n CdCardTypes.PkOutgoingTypeID,\r\n CdCardTypes.PkIncomingTypeID,\r\n CdCardTypes.PkAssignmentTypeID,\r\n CdCardTypes.PkMemoTypeID,\r\n CdCardTypes.RdndTypeID,\r\n CdCardTypes.InstructionTypeID,\r\n CdCardTypes.PkLetterCreditTypeID,\r\n CdCardTypes.ArActTypeID,\r\n CdCardTypes.PkProtocolTenderTypeID,\r\n CdCardTypes.PkWorkOrderTypeID,\r\n CdCardTypes.PkExecutiveDocumentationTypeID,\r\n CdCardTypes.PkInternalDocumentationTypeID,\r\n CdCardTypes.PkProtocolTypeID,\r\n CdCardTypes.TechnicalDocumentationTypeID,\r\n CdCardTypes.ArEDocumentTypeID,\r\n CdCardTypes.PkExecutiveSchemeTypeID,\r\n CdCardTypes.PkDevelopmentScenarionTypeID,\r\n CdCardTypes.PkRequestForMaterialsTypeID,\r\n CdCardTypes.PkTCOfferTypeID,\r\n CdCardTypes.ArContractTypeID,\r\n CdCardTypes.PkGlazingOrderTypeID\r\n ];\r\n\r\n static RefsTableSupportedCardTypes: string[] = [\r\n CdCardTypes.TechnicalDocumentationTypeID,\r\n CdCardTypes.RdndTypeID,\r\n CdCardTypes.IrdDocumentTypeID,\r\n CdCardTypes.PkInternalDocumentationTypeID,\r\n CdCardTypes.PkAssignmentTypeID,\r\n CdCardTypes.PkMemoTypeID,\r\n CdCardTypes.PkOutgoingTypeID,\r\n CdCardTypes.PkIncomingTypeID,\r\n CdCardTypes.ArDocumentIdpTypeID,\r\n CdCardTypes.ArActTypeID,\r\n CdCardTypes.PkProtocolTenderTypeID,\r\n CdCardTypes.PkWorkOrderTypeID,\r\n CdCardTypes.PkProxyTypeID,\r\n CdCardTypes.PkExecutiveDocumentationTypeID,\r\n CdCardTypes.ArContractTypeID,\r\n CdCardTypes.PkProtocolTypeID,\r\n CdCardTypes.ArEDocumentTypeID,\r\n CdCardTypes.PkExecutiveSchemeTypeID,\r\n CdCardTypes.PkDevelopmentScenarionTypeID,\r\n CdCardTypes.PkRequestForMaterialsTypeID,\r\n CdCardTypes.PkTCOfferTypeID,\r\n CdCardTypes.ArPowerOfAttorneyTypeID\r\n ];\r\n}","module.exports = tessa.tessa.extensions;","import { ICardUIExtensionContext, ICardModel, IControlViewModel, IFormViewModel } from 'tessa/ui/cards';\r\nimport { CardGetFileContentRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { createTypedField, DotNetType, Guid, hasFlag, Visibility } from 'tessa/platform';\r\nimport { showNotEmpty, showError, showMessage } from 'tessa/ui';\r\nimport { GridViewModel, ControlViewModelBase, AutoCompleteEntryViewModel, TextBoxViewModel, GridRowAction, GridRowEventArgs } from 'tessa/ui/cards/controls';\r\nimport { CdRequestTypes } from '../Helpers/CdRequestTypes';\r\nimport { CdCommonHelper } from '../Helpers/CdCommonHelper';\r\nimport { CardRowState, CardSection, CardRow, Card, CardPermissionFlags, CardFileState, CardSectionType, CardStoreMode, CardFieldChangedEventArgs } from 'tessa/cards';\r\nimport { CdFdTaskTypes } from '../Helpers/CdFdTaskTypes';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { CdGeneralDocumentationClientHelper } from '../Helpers/Cards/CdGeneralDocumentationClientHelper';\r\nimport { LocalizationManager } from 'tessa/localization';\r\nimport { PkOutgoingKinds } from '../../pkScripts/Helpers/PkOutgoingKinds';\r\nimport { IUserSession } from 'common/utility/userSession';\r\nimport { CdDocStates } from '../Helpers/CdDocStates';\r\nimport { DocumentSections } from \"../../pkScripts/Helpers/Enums/DocumentSections\";\r\n\r\nexport class CdUIHelper {\r\n\r\n public static async CheckPartnerInPerimeterAsync(partnerExternalID: number | null, аccreditationPerimetrName: string, everBeen: boolean = false) {\r\n\r\n if (!partnerExternalID) {\r\n return false;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CheckPartnerInPerimeter;\r\n request.info[\"PartnerExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64);\r\n request.info[\"AccreditationPerimetrName\"] = createTypedField(аccreditationPerimetrName, DotNetType.String);\r\n request.info[\"EverBeen\"] = createTypedField(everBeen, DotNetType.Boolean);\r\n\r\n const response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful)\r\n return false;\r\n\r\n let error = response.info.Error?.$value;\r\n if (error) {\r\n await showError(error);\r\n return false;\r\n }\r\n\r\n let res: boolean = response.info.IsPartnerInPerimeter.$value;\r\n return res;\r\n\r\n }\r\n\r\n\r\n public static SetReadOnlyToControls(readOnlyValue: boolean, ...controls: IControlViewModel[]) {\r\n controls.forEach(control => {\r\n if (control != null && control.isReadOnly !== readOnlyValue) control.isReadOnly = readOnlyValue;\r\n });\r\n }\r\n\r\n /** Установка видимости контрола */\r\n public static SetConrolVisibility(control: IControlViewModel, isVisible: boolean) {\r\n const visibility: Visibility = isVisible ? Visibility.Visible : Visibility.Collapsed;\r\n control.controlVisibility = visibility;\r\n }\r\n\r\n /** Скрытие вкладок из карточки. */\r\n public static HideTabs(\r\n model: ICardModel,\r\n ...tabCaptions: string[]) {\r\n if (tabCaptions == null || tabCaptions.length == 0) {\r\n return;\r\n }\r\n\r\n for (var i = model.forms.length - 1; i >= 0; i--) {\r\n const form = model.forms[i];\r\n if (!tabCaptions.some(x => x == LocalizationManager.instance.localize(form.tabCaption))) {\r\n continue;\r\n }\r\n\r\n form.visibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n // Связка предприятие-подразделения-автор\r\n public static GroupEnterpriseLogic(context: ICardUIExtensionContext) {\r\n let ArContractsUser = context.model.card.sections.tryGet('ArContractsUser');\r\n if (ArContractsUser == null) return;\r\n\r\n ArContractsUser.fields.fieldChanged.add(async e => {\r\n if (e.fieldName == \"AuthorID\") {\r\n if (e.fieldValue != null) {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetAuthorDepartment;\r\n request.info[\"AuthorID\"] = createTypedField(e.fieldValue, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) {\r\n\r\n if (ArContractsUser == null) return;\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"OrganizationID\", response.info.OrganizationID);\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"OrganizationName\", response.info.OrganizationName);\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"OrganizationExternalID\", response.info.OrganizationExternalID);\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"OrganizationGuid1C\", response.info.OrganizationGuid1C);\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"AuthorDepartmentID\", response.info.AuthorDepartmentID);\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"AuthorDepartmentName\", response.info.AuthorDepartmentName);\r\n }\r\n\r\n } else {\r\n if (ArContractsUser == null) return;\r\n ArContractsUser.fields.set('OrganizationID', null);\r\n ArContractsUser.fields.set('OrganizationExternalID', null);\r\n ArContractsUser.fields.set('OrganizationName', null);\r\n ArContractsUser.fields.set('OrganizationGuid1C', null);\r\n ArContractsUser.fields.set('AuthorDepartmentID', null);\r\n ArContractsUser.fields.set('AuthorDepartmentName', null);\r\n }\r\n }\r\n if (e.fieldName == \"AuthorDepartmentID\") {\r\n if (e.fieldValue != null) {\r\n if (ArContractsUser == null) return;\r\n let AuthorID = ArContractsUser.fields.tryGet(\"AuthorID\");\r\n if (AuthorID == null) return;\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetAuthorDepartment;\r\n request.info[\"AuthorID\"] = createTypedField(AuthorID, DotNetType.Guid);\r\n request.info[\"AuthorDepartmentID\"] = createTypedField(e.fieldValue, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) {\r\n\r\n if (ArContractsUser == null) return;\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"OrganizationID\", response.info.OrganizationID);\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"OrganizationName\", response.info.OrganizationName);\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"OrganizationExternalID\", response.info.OrganizationExternalID);\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"OrganizationGuid1C\", response.info.OrganizationGuid1C);\r\n }\r\n\r\n } else {\r\n if (ArContractsUser == null) return;\r\n ArContractsUser.fields.set('OrganizationID', null);\r\n ArContractsUser.fields.set('OrganizationExternalID', null);\r\n ArContractsUser.fields.set('OrganizationName', null);\r\n ArContractsUser.fields.set('OrganizationGuid1C', null);\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n public static CheckCanEditTechnicalArticle(card: Card, row: CardRow) {\r\n let arContractPartners = card.sections.tryGet('ArContractPartners');\r\n let arContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (arContractPartners == null || arContractPartners.rows == null || arContractsUser == null) return false;\r\n let partner = arContractPartners.rows.find(x =>\r\n x.state != CardRowState.Deleted\r\n && x.get(\"RoleID\") != null\r\n && x.get(\"PartnerAutomated\") != null\r\n && x.get(\"RoleID\") == 0\r\n && x.get(\"PartnerAutomated\") == true\r\n );\r\n if (row.get(\"BasedOn\") == null\r\n && partner == null) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public static InitializeContractTableObjects(context: ICardUIExtensionContext, isTransferToUSReadonlyFields: boolean, session: IUserSession) {\r\n const objects = context.model.controls.get('ContractArticleIdp') as GridViewModel;\r\n const isProhibitModify = hasFlag(context.model.card.permissions.resolver\r\n .getSectionPermissions(\"ArContractArticleIdp\"), CardPermissionFlags.ProhibitModify);\r\n const fieldPermissions = context.model.card.permissions.sections.tryGet(\"ArContractArticleIdp\")?.fieldPermissions;\r\n if ((!objects || isProhibitModify) && !fieldPermissions) {\r\n this.AllowEditESUDDocs(context, session, DocumentSections.ContractArticleIdp);\r\n return;\r\n }\r\n\r\n const isAmountAllowModify = fieldPermissions?.tryGet(\"Amount\")?.$value == CardPermissionFlags.AllowModify;\r\n const isAmountAllAllowModify = fieldPermissions?.tryGet(\"AmountAll\")?.$value == CardPermissionFlags.AllowModify;\r\n const isCostItemAllowModify = fieldPermissions?.tryGet(\"CostItemID\")?.$value == CardPermissionFlags.AllowModify;\r\n const isObjectAllowModify = fieldPermissions?.tryGet(\"ObjectID\")?.$value == CardPermissionFlags.AllowModify;\r\n const isPaymentTermAllowModify = fieldPermissions?.tryGet(\"PaymentTerm\")?.$value == CardPermissionFlags.AllowModify;\r\n const isProjectAllowModify = fieldPermissions?.tryGet(\"ProjectID\")?.$value == CardPermissionFlags.AllowModify;\r\n const isStageNameAllowModify = fieldPermissions?.tryGet(\"StageName\")?.$value == CardPermissionFlags.AllowModify;\r\n const isVatRateAllowModify = fieldPermissions?.tryGet(\"VatRateID\")?.$value == CardPermissionFlags.AllowModify;\r\n const isPercentPrepaymentAllowModify = fieldPermissions?.tryGet(\"PercentPrepayment\")?.$value == CardPermissionFlags.AllowModify;\r\n const objectList = context.model.card.sections.tryGet('ArContractArticleIdp');\r\n if (objectList == null) return;\r\n objects.rowInitializing.add(e => {\r\n if (e.rowModel!.controls.get('Object') == null) {\r\n return;\r\n }\r\n\r\n\r\n let objectID = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Object\");\r\n let project = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Project\");\r\n let residentialComplex = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"ResidentialComplex\");\r\n let stageName = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"StageNameArticleControl\");\r\n let costItem = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"CostItem\");\r\n let amount = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"AmountArticleControl\");\r\n let amountAll = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"AmountAllArticleControl\");\r\n let paymentTerm = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PaymentTermArticleControl\");\r\n let percentPrepayment = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PercentPrepaymentArticleControl\");\r\n let vatRate = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"VatRateCommon\");\r\n\r\n if (context.model.card.storeMode != CardStoreMode.Insert) {\r\n CdUIHelper.SetReadOnlyToControls(!isObjectAllowModify, objectID!);\r\n CdUIHelper.SetReadOnlyToControls(!isAmountAllowModify, amount!);\r\n CdUIHelper.SetReadOnlyToControls(!isProjectAllowModify, project!);\r\n CdUIHelper.SetReadOnlyToControls(!isStageNameAllowModify, stageName!);\r\n CdUIHelper.SetReadOnlyToControls(!isCostItemAllowModify, costItem!);\r\n CdUIHelper.SetReadOnlyToControls(!isAmountAllAllowModify, amountAll!);\r\n CdUIHelper.SetReadOnlyToControls(!isPaymentTermAllowModify, paymentTerm!);\r\n CdUIHelper.SetReadOnlyToControls(!isPercentPrepaymentAllowModify, percentPrepayment!);\r\n CdUIHelper.SetReadOnlyToControls(!isVatRateAllowModify, vatRate!);\r\n }\r\n if ((context.model.card.permissions.cardPermissions & CardPermissionFlags.AllowModify) == 0)\r\n return;\r\n let canEdit = true;\r\n if (e.row.get(\"AutoGenerated\") != null && e.row.get(\"AutoGenerated\") == true) {\r\n canEdit = this.CheckCanEditTechnicalArticle(context.model.card, e.row);\r\n }\r\n\r\n if (canEdit) {\r\n if (e.row.tryGet(\"ObjectID\") != null) {\r\n CdUIHelper.SetReadOnlyToControls(false, objectID!);\r\n CdUIHelper.SetReadOnlyToControls(true, residentialComplex!, project!);\r\n }\r\n else {\r\n CdUIHelper.SetReadOnlyToControls(false, objectID!, residentialComplex!, project!);\r\n }\r\n }\r\n e.row.fieldChanged.add(async e2 => {\r\n if (e2.fieldName === \"ObjectID\") {\r\n\r\n CdUIHelper.SetReadOnlyToControls(true, objectID!, residentialComplex!, project!);\r\n\r\n if (e2.fieldValue == null) {\r\n\r\n e.row.set(\"ProjectID\", null);\r\n e.row.set(\"ProjectName\", null);\r\n e.row.set(\"ProjectProjectID\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"ObjectObjectID\", null);\r\n e.row.set(\"ObjectCode1c\", null);\r\n e.row.set(\"ObjectNumber\", null);\r\n e.row.set(\"ResidentialComplexID\", null);\r\n e.row.set(\"ResidentialComplexName\", null);\r\n\r\n CdUIHelper.SetReadOnlyToControls(false, objectID!, residentialComplex!, project!);\r\n }\r\n else {\r\n let objectId = e2.fieldValue;\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRegionCityAndProjectByObject;\r\n request.info[\"ObjectId\"] = createTypedField(objectId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n e.row.set(\"ProjectID\", null);\r\n e.row.set(\"ProjectName\", null);\r\n e.row.set(\"ProjectProjectID\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"ObjectObjectID\", null);\r\n e.row.set(\"ObjectCode1c\", null);\r\n e.row.set(\"ObjectNumber\", null);\r\n e.row.set(\"ResidentialComplexID\", null);\r\n e.row.set(\"ResidentialComplexName\", null);\r\n\r\n CdUIHelper.SetReadOnlyToControls(false, residentialComplex!, project!);\r\n }\r\n else {\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectID\", response.info.ProjectID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectName\", response.info.ProjectName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ObjectName\", response.info.ObjectName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ObjectObjectID\", response.info.ObjectExtID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ObjectCode1c\", response.info.Guid1C);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ObjectNumber\", response.info.ObjectNumber);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexID\", response.info.ResidentialComplexID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexName\", response.info.ResidentialComplexName);\r\n\r\n CdUIHelper.SetReadOnlyToControls(false, objectID!);\r\n }\r\n }\r\n }\r\n else if (e2.fieldName === \"ResidentialComplexID\") {\r\n let projectID = e.row.tryGetField(\"ProjectID\");\r\n if (projectID == null) {\r\n const response = await CdUIHelper.RequestByResidentialComplexOrProjectWithNoAvailable(e2.fieldValue, \"ResidentialComplexID\");\r\n if (response != null && response.info != null && response.info.ProjectID) {\r\n projectID = response.info.ProjectID;\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectID\", response.info.ProjectID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectName\", response.info.ProjectName);\r\n }\r\n }\r\n\r\n if (e2.fieldValue !== null) {\r\n setTimeout(this.SetAutoCompleteEntryValueIfOneAsync, 100, objectID!, e.row, \"ObjectID\", \"ObjectName\");\r\n }\r\n\r\n }\r\n else if (e2.fieldName === \"ProjectID\") {\r\n let residentialComplexID = e.row.tryGetField('ResidentialComplexID');\r\n if (residentialComplexID == null) {\r\n const response = await CdUIHelper.RequestByResidentialComplexOrProjectWithNoAvailable(e2.fieldValue, \"ProjectID\");\r\n if (response != null && response.info != null && response.info.ResidentialComplexID) {\r\n residentialComplexID = response.info.ResidentialComplexID;\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexID\", response.info.ResidentialComplexID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexName\", response.info.ResidentialComplexName);\r\n }\r\n }\r\n\r\n if (e2.fieldValue !== null) {\r\n setTimeout(this.SetAutoCompleteEntryValueIfOneAsync, 100, objectID!, e.row, \"ObjectID\", \"ObjectName\");\r\n }\r\n }\r\n });\r\n\r\n this.AllowEditESUDDocs(context, session, DocumentSections.ContractArticleIdp);\r\n\r\n // После передачи в УС нужно запретить\r\n if (e.action == GridRowAction.Opening) {\r\n if (isTransferToUSReadonlyFields && !this.IsRowCreatedAfterTransferToUS(e.row, e.cardModel?.card)) {\r\n e.rowModel?.controlsBag.forEach((control) => {\r\n control.isReadOnly = true;\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static IsRowCreatedAfterTransferToUS(row: CardRow, card: Card) {\r\n let section = card.sections.tryGet('ArContractsUser');\r\n if (section != null && row != null) {\r\n let transferDate = section.fields.tryGet('TransferToUSDate');\r\n let createdDate = row.tryGet('Created');\r\n return transferDate == null && createdDate == null || transferDate < createdDate;\r\n }\r\n return true;\r\n }\r\n\r\n public static InitializeTableObjects(context: ICardUIExtensionContext) {\r\n const objects = context.model.controls.get('Objects') as GridViewModel;\r\n const isProhibitModify = hasFlag(context.model.card.permissions.resolver\r\n .getSectionPermissions(\"PkObjectList\"), CardPermissionFlags.ProhibitModify);\r\n if (!objects || isProhibitModify) return;\r\n const control = context.model.controls.get('RealEstate');\r\n if (control) control.isReadOnly = true;\r\n\r\n const objectList = context.model.card.sections.tryGet('PkObjectList');\r\n if (objectList == null) return;\r\n let documentCommonInfoSection = context.card.sections.tryGet(\"DocumentCommonInfo\");\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n //if (pkoSection != null && pkoSection.fields.tryGet('TypeID') == PkOutgoingKinds.ClaimId) \r\n //{\r\n // objects.isReadOnly = true;\r\n //}\r\n objects.rowInvoked.add(e => {\r\n let card = context.model.card\r\n\r\n let objectsSection = e.cardModel.card.sections.tryGet(\"PkObjectList\");\r\n let pkOutgoingVirtual = context.card.sections.tryGet(\"PkOutgoingVirtual\");\r\n\r\n if (objectsSection && pkOutgoingVirtual) {\r\n const objsList = objectsSection.rows.filter(x => x.state !== CardRowState.Deleted && ((e.action == GridRowAction.Deleting && x.rowId != e.row.rowId) || e.action != GridRowAction.Deleting));\r\n let objectIds: string = '';\r\n if (objsList && !(objsList.length == 0)) {\r\n objectIds = objsList\r\n .map(r => '\"' + r.getField(\"ObjectID\")?.$value + '\"')\r\n .filter((v, i, a) => a.indexOf(v) == i)\r\n .join(',');\r\n pkOutgoingVirtual.fields.set('ObjectsJsonForView', (!objectIds || objectIds.length === 0) ? null : '[' + objectIds + ']', DotNetType.String);\r\n } else {\r\n pkOutgoingVirtual.fields.set('ObjectsJsonForView', null, DotNetType.String);\r\n }\r\n }\r\n if (pkoSection && documentCommonInfoSection && objectsSection && pkoSection.fields.tryGet('TypeID') == PkOutgoingKinds.ClaimId) {\r\n let claimContractControl = context.model.controls.get('ClaimContractControl');\r\n if (claimContractControl != null) {\r\n const isOneObject = objectsSection.rows.filter(x => x.state !== CardRowState.Deleted && ((e.action == GridRowAction.Deleting && x.rowId != e.row.rowId) || e.action != GridRowAction.Deleting)).length == 1;\r\n const isDepartmentEmpty = documentCommonInfoSection?.fields.tryGet(\"DepartmentID\") == null;\r\n claimContractControl.isReadOnly = !isOneObject || pkoSection.fields.tryGet(\"PartnerKCKExternalID\") == null || isDepartmentEmpty;\r\n }\r\n }\r\n if (e.action == GridRowAction.Deleting && card != null) {\r\n if (pkoSection) {\r\n pkoSection?.fields.set(\"ContractID\", null);\r\n pkoSection?.fields.set(\"ContractExtID\", null);\r\n pkoSection?.fields.set(\"ContractNumberVirtual\", null);\r\n pkoSection?.fields.set(\"ClaimAmount\", null);\r\n pkoSection?.fields.set(\"AdditionalEmailsForPartners\", null);\r\n }\r\n let claimPerformersSection = card.sections.tryGet(\"PkOutgoingClaimPerformers\");\r\n if (!claimPerformersSection) {\r\n return;\r\n }\r\n\r\n if (card.storeMode == CardStoreMode.Update) {\r\n\r\n\r\n let parentRows = claimPerformersSection!.rows;\r\n // Удаляем родителя только если все дочерние удалены.\r\n parentRows!.forEach(prow => {\r\n\r\n if (prow.state == CardRowState.Inserted) {\r\n claimPerformersSection?.rows.remove(prow);\r\n }\r\n else {\r\n prow.state = CardRowState.Deleted;\r\n }\r\n\r\n });\r\n\r\n\r\n } else if (card.storeMode == CardStoreMode.Insert) {\r\n\r\n\r\n let parentRows = claimPerformersSection!.rows;\r\n // Удаляем родителя только если все дочерние удалены.\r\n parentRows!.forEach(prow => {\r\n\r\n claimPerformersSection?.rows.remove(prow);\r\n\r\n });\r\n }\r\n }\r\n });\r\n objects.rowEditorClosing.add(async e => {\r\n let objectControlmodel = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Object\");\r\n let objectid = e.row.tryGetField('ObjectID');\r\n if (objectid) {\r\n let message = 'Выбранный объект передан в систему BuildDocs.\\n' +\r\n 'Создание исполнительной документации для этого объекта недоступно!'\r\n let islocked = await CdUIHelper.GetBuildDocsLockedState(objectid.$value);\r\n if (objectControlmodel) {\r\n objectControlmodel.hasActiveValidation = islocked;\r\n objectControlmodel.validationFunc = () => islocked ? message : null;\r\n }\r\n if (islocked === true) {\r\n\r\n // Сохраняем подписчиков.Такая реализация работает быстрее\r\n const fieldChangedSubscribers = Array.from(e.row.fieldChanged.events);\r\n\r\n // Очищаем все подписчики на событие fieldChanged\r\n e.row.fieldChanged.clear();\r\n\r\n // Очищаем объект без вызова событий\r\n e.row.set('ObjectID', null);\r\n e.row.set('ObjectName', null);\r\n\r\n // Восстанавливаем подписчиков на событие fieldChanged\r\n for (const subscriber of fieldChangedSubscribers) {\r\n e.row.fieldChanged.add(subscriber);\r\n }\r\n\r\n await showError(message);\r\n e.cancel = true;\r\n }\r\n }\r\n })\r\n objects.rowEditorClosed.add(async e => {\r\n let objectsSection = e.cardModel.card.sections.tryGet(\"PkObjectList\");\r\n let pkOutgoingVirtual = context.card.sections.tryGet(\"PkOutgoingVirtual\");\r\n let objectControlmodel = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Object\");\r\n if (objectsSection && pkOutgoingVirtual) {\r\n const objsList = objectsSection.rows.filter(x => x.state !== CardRowState.Deleted && ((e.action == GridRowAction.Deleting && x.rowId != e.row.rowId) || e.action != GridRowAction.Deleting));\r\n let objectIds: string = '';\r\n if (objsList && !(objsList.length == 0)) {\r\n objectIds = objsList\r\n .map(r => '\"' + r.getField(\"ObjectID\")?.$value + '\"')\r\n .filter((v, i, a) => a.indexOf(v) == i)\r\n .join(',');\r\n pkOutgoingVirtual.fields.set('ObjectsJsonForView', (!objectIds || objectIds.length === 0) ? null : '[' + objectIds + ']', DotNetType.String);\r\n } else {\r\n pkOutgoingVirtual.fields.set('ObjectsJsonForView', null, DotNetType.String);\r\n }\r\n }\r\n if (pkoSection && documentCommonInfoSection && objectsSection && pkoSection.fields.tryGet('TypeID') == PkOutgoingKinds.ClaimId) {\r\n let claimContractControl = context.model.controls.get('ClaimContractControl');\r\n if (claimContractControl != null) {\r\n const isDepartmentEmpty = documentCommonInfoSection?.fields.tryGet(\"DepartmentID\") == null;\r\n const isOneObject = objectsSection.rows.filter(x => x.state !== CardRowState.Deleted && ((e.action == GridRowAction.Deleting && x.rowId != e.row.rowId) || e.action != GridRowAction.Deleting)).length == 1;\r\n claimContractControl.isReadOnly = !isOneObject || pkoSection.fields.tryGet(\"PartnerKCKExternalID\") == null || isDepartmentEmpty;\r\n }\r\n }\r\n if(objectControlmodel) {\r\n objectControlmodel.hasActiveValidation = false;\r\n objectControlmodel.validationFunc = () => null;\r\n }\r\n });\r\n objects.rowAdding.add(async e => {\r\n if (pkoSection && pkoSection.fields.tryGet('TypeID') === PkOutgoingKinds.ClaimId) {\r\n let objectsSection = context.card.sections.tryGet(\"PkObjectList\");\r\n if (objectsSection && objectsSection.rows.filter(x => x.state !== CardRowState.Deleted).length > 0) {\r\n showError(\"Для претензии допустим только один объект в карточке!\");\r\n e.cancel = true;\r\n return;\r\n }\r\n }\r\n });\r\n objects.rowInitializing.add(e => {\r\n if (e.rowModel!.controls.get('RealEstate') == null) {\r\n return;\r\n }\r\n\r\n let realEstate = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"RealEstate\");\r\n let objectID = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Object\");\r\n let project = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Project\");\r\n let residentialComplex = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"ResidentialComplex\");\r\n let section = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Section\");\r\n let floor = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Floor\");\r\n\r\n if (pkoSection?.fields.tryGet('TypeID') == PkOutgoingKinds.ClaimId) {\r\n CdUIHelper.SetReadOnlyToControls(true, realEstate!, objectID!, project!, section!, floor!);\r\n }\r\n else {\r\n CdUIHelper.SetReadOnlyToControls(true, realEstate!, objectID!, section!, floor!);\r\n }\r\n // все только для чтения\r\n if ((context.model.card.permissions.cardPermissions & CardPermissionFlags.AllowModify) == 0\r\n )\r\n return;\r\n\r\n if (e.row.tryGet(\"RealEstateID\") != null ||\r\n e.row.tryGet(\"ObjectID\") != null) {\r\n CdUIHelper.SetReadOnlyToControls(false, realEstate!, objectID!, section!, floor!);\r\n CdUIHelper.SetReadOnlyToControls(true, residentialComplex!, project!);\r\n }\r\n else {\r\n let residentialComplexID = e.row.tryGetField(\"ResidentialComplexID\");\r\n let projectID = e.row.tryGetField(\"ProjectID\");\r\n\r\n CdUIHelper.SetReadOnlyToControls(residentialComplexID == null && projectID == null, realEstate!, objectID!, section!, floor!);\r\n }\r\n\r\n e.row.fieldChanged.add(async e2 => {\r\n if (pkoSection?.fields.tryGet('TypeID') === PkOutgoingKinds.ClaimId) {\r\n await CdUIHelper.OutgoingClaimFieldChanges(e2, objectID, project, e);\r\n }\r\n else {\r\n await CdUIHelper.CommonFieldChanges(e2, realEstate, objectID, section, floor, residentialComplex, project, e);\r\n }\r\n if(objectID && e2.fieldName === 'ObjectID' && e2.fieldValue != null)\r\n {\r\n objectID.hasActiveValidation = false;\r\n objectID.validationFunc = () => null;\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Возвращает признак того что для объкта запрещено создание исполнительной документации\r\n * @private\r\n * @static\r\n * @param {(any | guid)} fieldValue \r\n * @return {(Promise)} \r\n * @memberof CdUIHelper\r\n * @author Ilchenko\r\n */\r\n private static async GetBuildDocsLockedState(fieldValue: any | guid): Promise {\r\n if (fieldValue == null) return null;\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.IsObjectLockedRequestTypeID;\r\n request.info['ObjectID'] = createTypedField(fieldValue, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n if (response.validationResult.isSuccessful) {\r\n return response.info.IsLocked?.$value;\r\n }\r\n return null;\r\n }\r\n\r\n private static async CommonFieldChanges(e2: CardFieldChangedEventArgs, realEstate: IControlViewModel | null, objectID: IControlViewModel | null, section: IControlViewModel | null, floor: IControlViewModel | null, residentialComplex: IControlViewModel | null, project: IControlViewModel | null, e: GridRowEventArgs) {\r\n if (e2.fieldName === \"ObjectID\") {\r\n\r\n CdUIHelper.SetReadOnlyToControls(true, realEstate!, objectID!, section!, floor!, residentialComplex!, project!);\r\n\r\n if (e2.fieldValue == null) {\r\n e.row.set(\"RegionID\", null);\r\n e.row.set(\"RegionName\", null);\r\n e.row.set(\"CityID\", null);\r\n e.row.set(\"CityName\", null);\r\n e.row.set(\"ProjectID\", null);\r\n e.row.set(\"ProjectName\", null);\r\n e.row.set(\"LivingComplex\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"AddressPost\", null);\r\n e.row.set(\"RealEstateName\", null);\r\n e.row.set(\"ResidentialComplexID\", null);\r\n e.row.set(\"ResidentialComplexName\", null);\r\n e.row.set(\"Guid1C\", null);\r\n e.row.set(\"SectionID\", null);\r\n e.row.set(\"SectionNumber\", null);\r\n e.row.set(\"FloorID\", null);\r\n e.row.set(\"FloorNumber\", null);\r\n\r\n CdUIHelper.SetReadOnlyToControls(false, residentialComplex!, project!);\r\n }\r\n else {\r\n let objectId = e2.fieldValue;\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRegionCityAndProjectByObject;\r\n request.info[\"ObjectId\"] = createTypedField(objectId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n e.row.set(\"RegionID\", null);\r\n e.row.set(\"RegionName\", null);\r\n e.row.set(\"CityID\", null);\r\n e.row.set(\"CityName\", null);\r\n e.row.set(\"ProjectID\", null);\r\n e.row.set(\"ProjectName\", null);\r\n e.row.set(\"LivingComplex\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"AddressPost\", null);\r\n e.row.set(\"RealEstateName\", null);\r\n e.row.set(\"ResidentialComplexID\", null);\r\n e.row.set(\"ResidentialComplexName\", null);\r\n e.row.set(\"Guid1C\", null);\r\n e.row.set(\"SectionID\", null);\r\n e.row.set(\"SectionNumber\", null);\r\n e.row.set(\"FloorID\", null);\r\n e.row.set(\"FloorNumber\", null);\r\n\r\n CdUIHelper.SetReadOnlyToControls(false, residentialComplex!, project!);\r\n }\r\n else {\r\n CdCommonHelper.SetFieldToRow(e.row, \"RegionID\", response.info.RegionID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"RegionName\", response.info.RegionName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"CityID\", response.info.CityID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"CityName\", response.info.CityName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectID\", response.info.ProjectID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectName\", response.info.ProjectName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ObjectName\", response.info.ObjectName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"LivingComplex\", response.info.LivingComplex);\r\n CdCommonHelper.SetFieldToRow(e.row, \"Guid1C\", response.info.Guid1C);\r\n CdCommonHelper.SetFieldToRow(e.row, \"AddressPost\", response.info.AddressPost);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexID\", response.info.ResidentialComplexID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexName\", response.info.ResidentialComplexName);\r\n\r\n CdUIHelper.SetReadOnlyToControls(false, realEstate!, objectID!, floor!, section!);\r\n }\r\n }\r\n }\r\n else if (e2.fieldName === \"ResidentialComplexID\") {\r\n let projectID = e.row.tryGetField(\"ProjectID\");\r\n const response = await CdUIHelper.RequestByResidentialComplexOrProject(e2.fieldValue, \"ResidentialComplexID\");\r\n if (response && response.info && response.info.ProjectID) {\r\n projectID = response.info.ProjectID;\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectID\", response.info.ProjectID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectName\", response.info.ProjectName);\r\n }\r\n CdUIHelper.SetReadOnlyToControls(e2.fieldValue == null && projectID == null, realEstate!, objectID!, floor!, section!);\r\n if (e2.fieldValue !== null) {\r\n setTimeout(this.SetAutoCompleteEntryValueIfOneAsync, 100, objectID!, e.row, \"ObjectID\", \"ObjectName\");\r\n }\r\n\r\n }\r\n else if (e2.fieldName === \"ProjectID\") {\r\n let residentialComplexID = e.row.tryGetField('ResidentialComplexID');\r\n const response = await CdUIHelper.RequestByResidentialComplexOrProject(e2.fieldValue, \"ProjectID\");\r\n if (response && response.info && response.info.ResidentialComplexID) {\r\n residentialComplexID = response.info.ResidentialComplexID;\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexID\", response.info.ResidentialComplexID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexName\", response.info.ResidentialComplexName);\r\n }\r\n CdUIHelper.SetReadOnlyToControls(e2.fieldValue == null && residentialComplexID == null, realEstate!, objectID!, floor!, section!);\r\n if (e2.fieldValue !== null) {\r\n setTimeout(this.SetAutoCompleteEntryValueIfOneAsync, 100, objectID!, e.row, \"ObjectID\", \"ObjectName\");\r\n }\r\n }\r\n }\r\n private static async OutgoingClaimFieldChanges(e2: CardFieldChangedEventArgs, objectID: IControlViewModel | null, project: IControlViewModel | null, e: GridRowEventArgs) {\r\n if (e2.fieldName === \"ResidentialComplexID\") {\r\n CdUIHelper.SetReadOnlyToControls(e2.fieldValue == null, project!);\r\n\r\n e.row.set(\"RegionID\", null);\r\n e.row.set(\"RegionName\", null);\r\n e.row.set(\"CityID\", null);\r\n e.row.set(\"CityName\", null);\r\n e.row.set(\"ProjectID\", null);\r\n e.row.set(\"ProjectName\", null);\r\n e.row.set(\"LivingComplex\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"ObjectFullName\", null);\r\n e.row.set(\"ObjectID\", null);\r\n e.row.set(\"AddressPost\", null);\r\n e.row.set(\"RealEstateName\", null);\r\n e.row.set(\"Guid1C\", null);\r\n e.row.set(\"SectionID\", null);\r\n e.row.set(\"SectionNumber\", null);\r\n e.row.set(\"FloorID\", null);\r\n e.row.set(\"FloorNumber\", null);\r\n\r\n }\r\n else if (e2.fieldName === \"ProjectID\") {\r\n CdUIHelper.SetReadOnlyToControls(e2.fieldValue == null, objectID!);\r\n e.row.set(\"RegionID\", null);\r\n e.row.set(\"RegionName\", null);\r\n e.row.set(\"CityID\", null);\r\n e.row.set(\"CityName\", null);\r\n e.row.set(\"LivingComplex\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"ObjectFullName\", null);\r\n e.row.set(\"ObjectID\", null);\r\n e.row.set(\"AddressPost\", null);\r\n e.row.set(\"RealEstateName\", null);\r\n e.row.set(\"Guid1C\", null);\r\n e.row.set(\"SectionID\", null);\r\n e.row.set(\"SectionNumber\", null);\r\n e.row.set(\"FloorID\", null);\r\n e.row.set(\"FloorNumber\", null);\r\n }\r\n else if (e2.fieldName === \"ObjectID\") {\r\n if (e2.fieldValue == null) {\r\n e.row.set(\"RegionID\", null);\r\n e.row.set(\"RegionName\", null);\r\n e.row.set(\"CityID\", null);\r\n e.row.set(\"CityName\", null);\r\n e.row.set(\"LivingComplex\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"AddressPost\", null);\r\n e.row.set(\"RealEstateName\", null);\r\n e.row.set(\"Guid1C\", null);\r\n e.row.set(\"SectionID\", null);\r\n e.row.set(\"SectionNumber\", null);\r\n e.row.set(\"FloorID\", null);\r\n e.row.set(\"FloorNumber\", null);\r\n\r\n }\r\n else {\r\n let objectId = e2.fieldValue;\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRegionCityAndProjectByObject;\r\n request.info[\"ObjectId\"] = createTypedField(objectId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n e.row.set(\"RegionID\", null);\r\n e.row.set(\"RegionName\", null);\r\n e.row.set(\"CityID\", null);\r\n e.row.set(\"CityName\", null);\r\n e.row.set(\"LivingComplex\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"AddressPost\", null);\r\n e.row.set(\"RealEstateName\", null);\r\n e.row.set(\"Guid1C\", null);\r\n e.row.set(\"SectionID\", null);\r\n e.row.set(\"SectionNumber\", null);\r\n e.row.set(\"FloorID\", null);\r\n e.row.set(\"FloorNumber\", null);\r\n }\r\n else {\r\n CdCommonHelper.SetFieldToRow(e.row, \"RegionID\", response.info.RegionID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"RegionName\", response.info.RegionName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"CityID\", response.info.CityID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"CityName\", response.info.CityName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ObjectName\", response.info.ObjectName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"LivingComplex\", response.info.LivingComplex);\r\n CdCommonHelper.SetFieldToRow(e.row, \"Guid1C\", response.info.Guid1C);\r\n CdCommonHelper.SetFieldToRow(e.row, \"AddressPost\", response.info.AddressPost);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static async SetAutoCompleteEntryValueIfOneAsync(controlViewModel: IControlViewModel, row: CardRow, fieldID: string, fieldName: string) {\r\n var objectAutoCompleteEntryViewModel = controlViewModel as AutoCompleteEntryViewModel;\r\n var objects = objectAutoCompleteEntryViewModel.itemsSource.findItems(\" \", false);\r\n objects.then((res) => {\r\n if (res.length == 1) {\r\n let obj = res[0];\r\n if (obj.displayFields[0]) {\r\n row.set(fieldID, createTypedField(obj.displayFields[0], DotNetType.Guid));\r\n row.set(fieldName, createTypedField(obj.displayFields[1], DotNetType.String));\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n public static async RequestByResidentialComplexOrProject(requestValue: guid, info: string) {\r\n if (requestValue == null) return null;\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetProjectAndLivingComplex;\r\n request.info[info] = createTypedField(requestValue, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n if (response.validationResult.isSuccessful) {\r\n return response;\r\n }\r\n return null;\r\n }\r\n\r\n public static async RequestByResidentialComplexOrProjectWithNoAvailable(requestValue: guid, info: string) {\r\n if (requestValue == null) return null;\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetProjectAndLivingComplexWithNoAvailable;\r\n request.info[info] = createTypedField(requestValue, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n if (response.validationResult.isSuccessful) {\r\n return response;\r\n }\r\n return null;\r\n }\r\n\r\n public static async CheckCount(context: ICardUIExtensionContext) {\r\n var card: Card = context.card;\r\n if (card.tasks.find(x => x.state == CardRowState.Deleted\r\n && Guid.equals(x.typeId.toLowerCase(), CdFdTaskTypes.PkTechnicalDocumentationAgreementOnRenovationInFRTypeID.toLowerCase())) != null) {\r\n var task = card.tasks.find(x => x.state == CardRowState.Deleted && Guid.equals(x.typeId, CdFdTaskTypes.PkTechnicalDocumentationAgreementOnRenovationInFRTypeID))\r\n if (task == null)\r\n return true;\r\n var section = task.card.sections.tryGet(\"PkTaskChanceryComment\");\r\n if (section == null)\r\n return true;\r\n var count = section.fields.tryGet(\"Count\");\r\n\r\n if (count == null || count < 0) {\r\n showError(\"Поле \\\"Количество экземпляров на печать для ВПР\\\" должно быть заполнено неотрицательным целым числом\");\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n public static ClearAutoCompleteTableWithMarkingkDeletedItems(context: ICardUIExtensionContext, sectionName) {\r\n let section = context.model.card.sections.tryGet(sectionName);\r\n if (section == null) return;\r\n for (let i = section.rows.length - 1; i >= 0; i--) {\r\n if (section.rows[i].state === CardRowState.Inserted)\r\n section.rows.splice(i, 1);\r\n else section.rows[i].state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n public static ClearAutoCompleteTableWithMarkingkDeletedItems2(card: Card, sectionName) {\r\n let section = card.sections.tryGet(sectionName);\r\n if (section == null) return;\r\n for (let i = section.rows.length - 1; i >= 0; i--) {\r\n if (section.rows[i].state === CardRowState.Inserted)\r\n section.rows.splice(i, 1);\r\n else section.rows[i].state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n public static async FillApprovers(context: ICardUIExtensionContext, rdPropsSection: CardSection) {\r\n\r\n let rdDivisionId = rdPropsSection.fields.tryGet(\"RdDivisionID\");\r\n let regionId = rdPropsSection.fields.tryGet(\"RegionID\");\r\n let cityId = rdPropsSection.fields.tryGet(\"CityID\");\r\n let projectId = rdPropsSection.fields.tryGet(\"ProjectID\");\r\n let objectId = rdPropsSection.fields.tryGet(\"ObjectID\");\r\n let isRenovation = rdPropsSection.fields.tryGet(\"isRenovation\");\r\n if (rdDivisionId == null || regionId == null || cityId == null || projectId == null || objectId == null || isRenovation == null) {\r\n return;\r\n }\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetTechnicalDocumentationApprovers;\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n request.info[\"RdDivisionID\"] = createTypedField(rdDivisionId, DotNetType.Guid);\r\n request.info[\"ObjectID\"] = createTypedField(objectId, DotNetType.Guid);\r\n request.info[\"ProjectID\"] = createTypedField(projectId, DotNetType.Guid);\r\n request.info[\"CityID\"] = createTypedField(cityId, DotNetType.Guid);\r\n request.info[\"RegionID\"] = createTypedField(regionId, DotNetType.Guid);\r\n request.info[\"IsRenovation\"] = createTypedField(isRenovation, DotNetType.Boolean);\r\n request.info[\"AuthorID\"] = createTypedField(context.model.card.createdById, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkDesigners\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkUks\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkProjectGroup\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkContractorsVirtual\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkContractors\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkGip\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkOsp\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkProductDepartmentUsersVirtual\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkSignerOfTechnicalDocumentation\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkTDClerks\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkTDPtoEngineers\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkTDEngineersGroup\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkProjectManagers\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkPIKProjectGroup\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkCustomerProjectTeam\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkMainConstructionControl\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkQualityControlSpecialist\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkMechanicalEngineer\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkElectricalEngineer\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkConstructionControlSSEngineer\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkCustomerServiceEngineerHeatSupply\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkCustomerServiceEngineerVK\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkCustomerServiceEngineerSS\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PkCustomerServiceEngineerEOM\");\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems(context, \"PtoEngineers\");\r\n\r\n let uksApprovers = response.info.UksApprovers;\r\n let projectGroup = response.info.ProjectGroup;\r\n let contractors = response.info.Contractors;\r\n let gipApprovers = response.info.GipApprovers;\r\n let ospApprovers = response.info.OspApprovers;\r\n let designers = response.info.Designers;\r\n let usersInTheDepartmentProductRole = response.info.UsersInTheDepartmentProductRole;\r\n let signersOfTD = response.info.SignersOfTD;\r\n let tdClerks = response.info.TdClerks;\r\n let tDPtoEngineers = response.info.TDPtoEngineers;\r\n let tDEngineersGroup = response.info.TDEngineersGroup;\r\n let projectManagers = response.info.ProjectManagers;\r\n\r\n let pkQualityControlSpecialist = response.info.PkQualityControlSpecialist;\r\n let pkTDPtoEngineers = response.info.PkTDPtoEngineers;\r\n let pkCustomerServiceEngineerHeatSupply = response.info.PkCustomerServiceEngineerHeatSupply;\r\n let pkElectricalEngineer = response.info.PkElectricalEngineer;\r\n let pkCustomerServiceEngineerVK = response.info.PkCustomerServiceEngineerVK;\r\n let pkCustomerServiceEngineerEOM = response.info.PkCustomerServiceEngineerEOM;\r\n let pkCustomerServiceEngineerSS = response.info.PkCustomerServiceEngineerSS;\r\n let pkMechanicalEngineer = response.info.PkMechanicalEngineer;\r\n let pkCustomerProjectTeam = response.info.PkCustomerProjectTeam;\r\n let pkMainConstructionControl = response.info.PkMainConstructionControl;\r\n let pkConstructionControlSSEngineer = response.info.PkConstructionControlSSEngineer;\r\n let pkPIKProjectGroup = response.info.PkPIKProjectGroup;\r\n let pkGip = response.info.PkGip;\r\n\r\n if (!isRenovation) {\r\n if (pkQualityControlSpecialist != null) {\r\n for (let i = 0; i < pkQualityControlSpecialist.length; i++) {\r\n let item = pkQualityControlSpecialist[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkQualityControlSpecialist\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkTDPtoEngineers != null) {\r\n for (let i = 0; i < pkTDPtoEngineers.length; i++) {\r\n let item = pkTDPtoEngineers[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkTDPtoEngineers\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkCustomerServiceEngineerHeatSupply != null) {\r\n for (let i = 0; i < pkCustomerServiceEngineerHeatSupply.length; i++) {\r\n let item = pkCustomerServiceEngineerHeatSupply[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkCustomerServiceEngineerHeatSupply\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkElectricalEngineer != null) {\r\n for (let i = 0; i < pkElectricalEngineer.length; i++) {\r\n let item = pkElectricalEngineer[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkElectricalEngineer\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkCustomerServiceEngineerVK != null) {\r\n for (let i = 0; i < pkCustomerServiceEngineerVK.length; i++) {\r\n let item = pkCustomerServiceEngineerVK[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkCustomerServiceEngineerVK\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkCustomerServiceEngineerEOM != null) {\r\n for (let i = 0; i < pkCustomerServiceEngineerEOM.length; i++) {\r\n let item = pkCustomerServiceEngineerEOM[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkCustomerServiceEngineerEOM\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkCustomerServiceEngineerSS != null) {\r\n for (let i = 0; i < pkCustomerServiceEngineerSS.length; i++) {\r\n let item = pkCustomerServiceEngineerSS[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkCustomerServiceEngineerSS\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkMechanicalEngineer != null) {\r\n for (let i = 0; i < pkMechanicalEngineer.length; i++) {\r\n let item = pkMechanicalEngineer[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkMechanicalEngineer\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkCustomerProjectTeam != null) {\r\n for (let i = 0; i < pkCustomerProjectTeam.length; i++) {\r\n let item = pkCustomerProjectTeam[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkCustomerProjectTeam\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkMainConstructionControl != null) {\r\n for (let i = 0; i < pkMainConstructionControl.length; i++) {\r\n let item = pkMainConstructionControl[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkMainConstructionControl\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkConstructionControlSSEngineer != null) {\r\n for (let i = 0; i < pkConstructionControlSSEngineer.length; i++) {\r\n let item = pkConstructionControlSSEngineer[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkConstructionControlSSEngineer\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkPIKProjectGroup != null) {\r\n for (let i = 0; i < pkPIKProjectGroup.length; i++) {\r\n let item = pkPIKProjectGroup[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkPIKProjectGroup\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (pkGip != null) {\r\n for (let i = 0; i < pkGip.length; i++) {\r\n let item = pkGip[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkGip\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (contractors != null) {\r\n for (let i = 0; i < contractors.length; i++) {\r\n let item = contractors[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", item.RoleID);\r\n row.set(\"RoleName\", item.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkContractors\")!.rows.push(row);\r\n }\r\n }\r\n }\r\n else {\r\n if (designers != null) {\r\n for (let i = 0; i < designers.length; i++) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", designers[i].RoleID);\r\n row.set(\"RoleName\", designers[i].RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkDesigners\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (uksApprovers != null) {\r\n for (let i = 0; i < uksApprovers.length; i++) {\r\n let expert = uksApprovers[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkUks\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (gipApprovers != null) {\r\n for (let i = 0; i < gipApprovers.length; i++) {\r\n let expert = gipApprovers[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkGip\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (ospApprovers != null) {\r\n for (let i = 0; i < ospApprovers.length; i++) {\r\n let expert = ospApprovers[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkOsp\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (projectGroup != null) {\r\n for (let i = 0; i < projectGroup.length; i++) {\r\n let expert = projectGroup[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkProjectGroup\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (contractors != null) {\r\n for (let i = 0; i < contractors.length; i++) {\r\n let expert = contractors[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkContractors\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (usersInTheDepartmentProductRole != null) {\r\n for (let i = 0; i < usersInTheDepartmentProductRole.length; i++) {\r\n let expert = usersInTheDepartmentProductRole[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkProductDepartmentUsersVirtual\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (signersOfTD != null) {\r\n for (let i = 0; i < signersOfTD.length; i++) {\r\n let expert = signersOfTD[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkSignerOfTechnicalDocumentation\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (tdClerks != null) {\r\n for (let i = 0; i < tdClerks.length; i++) {\r\n let expert = tdClerks[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkTDClerks\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (tDPtoEngineers != null) {\r\n for (let i = 0; i < tDPtoEngineers.length; i++) {\r\n let expert = tDPtoEngineers[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkTDPtoEngineers\")!.rows.push(row);\r\n }\r\n }\r\n\r\n if (tDEngineersGroup != null) {\r\n for (let i = 0; i < tDEngineersGroup.length; i++) {\r\n let expert = tDEngineersGroup[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkTDEngineersGroup\")!.rows.push(row);\r\n }\r\n }\r\n if (projectManagers != null) {\r\n for (let i = 0; i < projectManagers.length; i++) {\r\n let expert = projectManagers[i];\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", expert.RoleID);\r\n row.set(\"RoleName\", expert.RoleName);\r\n row.state = CardRowState.Inserted;\r\n context.model.card.sections.get(\"PkProjectManagers\")!.rows.push(row);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static FillingUpVirtualInfoArDocumentIDP(context: ICardUIExtensionContext) {\r\n const adiSection = context.model.card.sections.tryGet('ArchiveDocumentIDP');\r\n if (adiSection == null) return;\r\n\r\n adiSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"ContractID\") {\r\n let contractID = e.fieldValue;\r\n\r\n if (contractID == null) {\r\n // Удаление даты договора\r\n adiSection.fields.set(\"ContractDate\", null);\r\n\r\n // Удаление существующих виртуальных записей в таблице Объекты\r\n const polSectionRows = context.model.card.sections.tryGet('PkObjectList')!.rows;\r\n if (polSectionRows != null) {\r\n for (let i = polSectionRows.length - 1; i >= 0; i--) {\r\n if (polSectionRows[i].tryGet(\"IsVirtual\", false) === true) {\r\n\r\n if (polSectionRows[i].state === CardRowState.None) {\r\n polSectionRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n polSectionRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Удаление существующих виртуальных записей в таблице Контрагенты\r\n const ardapSectionRows = context.model.card.sections.tryGet('ArDocumentsIDPPartners')!.rows;\r\n if (ardapSectionRows != null) {\r\n for (let i = ardapSectionRows.length - 1; i >= 0; i--) {\r\n if (ardapSectionRows[i].tryGet(\"IsVirtual\", false) === true) {\r\n\r\n if (ardapSectionRows[i].state === CardRowState.None) {\r\n ardapSectionRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n ardapSectionRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.ArDocumentIDPVirtualInfo;\r\n request.info[\"TypeFlag\"] = createTypedField(0, DotNetType.Int32);\r\n request.info[\"ContractID\"] = createTypedField(contractID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n // Заполнение Даты договора\r\n adiSection.fields.set(\"ContractDate\", response.info!.ContractDate);\r\n\r\n const ardapSection = context.model.card.sections.tryGet('ArDocumentsIDPPartners');\r\n if (ardapSection != null) {\r\n // Удаление существующих виртуальных записей в таблице Контрагенты\r\n const ardapSectionRows = ardapSection.rows;\r\n if (ardapSectionRows != null) {\r\n for (let i = ardapSectionRows.length - 1; i >= 0; i--) {\r\n if (ardapSectionRows[i].tryGet(\"IsVirtual\", false) === true) {\r\n ardapSectionRows[i].state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n\r\n if (response.info!.PartnerInfo!) {\r\n for (let partner of response.info.PartnerInfo) {\r\n let row = new CardRow();\r\n row.set(\"Category\", partner.Category);\r\n row.set(\"INN\", partner.INN);\r\n row.set(\"Partner\", partner.FullName);\r\n row.set(\"PartnerExternalID\", partner.ExtID);\r\n row.set(\"PartnerFullName\", partner.FullName);\r\n row.set(\"PartnerID\", createTypedField(Guid.newGuid(), DotNetType.Guid));\r\n row.set(\"PartnerINN\", partner.INN);\r\n row.set(\"IsVirtual\", createTypedField(true, DotNetType.Boolean));\r\n row.rowId = Guid.newGuid();\r\n row.state = CardRowState.Inserted;\r\n ardapSection.rows.push(row);\r\n }\r\n }\r\n }\r\n\r\n const olSection = context.model.card.sections.tryGet('PkObjectList');\r\n if (olSection != null) {\r\n // Удаление существующих виртуальных записей\r\n const polSectionRows = olSection.rows;\r\n if (polSectionRows != null) {\r\n for (let i = polSectionRows.length - 1; i >= 0; i--) {\r\n if (polSectionRows[i].tryGet(\"IsVirtual\", false) === true) {\r\n polSectionRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n if (response.info!.ObjectInfo!) {\r\n for (let obj of response.info.ObjectInfo) {\r\n let row = new CardRow();\r\n row.set(\"AddressPost\", obj.AddressPostValue);\r\n row.set(\"CityID\", obj.CityIDValue);\r\n row.set(\"CityName\", obj.CityNameValue);\r\n row.set(\"Guid1C\", obj.Guid1CValue);\r\n row.set(\"LivingComplex\", obj.LivingComplexValue);\r\n row.set(\"ObjectID\", obj.ObjectIDValue);\r\n row.set(\"ObjectName\", obj.ObjectNameValue);\r\n row.set(\"ProjectID\", obj.ProjectIDValue);\r\n row.set(\"ProjectName\", obj.ProjectNameValue);\r\n row.set(\"RealEstateID\", obj.RealEstateIDValue);\r\n row.set(\"RealEstateName\", obj.RealEstateNameValue);\r\n row.set(\"RegionID\", obj.RegionIDValue);\r\n row.set(\"RegionName\", obj.RegionNameValue);\r\n row.set(\"ResidentialComplexID\", obj.ResidentialComplexIDValue);\r\n row.set(\"ResidentialComplexName\", obj.ResidentialComplexNameValue);\r\n row.set(\"IsVirtual\", createTypedField(true, DotNetType.Boolean));\r\n row.rowId = Guid.newGuid();\r\n row.state = CardRowState.Inserted;\r\n olSection.rows.push(row);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (e.fieldName === \"DocumentIDPTypeID\") {\r\n if (e.fieldValue == null) {\r\n adiSection.fields.set(\"KindGroupingID\", null);\r\n adiSection.fields.set(\"KindGroupingArchiveSection\", null);\r\n }\r\n else {\r\n let typeID = e.fieldValue;\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.ArDocumentIDPVirtualInfo;\r\n request.info[\"TypeFlag\"] = createTypedField(1, DotNetType.Int32);\r\n request.info[\"TypeID\"] = createTypedField(typeID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n // Заполнение Группировки вида документа\r\n CdCommonHelper.SetFieldToSection(adiSection, \"KindGroupingID\", response.info.GroupingID);\r\n CdCommonHelper.SetFieldToSection(adiSection, \"KindGroupingArchiveSection\", response.info.GroupingName);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static FillingUpVehaBOP(context: ICardUIExtensionContext) {\r\n const adiSection = context.model.card.sections.tryGet('ArchiveDocumentIDP');\r\n if (adiSection == null) return;\r\n adiSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"DocumentIDPTypeID\") {\r\n let documentKindID = e.fieldValue;\r\n if (documentKindID == null || documentKindID === Guid.empty) {\r\n adiSection.fields.set(\"VehaBOPName\", null);\r\n adiSection.fields.set(\"VehaBOPID\", null);\r\n adiSection.fields.set(\"VehaBOPCode\", null);\r\n adiSection.fields.set(\"DocumentIDPTypeID\", null);\r\n adiSection.fields.set(\"DocumentIDPTypeDocumentKind\", null);\r\n }\r\n else {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.ArDocumentKind;\r\n request.info[\"DocumentKindID\"] = createTypedField(documentKindID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n adiSection.fields.set(\"VehaBOPName\", null);\r\n adiSection.fields.set(\"VehaBOPID\", null);\r\n adiSection.fields.set(\"VehaBOPCode\", null);\r\n adiSection.fields.set(\"DocumentIDPTypeID\", null);\r\n adiSection.fields.set(\"DocumentIDPTypeDocumentKind\", null);\r\n }\r\n else {\r\n if (response.info != null && response.info.VehaBopName != null && response.info.VehaBopCode) {\r\n CdCommonHelper.SetFieldToSection(adiSection, \"VehaBOPName\", response.info.VehaBopName);\r\n CdCommonHelper.SetFieldToSection(adiSection, \"VehaBOPCode\", response.info.VehaBopCode);\r\n //let vehaId = response.info.VehaBopId as guid | null;\r\n //vehaId = Guid.newGuid();\r\n if (response.info.VehaBopId == null)\r\n CdCommonHelper.SetFieldToSection(adiSection, \"VehaBOPID\", createTypedField(Guid.newGuid(), DotNetType.Guid));\r\n else\r\n CdCommonHelper.SetFieldToSection(adiSection, \"VehaBOPID\", response.info.VehaBopId);\r\n\r\n }\r\n else {\r\n adiSection.fields.set(\"VehaBOPName\", null);\r\n adiSection.fields.set(\"VehaBOPCode\", null);\r\n adiSection.fields.set(\"VehaBOPID\", null);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static GetUIControl(context: ICardUIExtensionContext, controlName: string): T | null {\r\n let viewModelBase = context.model.controls.get(controlName);\r\n if (viewModelBase) {\r\n let result = viewModelBase as T;\r\n return result;\r\n }\r\n return null;\r\n }\r\n\r\n public static GetUIControlFromModel(model: ICardModel, controlName: string): T | null {\r\n let viewModelBase = model.controls.get(controlName);\r\n if (viewModelBase) {\r\n let result = viewModelBase as T;\r\n return result;\r\n }\r\n return null;\r\n }\r\n\r\n public static GetUIControlFromForm(form: IFormViewModel, controlName?: string | null): T | null {\r\n // если название контрола передавалось, значит проверяем его при поиске\r\n const isCheckControlName = controlName != null;\r\n\r\n // пробегаемся по переданной коллекции блоков\r\n for (const block of form.blocks) {\r\n // пробегаемся по контролам блока\r\n for (const control of block.controls) {\r\n // проверка названия контрола\r\n if (isCheckControlName && control.name !== controlName) {\r\n continue;\r\n }\r\n\r\n // проверка типа контрола\r\n const result = control as T;\r\n if (result != null) {\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Проверка наличия контента файла */\r\n public static async CheckContentFileAsync(card: Card) {\r\n let fileNames = '';\r\n for (let i = 0; i < card.files.length; i++) {\r\n let file = card.files[i];\r\n if (file.categoryId === null ||\r\n file.categoryId === ChFileCategories.ElectronicSignatures.id!.toLowerCase() ||\r\n file.name.indexOf(CdGeneralDocumentationClientHelper.PdfForPrint) > 0) {\r\n continue;\r\n }\r\n\r\n if (file.state === CardFileState.Replaced) {\r\n showMessage('Файлы были обновлены.\\nПожалуйста, сохраните карточку перед тем как продолжить.');\r\n return false;\r\n }\r\n\r\n if (!file.lastVersion) {\r\n continue;\r\n }\r\n\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.cardId = card.id;\r\n getFileContentRequest.cardTypeId = card.typeId;\r\n getFileContentRequest.cardTypeName = card.typeName;\r\n getFileContentRequest.fileId = file.rowId;\r\n getFileContentRequest.fileName = file.name;\r\n getFileContentRequest.versionRowId = file.versionRowId;\r\n getFileContentRequest.fileTypeId = file.typeId;\r\n getFileContentRequest.fileTypeName = file.typeName;\r\n\r\n const getFileContentResponse = await CardService.instance.getFileContent(getFileContentRequest);\r\n\r\n if (getFileContentResponse.validationResult.isSuccessful &&\r\n getFileContentResponse.content != null &&\r\n getFileContentResponse.size > 0) {\r\n continue;\r\n }\r\n\r\n fileNames = '\\n' + file.name;\r\n }\r\n if (fileNames.length > 0) {\r\n showError('Некоторые приложенные файлы загрузились неправильно:' + fileNames + '\\n\\nПожалуйста, обновите их и сохраните карточку перед тем как продолжить.\\n');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Чистка строк секции. */\r\n public static ClearSectionRows(\r\n section: CardSection) {\r\n // проверяем тип секции\r\n if (section.type != CardSectionType.Table) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (let i = section.rows.length - 1; i >= 0; i--) {\r\n // получаем строку\r\n const row = section.rows[i];\r\n\r\n // если строка создавалась, значит ее еще нет физически\r\n if (row.state == CardRowState.Inserted) {\r\n // просто удаляем\r\n section.rows.remove(row);\r\n\r\n // смотрим дальше\r\n continue;\r\n }\r\n\r\n // иначе помечаем строку как удаленную\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n /** Запрет ввода символов из регулярного выражения. */\r\n public static ForbiddingCharacterInput(control: TextBoxViewModel, regExp: RegExp) {\r\n control.keyDown.addWithDispose((e) => {\r\n // проверяем входит ли нажатый символ в переданноу регулярное выражение\r\n if (e.event.key.search(regExp) < 0) {\r\n return;\r\n }\r\n\r\n // если входит, тогда не даем ввести, возвращаемся к предыдущему значению\r\n e.event.preventDefault();\r\n });\r\n }\r\n\r\n /// \r\n /// Разрешить редактирование КСД созданных в ЕСУД\r\n /// TES-8640 + TES-8902\r\n /// \r\n public static AllowEditESUDDocs(context: ICardUIExtensionContext, session: IUserSession, documentSections: DocumentSections) {\r\n\r\n if (!this.IsAllowEditESUDDocs(context?.card)) {\r\n return;\r\n }\r\n\r\n if (!session.isAdmin) {\r\n return;\r\n }\r\n\r\n switch (documentSections) {\r\n case DocumentSections.ContractArticleIdp:\r\n this.AllowEditForContractArticleIdp(context);\r\n break;\r\n case DocumentSections.ArContractPartnersTable:\r\n this.AllowEditForArContractPartnersTable(context);\r\n break;\r\n }\r\n\r\n }\r\n\r\n /// \r\n /// TES-8640\r\n /// \r\n private static AllowEditForContractArticleIdp(context: ICardUIExtensionContext) {\r\n\r\n const articles = context.model.controls.get('ContractArticleIdp') as GridViewModel;\r\n\r\n articles!.rowInitializing.add(e => {\r\n if (e.action == GridRowAction.Opening) {\r\n let objectID = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Object\");\r\n let project = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"Project\");\r\n let stageName = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"StageNameArticleControl\");\r\n let paymentTerm = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PaymentTermArticleControl\");\r\n let percentPrepayment = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PercentPrepaymentArticleControl\");\r\n let vatRate = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"VatRateCommon\");\r\n\r\n CdUIHelper.SetReadOnlyToControls(false, objectID!, project!, stageName!, paymentTerm!, percentPrepayment!, vatRate!);\r\n }\r\n });\r\n\r\n }\r\n\r\n /// \r\n /// TES-8902\r\n /// \r\n private static AllowEditForArContractPartnersTable(context: ICardUIExtensionContext) {\r\n\r\n const arContractsPartnerTable = context.model.controls.get('ArContractPartnersTable') as GridViewModel;\r\n\r\n arContractsPartnerTable!.rowInitializing.add(e => {\r\n if (e.action == GridRowAction.Opening) {\r\n let partnerPerformer = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PartnerPerformer\");\r\n let partnersPartner = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PartnersKCKControl\");\r\n let partnerAccountant = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PartnerAccountant\");\r\n let partnerSigned = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PartnerSigned\");\r\n let partnerContractCategory = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"ContractCategoryControl\");\r\n let partnerDepartment = CdUIHelper.GetUIControlFromModel(e.rowModel!, \"PartnerDepartment\");\r\n\r\n CdUIHelper.SetReadOnlyToControls(false, partnerPerformer!, partnersPartner!, partnerAccountant!, partnerSigned!, partnerContractCategory!, partnerDepartment!);\r\n }\r\n });\r\n\r\n }\r\n\r\n /// \r\n /// Проверка условий возможности редактирования КСД из ЕСУД\r\n /// \r\n public static IsAllowEditESUDDocs(card: Card) {\r\n return this.IsDocFromESUD(card) && this.IsActiveOrFulfilled(card);\r\n }\r\n\r\n /// \r\n /// Проверка на состояние документа\r\n /// \r\n public static IsActiveOrFulfilled(card: Card) {\r\n let pkdci = card.sections.tryGet('PkDocumentCommonInfo');\r\n\r\n return pkdci\r\n && (pkdci.fields?.tryGet('StateID') == CdDocStates.Active.id\r\n || pkdci.fields?.tryGet('StateID') == CdDocStates.Fulfilled.id);\r\n }\r\n\r\n /// \r\n /// Проверка, что КСД создан в ЕСУД, не является судебкой и не из CRM\r\n /// \r\n private static IsDocFromESUD(card: Card) {\r\n let acu = card.sections.tryGet('ArContractsUser');\r\n let adc = card.sections.tryGet('ArDocsConstructor');\r\n\r\n return acu\r\n && adc\r\n // Заполнен реквизит ID MDS\r\n && acu.fields?.tryGet('ExtID')\r\n // Не заполнен реквизит GuidCRM\r\n && !acu.fields?.tryGet('GuidCRM')\r\n // Не заполнен реквизит CourtCasePaymentDocGuid1C\r\n && !adc.fields?.tryGet('CourtCasePaymentDocGuid1C');\r\n }\r\n}","function PkDocState(id, caption) {\r\n this.id = id;\r\n this.caption = caption;\r\n}\r\n\r\nexport class CdDocStates {\r\n\r\n /// \r\n /// Проект\r\n /// \r\n static Project = new PkDocState(0, \"Проект\");\r\n\r\n /// \r\n /// На рассмотрении УКС\r\n /// \r\n static UksApproval = new PkDocState(1, \"На рассмотрении УКС\");\r\n\r\n /// \r\n /// На рассмотрении во внешней организации\r\n /// \r\n static ExternalOrganizationApproval = new PkDocState(2, \"На рассмотрении во внешней организации\");\r\n\r\n /// \r\n /// На доработке\r\n /// \r\n static Rework = new PkDocState(3, \"На доработке\");\r\n\r\n /// \r\n /// Неактуален\r\n /// \r\n static Irrelevant = new PkDocState(4, \"Неактуален\");\r\n\r\n /// \r\n /// Отменен\r\n /// \r\n static Canceled = new PkDocState(5, \"Отменен\");\r\n\r\n /// \r\n /// Выдано в производство работ\r\n /// \r\n static Production = new PkDocState(6, \"Выдано в производство работ\");\r\n\r\n /// \r\n /// На рассмотрении ПГ заказчика\r\n /// \r\n static PgApproval = new PkDocState(7, \"На рассмотрении ПГ заказчика\");\r\n\r\n /// \r\n /// На рассмотрении ГИП\r\n /// \r\n static GipApproval = new PkDocState(8, \"На рассмотрении ГИП\");\r\n\r\n /// \r\n /// На рассмотрении ОСП\r\n /// \r\n static OspApproval = new PkDocState(9, \"На рассмотрении ОСП\");\r\n\r\n /// \r\n /// На рассмотрении\r\n /// \r\n static Consideration = new PkDocState(10, \"На рассмотрении\");\r\n\r\n /// \r\n /// На исполнении\r\n /// \r\n static Performance = new PkDocState(11, \"На исполнении\");\r\n\r\n /// \r\n /// Завершен\r\n /// \r\n static Complete = new PkDocState(12, \"Завершен\");\r\n\r\n /// \r\n /// На согласовании\r\n /// \r\n static Agreement = new PkDocState(13, \"На доп. согласовании\");\r\n\r\n /// \r\n /// На подписании\r\n /// \r\n static Signing = new PkDocState(14, \"На подписании\");\r\n\r\n /// \r\n /// Подготовка к подписанию\r\n /// \r\n static PreparationForSigning = new PkDocState(15, \"Подготовка к подписанию\");\r\n\r\n /// \r\n /// На согласовании в Удо\r\n /// \r\n static AgreementUdo = new PkDocState(16, \"На согласовании в УДО\");\r\n\r\n /// \r\n /// На согласовании у руководителя\r\n /// \r\n static AgreementManager = new PkDocState(17, \"На согласовании у руководителя\");\r\n\r\n /// \r\n /// Не подписан\r\n /// \r\n static NotSigned = new PkDocState(18, \"Не подписан\");\r\n\r\n /// \r\n /// На проверке\r\n /// \r\n static OnCheck = new PkDocState(19, \"На проверке\");\r\n\r\n /// \r\n /// Подписан\r\n /// \r\n static Signed = new PkDocState(20, \"Подписан\");\r\n\r\n /// \r\n /// Отклонен\r\n /// \r\n static Rejected = new PkDocState(21, \"Отклонен\");\r\n\r\n /// \r\n /// На согласовании у исполнителя\r\n /// \r\n static AgreementPerformer = new PkDocState(22, \"На согласовании у исполнителя\");\r\n\r\n /// \r\n /// На регистрации\r\n /// \r\n static OnRegistration = new PkDocState(23, \"На регистрации\");\r\n\r\n /// \r\n /// Зарегистрирован\r\n /// \r\n static Registered = new PkDocState(24, \"Зарегистрирован\");\r\n\r\n /// \r\n /// На согласовании в ЮД\r\n /// \r\n static AgreementLegalDepartment = new PkDocState(25, \"На согласовании в ЮД\");\r\n\r\n /// \r\n /// Действующий\r\n /// \r\n static Active = new PkDocState(26, \"Действующий\");\r\n\r\n /// \r\n /// На согласовании ПГ заказчика\r\n /// \r\n static AgreementPgCustomer = new PkDocState(27, \"На согласовании ПГ заказчика\");\r\n\r\n /// \r\n /// Согласован\r\n /// \r\n static Agreed = new PkDocState(28, \"Согласован\");\r\n\r\n /// \r\n /// Зарегистрировано\r\n /// \r\n static RegisteredLC = new PkDocState(29, \"Зарегистрировано\");\r\n\r\n /// \r\n /// На согласовании в Департаменте закупок\r\n /// \r\n static AgreementPurchasingDepartment = new PkDocState(30, \"На согласовании в Департаменте закупок\");\r\n\r\n /// \r\n /// На согласовании с нач. УДО\r\n /// \r\n static AgreementHeadUDO = new PkDocState(31, \"На согласовании с нач. УДО\");\r\n\r\n /// \r\n /// Загрузка скан-копии\r\n /// \r\n static DownloadScanCopy = new PkDocState(32, \"Загрузка скан-копии\");\r\n\r\n /// \r\n /// Загружен в 1С\r\n /// \r\n static UploadedToTUS = new PkDocState(33, \"Загружен в 1С\");\r\n\r\n /// \r\n /// Ожидает отправки\r\n /// \r\n static WaitingForSending = new PkDocState(34, \"Ожидает отправки\");\r\n\r\n /// \r\n /// Исполнен\r\n /// \r\n static Fulfilled = new PkDocState(35, \"Исполнен\");\r\n\r\n /// \r\n /// Отправлен\r\n /// \r\n static Sent = new PkDocState(36, \"Отправлен\");\r\n\r\n /// \r\n /// На отправку\r\n /// \r\n static ToSend = new PkDocState(37, \"На отправку\");\r\n\r\n /// \r\n /// На согласовании\r\n /// \r\n static OnAgreement = new PkDocState(38, \"На согласовании\");\r\n\r\n /// \r\n /// На подготовке к подписанию\r\n /// \r\n static InPreparationForSigning = new PkDocState(39, \"На подготовке к подписанию\");\r\n\r\n /// \r\n /// Рассмотрена\r\n /// \r\n static Considered = new PkDocState(40, \"Рассмотрена\");\r\n\r\n /// \r\n /// Отклонена\r\n /// \r\n static Disapproved = new PkDocState(41, \"Отклонена\");\r\n\r\n /// \r\n /// Исполнена\r\n /// \r\n static Executed = new PkDocState(42, \"Исполнена\");\r\n\r\n /// \r\n /// На утверждении\r\n /// \r\n static OnApproval = new PkDocState(43, \"На утверждении\");\r\n\r\n /// \r\n /// На согласовании в ОСП\r\n /// \r\n static AgreementOSP = new PkDocState(44, \"На согласовании в ОСП\");\r\n\r\n\r\n /// \r\n /// На согласовании у Вице-президента\r\n /// \r\n static AgreementHead = new PkDocState(45, \"На согласовании у Вице-президента\");\r\n\r\n\r\n /// \r\n /// Перенесено из СКП\r\n /// \r\n static TransformSKP = new PkDocState(46, \"Перенесено из СКП\");\r\n\r\n /// \r\n /// Утвержден\r\n /// \r\n static Approval = new PkDocState(47, \"Утвержден\");\r\n\r\n /// \r\n /// Архив\r\n /// \r\n static Archive = new PkDocState(48, \"Архив\");\r\n\r\n /// \r\n /// Передано заказчику\r\n /// \r\n static TransferredToCustomers = new PkDocState(49, \"Передано заказчику\");\r\n\r\n /// \r\n /// На согласовании объемов работ\r\n /// \r\n static AgreementScopeWork = new PkDocState(50, \"На согласовании объемов работ\");\r\n\r\n /// \r\n /// Согласование НЗ\r\n /// \r\n static AgreementNZ = new PkDocState(51, \"Согласование НЗ\");\r\n\r\n /// \r\n /// На согласовании у бухгалтера\r\n /// \r\n static AgreementAccountant = new PkDocState(52, \"На согласовании у бухгалтера\");\r\n\r\n /// \r\n /// На согласовании калькуляции\r\n /// \r\n static AgreementCalculation = new PkDocState(53, \"На согласовании калькуляции\");\r\n\r\n /// \r\n /// У подписанта\r\n /// \r\n static AtTheSigner = new PkDocState(54, \"У подписанта\");\r\n\r\n /// \r\n /// Формирование калькуляции\r\n /// \r\n static FormationCosting = new PkDocState(55, \"Формирование калькуляции\");\r\n\r\n /// \r\n /// Получен, подпись не требуется\r\n /// \r\n static Received = new PkDocState(56, \"Получен, подпись не требуется\");\r\n\r\n /// \r\n /// Ожидает подписания\r\n /// \r\n static WaitingForDiadocResult = new PkDocState(57, \"Ожидает подписания\");\r\n\r\n /// \r\n /// Подписано извещение о получении\r\n /// \r\n static WorkflowCompleted = new PkDocState(58, \"Подписано извещение о получении\");\r\n\r\n /// \r\n /// У ответственного за распределение акта\"\r\n /// \r\n static AtTheResponsibleForAct = new PkDocState(59, \"У ответственного за распределение акта\");\r\n\r\n /// \r\n /// Подтверждение Наряд-заказа\r\n /// \r\n static OrderTicketConfirmation = new PkDocState(60, \"Подтверждение Наряд-заказа\");\r\n\r\n /// \r\n /// Перемещен в удаленные\r\n /// \r\n static MovedToRemote = new PkDocState(61, \"Перемещен в удаленные\");\r\n\r\n /// \r\n /// Аннулирован\r\n /// \r\n static Revocated = new PkDocState(62, \"Аннулирован\");\r\n\r\n /// \r\n /// Черновик\r\n /// \r\n static Draft = new PkDocState(63, \"Черновик\");\r\n\r\n /// \r\n /// На согласование Подрядчика\r\n /// \r\n static OnApprovalContractor = new PkDocState(64, \"На согласование Подрядчика\");\r\n\r\n /// \r\n /// На согласовании у экономиста\r\n /// \r\n static OnApprovalEconomist = new PkDocState(65, \"На согласовании у экономиста\");\r\n\r\n /// \r\n /// На доп.согласовании у Заказчика\r\n /// \r\n static OnAdditionalApprovalCustomer = new PkDocState(66, \"На доп.согласовании у Заказчика\");\r\n\r\n /// \r\n /// На согласование ГП\r\n /// \r\n static OnApprovalGP = new PkDocState(67, \"На согласование ГП\");\r\n\r\n /// \r\n /// На согласовании - Заказчик\r\n /// \r\n static OnApprovalCustomer = new PkDocState(68, \"На согласовании - Заказчик\");\r\n\r\n /// \r\n /// На согласовании - Эксплуатирующая организация\r\n /// \r\n static OnApprovalOperatingOrganization = new PkDocState(69, \"На согласовании - Эксплуатирующая организация\");\r\n\r\n /// \r\n /// Ожидает принятия к учету\r\n /// \r\n static WaitingForAccounting = new PkDocState(70, \"Ожидает принятия к учету\");\r\n\r\n /// \r\n /// Не актуальна\r\n /// \r\n static NotRelevant = new PkDocState(71, \"Не актуальна\");\r\n\r\n /// \r\n /// На согласование ГП исполнителя работ\r\n /// \r\n static OnApprovalGPExecutorWorks = new PkDocState(72, \"На согласование ГП исполнителя работ\");\r\n\r\n /// \r\n /// На согласовании в УБК\r\n /// \r\n static OnApprovalUBK = new PkDocState(73, \"На согласовании в УБК\");\r\n\r\n /// \r\n /// На согласовании - Авторский надзор\r\n /// \r\n static OnApprovalAuthorSupervision = new PkDocState(74, \"На согласовании - Авторский надзор\");\r\n\r\n /// \r\n /// На подписании и сканировании\r\n /// \r\n static OnSigningAndScanning = new PkDocState(75, \"На подписании и сканировании\");\r\n\r\n /// \r\n /// Организация подписания и сканирования\r\n /// \r\n static OrganizationSigningAndScanning = new PkDocState(76, \"Организация подписания и сканирования\");\r\n\r\n /// \r\n /// Подтверждение получения оригинала\r\n /// \r\n static OnConfirmation = new PkDocState(77, \"Подтверждение получения оригинала\");\r\n\r\n /// \r\n /// На согласовании у Заказчика\r\n /// \r\n static OnApprovalWithTheCustomer = new PkDocState(78, \"На согласовании у Заказчика\");\r\n\r\n /// \r\n /// Согласование стоимости\r\n /// \r\n static ApproveOfCost = new PkDocState(79, \"Согласование стоимости\");\r\n\r\n /// \r\n /// Согласование объемов\r\n /// \r\n static ApproveOfVolumes = new PkDocState(80, \"Согласование объемов\");\r\n\r\n /// \r\n /// Рассмотрение Наряд-заказа\r\n /// \r\n static OrderTicketReview = new PkDocState(81, \"Рассмотрение Наряд-заказа\");\r\n\r\n /// \r\n /// Расчет стоимости\r\n /// \r\n static CalculateOfCost = new PkDocState(82, \"Расчет стоимости\");\r\n\r\n /// \r\n /// Расчет объемов\r\n /// \r\n static CalculateOfVolumes = new PkDocState(83, \"Расчет объемов\");\r\n\r\n /// \r\n /// На согласовании у Директора продаж\r\n /// \r\n static ApproveWithSelesDirector = new PkDocState(84, \"На согласовании у Директора продаж\");\r\n\r\n /// \r\n /// На согласовании дирекции по строительству\r\n /// \r\n static ApproveWithConstructionDirectorate = new PkDocState(85, \"На согласовании дирекции по строительству\");\r\n\r\n /// \r\n /// На согласовании департаментом продаж\r\n /// \r\n static ApproveByTheSalesDepartment = new PkDocState(86, \"На согласовании департаментом продаж\");\r\n\r\n /// \r\n /// На согласовании делопроизводителем\r\n /// \r\n static ApproveByClerk = new PkDocState(87, \"На согласовании делопроизводителем\");\r\n\r\n /// \r\n /// Дубликат\r\n /// \r\n static Duplicate = new PkDocState(88, \"Дубликат\");\r\n\r\n /// \r\n /// У бухгалтера\r\n /// \r\n static AtTheAccountant = new PkDocState(89, \"У бухгалтера\");\r\n\r\n /// \r\n /// На подготовке к утверждению\r\n /// \r\n static PreparationForApproval = new PkDocState(90, \"На подготовке к утверждению\");\r\n\r\n /// \r\n /// На доработке у Заказчика\r\n /// \r\n static CompletionOfCustomer = new PkDocState(91, \"На доработке у Заказчика\");\r\n\r\n /// \r\n /// На согласовании стоимости\r\n /// \r\n static NegotiatingCost = new PkDocState(92, \"На согласовании стоимости\");\r\n\r\n /// \r\n /// Предпроект\r\n /// \r\n static PreProject = new PkDocState(93, \"Предпроект\");\r\n\r\n /// \r\n /// На подписании ГП\r\n /// \r\n static OnSigningGP = new PkDocState(94, \"На подписании ГП\");\r\n\r\n /// \r\n /// На подписании ГП исполнителя работ\r\n /// \r\n static OnSigningGPExecutorWorks = new PkDocState(95, \"На подписании ГП исполнителя работ\");\r\n\r\n /// \r\n /// На подписании Подрядчика\r\n /// \r\n static OnSigningContractor = new PkDocState(96, \"На подписании Подрядчика\");\r\n\r\n /// \r\n /// На подписании - Авторский надзор\r\n /// \r\n static OnSigningAuthorSupervision = new PkDocState(97, \"На подписании - Авторский надзор\");\r\n\r\n /// \r\n /// На подписании - Заказчик\r\n /// \r\n static OnSigningCustomer = new PkDocState(98, \"На подписании - Заказчик\");\r\n\r\n /// \r\n /// На подписании - Эксплуатирующая организация\r\n /// \r\n static OnSigningOperatingOrganization = new PkDocState(99, \"На подписании - Эксплуатирующая организация\");\r\n\r\n /// \r\n /// Конвертация\r\n /// \r\n static Converting = new PkDocState(100, \"Конвертация\");\r\n\r\n /// \r\n /// Обработка в ЕСУД завершена\r\n /// \r\n static EsudProcessingCompleted = new PkDocState(101, \"Обработка в ЕСУД завершена\");\r\n\r\n /// \r\n /// Ожидание обработки\r\n /// \r\n static WaitingProcessing = new PkDocState(102, \"Ожидание обработки\");\r\n\r\n /// \r\n /// Определение вида документа\r\n /// \r\n static DefineDocumentType = new PkDocState(103, \"Определение вида документа\");\r\n\r\n /// \r\n /// Передача в ЕСУД\r\n /// \r\n static EsudTransfer = new PkDocState(104, \"Передача в ЕСУД\");\r\n\r\n /// \r\n /// Успешно передано в ЕСУД\r\n /// \r\n static EsudTransferSuccessfully = new PkDocState(105, \"Успешно передано в ЕСУД\");\r\n\r\n /// \r\n /// Аннулирован в Диадок\r\n /// \r\n static DiadicRevocated = new PkDocState(106, \"Аннулирован в Диадок\");\r\n\r\n /// \r\n /// Отклонен в Диадок\r\n /// \r\n static DiadocRejected = new PkDocState(107, \"Отклонен в Диадок\");\r\n\r\n /// \r\n /// Подписан в Диадок\r\n /// \r\n static DiadocSigned = new PkDocState(108, \"Подписан в Диадок\");\r\n\r\n /// \r\n /// На рассмотрении РП\r\n /// \r\n static OnConsideringPM = new PkDocState(109, \"На рассмотрении РП\");\r\n\r\n /// \r\n /// На рассмотрении ПТО\r\n /// \r\n static OnConsideringPTO = new PkDocState(110, \"На рассмотрении ПТО\");\r\n\r\n /// \r\n /// Рассмотрение замечаний ПТО\r\n /// \r\n static ConsiderationOfPTOComments = new PkDocState(111, \"Рассмотрение замечаний ПТО\");\r\n\r\n /// \r\n /// Доработка замечаний РП, ПТО\r\n /// \r\n static RevisionPTOComments = new PkDocState(112, \"Доработка замечаний РП, ПТО\");\r\n\r\n /// \r\n /// Печать предварительного комплекта\r\n /// \r\n static PresetPrinting = new PkDocState(113, \"Печать предварительного комплекта\");\r\n\r\n /// \r\n /// Согласование в фонде реновации\r\n /// \r\n static ApprovalFundRenovation = new PkDocState(114, \"Согласование в фонде реновации\");\r\n\r\n /// \r\n /// Доработка замечаний от внешних организаций\r\n /// \r\n static FinalizeCommentsExternalOrganizations = new PkDocState(115, \"Доработка замечаний от внешних организаций\");\r\n\r\n /// \r\n /// На подготовке подрядчиком\r\n /// \r\n static OnPreparationContractor = new PkDocState(117, \"На подготовке подрядчиком\");\r\n\r\n /// \r\n /// Инициализация процесса согласования\r\n /// \r\n static InitializationApprovalProcess = new PkDocState(118, \"Инициализация процесса согласования\");\r\n\r\n /// \r\n /// На доработке поставщика\r\n /// \r\n static ReworkSupplier = new PkDocState(119, \"На доработке поставщика\");\r\n\r\n /// \r\n /// Выдано на руки\r\n /// \r\n static LentToHands = new PkDocState(120, \"Выдано на руки\");\r\n\r\n /// \r\n /// На согласование Субподрядчика\r\n /// \r\n static OnApprovalSubcontractor = new PkDocState(121, \"На согласование Субподрядчика\");\r\n\r\n /// \r\n /// На подписании Субподрядчика\r\n /// \r\n static OnSigningSubcontractor = new PkDocState(122, \"На подписании Субподрядчика\");\r\n\r\n /// \r\n /// На согласовании ген. директора\r\n /// \r\n static AgreementGeneralManager = new PkDocState(123, \"На согласовании ген. директора\");\r\n\r\n /// \r\n /// На согласовании финансиста\r\n /// \r\n static AgreementFinancier = new PkDocState(124, \"На согласовании финансиста\");\r\n\r\n /// \r\n /// На согласовании СМУ или ГИП/ПТО\r\n /// \r\n static AgreementSmuGipPto = new PkDocState(125, \"На согласовании СМУ или ГИП/ПТО\");\r\n\r\n /// \r\n /// На согласовании Зам. ГД по строительству\r\n /// \r\n static AgreementDeputyGD = new PkDocState(126, \"На согласовании Зам. ГД по строительству\");\r\n\r\n /// \r\n /// Требуется подписать извещение о получении\r\n /// \r\n static RequiresSigningNotice = new PkDocState(128, \"Требуется подписать извещение о получении\");\r\n\r\n /// \r\n /// Ошибка при подписании\r\n /// \r\n static SigningError = new PkDocState(129, \"Ошибка при подписании\");\r\n\r\n /// \r\n /// Требует подписания в Диадок\r\n /// \r\n static RequiresSigningInDiadoc = new PkDocState(130, \"Требует подписания в Диадок\");\r\n\r\n /// \r\n /// Запрошено аннулирование\r\n /// \r\n static RevocationRequested = new PkDocState(131, \"Запрошено аннулирование\");\r\n\r\n /// \r\n /// Получен запрос на аннулирование\r\n /// \r\n static RevocationRequestRecieved = new PkDocState(132, \"Получен запрос на аннулирование\");\r\n\r\n /// \r\n /// Отказано в запросе на аннулирование\r\n /// \r\n static RevocationRejected = new PkDocState(133, \"Отказано в запросе на аннулирование\");\r\n\r\n /// \r\n /// Отказано в подписи контрагенту\r\n /// \r\n static SignatureContragentRejected = new PkDocState(134, \"Отказано в подписи контрагенту\");\r\n\r\n /// \r\n /// У доп.согласующего\r\n /// \r\n static AtTheAdditionalApprover = new PkDocState(135, \"У доп.согласующего\");\r\n\r\n /// \r\n /// У Директора СМУ №4\r\n /// \r\n static DirectorSMU = new PkDocState(136, \"У Директора СМУ №4\");\r\n\r\n /// \r\n /// У Коммерческого директора\r\n /// \r\n static CommercialDirector = new PkDocState(137, \"У Коммерческого директора\");\r\n\r\n /// \r\n /// У Зам. ген. директора по СМР\r\n /// \r\n static DeputyDirectorSMR = new PkDocState(138, \"У Зам. ген. директора по СМР\");\r\n\r\n /// \r\n /// У 1-го зам.ген. директора\r\n /// \r\n static FirstDeputyDirector = new PkDocState(139, \"У 1-го зам.ген. директора\");\r\n\r\n /// \r\n /// Устранение замечаний\r\n /// \r\n static FixingProblems = new PkDocState(140, \"Устранение замечаний\");\r\n\r\n /// \r\n /// У ПТО подрядчика\r\n /// \r\n static AtPTOContractor = new PkDocState(141, \"У ПТО подрядчика\");\r\n\r\n /// \r\n /// Формирование ПДЦ\r\n /// \r\n static FormationPDC = new PkDocState(142, \"Формирование ПДЦ\");\r\n\r\n /// \r\n /// Отправка в архив\r\n /// \r\n static SendingToArchive = new PkDocState(150, \"Отправка в архив\");\r\n\r\n /// \r\n /// На согласовании - Инженер АН\r\n /// \r\n static OnApprovalASEngeneer = new PkDocState(152, \"На согласовании - Инженер АН\");\r\n\r\n /// \r\n /// На согласовании у Директора инициатора\r\n /// \r\n static OnApprovalDirectorOfInitiator = new PkDocState(201, \"На согласовании у Директора инициатора\");\r\n\r\n /// \r\n /// На согласовании у Директора по требованию\r\n /// \r\n static OnApprovalDirectorOnDemand = new PkDocState(202, \"На согласовании у Директора по требованию\");\r\n\r\n /// \r\n /// На согласовании у Контролера Комфорт\r\n /// \r\n static OnApprovalControllerComfort = new PkDocState(203, \"На согласовании у Контролера Комфорт\");\r\n\r\n /** Действует */\r\n static Operate = new PkDocState(204, \"Действует\");\r\n\r\n /** Доработка */\r\n static Modification = new PkDocState(205, \"Доработка\");\r\n\r\n /** Расторгнут */\r\n static Terminated = new PkDocState(206, \"Расторгнут\");\r\n\r\n /** Проверка учета замечаний перед отправкой */\r\n static CheckingCommentsBeforeSending = new PkDocState(207, \"Проверка учета замечаний перед отправкой\");\r\n \r\n /** На подписании в Диадок (внутри компании) */\r\n static OnSigningInDiadocInCompany = new PkDocState(208, \"На подписании в Диадок (внутри компании)\");\r\n\r\n /** На подписании в Диадок (у контрагента) */\r\n static OnSigningInDiadocWithPartner = new PkDocState(209, \"На подписании в Диадок (у контрагента)\");\r\n\r\n /** Подтверждение корректности подписания */\r\n static CheckSigningInDiadoc = new PkDocState(210, \"Подтверждение корректности подписания\");\r\n\r\n /** Доработка после подписания в диадок */\r\n static ModificationAfterSigningInDiadoc = new PkDocState(211, \"Доработка после подписания в диадок\");\r\n\r\n /** Подготовка документа к подписанию */\r\n static PreparationDocumentForSigning = new PkDocState(212, \"Подготовка документа к подписанию\");\r\n\r\n /** На подписании (внутри компании) */\r\n static OnSigningInCompany = new PkDocState(213, \"На подписании (внутри компании)\");\r\n\r\n /** На подписании (у контрагента) */\r\n static OnSigningAtPartner = new PkDocState(214, \"На подписании (у контрагента)\");\r\n\r\n /** Контроль возврата оригинала */\r\n static ControlReturnOriginal = new PkDocState(215, \"Контроль возврата оригинала\");\r\n\r\n /** Действующая */\r\n static CurrentVersion = new PkDocState(250, \"Действующая\");\r\n\r\n /** Отозвана */\r\n static Recalled = new PkDocState(251, \"Отозвана\");\r\n\r\n /** Истек срок действия */\r\n static Expired = new PkDocState(252, \"Истек срок действия\");\r\n\r\n /** Заполнение сумм */\r\n static SetAmount = new PkDocState(253, \"Заполнение сумм\");\r\n\r\n /** На подписании DSS */\r\n static OnDssSigning = new PkDocState(254, \"На подписании DSS\");\r\n\r\n /** На аннулировании */\r\n static OnRevocation = new PkDocState(294, \"На аннулировании\");\r\n\r\n /** Перезапуск процессов */\r\n static RestartingProcesses = new PkDocState(295, \"Перезапуск процессов\");\r\n\r\n /** Подписан и согласован */\r\n static SignedAndApproved = new PkDocState(296, \"Подписан и согласован\");\r\n\r\n /** Утратил силу */\r\n static LostForces = new PkDocState(297, \"Утратил силу\");\r\n \r\n /** На сопоставлении */\r\n static OnMatching = new PkDocState(298, \"На сопоставлении\");\r\n\r\n /** Ожидание родительского документа */\r\n static WaitMainDocument = new PkDocState(299, \"Ожидание родительского документа\");\r\n \r\n /** Создано КСД */\r\n static CreatedKSD = new PkDocState(300, \"Создано КСД\");\r\n\r\n /** Формирование КСД */\r\n static FormationKSD = new PkDocState(301, \"Формирование КСД\");\r\n\r\n /** Устранение замечений*/\r\n static FixProblems = new PkDocState(302, \"Устранение замечений\");\r\n\r\n /** Подтверждение передачи документов */\r\n static ConfirmTransferDocument = new PkDocState(303, \"Подтверждение передачи документов\");\r\n\r\n /** Доработка для специалиста первичного контроля закупок */\r\n static EditSpecialistPrimaryProcurementControl = new PkDocState(304, \"Доработка для специалиста первичного контроля закупок\");\r\n\r\n /** Присвоен номер. */\r\n static NumberAssigned = new PkDocState(306, \"Присвоен номер\");\r\n\r\n /** Отправлено. */\r\n static HasBeenSent = new PkDocState(307, \"Отправлено\");\r\n\r\n /** Доставлено. */\r\n static Delivered = new PkDocState(308, \"Доставлено\");\r\n\r\n /** Готов к отправке. */\r\n static ReadyToSend = new PkDocState(309, \"Готов к отправке\");\r\n\r\n /** Отправлен из УДО. */\r\n static SentFromUdo = new PkDocState(310, \"Отправлен из УДО\");\r\n\r\n /** Отправлен Почтой России. */\r\n static SentByRussianPost = new PkDocState(311, \"Отправлен Почтой России\");\r\n\r\n /** Выполнено. */\r\n static Done = new PkDocState(313, \"Выполнено\");\r\n\r\n /** Не выполнено. */\r\n static NotDone = new PkDocState(314, \"Не выполнено\");\r\n\r\n /** Не доставлено. */\r\n static NotDelivered = new PkDocState(315, \"Не доставлено\");\r\n\r\n /** Не отправлено. */\r\n static NotSent = new PkDocState(316, \"Не отправлено\");\r\n\r\n /** Актуальный. */\r\n static Actual = new PkDocState(325, \"Актуальный\");\r\n\r\n /** Архивный. */\r\n static Archived = new PkDocState(324, \"Архивный\");\r\n\r\n /** Ожидает проверки. */\r\n static PendingVerification = new PkDocState(328, \"Ожидает проверки\");\r\n\r\n /// \r\n /// Ошибка подписания\r\n /// \r\n static ErrorSigning = new PkDocState(329, \"Ошибка подписания\");\r\n}","import { CdCardTypes } from \"src/cdScripts/Helpers/CdCardTypes\";\r\n\r\nexport class PkCardTypes {\r\n\r\n static ArActTypeID = '29ea1af0-4cd0-4a34-9184-8dc275672e1a';\r\n static ArEDocumentTypeID = 'ba0c2336-267c-49b8-bb4c-78cd620cdd82';\r\n static PkAssignmentTypeID = '11929c1b-0aa0-48c8-99bc-2058378647cc';\r\n static PkDocVisionProtocolTypeID = '133732ae-12fe-4c61-8455-37e2139a5549';\r\n static PkIncomingTypeID = '0ca52091-fd54-4e72-bfba-b31ca18de901';\r\n static PkLetterCreditTypeID = '10a3e047-6943-45df-8779-8a832a205978';\r\n static PkMemoTypeID = 'debdbddb-030b-433b-b8df-8cf98a72344e';\r\n static PkOutgoingTypeID = '9485e570-954a-4d90-bbc7-6610fe9674e4';\r\n static RdndTypeID = '1b61abab-6643-40bd-852f-c7b0753b72aa';\r\n static RdndTypeName = 'ОРД';\r\n static PkProtocolTenderTypeID = 'd85b4a17-2e58-459e-bf80-958ad88a7c56';\r\n static PkWorkOrderTypeID = '502955b1-a3ad-4d90-99ea-0205ebc4d139';\r\n static PkInternalDocumentationTypeID = '65e9d23f-551c-4386-b49f-c0eb40c693fa';\r\n static PkPacketVirtualTypeID = 'ae8e3ad3-3e30-4d20-969a-2565bd92c957';\r\n static PkPacketVirtualTypeName = 'PkPacketVirtual';\r\n static InstructionTypeID = 'bb3719cc-5033-4c95-92ec-01411c170b97';\r\n static PkProtocolTypeID = '0abe23f3-0d5a-485b-ba15-64ec86c0296b';\r\n static PkCaseNewTypeID = 'd57a5f2f-67f2-4ff8-a01e-5f022367c2d7';\r\n static PkClientDocumentTypeID = 'fc6c8258-3ad8-407f-9802-234da18b3bc6';\r\n static PkClientPacketVirtualTypeID = '4af28e4d-c886-42d4-b14c-06bd20e2c1d9';\r\n static PkRecevingDocumentsFromDiadocPluginSettings = 'c193ad11-ca98-413c-96b2-b06520905c51';\r\n static ArUnitsOfDiadocTypeID = 'c7861924-95e3-4172-beeb-ac6374ab9219';\r\n static ArUserOfDiadocTypeID = 'c6ca5261-377c-4c15-a470-ff360ee026b7';\r\n static PkInnerDocumentTypeID = '9ed3948d-659e-4f96-9776-9bce3d9bcf50';\r\n static PkPersonnelDocumentTypeID = 'd7441ba6-ac0e-4ecd-9ef7-1b23137a9713';\r\n static PkPersonnelPacketVirtualTypeID = '33364e57-1b05-401c-a412-63be11c5dd3b';\r\n static PkTCOfferTypeID = '6dca5b3d-7e33-4b30-ad3d-3849a4265ae8';\r\n static PkDialogsTypeID = 'fb1f559e-c78b-44fa-8600-10cb888aff45';\r\n static PkDialogsTypeName = 'PkDialogs';\r\n\tstatic DepartmentRoleTypeID = 'abe57cb7-e1cb-06f6-b7ca-ad1668bebd72';\r\n\tstatic PkArticleStickerTypeID = '1550c54a-c582-4ac7-be0f-47cca2ca277d';\r\n static PkCovenantTypeID = '8d3e2166-5015-4cbe-8bbc-4936e6f3ab66';\r\n static PkPackageOfOriginalDocumentsTypeID = '14c99637-3224-4b3b-84da-ea9f69d2fa9d';\r\n static PkMdsSettingsCardTypeID = '00fdf993-8676-4c0f-ba38-3168cb896ec1';\r\n static PkEksSettingsCardTypeID = '44885e8d-f8c7-460c-80b1-a6222af3ed6c';\r\n static ArRolePerformersTypeID = 'b0dbda6f-6e2b-4e9d-b4be-32bd064f596a';\r\n static PkPartnerExceptionTypeID = '64521935-b6d4-4225-8bbd-71431ccb67f6';\r\n static PkMemoTemplateTypeID = 'b9c39283-378e-4dff-bbff-57a70d16b074';\r\n static PkExpertTypeID = '5719a895-ebbe-453b-9660-1382542a8b08';\r\n static ArContractTypeID = '51596f1c-1829-40f4-b471-22c45a3978fd';\r\n static ContractTypeID = '335f86a1-d009-012c-8b45-1f43c2382c2d';\r\n static ECMContractDocumentTypeID = '0c983eea-1320-4e8f-9f76-4626e12a8d18';\r\n static PkMatrixAccountantTypeID = '53100219-88ee-4192-8626-e3d52cb626be';\r\n static PkMatrixAccountantOHRTypeID = '5f1ec40c-a7eb-4c12-9099-b97e2efec4c6';\r\n static PkMatrixEditorHistoricalDocumentsTypeID = '60e95dfd-3526-49cd-8af2-a56680601053';\r\n static PkMatrixConsolidatingTypeID = '4369500a-9cab-4175-969f-201543ab8827';\r\n static PkMatrixLawyerTypeID = 'c0f1a5a0-e123-4da3-86ff-8ebb8df35c83';\r\n static PkMatrixRemarkTypeID = '017a024e-2ff5-473b-aff1-412d7b91dcbf';\r\n static PkCorrespondenceSendingRequestTypeID = '82a37048-a09a-4f00-93d3-09dab4393934';\r\n static PkEnvelopeTypeID = '20e40fa6-a610-46ae-a054-b7e2baa9ccb2';\r\n static PkSettingsContractorInPerimetrTypeID = 'aec187ef-1eca-4a9a-92c7-67b404cb2915';\r\n static PkForceMessageHandlingByJsonTypeID = 'ff3278a1-d4eb-4e85-872d-9f6a59dc1334';\r\n static PkContractCategoryTypeID = '750765ae-dac5-4209-9a9c-7a25498630bc';\r\n \r\n static PkOutgoingTypeName = 'PkOutgoing';\r\n static PkMatrixLandAssetCompaniesTypeID = '0f4a0a0b-4aae-4837-8896-8dd09752b3c7';\r\n static PkCreatorsContractsTechnicalCategoryTypeID = '5f3ebefd-0080-4d7d-8d4e-cd3f92711b40';\r\n static PkDocumentRecognitionServiceSettingsCardTypeID = '852b89e9-4d2a-4695-ac01-7a73b5e11f9d';\r\n\r\n static FdDialogsTypeID = '38f636d6-d863-4c28-9a20-ab1dd23c3cf7';\r\n static FdDialogsTypeName = 'FdDialogs';\r\n\r\n static ArHRPersonalDataTypeID = 'f7df7256-2583-415b-8da9-46864cd644f4';\r\n static ArKonturPoAApiSettingsTypeID = 'c3d5b832-ad80-4887-b247-d3a9eb26e073';\r\n static ArPoASettingsTypeID = 'f3ca3fc3-77ca-49cd-989c-acc6a81642df'\r\n\r\n static PersonalRoleID = '929ad23c-8a22-09aa-9000-398bf13979b2';\r\n\r\n static ChanceryCardTypes: string[] = [\r\n PkCardTypes.RdndTypeID,\r\n PkCardTypes.PkInternalDocumentationTypeID,\r\n PkCardTypes.PkAssignmentTypeID,\r\n PkCardTypes.PkMemoTypeID,\r\n PkCardTypes.PkOutgoingTypeID,\r\n PkCardTypes.PkIncomingTypeID\r\n ];\r\n\r\n static CopyTileCardTypes: string[] = [\r\n PkCardTypes.PkProtocolTenderTypeID,\r\n PkCardTypes.PkWorkOrderTypeID,\r\n PkCardTypes.PkInnerDocumentTypeID,\r\n PkCardTypes.PkCovenantTypeID,\r\n PkCardTypes.PkCorrespondenceSendingRequestTypeID\r\n ];\r\n\r\n static TypesOfDocumentsWithApprovalLists: string[] = [\r\n PkCardTypes.PkOutgoingTypeID,\r\n PkCardTypes.PkIncomingTypeID,\r\n PkCardTypes.PkAssignmentTypeID,\r\n PkCardTypes.PkMemoTypeID,\r\n PkCardTypes.RdndTypeID,\r\n PkCardTypes.InstructionTypeID,\r\n PkCardTypes.PkLetterCreditTypeID,\r\n PkCardTypes.ArActTypeID,\r\n PkCardTypes.PkProtocolTenderTypeID,\r\n PkCardTypes.PkWorkOrderTypeID,\r\n PkCardTypes.PkInternalDocumentationTypeID,\r\n PkCardTypes.PkProtocolTypeID,\r\n PkCardTypes.ArEDocumentTypeID,\r\n PkCardTypes.PkInnerDocumentTypeID,\r\n PkCardTypes.PkPersonnelDocumentTypeID,\r\n PkCardTypes.PkTCOfferTypeID,\r\n PkCardTypes.PkCovenantTypeID,\r\n PkCardTypes.PkCorrespondenceSendingRequestTypeID,\r\n PkCardTypes.PkEnvelopeTypeID\r\n ];\r\n\r\n static RefsTableSupportedCardTypes: string[] = [\r\n PkCardTypes.RdndTypeID,\r\n PkCardTypes.PkInternalDocumentationTypeID,\r\n PkCardTypes.PkAssignmentTypeID,\r\n PkCardTypes.PkMemoTypeID,\r\n PkCardTypes.PkOutgoingTypeID,\r\n PkCardTypes.PkIncomingTypeID,\r\n PkCardTypes.ArActTypeID,\r\n PkCardTypes.PkProtocolTenderTypeID,\r\n PkCardTypes.PkWorkOrderTypeID,\r\n PkCardTypes.PkProtocolTypeID,\r\n PkCardTypes.ArEDocumentTypeID,\r\n PkCardTypes.PkInnerDocumentTypeID,\r\n PkCardTypes.PkPersonnelDocumentTypeID,\r\n PkCardTypes.PkTCOfferTypeID,\r\n PkCardTypes.PkCovenantTypeID,\r\n PkCardTypes.PkCorrespondenceSendingRequestTypeID,\r\n PkCardTypes.PkEnvelopeTypeID\r\n ];\r\n\r\n static PkUISettingsEnabledCardTypes: string[] = [ \r\n PkCardTypes.PkIncomingTypeID,\r\n CdCardTypes.ArPowerOfAttorneyTypeID,\r\n PkCardTypes.PkOutgoingTypeID, \r\n CdCardTypes.ArPowersOfAttorneyAuthorityTypeID \r\n ];\r\n\r\n static PkContractCardTypes: string[] = [ \r\n PkCardTypes.ECMContractDocumentTypeID,\r\n PkCardTypes.ContractTypeID,\r\n CdCardTypes.ArContractTypeID \r\n ];\r\n\r\n}","module.exports = tessa.tessa.platform.validation;","import { CardRow, CardSection } from \"tessa/cards\";\r\nimport { TypedField, createTypedField, DotNetType } from \"tessa/platform\";\r\n\r\nexport class CdCommonHelper {\r\n\r\n public static SetFieldToRow(row: CardRow, fieldName: string, value: TypedField) {\r\n if (value == null) {\r\n row.set(fieldName, null);\r\n }\r\n else {\r\n row.set(fieldName, value);\r\n }\r\n }\r\n\r\n public static SetFieldToSection(section: CardSection, fieldName: string, value: TypedField) {\r\n if (value == null) {\r\n section.fields.set(fieldName, null);\r\n }\r\n else {\r\n section.fields.set(fieldName, value);\r\n }\r\n }\r\n\r\n public static SetValueToSectionField(section: CardSection, fieldName: string, value, type: DotNetType) {\r\n if (value == null) {\r\n section.fields.set(fieldName, null);\r\n }\r\n else {\r\n section.fields.set(fieldName, createTypedField(value, type));\r\n }\r\n }\r\n\r\n public static SetValueToRowField(row: CardRow, fieldName: string, value, type: DotNetType) {\r\n if (value == null) {\r\n row.set(fieldName, null);\r\n }\r\n else {\r\n row.set(fieldName, createTypedField(value, type));\r\n }\r\n }\r\n\r\n}","module.exports = tessa.tessa.ui.cards.controls;","module.exports = tessa.tessa.ui.tiles;","module.exports = tessa.tessa.ui.cards;","export class PkRequestTypes {\r\n static ArGetVATRate = \"5ED6A8DF-B634-4F89-BE81-4359488D97D4\";\r\n static AddDocumentToFavorites = \"9E6AF495-641E-4381-BA86-0C15F22F3240\";\r\n static RemoveDocumentFromFavorites = \"F83555BA-24FF-44E3-8DD6-DAC2082D3E2C\";\r\n static CalculateVatAmount = \"502BD06B-9B89-43C3-9146-F990878DE636\";\r\n static PkCalculateAmountWithoutVat = \"A77D49AF-7834-488D-91D3-369C00091938\";\r\n static GetRdDivisionRoleProperties = \"C43FA1B2-C667-42B9-892E-EE654B10F760\";\r\n static GetTechnicalDocumentationApprovers = \"684A4AAE-B5DD-41D1-AE45-C2B6743B954A\";\r\n static GetPacketID = \"7AFF4D2D-ECBA-4A45-B64F-FFC80CDE4F12\";\r\n static EDocumentConvertToAct = \"EDD13944-A2D7-46E9-B2CE-29606D5C862A\";\r\n static SignInfo = \"2465212B-8A28-4A19-8D5A-62EABA0BD915\";\r\n static IsDirectual = \"2D6557F4-D46C-400C-A428-49980A8A793D\";\r\n static GetApproversByObjects = \"41FE0271-BBFD-4B9A-8B7A-002280000963\";\r\n static ContractInfo = \"146388B5-D7EB-4DDF-999C-451A696D025A\";\r\n static ArSendToKa = \"09ec28e6-77f6-4a56-be23-cc6fbb6f6894\";\r\n static ObjectInfo = \"AEC6089B-FE50-4787-9F25-2D3F9E2D2F10\";\r\n static GetSameArDocuments = \"2F32320C-14FC-40AE-8CDA-F03155863113\";\r\n static GetDealorPayerByPartnerKCK = \"65D07731-8942-43C2-B22B-78C6A1C92681\";\r\n static GetObjectAndRealEstate = \"2AAC725E-A001-4DAF-BEEF-FD35865DD8DA\";\r\n static PkGetClientByContract = \"42F38509-6671-4C51-A0A2-E6C2804F66CC\";\r\n static RejectCards = \"8A9442E7-2394-4489-A7B0-83B8098630AC\";\r\n static SendActToDiadoc = \"CFEA95F9-A476-42FF-BE79-194C18B1C2D1\";\r\n static PkGetContractDate = \"038B426D-82C1-44FE-B2C0-7917F745FCCB\";\r\n static RevokeTemplateInDiadoc = \"AE753D4B-8432-4482-96D6-4311575E06EF\";\r\n static GetInfoFromMemoSettingsCard = \"06822B73-3727-462B-A619-2BF39C488458\";\r\n static PkCheckCustomSubject = \"8AC34094-4189-4D9C-9E92-2642B5CC6F1C\";\r\n static PkWrkWithTemplateWeb = \"1A26C0B9-0958-4CB9-B1BF-229405E817F7\";\r\n static PkCheckVgoCard = \"EAB9666E-D092-4FB3-BCDA-A96FA7B2893A\";\r\n static PkGetVgoIdRequest = \"CD9231A2-1447-4364-A9E9-91DB8B2B6CBA\";\r\n static PkCheckActiveTasks = \"47B7CA72-B290-407C-B431-13DBD0F339CA\";\r\n static CompleteAutoSigningProcess = \"9254FD19-6757-4F87-92AA-3C1E0B2B5480\";\r\n static BankAccountInfo = \"345D01CD-1E69-4DC4-BD08-80E621C64DB8\";\r\n static PkContractGetDepartmentRequest = \"1498AAC3-19AB-443B-A852-B0480E82C98D\";\r\n static PkContractGetInfoByPartner = \"B59F954E-1DD3-409A-8225-959ABE7CC310\";\r\n static ArCheckRelatedConcession = \"2CEE1EC3-4B47-4984-BE0B-373003A18155\";\r\n static ArCheckEditArticleIDP = \"FF540827-C234-47E5-B7A7-17973FD3307B\";\r\n static ArCheckArticleUsageInAdditionalAgreement = \"D9AE58A5-FB35-41B3-818B-1EEE4CCF25DF\";\r\n static CheckVoidTheContract = \"A05D61DA-FEC3-4E6B-BF0B-FD52E765F72E\";\r\n static ArGetMostRecentDocumentDateFromTheLinked = \"CFB5619A-5D50-4F68-9BB6-490E926EF0F2\";\r\n static PkTCOfferGetApprovers = \"F5D6BDBC-6BFD-4CFE-B6BB-98EA7F1A1BD5\";\r\n static PkTCOfferGetEmployee = \"D2D83AAA-AB87-48BE-A9DC-86C375703606\";\r\n static PkRejectClientDocument = \"379654D2-07B4-3D0A-6B7A-1245B69AB420\";\r\n static ArContractMakeItValid = \"3DA8D6B3-34EE-4F1F-97C5-D5C0C014897D\";\r\n static PkCheckUserHasTasks = \"35C04D64-54B8-4C09-8DFB-FF560425DCEA\";\r\n static PkTCOfferGetUserName = \"124DC14A-55EF-4992-8B76-80F5908FBC81\";\r\n static PkTCOfferGetUserDepartment = \"619654D2-07B5-4D0A-8B7A-6255B69AB419\";\r\n static PkGetContractInfoForCovenant = \"A50391A8-4AEE-43DF-AAE5-D037DCF58C74\";\r\n static PkPrepareOutgoingForSendingDiadoc = \"B937C322-B42B-4E4B-A83D-9606B9155707\";\r\n static CheckWorkOrderContractor = \"D5DBF388-CF82-4195-BCFA-7B384196E9B1\";\r\n static PkValidateSignTypeSelecting = \"7AEC6560-5D06-41F2-94CC-33D55DB0BC3C\";\r\n static ArGetExistContractEdoRequestID = \"9D67CE0C-A116-47A8-8E58-FE79561FA7C7\";\r\n static ArGetAgreementEDORequestID = \"CC85EAF9-A1FE-4FED-9C34-47298F5FB456\";\r\n static ArGetSetCancelEDORequestID = \"080F7A8D-7CAD-4BC3-B4DE-C8C4F2F03527\";\r\n static ArAttachDocumentsFromEDRequestID = \"7FAF831F-A06F-408B-86A8-301D454A6d2A\";\r\n static PkPkGetSetUserSubsetsRequestID = \"865884E8-D13A-4ECA-8233-389F71C479A4\";\r\n static IrdGetNotifyUsersRequestID = \"af251e28-b129-42da-b58c-3145250b8d0b\";\r\n static IrdCheckExistingVersions = \"2617A923-1CAC-4913-B131-0FFE4D4F3DFE\";\r\n static IrdGetTepsByKindRequest = \"5CE4DBE9-C151-4739-85DD-60A611C253BE\";\r\n static IrdGetVersionsRequest = \"DB087EFB-E257-4ACA-B878-77D3C5DBCB62\";\r\n\r\n /**Формирование описи по пакету оригиналов документов */\r\n static PkGetCourtContractPartners = \"5EC36BC9-6CA6-4E51-824E-B8145F8FC3A6\";\r\n static ArAddWordFileWithDocsToContract = \"D8D1EBC5-FDFA-46BC-B85F-00B11DA1CC39\";\r\n /** Реквест на получение стикерных статей. */\r\n static PkGetArticleStickersByParent = \"1DDBBE96-0D4F-4954-A569-832240C374E3\";\r\n /** Получение статей стикера из договорного документа по RowID. */\r\n static PkGetArticleStickersFromContacrtByParent = \"ED944A14-9411-43E5-A063-28299592B936\";\r\n static GetDepartmentSystemInfo = \"0271D9E2-28A5-4278-AD8A-4C0DC30C6BA4\";\r\n /** Реквест на получение суммы по статье договора из таблицы текущие суммы. */\r\n static PkGetArticleAmountFromContractBySticker = \"8CC8A556-60B9-4533-944B-BB46C0B33FD9\";\r\n static ArContractSetReasonChanges = \"E08AF387-9470-4ABA-A2D1-560C1467FA30\";\r\n static PkGetEventPeriodicity = \"9F5AD89E-7DE4-4067-9496-BCC8B9BC6918\";\r\n /// Реквест для получения темы входящего документа из исходящего.\r\n static ChGetThemeTemplateIncomming = \"5C70D3CF-40DD-40CF-8ED0-AC0550F7B7DA\";\r\n static PkCopyAllCovenants = \"0B1E0E1B-5710-4EB3-83A4-4E743BCBC06E\";\r\n\r\n /** Реквест на получение сообщений ЕКС. */\r\n static PkGetEksMessagesInfo = \"70AC0FE8-1B4E-4717-90C7-6E5C752BDD5F\";\r\n\r\n /** Реквест на обновление сообщений ЕКС. */\r\n static PkUpdateEksMessagesInfo = \"6C7F5733-46CB-40A3-953C-C4C93C94DCD1\";\r\n\r\n /** Обновление или создание конкретного договора в тессе из мдс по коду Директум (ЕСУД). */\r\n static PkUpdateContractFromMdsRequest = \"69D2498B-CC82-48B9-9EC7-E305B34310FD\";\r\n\r\n static ArCheckContractCategoryInKd = \"8A848F9C-68E5-4780-AB3B-C073ED1AB048\";\r\n static ArSendToKd = \"D4475C77-665B-4FCC-9C8F-F75EEF1F0986\";\r\n\r\n static ArContractGetRolePerformers = '024A1C9D-7302-4B11-A0A1-D221AC732EB9';\r\n\r\n static ArGetxchangeRateByCurrency = '292FDA97-C2F6-4A9E-88AB-79CC514D2EDB';\r\n static PkGetDepartmentRolesRoleUsersID = 'A6E82AC5-CA3A-4F20-997D-33029B75A6F9';\r\n static PkGetPartnerKCKByExternalID = '69C05FA1-F953-4973-B57A-3D1AFD0048B4';\r\n static PkGetAnalyticsStickersAndMethodID = 'A53289B6-DA3B-4A06-9010-A770AD773030';\r\n /** Запрос на Пересчет суммы в Первичном документе {A399C5E2-DDDE-48C2-9778-A82E7A1D8C96} */\r\n static ArActRecalculateAmountsRequestID = 'A399C5E2-DDDE-48C2-9778-A82E7A1D8C96'\r\n\r\n /** Реквест для получения ИНН Контрагентов по их ExternalID. */\r\n static PkGetINNbyExtIDPartnersRequest = 'C98F037B-BCE7-41C0-8041-DA824E74AEDA';\r\n\r\n /** Запрос на распознавание документа. */\r\n static DocumentRecognizeStartRequest = '0B82F996-ACEF-417B-9E53-67947BB336A5';\r\n\r\n /** Проверка статуса и получение результата распознавания документа. */\r\n static DocumentRecognizeCheckStatusRequest = 'C31BAB1D-F741-4DBE-895D-6AE084256904';\r\n\r\n /** Получение виртуального подписанта */\r\n static PkGetVirtualSignerByDepartment = '6534F234-BF94-4CDE-9459-9C50B391C1B2';\r\n\r\n /** Запрос доступа для создания соглашения о расторжении */\r\n static PkAgreementTerminationContractAccessRequest = '4BAA3FAB-9EF4-4E36-82D2-0F5F3AC539E9';\r\n \r\n /** Запрос актуальных PartnerAutomated и PartnerDepartmentID */\r\n static ArContractPartnerstInfoRequest = 'C84F7B16-CFBF-47CD-BC4E-E1C4D8B631AF';\r\n \r\n /** Получение ID типа карточки по ID карточки */\r\n static ArContractGetContractKindIDByCardID = \"12CA4975-B0D5-45BB-B5FA-7726A285BE18\";\r\n\r\n /** Запрос доступа для создания уступки */\r\n static PkAgreementCessionContractAccessRequest = '59197016-5033-4921-BA5A-E1A340780885';\r\n\r\n static PkGetUncomplitedChildTasksRequest = '8F704056-24F9-4989-8931-52E9E625C5F1';\r\n\r\n /** Реквест на получение информации по конверту. */\r\n static PkGetEnvelopeInfo = \"474FE541-C686-445A-8F8B-F97450AA69F5\";\r\n\r\n /** Реквест на получение связанных с карточкой ссылок. */\r\n static PkGetReferencesInfo = \"2E76126F-426D-4439-B4C6-A56293DFB58F\";\r\n /** Проверка наличия заполненной матрицы. */\r\n static ArContractCheckFilledMatrixExistsRequest = 'E07360B3-F352-4BD5-8414-D903905AF029';\r\n\r\n /** Запрос доступа для запуска согласования ДС. */\r\n static ArContractIsCanStartApprovalAdditionalAgreementRequest = '32B35E19-631D-4390-B10F-C030A8C17966';\r\n\r\n /** Реквест на получение значения поля. */\r\n static PkGetFieldValue = \"11B5F835-9597-44EF-9AFE-7E4397E1B4F3\";\r\n\r\n // Реквест на удаление кэша распознавания\r\n static DocumentRecognitionClearCacheRequest = \"988D3F88-1662-4E88-828F-F541FB2E1FC0\";\r\n\r\n // Проверка наличия статьи по параметрам в документе.\r\n static PkContractCheckArticleExists = \"A0DDB413-7FEE-4946-AB34-1D85A6719A79\";\r\n\r\n // Проверка наличия указанных в карточке этапов\r\n static ArContractCheckMatrixUpToDate = \"398E59D8-7280-4995-AADC-452AB118149A\";\r\n\r\n // Получение текста полномочия из карточки доверки (фактически вписанного из КД, а не из ссылки на карточки полномочий).\r\n static ArPOAGetCredentialsTextRequest = \"7519D994-D2F5-48E7-9FD1-22BE28ED4105\";\r\n \r\n // Получить subject карточки договора.\r\n static PkGetContractSubjectRequest = \"D4C1B08B-7752-49FE-84C1-DFBCEEDF2382\";\r\n\r\n // Проверка наличия статьи по параметрам в документе.\r\n static PkOutgoingGetCulpritInfos = \"7FC73345-303E-4CAF-A7FD-9AFBAD95074C\";\r\n\r\n // Проверка наличия статьи по параметрам в документе.\r\n static PkOutgoingGetActArticleIdpsInfos = \"4B9845CC-35DD-43FF-84ED-796BEB7D4B34\";\r\n\r\n // Реквест на перерегистрацию доверенности.\r\n static ArPOARegisterRequest = \"385BE49E-FDB8-4CA3-B791-585911AC403F\";\r\n\r\n //Реквест на получение доступности для редактирования поля \"Сумма к удержанию\".\r\n static PkOutgoingGetInfoForClaimHoldingAmountRequest = \"F0E1DD3B-5404-4CF1-AC7A-495C80282F6F\";\r\n\r\n // Проверка факта создания КСД на основе ЭД.\r\n static ArContractCheckCreatedOnBaseArEDocumentRequest = \"98958060-9FCF-4C99-90B7-48A63F5FC51A\";\r\n\r\n //Удаление файлов из категорий Печатные Формы, Полный пакет и удаление информации о подписании в Диадок в таблицах PkDiadocCommonInfo PkDiadocInfo.\r\n static CleanDiadocInfoRequest = \"08DC43F9-BDCD-47CF-8B0A-1678225400A2\";\r\n\r\n // Реквест на получение информации по организации КСК (физ.лица).\r\n static PkOutgoingGetIndividualsKCKRequest = \"5C0133E7-030D-4115-BB23-B30FF8423597\";\r\n\r\n // Реквест на добавление/обновление сущности мест уплаты налогов из МДМ.\r\n static PkUpdateFinanceTaxAuthorityRegistrationByMessageRequest = \"E19B3216-7D49-4D78-8B5E-DCC03E902A6D\";\r\n\r\n // Реквест на очистку ошибки Диадок.\r\n static PkClearDiadocErrorRequest = \"14CBF3A8-85B5-4E5C-9F67-D8E8FBB8E01B\";\r\n\r\n static PkCheckDeputyUsers = \"67DEEB31-A80D-4F05-BD42-9969365A9A74\";\r\n \r\n // Реквест на добавление/обновление сущности персональных данных из МДМ.\r\n static PkUpdateHRPersonalDataByMessageRequest = \"E9AA09D0-03BC-4A38-B217-799A93DEEE9E\";\r\n\r\n static PkGetFRCOwnerRequest = \"71C2105D-4852-4DF7-98AB-C817F95A40F8\";\r\n\r\n static PkGetContractCategoryIsFinancialAnalyticRequestID = \"78C8AB16-8225-4826-9DC8-F9FDEBC3340D\";\r\n\r\n // Реквест urlа авторизации в Контур.Экстерн.\r\n static ArGetAuthorizationUrlForKonturExtern = \"9389F9E7-0253-49D0-ABE0-66582B4E6B6A\";\r\n\r\n // Реквест авторизации в Контур.Экстерн.\r\n static ArAuthorizeWithKonturExtern = \"1A3878B8-BCE9-43D5-8E30-64D65477FDBD\";\r\n\r\n // Реквесто проверки множественных ЮЛ среди КСК по InstanceID\r\n static PkCheckMultipleKCKLegalsInListRequest = \"52EE4984-8EF1-4C9A-8082-38B737727F99\";\r\n \r\n // Реквест для получения дочерних категорий договора.\r\n static PkGetChildContractCategoryRequest = \"3BD2F831-C782-4C0E-9653-E85021D89FB7\";\r\n}\r\n","module.exports = tessa.tessa.ui.uiHost;","export class CdRequestTypes {\r\n\r\n static GetProjectAndLivingComplexWithNoAvailable = '3B10DEFC-5B29-4800-9587-669BFF0FA698';\r\n static GetRegionCityAndProjectByObject = '4C90AAE7-AA20-4A4C-80B0-FB9412107BE6';\r\n static GetProjectAndLivingComplex = '0D0FF394-1172-40F2-AB8E-B7B5BE5C05A2';\r\n static GetTechnicalDocumentationApprovers = '684A4AAE-B5DD-41D1-AE45-C2B6743B954A';\r\n static GetIsAdministrator = 'C7399F82-1D49-4A3B-808F-11118AF29B75';\r\n static GetAuthorDepartment = '46314599-4B6D-4AB7-A5EF-1FF6F2841544';\r\n static ArDocumentIDPVirtualInfo = '664940FD-44F8-4FD6-BE91-1883359C6351';\r\n static ArDocumentKind = 'EB01185C-1EEA-47CE-A3F9-1E7B5BE8193E';\r\n static GetRdDivisionRoleProperties = 'C43FA1B2-C667-42B9-892E-EE654B10F760';\r\n static SignInfo = '2465212B-8A28-4A19-8D5A-62EABA0BD915';\r\n static AddDocumentToFavorites = '9E6AF495-641E-4381-BA86-0C15F22F3240';\r\n static RemoveDocumentFromFavorites = 'F83555BA-24FF-44E3-8DD6-DAC2082D3E2C';\r\n static GetLegalEntity = '85B84802-03DD-47E7-9A02-66061C674AFE';\r\n static GetUsersForTable = '2E5C7CA5-ACF1-4C88-B72C-3FFB4C8F1FFC';\r\n static GetRdInfo = '493AC87F-0FE2-4516-AAFB-099DFE38ED99';\r\n static HiddenWorksInfo = '41F89208-2E28-4DED-92C9-F40F1BEA4EFE';\r\n static CdCheckSignFile = '6FEB0D17-6B6E-4E2A-B63C-E69E9EB0202E';\r\n static CdCheckQrCodeFile = 'E4783065-FAA7-45F4-9803-A8B48752B78F';\r\n static GetEsApproversByObjects = 'F14D12C9-77D0-41A1-94EF-EBAE3DF3DB39';\r\n static CdGetSroInfoByKCKID = '6F2BB8D4-9856-45DD-B079-DC4E507D5993';\r\n static CdGetSystemInfo = 'B991D16A-C07A-486E-B7B5-798B1813DAFE';\r\n static CdGetSpecialistnumber = 'DAA41CFC-8DF4-48AF-9E52-84EFC88802A2';\r\n static CdGetGeodesicApproversByObjects = '55A746B0-17CB-42A4-BA38-C5AFD9A4C22F';\r\n static GetApprovementRoles = '79DB8F4A-672D-429A-9853-2EE272C7A8DE';\r\n static GetApprovementParticipants = '48288EEF-A76D-436B-827C-E45EB0F4F16C';\r\n static GetRenovationAndProjectType = '68E9CF1C-22D8-4891-B082-6C8920B5E9C7';\r\n static CheckUserInRole = '27458E64-F356-4BB7-9F99-7C96A05F24FB';\r\n static CdContractGetArticleID = '0E0623D6-9CB4-4E1E-953D-8292FD07A583';\r\n static CdSetSelectedTechDocPage = 'BE90D0DB-36CF-4664-B086-3FE9C4292771';\r\n static GetParentRoleID = '30FBD51D-8D88-4DD4-BF7D-C298D2790EC8';\r\n static CheckCertificate = '30079175-6C7F-404F-8E2F-F80C5BE4CF41';\r\n static PkSignFilesByDss = 'E61D3BE9-6331-436C-A876-A263998A0C34';\r\n static GetUserCertInfo = '0912E7AD-EC67-4760-8953-3C931BD88BBB';\r\n static CheckSigns = '114F82B2-B408-41D5-851F-2F339D829529';\r\n static InsertSignDssMessageInfo = 'EA59E9C6-9D22-4BDF-88AE-C3EEE8E5517B';\r\n static GetLastSignDssMessageInfo = '8DADEA50-7242-44D9-B355-6D7BCA6C82AF';\r\n static GetSignatureHash = '8F742397-895C-4344-BCA8-FEA328860AB1';\r\n static CheckPartnerInPerimeter = 'A972C7D6-C7DA-45B9-B3DF-E70D9154A35D';\r\n static UnlockCards = '335932A9-306F-4160-8160-0EB48083BFC6';\r\n static RegisterCards = 'EEACAA5B-1D5E-473D-A856-0C03C43273FE';\r\n static GetInfoByPdc = '454D73D3-1DD6-4D93-89F6-C4083CB73842';\r\n static GetMyTasksCount = 'FEB8DD44-169C-4B22-BCB2-1540BDDEE632';\r\n static CdCheckFileSignaturesBySignerRoles = '027D20D1-AE61-4479-9DAD-D278CF7613EE';\r\n static GetPartnerSynonymAliasByExternalID = '3063479F-8C8C-491F-B44B-F208548AA562';\r\n static CheckSettingsLegalEntitiesRequest = '6E5ABB36-1D77-439B-9E62-BC7186857DFA';\r\n static IsObjectLockedRequestTypeID = '09AD8FAD-5E3D-4988-93B8-3D266A75F036';\r\n}","module.exports = tessa.common.utility;","\r\nimport { FileCategory } from 'tessa/files';\r\n\r\nexport class ChFileCategories {\r\n\r\n static Approval =\r\n new FileCategory(\"4deb9ef5-061f-447b-af10-85330ac6374c\", \"1. Согласуемые\");\r\n\r\n static Primary =\r\n new FileCategory(\"316a2102-c5f2-4253-aa01-5afaa07d899a\", \"1. Основные\");\r\n\r\n static DevelopmentScenario =\r\n new FileCategory(\"fa50199e-6546-4567-8799-f219008b7c11\", \"1. Девелоперский сценарий\");\r\n\r\n static RequestForMaterials =\r\n new FileCategory(\"4be335aa-bd65-41d1-ae43-51b070aa8a83\", \"1. Заявка\");\r\n\r\n static DssCertificates =\r\n new FileCategory(\"8f3be430-ff25-4081-bcb9-4bb1b92bce68\", \"1. Сертификаты DSS\");\r\n\r\n static PkTCOfferUnsigned =\r\n new FileCategory(\"72fff7a4-8960-43f6-b858-96ac5c7ad32a\", \"1. ТКП без подписи\");\r\n\r\n static NepCertificates =\r\n new FileCategory(\"5400711e-a9f8-45de-a0b5-1221efa13314\", \"2. Сертификаты НЭП\");\r\n\r\n static AdditionalMaterials =\r\n new FileCategory(\"d76c2d4b-fe8e-43b8-934f-57bffa80fd0d\", \"2. Дополнительные материалы\");\r\n\r\n static Informational =\r\n new FileCategory(\"9cca8704-b63c-445f-a262-d705b7150649\", \"2. Информационные\");\r\n\r\n static DocumentID =\r\n new FileCategory(\"486c5b50-5bc3-4849-acc9-ba9628b5271f\", \"1. Документ ИД\");\r\n\r\n static Journal =\r\n new FileCategory(\"af292517-0814-423b-bfd0-f186978f27a3\", \"2. Журналы\");\r\n \r\n static PkTCOfferWorkSchedule =\r\n new FileCategory(\"a44c5f04-fff9-4bfc-8a1c-a43b39242cab\", \"2. График работ\");\r\n\r\n static ImplementingSchemes =\r\n new FileCategory(\"33851601-e99b-41db-9c70-639efb9be8f6\", \"3. Исполнительные схемы\");\r\n\r\n static PkTCOfferSigned =\r\n new FileCategory(\"e0398295-e405-4e22-9dec-f651b6d47fc4\", \"3. ТКП с подписью\"); \r\n\r\n static LaboratoryTests =\r\n new FileCategory(\"21394ee3-0d65-4d61-b4f0-47d963fb39aa\", \"4. Лабораторные испытания\");\r\n\r\n static PkTCOfferUnsignedIrrelevant =\r\n new FileCategory(\"0172c4a0-4e5c-4e22-9aa6-4da03a911c4c\", \"4. Неактуальные ТКП без подписи\");\r\n\r\n static TechnicalConclusions =\r\n new FileCategory(\"5de0e396-b443-449c-8f35-7d2d2da3c733\", \"5. Технические заключения\");\r\n\r\n static PkTCOfferWorkScheduleIrrelevant =\r\n new FileCategory(\"3f6601e2-3043-4252-ae0b-315335784283\", \"5. Неактуальные графики работ\");\r\n\r\n static PassportsAndCertificates =\r\n new FileCategory(\"e8f84002-4247-4882-9e9f-59b49f0fd4e3\", \"6. Паспорта и сертификаты\");\r\n\r\n static PkTCOfferOther =\r\n new FileCategory(\"65dfd107-6605-46a8-a2cd-21476cffef37\", \"6. Прочие файлы\");\r\n\r\n static OtherApplications =\r\n new FileCategory(\"7a2df5b3-8346-44a5-9a83-4bf28ec3c3b4\", \"7. Прочие приложения\");\r\n\r\n static ElectronicSignatures =\r\n new FileCategory(\"7f02bc47-b78a-4e65-9de9-4a387d05f4b8\", \"8. Электронные подписи\");\r\n\r\n static Revocation =\r\n new FileCategory(\"f14f212c-9950-46c8-a789-db420207fd04\", \"10. Аннулирование\");\r\n\r\n static AdditionalForContract =\r\n new FileCategory(\"9ecd7b45-6d99-4db4-978d-5560984d9b05\", \"3. Приложения\");\r\n\r\n static ANPT =\r\n new FileCategory(\"a7f9b975-5963-40cd-b745-4ceec2acc5ec\", \"АНПТ\");\r\n\r\n static PrintForms =\r\n new FileCategory(\"eb36d3fe-93fa-46a4-b4f7-362a7827df51\", \"5. Печатные формы\");\r\n\r\n static FullPacket =\r\n new FileCategory(\"855a80e1-a831-4405-a7a8-5770c5978c78\", \"6. Полный пакет\");\r\n\r\n\r\n\r\n static FileCategories =\r\n [\r\n ChFileCategories.Primary,\r\n ChFileCategories.Informational,\r\n ChFileCategories.DocumentID,\r\n ChFileCategories.Journal,\r\n ChFileCategories.ImplementingSchemes,\r\n ChFileCategories.LaboratoryTests,\r\n ChFileCategories.PassportsAndCertificates,\r\n ChFileCategories.OtherApplications,\r\n ChFileCategories.ElectronicSignatures,\r\n ChFileCategories.TechnicalConclusions,\r\n ChFileCategories.DevelopmentScenario,\r\n ChFileCategories.AdditionalMaterials,\r\n ChFileCategories.RequestForMaterials,\r\n ChFileCategories.ANPT\r\n ];\r\n}","import { IStorage } from \"tessa/platform/storage\";\r\nimport { createTypedField, DotNetType } from \"tessa/platform\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { ChRequestTypes } from \"./ChRequestTypes\";\r\nimport { userSession } from \"common/utility\";\r\n\r\nexport class PkCommonHelper {\r\n\r\n public static IsNullOrWhitespace( input ) {\r\n if (typeof input === 'undefined' || input == null) return true;\r\n return input.replace(/\\s/g, '').length < 1;\r\n }\r\n\r\n public static GetDateTimeNow(addDay) {\r\n let dateNow = new Date();\r\n if (addDay) {\r\n dateNow.setDate(dateNow.getDate() + addDay);\r\n }\r\n let result = dateNow.getFullYear() + \"-\" +\r\n PkCommonHelper.ConvertTwoSymbols(dateNow.getMonth() + 1) + \"-\" +\r\n PkCommonHelper.ConvertTwoSymbols(dateNow.getDate()) + \"T\" +\r\n dateNow.toLocaleTimeString('ru-RU') + \"Z\";\r\n return result;\r\n }\r\n\r\n private static ConvertTwoSymbols(value) {\r\n if (value.toString().length === 1) {\r\n value = \"0\" + value;\r\n }\r\n return value;\r\n }\r\n\r\n public static AddListToInfo(info: IStorage, key: string, list, type: DotNetType) {\r\n let result: any[] = [];\r\n list.forEach(element => {\r\n result.push(createTypedField(element, type));\r\n });\r\n info[key] = result;\r\n }\r\n\r\n\r\n public static financial(x) {\r\n return parseFloat(Number.parseFloat(x).toFixed(2));\r\n }\r\n\r\n public static saveByteArray(reportName, byte, docType) {\r\n var blob = new Blob([byte], { type: docType });\r\n var link = document.createElement('a');\r\n link.href = window.URL.createObjectURL(blob);\r\n var fileName = reportName;\r\n link.download = fileName;\r\n link.click();\r\n };\r\n\r\n public static SaveFileContent(fileName: string, fileContent: Blob) {\r\n const link = document.createElement('a');\r\n link.href = window.URL.createObjectURL(fileContent);\r\n link.download = fileName;\r\n link.click();\r\n }\r\n\r\n public static async GetBase64String(fileContent: Blob) {\r\n // @ts-ignore\r\n const content = await fileContent.arrayBuffer();\r\n const data = new Uint8Array(content);\r\n\r\n // конвертируем контент файла в строку\r\n const fileContentString = btoa(\r\n data.reduce(function (data, byte) {\r\n return data + String.fromCharCode(byte);\r\n }, ''));\r\n\r\n // возвращаем контент файла в виде base64 строки\r\n return fileContentString;\r\n }\r\n \r\n public static base64ToArrayBuffer(base64) {\r\n var binaryString = window.atob(base64);\r\n var binaryLen = binaryString.length;\r\n var bytes = new Uint8Array(binaryLen);\r\n for (var i = 0; i < binaryLen; i++) {\r\n var ascii = binaryString.charCodeAt(i);\r\n bytes[i] = ascii;\r\n }\r\n return bytes;\r\n }\r\n\r\n public static GroupBy = (list: T[], getKey: (item: T) => K) =>\r\n list.reduce((previous, currentItem) => {\r\n const group = getKey(currentItem);\r\n if (!previous[group]) previous[group] = [];\r\n previous[group].push(currentItem);\r\n return previous;\r\n }, {} as Record);\r\n\r\n public static async CheckCurrentUserInRole(roleId: string) {\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.CheckUserInRole\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(roleId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.build().isSuccessful)\r\n {\r\n return response.info.IsUserInRole.$value;\r\n }\r\n \r\n return false\r\n }\r\n}","module.exports = tessa.tessa.files;","module.exports = tessa.tessa.views.metadata;","module.exports = tessa.tessa.views;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","export class CdFdProcessHelper {\r\n\r\n static CreateAddAgreement = \"4e2b2bc5-9ee3-4769-be05-87f08533238e\";\r\n static Sign = \"80df932d-4774-42ce-a86c-d3b1d269fd38\";\r\n static ForApproval = \"BF7958CC-3013-489F-A3B9-FCC875D1E069\";\r\n static PkSendForSigning = \"2c747704-46e7-48b8-923a-34b32f3f57ea\";\r\n static Approve = \"8CF5CF41-8347-05B4-B3B2-519E8E621225\";\r\n static ToArchive = \"E95DE17A-3B74-41D5-A322-D47BC39A053D\";\r\n static SendForResubscription = \"F934F6D2-4BC3-49A5-B1A0-5F3367EF43AD\";\r\n static PkSendForResigning = \"ae5281cc-41e6-4862-8071-e3e23573ddfd\";\r\n static SignWithEDS = \"42f28e57-a763-4358-9f56-42c16308b333\";\r\n static PkSignPaper = \"dddf382b-c2b2-4746-9b27-e5412eb9338b\";\r\n static PkSignDocument = \"ddb96cfc-64bd-4797-a893-573e02e153c7\";\r\n static PkAgree = \"9cfe6de4-ad82-4c72-81c9-0dad4b67d167\";\r\n static PkDisagree = \"95772dc5-87c2-4f08-b6a9-270e203eed94\";\r\n static PkCancelRevocation = \"3ce17c57-f97e-4ac0-a534-5dc690ad42b5\";\r\n static PkAssingNumber = \"70c0260f-c8de-415b-ab53-7b44aa83e0cb\";\r\n static PkSendByRussianPost = \"e2dafa3e-a8e2-46c1-a4df-17e32e56456a\";\r\n static PkSent = \"6d62e3ba-8413-4914-9571-1079f131280a\";\r\n static PkEnvelopePrepared = \"afbd902b-c36d-4c05-a920-961ab5ab26d0\";\r\n static Complete = \"5b108223-92db-49b9-8085-336758ccabaa\";\r\n static Confirm = '87573849-9E44-493E-830F-65CFDFAD65FE'\r\n static Cancel = \"2582b66f-375a-0d59-ae86-a149309c5785\";\r\n static PkDone = \"dbe5f266-9e8a-4d71-9753-4837cb9ae6a5\";\r\n static PkNotDone = \"abb6c50c-115c-492e-9847-a69949304f07\";\r\n static PkDelivered = \"86638973-9d2e-4ead-b076-239c9eb37933\";\r\n static PkNotDelivered = \"1559620d-cb38-40c8-9a7f-494dd90adc3e\";\r\n static PkNotSent = \"7005720b-b420-453f-86e3-157713043d7a\";\r\n static CreateAgreementEDO = \"c58df2a0-073c-4eee-8967-e26c5e3aab95\";\r\n static NewApprovalCycle = \"c0b704b3-3ac5-4a0d-bcb6-1210e9cdb0b3\";\r\n static PkReturnToSigner = \"371a51c8-4b25-42e2-b822-501bed5a3665\";\r\n static PkResendForApproval = \"cd7bf972-f191-44fa-9e80-d48d3a6ebcd8\";\r\n static PkFillOut = \"57fbb711-30df-4cee-8684-ac419fe8aca5\";\r\n }","module.exports = mobx;","export class CdFdTaskTypes {\r\n\r\n static PkSignExecutiveDocumentationAgreementWithAgreementorTypeID = \"3374af53-e46a-45b5-bfe2-b5e4b9f1cd58\";\r\n static PkSignExecutiveDocumentationAgreementTypeID = \"81f44c81-a246-4bb3-872e-23a05b8075d7\";\r\n static PkSignExecutiveDocumentationCoordinationAuthorSupervisionTypeID = \"a46af768-2442-4435-865f-aaaa44de6381\";\r\n static PkSignExecutiveDocumentationInitializingTypeID = \"1364AA05-22FD-414C-B82F-A06C4F651BD8\";\r\n static PkExecutiveDocumentationAgreementWithAgreementorTypeID = \"4E652BE7-B6C0-4011-A523-F62A9E27650D\";\r\n static PkFdInArchiveTypeID = \"89B8980B-76A1-4FED-B569-E144027B01A6\";\r\n static PkExecutiveDocumentationInitializingTypeID = \"91AEA9E4-44F8-45B9-952F-35A1F989F7A3\";\r\n static PkExecutiveDocumentationToReworkTypeID = \"E468E9C1-1379-4C5A-B4EF-BF9A37BAD112\";\r\n\r\n\r\n static PkSignExecutiveSchemeAgreementWithAgreementorTypeID = \"94e0f510-2179-4b63-88f8-36971b074b82\";\r\n static PkSignExecutiveSchemeAgreementTypeID = \"1645238b-becc-4e44-b79a-c1d0561c2538\";\r\n static PkSignExecutiveSchemeInitializingTypeID = \"44136c83-d768-4d5c-925e-bbbdf38e1f08\";\r\n static PkExecutiveSchemeToReworkTypeID = \"25015128-2f71-41df-85e0-2cb54bced00a\";\r\n static PkExecutiveSchemeCancelTypeID = \"e8563f9b-3130-42e0-ad17-f4d3b5615ddb\";\r\n static PkExecutiveSchemeCanUseInEDActsTypeID = \"58c79101-1c0e-4633-b806-c6e9c5067d04\";\r\n\r\n static PkDevelopmentScenarioInitializingTypeID = \"918d8ea0-6339-4fa8-8534-bc1be878de51\";\r\n static PkDevelopmentScenarioAgreementWithAgreementorTypeID = \"218acbec-bba1-44c2-8c38-f6442b9c6db2\";\r\n static PkDevelopmentScenarioToReworkTypeID = \"61b9154a-7eb0-48e1-88d9-ae73ac4300b8\"; \r\n\r\n static PkSignRequestForMaterialsInitializingTypeID = \"8fbf9087-4255-4a56-a262-641bce39c944\";\r\n static PkSignRequestForMaterialsToReworkTypeID = \"3d383911-6c7b-4e78-bb46-3d156c943d0a\";\r\n static PkSignRequestForMaterialsSigningTypeID = \"1805915f-60ca-4c25-92ee-993b7919e080\"\r\n static PkSignRequestForMaterialsEngeneerPTOSigningTypeID = \"aeef1b9d-2579-4c0e-a0d7-73b84c5fd969\"\r\n\r\n static PkTechnicalDocumentationAgreementOnRenovationInFRTypeID = \"D33AF34E-5B89-4046-9AA5-C9AB472122C3\";\r\n\r\n static PkSignInDiadocTypeID = \"3157fde3-a311-4754-98bb-07b04c07dfd1\";\r\n static PkProcessIncomingResponseTypeID = \"35edfcfc-22a4-4289-a6ad-8df5042e15d7\";\r\n static PkReworkTaskTypeID = \"cfa7cc6c-3de0-430b-b967-7e89c71a0c97\";\r\n }","module.exports = tessa.tessa;","import { ICardModel, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { PkCommonHelper } from './PkCommonHelper';\r\nimport { Card, CardPermissionFlags, CardSection, CardRowState, CardRow } from 'tessa/cards';\r\nimport { hasFlag, Guid, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { showError, UIButton } from 'tessa/ui';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { reaction } from 'mobx';\r\nimport { ArrayStorage } from 'tessa/platform/storage';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\nimport { ChRequestTypes } from './ChRequestTypes';\r\n\r\nexport class PkClientHelper {\r\n\r\n /**Подписаться на изменения поля в коллекционной секции\r\n * Если строка добавилась или удалилась, то в CardFieldChangedEventArgs приходит Null.\r\n * Если изменилось поле, то из CardFieldChangedEventArgs можно достать FieldName.\r\n * Если строки чистятся не через изменение состояния, то подписка не работает, это нужно будет дописывать\r\n * \r\n */\r\n public static SubscribeForFieldChanging(colection: CardSection, callback: any) {\r\n colection.rows.forEach(row => {\r\n row.fieldChanged.add((args) => { callback(args); });\r\n row.stateChanged.add(() => { callback(null); });\r\n });\r\n\r\n colection.rows.collectionChanged.add(e => {\r\n if (isNullOrUndefined(e.added)) {\r\n return;\r\n }\r\n e.added.forEach(item => {\r\n item.fieldChanged.add(e1 => { callback(e1); });\r\n item.stateChanged.add(() => { callback(null); });\r\n })\r\n callback(null, null);\r\n });\r\n }\r\n\r\n public static GetVatValue(vatRateCaption: string): number {\r\n let vatValue = 0;\r\n if (vatRateCaption === \"НДС0\") {\r\n vatValue = 0;\r\n }\r\n if (vatRateCaption === \"НДС10\") {\r\n vatValue = 10;\r\n }\r\n if (vatRateCaption === \"НДС18\") {\r\n vatValue = 18;\r\n }\r\n if (vatRateCaption === \"НДС20\") {\r\n vatValue = 20;\r\n }\r\n if (vatRateCaption === \"БезНДС\") {\r\n vatValue = 0;\r\n }\r\n return vatValue;\r\n }\r\n\r\n public static SetReadonlyContractWhileFieldIsNull(\r\n model: ICardModel,\r\n card: Card,\r\n contractSection: string,\r\n contractField: string,\r\n checkedField1: string,\r\n checkedField2: string | null,\r\n checkedSection1: string | null,\r\n checkedSection2: string | null,\r\n controlName: string | \"Contract\") {\r\n // Если секция 1 не заполнена\r\n if (PkCommonHelper.IsNullOrWhitespace(checkedSection1)) {\r\n checkedSection1 = contractSection;\r\n }\r\n // Если нет секции 2, записываем в неё значение секции 1\r\n if (PkCommonHelper.IsNullOrWhitespace(checkedSection2)) {\r\n checkedSection2 = checkedSection1;\r\n }\r\n // Если нет поля 2, то записываем значения секции и поля 1\r\n if (PkCommonHelper.IsNullOrWhitespace(checkedField2)) {\r\n checkedSection2 = checkedSection1;\r\n checkedField2 = checkedField1;\r\n }\r\n let checkedSection1Sect;\r\n let checkedSection2Sect;\r\n if (checkedSection1 != null && (checkedSection1Sect = card.sections.tryGet(checkedSection1)) != null &&\r\n checkedSection2 != null && (checkedSection2Sect = card.sections.tryGet(checkedSection2)) != null) {\r\n const isFieldProhipit = hasFlag(model.card.permissions.resolver\r\n .getFieldPermissions(contractSection, contractField + \"ID\"), CardPermissionFlags.ProhibitModify);\r\n\r\n if (checkedSection1Sect.fields.tryGet(checkedField1) != null &&\r\n checkedSection2Sect.fields.tryGet(checkedField2) != null) {\r\n const control = model.controls.get(controlName);\r\n if (control && !isFieldProhipit) {\r\n control.isReadOnly = false;\r\n }\r\n }\r\n\r\n // Отслеживаем изменения в полях\r\n checkedSection1Sect.fields.fieldChanged.add(e => {\r\n if (e.fieldName === null) return;\r\n\r\n if (checkedSection1Sect.fields.tryGet(checkedField1) != null &&\r\n checkedSection2Sect.fields.tryGet(checkedField2) != null) {\r\n const control = model.controls.get(controlName);\r\n if (control && !isFieldProhipit) {\r\n control.isReadOnly = false;\r\n }\r\n }\r\n else {\r\n let contractSectionSect;\r\n if ((contractSectionSect = card.sections.tryGet(contractSection)) != null) {\r\n contractSectionSect.fields.set(contractField + \"ID\", null);\r\n contractSectionSect.fields.set(contractField + \"NameVirtual\", null);\r\n\r\n const control = model.controls.get(controlName);\r\n if (control) {\r\n control.isReadOnly = true;\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Если поле одно и то же, то не добавляем обработку\r\n if (checkedSection1 !== checkedSection2 && checkedField1 !== checkedField2) {\r\n checkedSection2Sect.fields.fieldChanged.add(e => {\r\n if (e.fieldName === null) return;\r\n\r\n if (checkedSection2Sect.fields.tryGet(checkedField2) != null &&\r\n checkedSection1Sect.fields.tryGet(checkedField1) != null) {\r\n\r\n const control = model.controls.get(controlName);\r\n if (control && !isFieldProhipit) {\r\n control.isReadOnly = false;\r\n }\r\n }\r\n else {\r\n let contractSectionSect;\r\n if ((contractSectionSect = card.sections.tryGet(contractSection)) != null) {\r\n contractSectionSect.fields.set(contractField + \"ID\", null);\r\n contractSectionSect.fields.set(contractField + \"NameVirtual\", null);\r\n\r\n const control = model.controls.get(controlName);\r\n if (control) {\r\n control.isReadOnly = true;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n public static GetFieldValue(card: Card, sectionName: string, fieldName: string): any\r\n {\r\n let section = card.sections.tryGet(sectionName);\r\n let field = section?.fields.tryGetField(fieldName)?.$value ?? null;\r\n return field;\r\n }\r\n\r\n /** Подсчет суммы по стикерам. */\r\n public static SumStickerAmount(filterStickerRows: CardRow[] | ArrayStorage, amountFieldName: string): number {\r\n let outsum: number = 0.0;\r\n for (let stickerArticle of filterStickerRows) {\r\n let amount = stickerArticle.getField(amountFieldName)?.$value;\r\n if (amount != null) {\r\n outsum += Number.parseFloat(amount);\r\n }\r\n }\r\n return outsum;\r\n }\r\n\r\n\r\n public static ClearSection(section: CardSection) {\r\n // чистим\r\n for (let i = section!.rows.length - 1; i >= 0; i--) {\r\n let row = section!.rows[i];\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n } \r\n else {\r\n section!.rows.remove(row);\r\n }\r\n }\r\n }\r\n \r\n /* проверка был ли контрагент когда либо в Периметре.\r\n */\r\n public static async CheckPartnerInPerimeterAsync(partnerExternalID: number | null, аccreditationPerimetrName: string, everBeen : boolean = false) {\r\n\r\n if (!partnerExternalID) {\r\n return false;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CheckPartnerInPerimeter;\r\n request.info[\"PartnerExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64);\r\n request.info[\"AccreditationPerimetrName\"] = createTypedField(аccreditationPerimetrName, DotNetType.String);\r\n request.info[\"EverBeen\"] = createTypedField(everBeen, DotNetType.Boolean);\r\n\r\n const response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful)\r\n return false;\r\n\r\n let error = response.info.Error?.$value;\r\n if (error) {\r\n await showError(error);\r\n return false;\r\n }\r\n\r\n let res: boolean = response.info.IsPartnerInPerimeter.$value;\r\n return res;\r\n\r\n }\r\n\r\n public static async IsUserInRoleAsync(userId : guid, roleID : guid)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.CheckUserInRole\r\n request.info[\"UserID\"] = createTypedField(userId, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(roleID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.build().isSuccessful)\r\n {\r\n return response.info.IsUserInRole.$value;\r\n }\r\n \r\n return false\r\n }\r\n}\r\n/* * Кнопка для копирования строк в коллекционной секции*/\r\nexport class ButtonForCopyingRows {\r\n \r\n /** Название грида, для которго добавляется кнопка*/\r\n private gridName: string;\r\n\r\n /** Название секции, к которой привязан грид*/\r\n private sectionName: string;\r\n\r\n /**\r\n * * @param gridName Название грида для которго добавляется кнопка\r\n * * @param gridName Название секции, к которой привязан грид\r\n */\r\n public constructor(gridName: string, sectionName: string) {\r\n this.gridName = gridName;\r\n this.sectionName = sectionName;\r\n }\r\n\r\n public Initialized(context: ICardUIExtensionContext) {\r\n ButtonForCopyingRows.Initialized(context, this.gridName, this.sectionName);\r\n }\r\n\r\n \r\n /** Доступность кнопки снятия выделения строк. */\r\n private static IsEnabledCopyFunc(context: ICardUIExtensionContext, grid: GridViewModel) {\r\n return (((context.card.permissions.cardPermissions & CardPermissionFlags.AllowModify)!=0 || !Guid.equals(context.card.typeId, CdCardTypes.PkRequestForMaterialsTypeID) ) \r\n && grid!.selectedRows.length>0 );}\r\n \r\n \r\n\r\n\r\n /** Инициализировать кнопку копировать для грида\r\n * * @param gridName Название грида, для которго добавляется кнопка\r\n * * @param gridName Название секции, к которой привязан грид\r\n */\r\n public static Initialized(context: ICardUIExtensionContext, gridName: string, sectionName: string, sortingField?: string) {\r\n const grid = CdUIHelper.GetUIControl(context, gridName);\r\n const section = context.card.sections.get(sectionName)!;\r\n const rowsModel = section.rows;\r\n const b = new UIButton(\r\n \"Копировать строку\",\r\n () => {\r\n grid!.selectedRows.forEach(cardRowViewModel => {\r\n let sourceRow = cardRowViewModel.row;\r\n let newRow = rowsModel.add();\r\n for (let keyValuePair of sourceRow) {\r\n let copy = keyValuePair[1]!;\r\n newRow.set(keyValuePair[0], copy);\r\n }\r\n if (sortingField)\r\n {\r\n newRow.set(sortingField,createTypedField(grid!.rows.length, DotNetType.Int32) );\r\n }\r\n newRow.rowId = Guid.newGuid();\r\n newRow.state = CardRowState.Inserted\r\n });\r\n }\r\n );\r\n let disposer: Function | null = null;\r\n b.setIsEnabled(this.IsEnabledCopyFunc(context,grid!));\r\n if (disposer == null) { \r\n disposer = reaction(() => grid!.selectedRows, () => {\r\n b.setIsEnabled(this.IsEnabledCopyFunc(context,grid!));\r\n });\r\n }\r\n \r\n grid!.rightButtons.push(b);\r\n return disposer; \r\n }\r\n\r\n /** Копировать все поля из одной строки в другую */\r\n public static CopyRow(sourceRow: CardRow, newRow: CardRow) {\r\n for (let keyValuePair of sourceRow) {\r\n let copy = keyValuePair[1]!;\r\n newRow.set(keyValuePair[0], copy);\r\n }\r\n }\r\n}","export class CdTaskTypes {\r\n\r\n static PkCompleteTypeID = \"864d7962-f321-464c-ad68-9186fb2e610c\";\r\n\r\n // из другого модуля, не удалось разделить\r\n static PkConsiderationTypeID = \"e230b87d-d837-4448-bcd3-a018acdda81b\";\r\n static PkUksApprovalTaskTypeID = \"e135de09-4f50-4d2b-b29b-11ccde5aaefc\";\r\n static PkProjectGroupApprovalTaskTypeID = \"a5d25a39-042a-4bbb-93cf-2cbbe3924fd0\";\r\n static PkGipApprovalTaskTypeID = \"5f132e2c-0e77-49c2-9cc1-6623b332ba98\";\r\n static PkOspApprovalTaskTypeID = \"f3562560-8d12-4efe-8471-57b5a726c984\";\r\n static PkDepProductApprovalTaskTypeID = \"ca4842e0-3f6f-429b-990e-4c78413e2221\";\r\n static PkExternalApprovalTaskTypeID = \"a840f4f8-433a-42fd-8428-833c162de75b\";\r\n static PkStartAcquaintanceProcessTechDocTaskTypeID = \"291aff62-8e24-4d12-9669-44d8accd3aca\";\r\n static PkExecutiveDocumentationInitializingTypeID = \"91AEA9E4-44F8-45B9-952F-35A1F989F7A3\";\r\n static PkTDComissionOnRenovationTypeID = \"FFF72896-FED2-4C89-8B1D-0300A4406A71\";\r\n static ArPreparationForSigningTypeID = \"8ae557ff-ca56-4c4e-9930-badf6bc84163\";\r\n static PkSigningTypeID = \"8D4A0809-7B22-404E-810A-C75FA461034C\";\r\n static PkPersonnelDocumentCuratorReviewingTypeID = \"8f3bf968-feb5-45e8-8bfd-ca7321fb03d7\";\r\n static PkPersonnelDocumentSigningTypeID = \"9bc786d9-dbf8-4822-bb50-9f29d98615a7\";\r\n static PkPersonnelDocumentEtkTransitionTypeID = \"6d483723-ca60-4a16-921e-3702bfdfc000\";\r\n static PkPersonnelDocumentCuratorRevocationAgreementTypeID = \"18728975-1156-40fb-ae26-43c2a896592d\";\r\n static PkPersonnelDocumentEmployeeRevocationAgreementTypeID = \"726a4a7e-4a4c-4ce4-b549-4e41650c524b\";\r\n static ArPowerOfAttorneyExecutionTaskTypeID = \"abcf2062-b636-4a83-a6c3-1015bcaa98fb\";\r\n static ArApproveUDOTypeID = \"1b494f13-3357-4b95-8511-d7737800d412\";\r\n static ArPrintingTheContractTypeID = \"37cbf2a2-8eb6-4f54-b840-6b5d7c445ba1\";\r\n static ArEditBeforeSigningTypeID = \"71facfac-a2ef-4bdb-bf86-25cd5106c164\";\r\n static ArSigningTypeID = \"451d16fc-4162-4492-a6f5-9bf0d829da53\";\r\n\r\n static PkAWCORvrBlockFillTypeID = \"4ac81e42-12f3-482d-ae23-97dc8a182f1e\";\r\n static PkAWCORvrBlockFillConfirmationTypeID = \"d3745fc1-f4b5-41b9-aebe-550f55d9bf15\";\r\n}","export class ECMDefaultCardTypes {\r\n static ContractTypeID = '335F86A1-D009-012C-8B45-1F43C2382C2D';\r\n static ContractTypeName = 'Contract';\r\n\r\n static ECMContractDocumentTypeID = '0C983EEA-1320-4E8F-9F76-4626E12A8D18';\r\n static ECMContractDocumentTypeName = 'ECMContractDocument';\r\n\r\n static ECMContractSection = '39995A27-A020-44B8-89C6-84DE99B724F8';\r\n static ECMAccountWithoutContractTypeID = '0150AA81-E6C7-4211-87E6-F1D700F58AA3';\r\n static ECMAccountContractTypeID = '2B850929-60DD-4CC7-BAC7-532D950386AD';\r\n static ECMContractTypeID = 'FDD3DCB3-29BE-4B83-BF3F-B143859FAEC8';\r\n static ECMAdditionalAgreementTypeID = 'AAAFFC98-8B45-4826-A77E-6972F21743C5';\r\n static ECMTerminationAgreementTypeID = '145EC34D-3ECC-40AF-9EF3-79E3E684AEFB';\r\n\r\n static ECMContractCancelTypeID = '1848B6EC-DEC6-4389-927F-161A5B321BCE';\r\n static ECMContractCancelTypeName = 'ECMContractCancel';\r\n\r\n static PkIncomingTypeID = '0CA52091-FD54-4E72-BFBA-B31CA18DE901';\r\n static PkIncomingTypeName = 'PkIncoming';\r\n\r\n static ArActTypeID = \"29ea1af0-4cd0-4a34-9184-8dc275672e1a\";\r\n}","import { Card, CardSection, CardRow, CardRowState,CardFileState,CardFile, CardTask,CardTaskAction } from \"tessa/cards\";\r\nimport { IControlViewModel, ICardUIExtensionContext ,ICardModel} from \"tessa/ui/cards\";\r\nimport { DotNetType, TypedField, Guid, createTypedField} from \"tessa/platform\";\r\nimport { CheckBoxViewModel, GridRowAction, GridViewModel } from \"tessa/ui/cards/controls\";\r\nimport { showMessage, showError, showNotEmpty, showLoadingOverlay} from \"tessa/ui\";\r\nimport { CdCardTypes } from \"../CdCardTypes\";\r\nimport { ValidationResult, ValidationResultBuilder, ValidationResultType } from \"tessa/platform/validation\";\r\nimport { MetadataStorage } from 'tessa';\r\nimport { UIContext, UIButton, createCardModel } from \"tessa/ui\";\r\nimport { CardNewRequest, CardService, CardRequest, CardGetFileContentRequest } from \"tessa/cards/service\";\r\nimport { ChFileCategories } from \"src/pkScripts/Helpers/ChFileCategories\";\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { CdRequestTypes } from \"../CdRequestTypes\";\r\nimport { ArrayStorage, IStorageArray } from \"tessa/platform/storage\";\r\nimport { CdEDSHelper, CustomCertData } from \"../CdEDSHelper\";\r\nimport { CdFdProcessHelper } from \"../CdFdProcessHelper\";\r\nimport { CdExtensionHelper } from \"../CdExtensionHelper\";\r\nimport { CdRequestForMaterialsSharedHelper } from \"./CdRequestForMaterialsSharedHelper\";\r\nimport { ApproversRoleID } from \"../Dictionaries/ApproversRoleID\";\r\nimport { CdUIHelper } from \"src/cdScripts/UI/CdUIHelper\";\r\nimport { CdExecutiveSchemeSharedHelper } from \"./CdExecutiveSchemeSharedHelper\";\r\nimport { IFile } from \"tessa/files\";\r\nimport { CdDocStates } from \"../CdDocStates\";\r\nimport { CdDSSHelper } from \"../CdDSSHelper\";\r\nimport { userSession } from \"common/utility\";\r\nimport { CdFileTypes } from \"../CdFileTypes\";\r\nimport { CdExecutiveSchemeTypes } from \"../CdExecutiveSchemeTypes\";\r\nimport { ChTaskTypes } from \"src/pkScripts/Helpers/ChTaskTypes\";\r\n\r\n\r\nexport class CdGeneralDocumentationClientHelper {\r\n \r\n public static PdfForPrint: string = ' (для печати).pdf';\r\n\r\n//#region Подписание\r\n\r\n /** Проверки РД */\r\n public static async TechnicalDocumentationCheckFileAsync(card: Card, file: IFile, certificate: CustomCertData | null) {\r\n let validationResult = new ValidationResultBuilder();\r\n let unsignedHash: string | null = null;\r\n \r\n if (!card.typeId || card.typeId !== CdCardTypes.TechnicalDocumentationTypeID) {\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n\r\n // проверка Qr кода\r\n await showLoadingOverlay(async () => {\r\n let stampAdded = await this.CheckQrCode(file.lastVersion.id);\r\n if (!stampAdded) {\r\n validationResult.add(ValidationResultType.Error, \"QR-код еще не проставлен.\");\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n }, \"Проверка наличия QR-кода.\");\r\n\r\n if (validationResult.items.length > 0) {\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n\r\n // проставление штампа и добавление его в карточку\r\n try {\r\n await showLoadingOverlay(async () => {\r\n // получение файла со штампом\r\n let fileWithStamp = await this.GetRdWithWorkStampAsync(\r\n card.id,\r\n file.lastVersion.id,\r\n file.id,\r\n file.name,\r\n certificate?.ownerOrganization ?? null,\r\n certificate?.ownerName ?? null,\r\n certificate?.companyAdr ?? null);\r\n\r\n // обновление файла в карточке\r\n const fileData = new File([fileWithStamp.Blob], file.name);\r\n await file.replace(fileData, false);\r\n \r\n // хеш файла со штампом\r\n unsignedHash = fileWithStamp.UnsignedHash;\r\n }, \"Проставление штампа \\\"Выдано в производство работ\\\".\");\r\n } catch (ex) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n 'Возникли ошибки при проставлении штампа \\\"Выдано в производство работ\\\".\\n' +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \" +\r\n \"либо открыв его кликом по ошибке и скопировав стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n ValidationResult.fromError(ex).items.map(x => x.message + \"\\n\" + x.details)[0]);\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n\r\n /** Подписние файлов */\r\n public static async SignFilesAsync(context: ICardUIExtensionContext, tasks: ArrayStorage, taskTypes:guid[]) {\r\n let card = context.card;\r\n let unsignedFiles: {ID: string, Hash?: string | null}[] = [];\r\n\r\n // проверка наличия завершенного задания на подписани\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (taskTypes.findIndex(x =>\r\n x.toLocaleLowerCase() === t.typeId.toLocaleLowerCase()) >= 0) &&\r\n t.action === CardTaskAction.Complete &&\r\n t.optionId === CdFdProcessHelper.Sign);\r\n if (task == null) return;\r\n\r\n let fileCategory =\r\n Guid.equals(card.typeId, CdCardTypes.TechnicalDocumentationTypeID)\r\n ? ChFileCategories.Approval\r\n : Guid.equals(card.typeId, CdCardTypes.PkExecutiveSchemeTypeID)\r\n ? ChFileCategories.ImplementingSchemes\r\n : Guid.equals(card.typeId, CdCardTypes.PkExecutiveDocumentationTypeID) ? ChFileCategories.DocumentID \r\n : ChFileCategories.RequestForMaterials;\r\n\r\n let categoryID = fileCategory.id;\r\n\r\n // список файлов на подписание\r\n let files: IFile[] = context.fileContainer.files\r\n .filter(x =>\r\n x.category &&\r\n x.category.id == categoryID &&\r\n !x.name.includes(this.PdfForPrint));\r\n if (files.length == 0) {\r\n \r\n showError('Нет файла в категории '+ fileCategory.caption +'.');\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n // для РД сразу выбираем сертификат для заполнения штампа\r\n let isRD = card.typeId == CdCardTypes.TechnicalDocumentationTypeID;\r\n let certificate: CustomCertData | null = null;\r\n if (isRD) {\r\n let selectedCert = await CdEDSHelper.GetCertificatePlatformAsync(context.model.edsProvider);\r\n if (!selectedCert.Certificate) {\r\n context.cancel = true;\r\n throw new Error('Не выбран сертификат.');\r\n }\r\n certificate = selectedCert.Certificate;\r\n }\r\n for (let file of files) {\r\n let technicalDocumentationResult = await CdGeneralDocumentationClientHelper.TechnicalDocumentationCheckFileAsync(\r\n card,\r\n file,\r\n certificate);\r\n if (technicalDocumentationResult.Result.items && technicalDocumentationResult.Result.items.length > 0) {\r\n showNotEmpty(technicalDocumentationResult.Result.build());\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n unsignedFiles.push({ID: file.id, Hash: technicalDocumentationResult.UnsignedHash});\r\n }\r\n\r\n // прикрепленная подпись\r\n let isAttachedSignature = await this.CheckIsAttachedSignatureAsync(card, context.fileContainer.files);\r\n\r\n // DSS подписание (с выходом из метода при успешном подписании)\r\n if (!isAttachedSignature) {\r\n let isDSS = await this.SignFilesByDSSAsync(\r\n context,\r\n userSession.UserID,\r\n categoryID,\r\n unsignedFiles.map(x => x.ID)\r\n );\r\n\r\n if (isDSS) {\r\n return;\r\n }\r\n }\r\n \r\n // CAdES подписание\r\n let edsResult = await CdEDSHelper.SignFilesAsync(\r\n context.fileContainer,\r\n context.model.edsProvider,\r\n card,\r\n unsignedFiles,\r\n !isAttachedSignature\r\n );\r\n\r\n if (!edsResult.isSuccessful) {\r\n context.cancel = true;\r\n showNotEmpty(edsResult.build());\r\n return;\r\n }\r\n\r\n // Заполнение специальных полей\r\n await this.ExecutiveDocumentationAdditionalSignFileLogicAsync(card);\r\n await this.ExecutiveSchemeAdditionalSignFileLogicAsync(card, task.typeId);\r\n await this.RequestForMaterialsAdditionalSignFileLogicAsync(card, task.rowId);\r\n }\r\n\r\n /** Проверить необходимость подписания прикрепленной подписью. */\r\n public static async CheckIsAttachedSignatureAsync(card: Card, files: readonly IFile[]): Promise {\r\n let isAttachedSignature: boolean =\r\n (card.typeId == CdCardTypes.PkExecutiveDocumentationTypeID &&\r\n card.sections.has('PkExecutiveDocumentationInfo') &&\r\n card.sections.get('PkExecutiveDocumentationInfo')?.fields.has('isExternalBuilder') &&\r\n card.sections.get('PkExecutiveDocumentationInfo')?.fields.get('isExternalBuilder') == true &&\r\n files.find(x => x.lastVersion.signatures.length > 0) == undefined) ||\r\n\r\n (card.typeId == CdCardTypes.PkExecutiveSchemeTypeID &&\r\n card.sections.has('PkExecutiveDocumentationInfo') &&\r\n card.sections.get('PkExecutiveDocumentationInfo')?.fields.has('SigningTypeID') &&\r\n card.sections.get('PkExecutiveDocumentationInfo')?.fields.get('SigningTypeID') == 1 &&\r\n card.sections.has('PkExecutiveSchemeInfo') &&\r\n card.sections.get('PkExecutiveSchemeInfo')?.fields.has('IsRenovation') &&\r\n card.sections.get('PkExecutiveSchemeInfo')?.fields.get('IsRenovation') == true &&\r\n card.sections.get('PkExecutiveSchemeInfo')?.fields.has('ExecutiveSchemeTypeID') &&\r\n card.sections.get('PkExecutiveSchemeInfo')?.fields.get('ExecutiveSchemeTypeID') == CdExecutiveSchemeTypes.GeodeticSchemeType)\r\n\r\n ? true : false;\r\n\r\n return isAttachedSignature\r\n }\r\n\r\n /** Подписание файлов через DSS. */\r\n public static async SignFilesByDSSAsync(\r\n context: ICardUIExtensionContext,\r\n userID: string,\r\n categoryID: string | null,\r\n files: string[]): Promise {\r\n let card: Card = context.card;\r\n\r\n // получаем данные для подписания\r\n const signingInfo = await CdDSSHelper.GetSigningInfoAsync(card, userID, false, true, true); \r\n \r\n // если есть данные по DSS\r\n if (signingInfo.employeeGuid1C != null && signingInfo.dssCspType != null) {\r\n for (let file of card.files.filter(x => files.includes(x.rowId))) {\r\n // подписываем файлы через DSS\r\n await CdDSSHelper.SignFilesByDssAsync(\r\n context,\r\n userID,\r\n signingInfo.externalUserGuid,\r\n signingInfo.employeeGuid1C,\r\n signingInfo.dssCspType,\r\n signingInfo.certInfo,\r\n file.name,\r\n categoryID);\r\n }\r\n \r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** Добавить роль для печатной формы в ИД. */\r\n private static async ExecutiveDocumentationAdditionalSignFileLogicAsync(card: Card) {\r\n if (card.typeId != CdCardTypes.PkExecutiveDocumentationTypeID) {\r\n return;\r\n }\r\n \r\n let pdciSection = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pdciSection) {\r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n switch (stateID) {\r\n case CdDocStates.OnApprovalSubcontractor.id:\r\n case CdDocStates.OnSigningSubcontractor.id:\r\n card.info['SignRoleID'] = 0;\r\n break;\r\n\r\n case CdDocStates.OnApprovalContractor.id:\r\n case CdDocStates.OnSigningContractor.id:\r\n card.info['SignRoleID'] = 1;\r\n break;\r\n\r\n case CdDocStates.OnApprovalGPExecutorWorks.id:\r\n case CdDocStates.OnSigningGPExecutorWorks.id:\r\n card.info['SignRoleID'] = 2;\r\n break;\r\n\r\n case CdDocStates.OnApprovalGP.id:\r\n case CdDocStates.OnSigningGP.id:\r\n card.info['SignRoleID'] = 3;\r\n break;\r\n\r\n case CdDocStates.OnApprovalAuthorSupervision.id:\r\n case CdDocStates.OnSigningAuthorSupervision.id:\r\n card.info['SignRoleID'] = 4;\r\n break;\r\n\r\n case CdDocStates.OnApprovalCustomer.id:\r\n case CdDocStates.OnSigningCustomer.id:\r\n card.info['SignRoleID'] = 5;\r\n break;\r\n\r\n case CdDocStates.OnApprovalOperatingOrganization.id:\r\n case CdDocStates.OnSigningOperatingOrganization.id:\r\n card.info['SignRoleID'] = 6;\r\n break;\r\n\r\n case CdDocStates.OnApprovalASEngeneer.id:\r\n card.info['SignRoleID'] = 8;\r\n break;\r\n\r\n default:\r\n card.info['SignRoleID'] = -1;\r\n }\r\n }\r\n }\r\n \r\n /** Добавить роль для печатной формы в ИС. */\r\n private static async ExecutiveSchemeAdditionalSignFileLogicAsync(card: Card, taskTypeID: string) {\r\n if (card.typeId != CdCardTypes.PkExecutiveSchemeTypeID) {\r\n return;\r\n }\r\n\r\n if (taskTypeID == ChTaskTypes.PkSignerAgreementTypeID) {\r\n card.info['WithRole'] = true;\r\n }\r\n }\r\n \r\n /** Добавить роль для печатной формы в заявках на материалы. */\r\n private static async RequestForMaterialsAdditionalSignFileLogicAsync(card: Card, taskID: string) {\r\n if (card.typeId != CdCardTypes.PkRequestForMaterialsTypeID) {\r\n return;\r\n }\r\n\r\n card.info['WithRole'] = true;\r\n card.info['RoleTaskID'] = createTypedField(taskID, DotNetType.Guid);;\r\n }\r\n\r\n /** Проверка на наличие Qr кода у файла. */\r\n private static async CheckQrCode(versionRowID: string) {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdCheckQrCodeFile;\r\n request.info[\"FileVersionID\"] = createTypedField(versionRowID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n\r\n if (!response.info!.Result ||\r\n !response.info!.Result.$value) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Сформировать штамп для РД */\r\n public static async GetRdWithWorkStampAsync(\r\n cardID: string,\r\n versionRowID: string,\r\n fileID: string,\r\n fileName: string,\r\n certCompany: string | null,\r\n certOwner: string | null,\r\n certAdr: string | null) {\r\n let unsignedHash: string | null = null;\r\n\r\n const cardGetFileContentRequest = new CardGetFileContentRequest();\r\n cardGetFileContentRequest.fileTypeName = CdFileTypes.GetInWorkStampType;\r\n cardGetFileContentRequest.cardId = cardID;\r\n cardGetFileContentRequest.versionRowId = versionRowID;\r\n cardGetFileContentRequest.fileId = fileID;\r\n cardGetFileContentRequest.fileName = fileName;\r\n cardGetFileContentRequest.info[\"CertCompany\"] = createTypedField(certCompany, DotNetType.String);\r\n cardGetFileContentRequest.info[\"CertOwner\"] = createTypedField(certOwner, DotNetType.String);\r\n cardGetFileContentRequest.info[\"CertAdr\"] = createTypedField(certAdr, DotNetType.String);\r\n cardGetFileContentRequest.info[\"Date\"] = createTypedField(new Date(), DotNetType.DateTime);\r\n cardGetFileContentRequest.info[\"WithHash\"] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const cardGetFileContentResponse = await CardService.instance.getFileContent(cardGetFileContentRequest);\r\n\r\n if (!cardGetFileContentResponse.validationResult.isSuccessful) {\r\n throw new Error('Ошибка при получении файла со штампом (' + versionRowID + '): ' + cardGetFileContentResponse.validationResult.build().toString());\r\n }\r\n\r\n if (cardGetFileContentResponse.content == null ||\r\n cardGetFileContentResponse.size === 0) {\r\n throw new Error('Ошибка при получении файла со штампом (' + versionRowID + '): Вернулся пустой файл.');\r\n }\r\n\r\n // TODO TIV: В вебе не работает Response.Info\r\n //unsignedHash = cardGetFileContentResponse.info.UnsignedHash;\r\n\r\n return {Blob: cardGetFileContentResponse.content, UnsignedHash:unsignedHash};\r\n }\r\n\r\n//#endregion\r\n\r\n public static async FillTableApprovers(card: Card, roles: ApprovementRoles[] | null | undefined, matchingSectionName: string, matchingRolesSectionName: string)\r\n {\r\n let mSection = card.sections.tryGet(matchingSectionName);\r\n let rSection = card.sections.tryGet(matchingRolesSectionName);\r\n if (!mSection)\r\n {\r\n return;\r\n }\r\n if (mSection.rows.length != 0)\r\n {\r\n for (let i = mSection.rows.length - 1; i >= 0; i--) { \r\n if (mSection.rows[i].state === CardRowState.Inserted)\r\n mSection.rows.splice(i, 1);\r\n else mSection.rows[i].state = CardRowState.Deleted;\r\n } \r\n } \r\n //очищаем полностью роли\r\n if (rSection) {\r\n for (let j = rSection.rows.length - 1; j >= 0; j--) {\r\n let row = rSection.rows[j];\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n } \r\n else\r\n {\r\n rSection.rows.remove(row);\r\n }\r\n }\r\n }\r\n\r\n if (roles == null) return;\r\n if (roles.length > 0){\r\n roles.forEach(role => {\r\n const esmSectionRow = new CardRow(); \r\n esmSectionRow.rowId = Guid.newGuid(); \r\n esmSectionRow.set(\"RoleID\", role.RoleID, DotNetType.Guid);\r\n esmSectionRow.set(\"RoleName\", role.RoleName, DotNetType.String);\r\n esmSectionRow.set(\"SpecialRoleID\", role.SpecialRoleID, DotNetType.Guid);\r\n esmSectionRow.set(\"SpecialRoleName\", role.SpecialRoleName, DotNetType.String);\r\n esmSectionRow.set(\"LegalEntityID\",null, DotNetType.Guid);\r\n esmSectionRow.set(\"LegalEntityExternalID\", null, DotNetType.Int32);\r\n esmSectionRow.set(\"LegalEntityName\", null, DotNetType.String);\r\n esmSectionRow.set(\"Order\", role.DefaultOrder, DotNetType.Int32);\r\n esmSectionRow.state = CardRowState.Inserted;\r\n mSection!.rows.push(esmSectionRow);\r\n });\r\n } \r\n } \r\n\r\n public static FieldsObjectsLogic(card: Card, model: ICardModel) {\r\n let ediSection = card.sections.tryGet('PkExecutiveDocumentationInfo'); \r\n\r\n // Заполнение ЖК для при смене объекта\r\n const objects = model.controls.get('Objects') as GridViewModel;\r\n if (objects && ediSection && ediSection.fields.has('ResidentialComplexID')) {\r\n objects.rowInitializing.add(e => {\r\n e.row.fieldChanged.add(e1 => {\r\n if (e1.fieldName === 'ResidentialComplexID') {\r\n let residentialComplexID = e1.fieldValue as guid | undefined;\r\n if (residentialComplexID && ediSection) {\r\n ediSection.fields.set('ResidentialComplexID', createTypedField(residentialComplexID, DotNetType.Guid));\r\n }\r\n } else if (e1.fieldName === 'RegionID') {\r\n let regionID = e1.fieldValue as guid | undefined;\r\n if (regionID && ediSection) {\r\n ediSection.fields.set('RegionID', createTypedField(regionID, DotNetType.Guid));\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n public static async GetRoles(card: Card, ...additionalFilters: ((roles: ApprovementRoles[])=>void)[])\r\n {\r\n let roles: ApprovementRoles[] = []; \r\n \r\n try\r\n {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetApprovementRoles;\r\n request.info[\"CardTypeID\"] = createTypedField(card.typeId, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n let result: [{RoleID: any, RoleName: any, SpecialRoleID: any, SpecialRoleName: any, DefaultOrder: any, ApprovementRolesCriteria: IStorageArray[], ApprovementRolesActiveCriteria: IStorageArray[]}] = response.info.Roles;\r\n if (result.length>0)\r\n {\r\n for (let index = 0; index < result.length; index++) {\r\n let role = result[index];\r\n roles.push( {\r\n RoleID: role.RoleID!.$value\r\n , RoleName: role.RoleName!.$value\r\n , SpecialRoleID: role.SpecialRoleID!=null?role.SpecialRoleID.$value:null\r\n , SpecialRoleName: role.SpecialRoleName!=null?role.SpecialRoleName.$value:null \r\n , DefaultOrder: role.DefaultOrder!.$value\r\n , ApprovementRolesCriteria: role.ApprovementRolesCriteria==null?null:role.ApprovementRolesCriteria.map(x=> { \r\n let a: ApprovementRolesCriteria = \r\n {\r\n RowID: x[\"RowID\"]!.$value,\r\n SectionName: x[\"SectionName\"]!.$value,\r\n FdCriteriaOperatorID : null,\r\n FieldName : x[\"FieldName\"]!.$value,\r\n Value: x[\"Value\"]!.$value,\r\n }; \r\n return a;\r\n })\r\n , ApprovementRolesActiveCriteria: role.ApprovementRolesActiveCriteria==null?null:role.ApprovementRolesActiveCriteria.map(x=> { \r\n let a: ApprovementRolesCriteria = \r\n {\r\n RowID: x[\"RowID\"]!.$value,\r\n SectionName: x[\"SectionName\"]!.$value,\r\n FieldName : x[\"FieldName\"]!.$value,\r\n FdCriteriaOperatorID : x[\"FdCriteriaOperatorID\"]!.$value,\r\n Value: x[\"Value\"]!.$value,\r\n }; \r\n return a;\r\n })\r\n });\r\n }\r\n }\r\n \r\n this.FilterRolesByActiveCriteria(card, roles);\r\n }\r\n catch (err)\r\n {\r\n showError(err);\r\n } \r\n additionalFilters.forEach(filter=>filter(roles))\r\n return roles;\r\n } \r\n\r\n private static async FilterRolesByActiveCriteria(card: Card, roles: ApprovementRoles[])\r\n {\r\n for (let i = roles.length - 1; i >= 0; i--)\r\n {\r\n if (roles[i].ApprovementRolesActiveCriteria == null || roles[i].ApprovementRolesActiveCriteria?.length == 0)\r\n {\r\n continue;\r\n }\r\n\r\n // проверка в зависимости от оператора \r\n roles[i]!.ApprovementRolesActiveCriteria!.forEach(item => {\r\n let operatorId = item.FdCriteriaOperatorID;\r\n switch (operatorId)\r\n {\r\n case (FdCriteriaOperators.NonEquals as number):\r\n case (FdCriteriaOperators.Equals as number):\r\n {\r\n let section = card.sections.tryGet(item.SectionName);\r\n if (!section|| !section.fields.has(item.FieldName))\r\n {\r\n return;\r\n }\r\n\r\n var value = section!.fields.get(item.FieldName)!.toString().toLowerCase();\r\n if (value != item.Value!.toLowerCase() && operatorId == (FdCriteriaOperators.Equals as number))\r\n {\r\n roles.splice(i, 1);\r\n }\r\n else if (value == item.Value!.toLowerCase() && operatorId == (FdCriteriaOperators.NonEquals as number))\r\n {\r\n roles.splice(i, 1);\r\n }\r\n\r\n break;\r\n }\r\n\r\n default:\r\n {\r\n break;\r\n }\r\n }\r\n });\r\n } \r\n }\r\n\r\n private static async GetApprovers(card: Card, roles: ApprovementRoles[] | null)\r\n {\r\n let roleIds = roles!.map(x => x.RoleID);\r\n let roleApprovers: RoleApprovers[] = [];\r\n let direction : guid|null = null;\r\n let investProjectInfoSection: CardSection | undefined = card.sections.tryGet('PkInvestProjectInfo'); \r\n if (investProjectInfoSection)\r\n direction = investProjectInfoSection.fields.tryGet(\"DirectionID\");\r\n \r\n try\r\n {\r\n const request = new CardRequest();\r\n let rolesList = roleIds.map(x=>createTypedField(x, DotNetType.Guid));\r\n request.requestType = CdRequestTypes.GetApprovementParticipants;\r\n request.cardId = card.id;\r\n request.info[\"DirectionID\"] = direction==null?null:createTypedField(direction, DotNetType.Guid);\r\n request.info[\"Roles\"] = rolesList\r\n\r\n // находим все необходимые поля из критериев ролей согласования\r\n let approvementRolesCriteria : ApprovementRolesCriteria[] = [];\r\n if (roles)\r\n {\r\n let rolesCriteria = roles!.filter(r => r.ApprovementRolesCriteria && r.ApprovementRolesCriteria.length>0)!.map(x => x.ApprovementRolesCriteria)!.filter(x=>x!.length>0);\r\n let totalApprovementRolesCriteria = (rolesCriteria!=null && rolesCriteria.length>0)?rolesCriteria!.reduce(self=>self):[];\r\n \r\n for (let i = 0; i < totalApprovementRolesCriteria!.length; i++) {\r\n let cur_criteria = totalApprovementRolesCriteria![i];\r\n if (approvementRolesCriteria.some(x => x!.SectionName == cur_criteria.SectionName && x.FieldName == cur_criteria.FieldName))\r\n continue;\r\n\r\n else \r\n { \r\n approvementRolesCriteria.push(cur_criteria);\r\n }\r\n }\r\n }\r\n\r\n // добавляем все в запрос\r\n for (let i = 0; i < approvementRolesCriteria!.length; i++)\r\n {\r\n let item = approvementRolesCriteria[i]; \r\n var key = item.SectionName+\"_\"+item.FieldName;\r\n \r\n let section = card.sections.tryGet(item.SectionName);\r\n if (section)\r\n { \r\n if (section.fields.has(item.FieldName))\r\n {\r\n request.info[key] = section.fields.get(item.FieldName)!+\"\";\r\n }\r\n }\r\n }\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n \r\n let participants = response.info.Participants;\r\n if (!participants || participants!.length == 0) return;\r\n if (!roleIds) return;\r\n roleIds.forEach(role => {\r\n let roleParticipants = participants.filter(x=>x.RoleID!.$value==role);\r\n\r\n if (!roleParticipants || roleParticipants!.length==0) return; \r\n let approversList:{ID:guid,Name:string}[] = []\r\n for (let k = 0; k < roleParticipants.length; k++) { \r\n approversList.push({ID:roleParticipants[k][\"ParticipantID\"]!.$value,Name:roleParticipants[k][\"ParticipantName\"]!.$value}); \r\n }\r\n roleApprovers.push( {\r\n RoleID: role\r\n , OrderNumber: createTypedField(null, DotNetType.String)\r\n , OrderDate: createTypedField(null, DotNetType.DateTime)\r\n , Approvers: approversList\r\n } );\r\n });\r\n if (await this.GetApproversByRdDivisionRoles(card,roleIds,roleApprovers)!=true) return;\r\n if (await this.GetApproversLegalEntityInfo(roleApprovers)!=true) return;\r\n }\r\n catch (err)\r\n {\r\n showError(err);\r\n } \r\n return roleApprovers;\r\n } \r\n\r\n\r\n public static async GetApproversLegalEntityInfo(roleApprovers:RoleApprovers[])\r\n {\r\n if (!roleApprovers|| roleApprovers.length==0) return true;\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetLegalEntity; \r\n\r\n request.info[\"Approvers\"] = roleApprovers\r\n .map(x=> x.Approvers)\r\n .reduce((x,y)=>x.concat(y),[])\r\n .map(x=>x.ID)\r\n .filter((val, i, arr) => arr.findIndex(x => x === val) === i)\r\n .map(x=>`('${x}')`)\r\n .join(',');\r\n\r\n if (request.info[\"Approvers\"]==='') return true;\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n \r\n let userInfoList = response.info.UsersInfo;\r\n if (!userInfoList || userInfoList!.length == 0) return false;\r\n\r\n roleApprovers.forEach(ra => {\r\n ra.Approvers.forEach(appr => {\r\n let userInfo = userInfoList.find(x=>x.RoleID!.$value==appr.ID && (x.RoleKCKID || (x.RolePosition && x.RolePosition!==\"\")));\r\n if (userInfo)\r\n {\r\n if(userInfo.RoleKCKID) appr.OrganizationKCKID = userInfo.RoleKCKID!.$value\r\n if(userInfo.RoleKCKExternalID) appr.OrganizationKCKExternalID = userInfo.RoleKCKExternalID!.$value\r\n if(userInfo.RoleKCKName) appr.OrganizationKCKName = userInfo.RoleKCKName!.$value\r\n if(userInfo.RoleEntityID) appr.LegalEntityID = userInfo.RoleEntityID!.$value\r\n if(userInfo.RoleEntityName) appr.LegalEntityName = userInfo.RoleEntityName!.$value\r\n if(userInfo.RolePosition) appr.Position = userInfo.RolePosition!.$value\r\n }\r\n })\r\n }) \r\n\r\n return true;\r\n }\r\n\r\n\r\n public static async GetApproversByRdDivisionRoles(card: Card, roles: guid[], roleApprovers:RoleApprovers[])\r\n { \r\n if (!Guid.equals(card.typeId, CdCardTypes.PkRequestForMaterialsTypeID)) return true;\r\n let objectList = CdExtensionHelper.GetObjectListFromPkObjectListSection(card);\r\n if (!objectList|| objectList.length == 0) return false; \r\n\r\n let rolesByDivision = roles.filter(x=>CdRequestForMaterialsSharedHelper.RolesFromRdDivision.some(r=>Guid.equals(r.guid, x)));\r\n\r\n for (let index = 0; index < rolesByDivision.length; index++) {\r\n const roleID = rolesByDivision[index];\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetUsersForTable;\r\n request.info[\"IdpTeamRoleExtID\"] = createTypedField((CdRequestForMaterialsSharedHelper.RolesFromRdDivision.find(x=>Guid.equals(roleID, x.guid))!.number), DotNetType.Int32);\r\n request.info[\"ObjectList\"] = objectList;\r\n\r\n const response = await CardService.instance.request(request);\r\n showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n let users: [{RoleID, RoleName}] = response.info.Users;\r\n let approversList:{ID:guid,Name:string}[] = []\r\n for (let i = 0; i < users.length; i++) {\r\n let userInfo = users[i];\r\n if (userInfo.RoleName.$value.length === 0) continue;\r\n approversList.push({ID:userInfo.RoleID.$value,Name:userInfo.RoleName.$value}); \r\n }\r\n let roleApprover = roleApprovers.find(x => x.RoleID == roleID);\r\n if (roleApprover != null)\r\n roleApprover.Approvers.concat(approversList);\r\n else\r\n roleApprovers.push({\r\n RoleID: roleID\r\n , OrderNumber: createTypedField(null, DotNetType.String)\r\n , OrderDate: createTypedField(null, DotNetType.DateTime)\r\n , Approvers: approversList\r\n });\r\n } \r\n return true;\r\n }\r\n\r\n /**Получает роли согласования по запросу, заполняет таблицу ими, затем получает и заполняет согласующих по этим ролям\r\n * !При использовании фильтров на роли не присваивать массиву новую ссылку *(ar=ar.filter)\r\n */\r\n public static async FillApprovers(card: Card, ...additionalFilters: ((roles: ApprovementRoles[])=>void)[]) {\r\n let roles = await this.GetRoles(card, ...additionalFilters);\r\n await this.FillTableApprovers(card, roles, 'PkApprovementMatching', 'PkApprovementMatchingRoles');\r\n let roleIds = roles!.map(x => x.RoleID);\r\n this.GetApprovers(card.clone(), roles).then(\r\n (result => this.SetApprovers(card, roleIds, result, 'PkApprovementMatching', 'PkApprovementMatchingRoles'))\r\n );\r\n }\r\n\r\n /** Заполнение юридического лица в ТЧ #25698 */\r\n public static ApprovementMatchingRolesChanged(model: ICardModel, matchingSection: string, matchingRolesSection: string) {\r\n let edrSection = model.card.sections.tryGet(matchingRolesSection);\r\n let edmSection = model.card.sections.tryGet(matchingSection);\r\n if (!edrSection || !edmSection) return;\r\n edrSection.rows.forEach(r => {\r\n this.AddApproverFieldChanged(r,model,matchingSection);\r\n });\r\n edrSection.rows.collectionChanged.add(e => { \r\n if (e.added.length > 0) {\r\n let row = e.added[0];\r\n this.AddApproverFieldChanged(row,model,matchingSection);\r\n } \r\n });\r\n\r\n let matchingTable = model.controls.get(\"Matching\") as GridViewModel;\r\n \r\n matchingTable.rowValidating.add(e => {\r\n let matchingRowID = e.row.rowId;\r\n let section = model.card.sections.get(matchingRolesSection);\r\n\r\n if (!section || !matchingRowID) {\r\n return;\r\n }\r\n\r\n let cardRow = new CardRow();\r\n \r\n section.rows.forEach(r => {\r\n if (r.tryGet(\"MatchingRowID\") == matchingRowID && r.state != CardRowState.Deleted) {\r\n cardRow = r;\r\n }\r\n });\r\n\r\n this.FillLegalEntityField(cardRow ?? new CardRow(), model.card, matchingRowID, matchingSection);\r\n });\r\n }\r\n\r\n public static AddApproverFieldChanged(row: CardRow, model: ICardModel, matchingSection: string)\r\n {\r\n row.fieldChanged.add(() => {\r\n \r\n if (! row.tryGet(\"RoleKCKExternalID\") \r\n || !row.tryGet(\"RoleKCKID\") \r\n || !row.tryGet(\"RoleEntityID\") \r\n || !row.tryGet(\"RoleEntityName\") \r\n || !row.tryGet(\"RoleKCKName\")) return; \r\n { \r\n let matchingRowID = row.tryGetField('MatchingRowID');\r\n if (matchingRowID) {\r\n this.FillLegalEntityField(row, model.card, matchingRowID.$value, matchingSection); \r\n }\r\n }\r\n }); \r\n }\r\n\r\n /** Проверить таблицу согласующих */\r\n protected static CheckApprovers(context: ICardUIExtensionContext, matchingSectionName: string, matchingRolesSectionName: string, excludeRolesFromCheck : T[] = []) {\r\n try {\r\n let card = context.model.card;\r\n\r\n // Проверить что в карточке имеются секции\r\n let edmSection = card.sections.tryGet(matchingSectionName);\r\n let edrSection = card.sections.tryGet(matchingRolesSectionName);\r\n if (!edmSection || !edrSection) {\r\n return false;\r\n }\r\n var rSectionRows = edrSection.rows.filter(x => x.state != CardRowState.Deleted);\r\n var mSectionRows = edmSection.rows.filter(x => x.state != CardRowState.Deleted);\r\n\r\n if (rSectionRows.length == 0 || mSectionRows.length == 0)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить согласующих');\r\n return false;\r\n }\r\n\r\n if (excludeRolesFromCheck!=null && excludeRolesFromCheck.length>0)\r\n {\r\n mSectionRows = mSectionRows.filter(x=>excludeRolesFromCheck.some(r=> x.tryGet(\"RoleID\")==r))\r\n }\r\n\r\n let rolesToFill: string[] = [];\r\n mSectionRows\r\n .filter(x =>\r\n x.tryGet(\"RoleID\") != CdExecutiveSchemeSharedHelper.GetRoles()[3].IntID\r\n )\r\n .forEach(r => {\r\n let roleID: number | null = r.tryGet(\"RoleID\");\r\n if (r.tryGet(\"RoleID\") != CdRequestForMaterialsSharedHelper.ApprovementRoles.AdditionalApproversID && rSectionRows.find(x => x.tryGet(\"MatchingRowID\") == r.rowId) == null) {\r\n if (roleID == 4) {\r\n // Авторский надзор проверяется, если стоит флаг \"Работы выполнены с отклонениями от РД\". TES-5659\r\n let executiveSchemeInfo: CardSection | undefined = card.sections.tryGet('PkExecutiveSchemeInfo');\r\n if (executiveSchemeInfo) {\r\n let performedWithDeviation: boolean | null = executiveSchemeInfo.fields.tryGet('PerformedWithDeviation');\r\n if (performedWithDeviation !== null && performedWithDeviation !== undefined && performedWithDeviation) {\r\n rolesToFill.push(r.tryGet(\"RoleName\"))\r\n }\r\n }\r\n }\r\n else {\r\n rolesToFill.push(r.tryGet(\"RoleName\"))\r\n }\r\n }\r\n });\r\n \r\n if (rolesToFill.length > 0)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить согласующих для следующих ролей: '+ rolesToFill.join(', '));\r\n }\r\n\r\n return true;\r\n } catch (ex) {\r\n context.validationResult.add(ValidationResultType.Error, 'Ошибка при проверке согласующих.\\nТекст ошибки: ' + ex.message + ' ' + ex.stack);\r\n return false;\r\n }\r\n }\r\n\r\n public static CheckApprovementTableOrder(context: ICardUIExtensionContext) {\r\n let card = context.card;\r\n let edmSection = card.sections.tryGet('PkApprovementMatching');\r\n if (edmSection &&\r\n edmSection.rows.findIndex(x => x.state === CardRowState.Modified ||\r\n x.state === CardRowState.Inserted) >= 0) {\r\n this.GetRoles(card).then(result => {\r\n let step = 0;\r\n result!.sort((a, b) => a.DefaultOrder - b.DefaultOrder);\r\n for (let i = 0; i < result!.length; i++) {\r\n let roleIDIndex = edmSection!.rows.findIndex(x => x.has('RoleID') &&\r\n x.get('RoleID') === result![i].RoleID);\r\n if (roleIDIndex>=0){\r\n edmSection!.rows[roleIDIndex].set('Order', createTypedField(step, DotNetType.Int32));\r\n step++;\r\n } \r\n }\r\n }\r\n );\r\n } \r\n }\r\n\r\n\r\n public static async ConfirmApproversChangesDialog(invalidApprovers: InvalidApprovers[]) {\r\n let errorMessage = \"Ошибка при проверке согласующих. Пожалуйста, обратитесь к администратору.\"\r\n let result = true;\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null ) {\r\n showError(errorMessage);\r\n return;\r\n }\r\n\r\n let meta = MetadataStorage.instance.cardMetadata;\r\n const dialogsType = meta.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n showError(errorMessage);\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'ConfirmApproversChanges');\r\n if (!dialogForm) {\r\n showError(errorMessage);\r\n return;\r\n }\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n let section = _form.cardModel.card.sections.getOrAdd(\"PkInvalidApprovers\");\r\n for (let i = 0; i < invalidApprovers.length; i++)\r\n {\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"Role\", createTypedField(invalidApprovers[i].Role, DotNetType.String));\r\n newRow.set(\"Invalid\", createTypedField(invalidApprovers[i].Invalid, DotNetType.String));\r\n newRow.set(\"Valid\", createTypedField(invalidApprovers[i].Valid, DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n section.rows.push(newRow);\r\n } \r\n },\r\n [\r\n new UIButton('Изменить согласующих', async (btn) => { \r\n result = false;\r\n btn.close();\r\n }),\r\n new UIButton('Оставить без изменений', (btn) => {\r\n result = true;\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n return result;\r\n }\r\n \r\n\r\n protected static async GetInvalidApprovers(card: Card, roleApprovers: RoleApprovers[]|undefined|null, matchingSectionName: string, matchingRolesSectionName: string )\r\n {\r\n let invalidApprovers: InvalidApprovers[] = [];\r\n let errorMessage = \"\";\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet(matchingSectionName);\r\n let edRolesSection: CardSection | undefined = card.sections.tryGet(matchingRolesSectionName);\r\n if (!edMatchingSection) return; \r\n if (!edRolesSection || edRolesSection.rows.length==0)\r\n {\r\n errorMessage = \"Согласующие не заполнены\";\r\n return errorMessage;\r\n }\r\n if (roleApprovers==undefined)\r\n return;\r\n\r\n edMatchingSection.rows.forEach(row=>{\r\n let roleID = row.tryGetField(\"RoleID\")!.$value;\r\n if (!roleID) return;\r\n let roleApprover = roleApprovers!.find(x=>x.RoleID==roleID);\r\n if (!roleApprover) return;\r\n let matchingRoles = edRolesSection!.rows.filter(x=>x.tryGetField(\"MatchingRowID\")!.$value==row.rowId).map(x=> ({RoleID:x.tryGetField(\"RoleID\")!.$value,RoleName: x.tryGetField(\"RoleName\")!.$value }) );\r\n if (roleApprover.Approvers.findIndex(x=>matchingRoles.findIndex(mr=>mr.RoleID===x.ID)==-1)!=-1)\r\n {\r\n invalidApprovers.push({\r\n RoleID: roleID\r\n , Role: row.tryGetField(\"RoleName\")!.$value\r\n , Valid:roleApprover.Approvers.map(x=>x.Name).join(\";\")\r\n , Invalid: matchingRoles.map(x=>x.RoleName as string).join(\";\")\r\n });\r\n }\r\n }); \r\n \r\n return invalidApprovers;\r\n }\r\n\r\n /** Проверить добавление нового согласующего в ТЧ */\r\n public static CheckAddNewMatchingRoles(context: ICardUIExtensionContext, matchingSectionName: string, matchingRolesSectionName: string) {\r\n try {\r\n let card = context.model.card;\r\n let edmSection = card.sections.tryGet(matchingSectionName);\r\n let edrSection = card.sections.tryGet(matchingRolesSectionName);\r\n if (edmSection && edrSection &&\r\n (edmSection.rows.findIndex(x =>\r\n x.state === CardRowState.Modified) >= 0 ||\r\n edrSection.rows.findIndex(x =>\r\n x.state === CardRowState.Inserted ||\r\n x.state === CardRowState.Modified) >= 0)) {\r\n context.validationResult.add(ValidationResultType.Error, 'Сохраните карточку перед тем как продолжить');\r\n return false;\r\n }\r\n return true;\r\n } catch (ex) {\r\n context.validationResult.add(ValidationResultType.Error, 'Ошибка при проверке добавления новых согласующих.\\nТекст ошибки: ' + ex.message + ' ' + ex.stack);\r\n return false;\r\n }\r\n }\r\n\r\n protected static async SetApprovers(card: Card, roles: T[],roleApprovers: RoleApprovers[]|null|undefined, matchingSectionName: string, matchingRolesSectionName: string)\r\n { \r\n let edRolesSection: CardSection | undefined = card.sections.tryGet(matchingRolesSectionName);\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet(matchingSectionName);\r\n\r\n // удаляем согласующих, если строка роли была удалена\r\n if (!edRolesSection || !edMatchingSection) return; \r\n for (let j = edRolesSection.rows.length - 1; j >= 0; j--) {\r\n let row = edRolesSection.rows[j]; \r\n if (!edMatchingSection.rows.some(x =>\r\n x.state != CardRowState.Deleted &&\r\n row.has('MatchingRowID') &&\r\n row.tryGet('MatchingRowID') === x.rowId &&\r\n x.has('RoleID'))) \r\n {\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n else\r\n {\r\n edRolesSection.rows.remove(row);\r\n }\r\n } \r\n }\r\n\r\n roles.forEach(role => {\r\n if (!edRolesSection || !edMatchingSection) return;\r\n for (let j = edRolesSection.rows.length - 1; j >= 0; j--) {\r\n let row = edRolesSection.rows[j]; \r\n let edmRow = edMatchingSection.rows.find(x =>\r\n x.state != CardRowState.Deleted &&\r\n row.has('MatchingRowID') &&\r\n row.tryGet('MatchingRowID') === x.rowId &&\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === role);\r\n if (!edmRow) {\r\n continue;\r\n }\r\n else\r\n {\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n else\r\n {\r\n edRolesSection.rows.remove(row);\r\n }\r\n } \r\n }\r\n\r\n let row = edMatchingSection.rows.find(x=>x.tryGetField('RoleID')!.$value === role && x.state!= CardRowState.Deleted);\r\n if (!row) return;\r\n \r\n let currentRoleApprover = roleApprovers!.find(x=>x.RoleID===role)\r\n if (currentRoleApprover==null) return;\r\n row.set('OrderNumber', currentRoleApprover.OrderNumber);\r\n row.set('OrderDate', currentRoleApprover.OrderDate);\r\n currentRoleApprover.Approvers.forEach(approver => {\r\n\r\n let newRow = new CardRow(); \r\n \r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"MatchingRowID\", createTypedField(row!.rowId, DotNetType.Guid));\r\n newRow.set(\"RoleID\", createTypedField(approver.ID, DotNetType.Guid));\r\n newRow.set(\"RoleName\", createTypedField(approver.Name, DotNetType.String));\r\n\r\n if (approver.OrganizationKCKID) {\r\n newRow.set(\"RoleKCKID\", createTypedField(approver.OrganizationKCKID, DotNetType.Guid)); \r\n row!.set(\"LegalEntityID\", createTypedField(approver.OrganizationKCKID, DotNetType.Guid)); \r\n }\r\n if (approver.OrganizationKCKName) {\r\n newRow.set(\"RoleKCKName\", createTypedField(approver.OrganizationKCKName, DotNetType.String)); \r\n row!.set(\"LegalEntityName\", createTypedField(approver.OrganizationKCKName, DotNetType.String)); \r\n }\r\n if (approver.OrganizationKCKExternalID) {\r\n newRow.set(\"RoleKCKExternalID\", createTypedField(approver.OrganizationKCKExternalID, DotNetType.Int64)); \r\n row!.set(\"LegalEntityExternalID\", createTypedField(approver.OrganizationKCKExternalID, DotNetType.Int64)); \r\n }\r\n if (approver.LegalEntityID) newRow.set(\"RoleEntityID\", createTypedField(approver.LegalEntityID, DotNetType.Guid));\r\n if (approver.LegalEntityName) newRow.set(\"RoleEntityName\", createTypedField(approver.LegalEntityName, DotNetType.String));\r\n if (approver.Position) newRow.set(\"RolePosition\", createTypedField(approver.Position, DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n card.sections.get(matchingRolesSectionName)!.rows.push(newRow);\r\n }); \r\n\r\n }); \r\n }\r\n\r\n public static MatchingVisabilityLogic (context: ICardUIExtensionContext){\r\n let card : Card = context.model.card;\r\n if (!card.sections.tryGet(\"PkObjectList\"))\r\n return;\r\n let matchingControl : IControlViewModel | undefined = context.model.controls.get(\"Matching\");\r\n if (!matchingControl)\r\n return;\r\n let matchingTable = matchingControl as GridViewModel;\r\n matchingTable.rowInitializing.add(async e =>{\r\n if (!this.CheckObjectsAreFilled(card)){\r\n if (card.typeId == CdCardTypes.PkExecutiveDocumentationTypeID)\r\n showMessage(\"Для заполнения таблицы согласования выберите объект\");\r\n if (card.typeId == CdCardTypes.PkExecutiveSchemeTypeID)\r\n showMessage(\"Для заполнения таблицы подписания выберите объект\");\r\n e.cancel = true;\r\n } \r\n else if(e.row.has(\"RoleID\") && e.row.get(\"RoleID\") == ApproversRoleID.Customer)\r\n { \r\n let objectList = card.sections.tryGet(\"PkObjectList\");\r\n if (context.card.hasChanges() && objectList && objectList.rows.some(r => r.state != CardRowState.None && r.has(\"ObjectID\")))\r\n {\r\n showMessage(\"Перед заполнением согласующих данной роли, сохраните карточку\");\r\n e.cancel = true;\r\n }\r\n \r\n let isExternalBuilder = CdUIHelper.GetUIControl(context, \"isExternalBuilder\"); \r\n let approversControl = e.rowModel?.controls.get(\"Approvers\");\r\n if (!approversControl) return;\r\n let approversTable = approversControl as GridViewModel;\r\n\r\n approversTable!.rowInvoked.add(async ee => {\r\n if (!isExternalBuilder || isExternalBuilder.isChecked === false) return;\r\n let currentRow = ee.row\r\n if (ee.action === GridRowAction.Inserted)\r\n { \r\n \r\n let pkExecutiveDocumentationRolesSection = card.sections.getOrAdd(\"PkExecutiveDocumentationRoles\");\r\n ee.cancel = true;\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid(); \r\n newRow.set(\"RoleID\", createTypedField(\"11111111-1111-1111-1111-111111111111\", DotNetType.Guid));\r\n if (await CdGeneralDocumentationClientHelper.addExternalBuilderApproverDialog(newRow)) \r\n {\r\n newRow.set(\"MatchingRowID\", e.row.rowId, DotNetType.Guid); \r\n newRow.state = CardRowState.Inserted;\r\n pkExecutiveDocumentationRolesSection!.rows.push(newRow);\r\n }\r\n }\r\n if (ee.action === GridRowAction.Opening){ \r\n \r\n ee.cancel = true; \r\n if (await CdGeneralDocumentationClientHelper.addExternalBuilderApproverDialog(currentRow)) \r\n currentRow.state = CardRowState.Modified;\r\n }\r\n\r\n }); \r\n }\r\n });\r\n }\r\n\r\n public static async addExternalBuilderApproverDialog(approverRow: CardRow): Promise {\r\n \r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return false;\r\n }\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'AddExternalBuilderApproverDialog');\r\n if (!dialogForm) {\r\n return false;\r\n }\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n let result = false;\r\n const windowCardModel = createCardModel(response.card, response.sectionRows); \r\n let sectionRow = windowCardModel.card.sections.getOrAdd(\"PkExternalBuilderApproverVirtual\").fields; \r\n if (approverRow)\r\n {\r\n if (approverRow.has(\"RoleName\")) sectionRow.set(\"RoleName\", createTypedField(approverRow.get(\"RoleName\"), DotNetType.String));\r\n if (approverRow.has(\"RolePosition\")) sectionRow.set(\"RolePosition\", createTypedField(approverRow.get(\"RolePosition\"), DotNetType.String));\r\n if (approverRow.has(\"RoleKCKID\")) sectionRow.set(\"PartnerID\", createTypedField(approverRow.get(\"RoleKCKID\"), DotNetType.Guid)); \r\n if (approverRow.has(\"RoleKCKExternalID\")) sectionRow.set(\"PartnerExternalID\", createTypedField(approverRow.get(\"RoleKCKExternalID\"), DotNetType.Int64));\r\n if (approverRow.has(\"RoleKCKName\")) sectionRow.set(\"PartnerName\", createTypedField(approverRow.get(\"RoleKCKName\"), DotNetType.String));\r\n }\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel, \r\n null,\r\n [\r\n new UIButton('Cохранить', async (btn) => {\r\n let msg = \"\";\r\n if (sectionRow.get(\"RoleName\") == null) msg += \"Поле \\\"Согласующий\\\" обязательно для заполнения!\\r\\n\";\r\n if (sectionRow.get(\"PartnerID\") == null) msg += \"Поле \\\"Организация\\\" обязательно для заполнения!\\r\\n\";\r\n\r\n if (msg !== \"\") \r\n {\r\n showError(\"Для заполнения таблицы подписания выберите объект\");(msg);\r\n return;\r\n }\r\n approverRow.set(\"RoleName\", createTypedField(sectionRow.get(\"RoleName\"), DotNetType.String));\r\n approverRow.set(\"RolePosition\", createTypedField(sectionRow.get(\"RolePosition\"), DotNetType.String));\r\n approverRow.set(\"RoleKCKID\", createTypedField(sectionRow.get(\"PartnerID\"), DotNetType.Guid));\r\n approverRow.set(\"RoleKCKExternalID\", createTypedField(sectionRow.get(\"PartnerExternalID\"), DotNetType.Int64));\r\n approverRow.set(\"RoleKCKName\", createTypedField(sectionRow.get(\"PartnerName\"), DotNetType.String));\r\n\r\n result = true; \r\n btn.close();\r\n })\r\n ]\r\n );\r\n return result;\r\n }\r\n\r\n /** Проверка после завершении задания */\r\n public static async CheckFieldsAfterTaskComplete(context: ICardUIExtensionContext, tasks: ArrayStorage,checkTaskTypes: guid[], checkTaskOptions: guid[]\r\n , categoryList: (guid|null)[], excludeRolesFromCheck?: guid[], taskTypesSigning?: guid[]) {\r\n let deletedTaskIndex = tasks.findIndex(x => x.state === CardRowState.Deleted);\r\n if (deletedTaskIndex >= 0) {\r\n let checkAddedFiles: boolean = await this.CheckAddedFiles(context, 1,checkTaskTypes,checkTaskOptions,categoryList);\r\n let checkAddNewMatchingRoles: boolean = this.CheckAddNewMatchingRoles(context,'PkApprovementMatching','PkApprovementMatchingRoles');\r\n \r\n if (!checkAddedFiles ||\r\n !checkAddNewMatchingRoles \r\n ) {\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n\r\n deletedTaskIndex = tasks.findIndex(x =>\r\n x.state === CardRowState.Deleted &&\r\n (checkTaskTypes.find(xt=>xt===x.typeId)!=null) &&\r\n (checkTaskOptions.find(xt=>xt===x.optionId)!=null));\r\n \r\n if (deletedTaskIndex >= 0) {\r\n\r\n\r\n let checkContentFile: boolean = await CdUIHelper.CheckContentFileAsync(context.model.card);\r\n let checkApprovers: boolean = this.CheckApprovers(context,'PkApprovementMatching','PkApprovementMatchingRoles', excludeRolesFromCheck);\r\n\r\n if (!checkContentFile) {\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n //убираем проверку актуальности согласующих\r\n // let roles = (await this.GetRoles(context.model.card))!.map(x=>x.RoleID); \r\n\r\n // var approvers = await this.GetApprovers(context.model.card,roles);\r\n // if (approvers!.length>0)\r\n // {\r\n // let invalidApprovers = await this.GetInvalidApprovers(context.model.card,approvers,'PkApprovementMatching','PkApprovementMatchingRoles');\r\n // if (invalidApprovers!.length>0)\r\n // { \r\n // let result = await this.ConfirmApproversChangesDialog(invalidApprovers as InvalidApprovers[])\r\n // if (result==undefined)\r\n // {\r\n // context.cancel = true;\r\n // return;\r\n // }\r\n // else if (result as boolean == false) {\r\n // context.cancel = true;\r\n // this.SetApprovers(context.uiContext!.cardEditor!.cardModel!.card,roles.filter(x=>(invalidApprovers as InvalidApprovers[]).findIndex(ia=>ia.RoleID==x)!=-1)\r\n // ,approvers\r\n // ,'PkApprovementMatching','PkApprovementMatchingRoles')\r\n \r\n // return;\r\n // }\r\n \r\n // }\r\n // }\r\n\r\n if (!checkApprovers) {\r\n context.cancel = true;\r\n return;\r\n } \r\n } \r\n if (taskTypesSigning!=null && taskTypesSigning.length>0)\r\n await this.SignFilesAsync(context, tasks, taskTypesSigning);\r\n }\r\n\r\n public static Base64ToBlob(base64Data, contentType) {\r\n contentType = contentType || '';\r\n let sliceSize = 1024;\r\n let byteCharacters = atob(base64Data);\r\n let bytesLength = byteCharacters.length;\r\n let slicesCount = Math.ceil(bytesLength / sliceSize);\r\n let byteArrays = new Array(slicesCount);\r\n for (let sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\r\n let begin = sliceIndex * sliceSize;\r\n let end = Math.min(begin + sliceSize, bytesLength);\r\n let bytes = new Array(end - begin);\r\n for (let offset = begin, i = 0 ; offset < end; ++i, ++offset) {\r\n bytes[i] = byteCharacters[offset].charCodeAt(0);\r\n }\r\n byteArrays[sliceIndex] = new Uint8Array(bytes);\r\n }\r\n return new Blob(byteArrays, { type: contentType });\r\n }\r\n\r\n /** Проверка файлов\r\n * from: 0 - ui, 1 - задание */\r\n public static async CheckAddedFiles(context: ICardUIExtensionContext, from: number,checkTaskTypes: guid[], checkTaskOptions: guid[], categoryList: (guid|null)[]) {\r\n let card: Card = context.model.card;\r\n let result: boolean = true;\r\n\r\n switch (from) {\r\n // Проверяемые расширения файлов\r\n case 0:\r\n const availibleFileExtensions: string[] = [ 'DOCX', 'DOC', 'XLSX', 'XLS', 'PDF', 'SGN' ];\r\n for (let i = 0; i < card.files.length; i++) {\r\n let file = card.files[i];\r\n if (file.state === CardFileState.Deleted ||\r\n file.state === CardFileState.None ||\r\n file.name.toLowerCase() === 'история согласования.html') continue;\r\n let correctFile: boolean = false;\r\n for (let j = 0; j < availibleFileExtensions.length; j++) {\r\n let ext = availibleFileExtensions[j];\r\n if (file.name.toUpperCase().indexOf('.' + ext) !== -1) {\r\n correctFile = true;\r\n break;\r\n }\r\n }\r\n if (!correctFile) {\r\n showError('Приложенные файлы должены быть в формате: ' + availibleFileExtensions.join(', '));\r\n context.cancel = true;\r\n return true;\r\n }\r\n }\r\n break;\r\n // Проверка наличия файлов в категориях\r\n case 1:\r\n // Проверка, что все файлы сохранены\r\n if (context.card.tasks.findIndex(x =>\r\n x.state === CardRowState.Deleted &&\r\n checkTaskTypes.find(xt=>xt===x.typeId)!=null) >= 0 &&\r\n card.files.findIndex(x =>\r\n x.state === CardFileState.Inserted ||\r\n x.state === CardFileState.Modified ||\r\n x.state === CardFileState.ModifiedAndReplaced ||\r\n x.state === CardFileState.Replaced) >= 0) {\r\n context.validationResult.add(ValidationResultType.Error, 'Пожалуйста, сохраните карточку перед тем как продолжить.');\r\n return false;\r\n }\r\n // Проверка файлов в категориях\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if ( !pdciSection) break;\r\n \r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n if (!stateID) break;\r\n for (let i = 0; i < context.card.tasks.length; i++) {\r\n let task = context.card.tasks[i];\r\n if (task.state !== CardRowState.Deleted ||\r\n !task.optionId) continue;\r\n \r\n if (checkTaskTypes.findIndex(x=>task.typeId.toLowerCase()===x) >= 0 &&\r\n checkTaskOptions.findIndex(x=>task.optionId!.toLowerCase()===x) >= 0) { \r\n \r\n for (let j = 0; j < categoryList.length; j++) {\r\n let categoryId = categoryList[j]; \r\n\r\n let fileIndex = card.files.findIndex(x =>\r\n x.categoryId !== null &&\r\n x.categoryId.toLowerCase() === categoryId!.toLowerCase());\r\n if (fileIndex === -1) {\r\n let category = ChFileCategories.FileCategories.find(x => x.id === categoryId);\r\n if (category)\r\n context.validationResult.add(ValidationResultType.Error, 'Загрузите файл в категорию \"' + category.caption + '\"');\r\n result = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n\r\n return result;\r\n} \r\n\r\n /** Проверить что подписанный файл изменялся и пользователь согласен с изменениями */\r\n public static async CheckEditSignedFile(card: Card) {\r\n let hasSign: boolean = false;\r\n for (let i = 0; i < card.files.length; i++) {\r\n let file: CardFile = card.files[i];\r\n if ((file.state === CardFileState.Deleted ||\r\n file.state === CardFileState.ModifiedAndReplaced ||\r\n file.state === CardFileState.Replaced) &&\r\n !hasSign) {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.SignInfo;\r\n request.info[\"OnlySignAvailability\"] = createTypedField(true, DotNetType.Boolean);\r\n request.info[\"FileID\"] = createTypedField(file.rowId, DotNetType.Guid);\r\n request.info[\"TypeID\"] = createTypedField(card.typeId, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.build().isSuccessful) {\r\n let result: boolean | null = response.info!.Result.$value;\r\n if (result) {\r\n hasSign = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (hasSign) {\r\n let dialogResult: boolean = confirm('Внимание! При редактировании документа электронные подписи станут недействительными. Документ потребуется подписывать повторно. Подтверждаете необходимость отредактировать файл?');\r\n if (!dialogResult) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n /** Заполнение юридического лица в ТЧ #25698 */\r\n public static FillLegalEntityField(row: CardRow, card: Card, matchingRowID: string, matchingSectionName:string) {\r\n let section = card.sections.tryGet(matchingSectionName);\r\n if (!section) return;\r\n let mRow = section.rows.find(x => x.rowId.toLowerCase() === matchingRowID.toLowerCase());\r\n if (!mRow) return;\r\n if (!row.has('RoleKCKExternalID') || !row.has('RoleKCKID') || !row.has('RoleKCKName') ||\r\n row.tryGet('RoleKCKExternalID') === -1 || row.tryGet('RoleKCKID') === '00000000-0000-0000-0000-000000000000' || row.tryGet('RoleKCKName') === '' || row.tryGet('RoleKCKExternalID') === null) {\r\n mRow.set('LegalEntityExternalID', null);\r\n mRow.set('LegalEntityID', null);\r\n mRow.set('LegalEntityName', null);\r\n }\r\n else {\r\n mRow.set('LegalEntityExternalID', createTypedField(row.tryGet('RoleKCKExternalID'), DotNetType.Int64));\r\n mRow.set('LegalEntityID', createTypedField(row.tryGet('RoleKCKID'), DotNetType.Guid));\r\n mRow.set('LegalEntityName', createTypedField(row.tryGet('RoleKCKName'), DotNetType.String));\r\n }\r\n }\r\n\r\n /**Скрываем таблицу подписантов, если объект не заполнен */\r\n public static CheckObjectsAreFilled(card: Card) : boolean{\r\n if (card.sections.tryGet(\"PkObjectList\")!.rows.length > 0)\r\n return true;\r\n else\r\n return false;\r\n }\r\n\r\n /**Ищем последнюю запись в строковой секции */\r\n public static GetLast(card: Card) : boolean{\r\n if (card.sections.tryGet(\"PkObjectList\")!.rows.length > 0)\r\n return true;\r\n else\r\n return false;\r\n }\r\n}\r\n\r\n\r\nexport interface RoleApprovers{\r\n RoleID: T;\r\n OrderNumber: TypedField;\r\n OrderDate: TypedField;\r\n Approvers: {ID:guid,Name:string,OrganizationKCKID?:guid,OrganizationKCKName?:string,OrganizationKCKExternalID?:number,LegalEntityID?:guid,LegalEntityName?:string,Position?:string}[]\r\n} \r\n\r\nexport interface InvalidApprovers{\r\n RoleID: T;\r\n Role: string;\r\n Invalid: string;\r\n Valid: string;\r\n} \r\n\r\nexport interface ApprovementRoles{\r\n RoleID: guid;\r\n RoleName: string;\r\n SpecialRoleID: guid;\r\n SpecialRoleName: string;\r\n DefaultOrder: number;\r\n ApprovementRolesCriteria: ApprovementRolesCriteria[] | null;\r\n ApprovementRolesActiveCriteria: ApprovementRolesCriteria[] | null;\r\n} \r\n\r\nexport interface ApprovementRolesCriteria{\r\n RowID: guid;\r\n SectionName: string; \r\n FdCriteriaOperatorID: number | null;\r\n FieldName: string;\r\n Value: string;\r\n} \r\n\r\nexport class Objects {\r\n public ObjectsId: Array;\r\n}\r\nexport class FillMatching{\r\n public CopiedID: DotNetType.Guid;\r\n public ID: DotNetType.Guid;\r\n public IsExists: boolean\r\n}\r\n\r\n\r\n\r\nenum FdCriteriaOperators\r\n{\r\n Equals = 0,\r\n NonEquals = 1,\r\n GreatThan = 2,\r\n LessThan = 3,\r\n GreatOrEquals = 4,\r\n LessOrEquals = 5,\r\n IsNull = 6,\r\n IsNotNull = 7,\r\n Between = 8,\r\n Contains = 9,\r\n StartsWith = 10,\r\n EndsWith = 11,\r\n IsTrue = 12,\r\n IsFalse = 13,\r\n InRole = 14,\r\n ContainsAll = 15,\r\n ContainsAny = 16,\r\n NotContainsAny = 17,\r\n NotInRole = 18,\r\n ContainsInTable = 19,\r\n ContainsInRow = 20\r\n}\r\n","export class ChRequestTypes {\r\n\r\n static PkChangeDiadocFolderInCards = \"1DFF1F94-531D-4B6E-A6AA-78AFEB026929\";\r\n static SendMailIntoSupport = \"DA59F130-84B0-4E66-90C8-A42C506FD01F\";\r\n static ArActContractPartnersForFlag = \"6D57AD72-87DF-4C20-9256-9B203C250B97\";\r\n static GetRegionCityAndProjectByObject = \"4C90AAE7-AA20-4A4C-80B0-FB9412107BE6\";\r\n static ArActContractArticleOhr = \"DC143C58-31ED-47A3-AC6F-55AC1C3AAA30\";\r\n static ArActContractArticleIdp = \"618C013B-C7E1-4FD8-817B-C473ADE6ACB9\";\r\n static PkGetBookkeepers = \"919C1F1E-B53C-4DED-8B94-FE441D80BD94\";\r\n static ArDocumentIDPVirtualInfo = \"664940FD-44F8-4FD6-BE91-1883359C6351\";\r\n static ArDocumentKind = \"EB01185C-1EEA-47CE-A3F9-1E7B5BE8193E\";\r\n static GetCaseOfTheTopLevel = \"2D0CA46B-6C82-4E2A-AAC6-0ECB78E86C93\";\r\n static GetInstructionUrl = \"A4146DC3-FF46-4B3A-8BA1-BEE35322B3A7\";\r\n static PkProtocolAssignmentTable = \"4A67E514-F5A0-4CA1-A8CD-E74C61A18EB0\";\r\n static GetIsAdministrator = \"C7399F82-1D49-4A3B-808F-11118AF29B75\";\r\n static GetCrmDeal = \"B0409732-D624-4D53-97FB-8C4629171CD9\";\r\n static GetPacketDocsInfo = \"33063FD5-FDF3-44CD-8D27-BF030DCB3EB8\";\r\n static PkOutgoingMailSenderRequest = \"EFDBAB98-7517-40F1-9539-DB19A4306D02\";\r\n static PkGetExecutionDateByDocKind = \"1B484AE3-25E1-473B-8AF3-74C92BE7ACF2\";\r\n static CheckUserInRole = \"27458E64-F356-4BB7-9F99-7C96A05F24FB\";\r\n static PkProtocolGetRole = \"9D21500A-1E9F-4C71-9228-D8A78032ADB5\";\r\n static GetPayerByContract = \"D423A0C4-C578-486E-80FF-F8B1C2F91FF1\";\r\n static ChUpdateOutgoingStamp = \"9B0F9F11-4C61-408E-8A59-C334391A6F67\";\r\n static AttachCorrespondencePrintForm = \"77A9F5B1-BB3E-4931-A8BA-CB65B125EA9D\";\r\n static ChSendEmailNotificationToClient = \"EE856DC2-C812-43A3-AB32-75F9314A2B39\";\r\n static PkUpdateDataInMDS = \"9C489DCE-15DD-402B-8021-0AEF018C87BC\";\r\n}","export class ChTaskTypes {\r\n\r\n static PkPerformerTaskTypeID = \"2b11f708-441f-462e-b6ab-0cba1a077d47\";\r\n static PkRejectApprovalTypeID = \"fc8fb668-5ca4-4c9a-81b6-ed3092425e4c\";\r\n static PkStartAgreementProcessTypeID = \"71eff303-6c52-44b7-9c50-fb161cc0875b\";\r\n static PkRdndUdoTaskTypeID = \"568721da-cc11-44c7-b0c5-d8a47872550c\";\r\n static PkConsiderationTypeID = \"e230b87d-d837-4448-bcd3-a018acdda81b\";\r\n static PkUksApprovalTaskTypeID = \"e135de09-4f50-4d2b-b29b-11ccde5aaefc\";\r\n static PkProjectGroupApprovalTaskTypeID = \"a5d25a39-042a-4bbb-93cf-2cbbe3924fd0\";\r\n static PkGipApprovalTaskTypeID = \"5f132e2c-0e77-49c2-9cc1-6623b332ba98\";\r\n static PkOspApprovalTaskTypeID = \"f3562560-8d12-4efe-8471-57b5a726c984\";\r\n static PkDepProductApprovalTaskTypeID = \"ca4842e0-3f6f-429b-990e-4c78413e2221\";\r\n static PkExternalApprovalTaskTypeID = \"a840f4f8-433a-42fd-8428-833c162de75b\";\r\n static PkApproversAgreementTypeID = \"945b9439-0008-4d22-a3c3-003d1f05ae1b\";\r\n static PkApprovalTerminationTypeID = \"915a02b9-ea8f-4f28-924c-24218ad560B7\";\r\n static PkApprovalLawyerTypeID = \"84a30847-dcae-42d9-805d-33fe6d6dd0aa\";\r\n static PkApprovalOfTopsTypeID = \"96b2afe8-3988-417b-a10b-bbd1899945fb\";\r\n static PkOSSEmployeeCommentTypeID = \"9e3e26af-a5e8-4cc4-88fd-b095c979d7b1\";\r\n static PkRefundDDYTypeID = \"820b46bc-7d6d-4613-94d3-9618f9549c65\";\r\n static PkRevaluationTypeID = \"5d7c5f5d-6c35-4249-9e98-83acb35a524b\";\r\n static PkSendingByPostTypeID = \"11c33723-f8a2-4961-83ae-575f284db265\";\r\n static PkEditTypeID = \"a0844e7b-c0c2-4627-9d8c-4693c7a8d043\";\r\n static PkReviewLawyerTypeID = \"a98c998f-c277-4389-b6ef-1eec6025aeab\";\r\n static PkCheckCustomerDecisionTypeID = \"dbe8c80d-0a21-4ddb-8cf4-96e146594be9\";\r\n static PkRevaluationForPDKPTypeID = \"0ac01ea0-f316-476e-83cf-b2e4e3c96428\";\r\n static PkApprovalByCoordinator = \"22fe6d78-ed4c-4eae-aee1-161245e53748\";\r\n static PkStartPerformanceProcessTaskTypeID = \"4AF6051D-14BE-457C-941D-224344E1A7D2\";\r\n static PkSignerAgreementTypeID = \"DB4EE9F6-979A-46C6-B1E2-337299C0E2E8\";\r\n static PkAcceptPackageOfDocumentsTypeID = \"64f1df62-f840-4d32-b637-88c4bfb27412\";\r\n static PkSendAPackageOfDocumentsTypeID = \"4f71b6e1-969e-4bb8-a4e1-37a19c303767\";\r\n static PkRegisterFirstTastTypeID = \"cfc05f7a-b38f-4275-ba09-cf2f1161150b\";\r\n static PkReviewOutgoingTypeID = \"1876268f-ba04-4305-84af-4a01acaeffdc\";\r\n static PkSignTypeSelectingTypeID = \"b8063ff9-14b3-47c3-8087-9f5472e34565\";\r\n static PkSendToContractorTypeID = \"de059f98-a7f1-4f33-b45e-57bedb4eaf5d\";\r\n static PkSignerDiadocTypeID = \"64DF2A78-2445-41F1-A199-1C328A718034\";\r\n }","import { FileType } from \"tessa/files\";\r\n\r\n// Типы файлов\r\nexport class CdFileTypes {\r\n public static DefaultFileType: FileType = new FileType('ab387c69-fd62-0655-bbc3-b879e433a143', '$CardTypes_TypesNames_File');\r\n public static VirtualAdded: FileType = new FileType('ab387c69-fd62-0655-bbc3-b879e433a143', 'VirtualAddedFile');\r\n static EnhanceSignType = 'EnhanceSign';\r\n static GetInWorkStampType = 'GetInWorkStamp';\r\n static GetCSVReportType = 'GetCSVReport';\r\n static GetFileForPrintType = 'GetFileForPrint';\r\n static GetCompiledPdfType = \"GetCompiledPdf\";\r\n static GetZipArchiveType = \"GetZipArchive\";\r\n static GetExecutiveDocumentationRegistryFile = \"GetExecutiveDocumentationRegistryFile\";// Файл \"Реестр ИД\". TES-7477 \r\n static GetZipArchiveWithoutDirectoriesType = \"GetZipArchiveWithoutDirectories\";\r\n}","module.exports = tessa.tessa.ui.views.content;","module.exports = React;","module.exports = tessa.tessa.ui.files;","export class ApproversRoleID {\r\n public static Contractor = 1;\r\n public static AuthorSupervision = 4;\r\n public static Customer = 5;\r\n public static OperatingOrganization = 6;\r\n public static PTOEngeneer = 7;\r\n public static ASEngeneer = 8;\r\n public static DevelopersRepresentative = 9; // Представитель Застройщика\r\n}","export class CdCardFlagsInfo {\r\n\r\n /// \r\n /// Возможность сохранить карточку \"Партнеры КСК\"\r\n /// \r\n static PkCanSavePartnersKckCard = \"CanSavePartnersKckCard\";\r\n\r\n /// \r\n /// Возможность запустить задачу на исполнение\r\n /// \r\n static PkExecutionTaskFlag = \"CanExecutionTask\";\r\n\r\n /// \r\n /// Возможность запустить задачу на ознакомление\r\n /// \r\n static PkAcquaintanceTaskFlag = \"CanAcquaintanceTask\";\r\n\r\n /// \r\n /// Возможность сделать карточку неактуальной\r\n /// \r\n static PkNotRelevantFlag = \"CanNotRelevant\";\r\n\r\n /// \r\n /// Возможность создания изменения (ОРД)\r\n /// \r\n static PkCreateChangesOrdFlag = \"CanCreateChangesORD\";\r\n\r\n /// \r\n /// Возможность возвращать на доработку\r\n /// \r\n static PkRecallForRevisionFlag = \"CanRecallForRevision\";\r\n\r\n /// \r\n /// Возможность создать карточку на основании\r\n /// \r\n static PkCreatedBasedFlag = \"CanCreatedBased\";\r\n\r\n /// \r\n /// Возможность создать копию карточки\r\n /// \r\n static PkCopyCardFlag = \"CanCopyChCard\";\r\n\r\n /// \r\n /// Возможность редактировать регистрационный номер\r\n /// \r\n static PkEditRegistrationNumberFlag = \"CanEditRegistrationNumber\";\r\n\r\n /// \r\n /// Возможность обьединять дубликаты ИДП\r\n /// \r\n static PkCanMergeDuplicatesIDP = \"CanMergeDuplicatesIDP\";\r\n\r\n}","export class CdDssCspType {\r\n public ID: number;\r\n\r\n public Name: string;\r\n\r\n public Caption: string;\r\n\r\n constructor(\r\n id: number,\r\n name: string,\r\n caption: string\r\n ) {\r\n this.ID = id;\r\n this.Name = name;\r\n this.Caption = caption;\r\n }\r\n\r\n /** КЭП. */\r\n static Qualified = new CdDssCspType(0, \"Qualified\", \"КЭП\");\r\n\r\n /** НЭП. */\r\n static NonQualified = new CdDssCspType(1, \"NonQualified\", \"НЭП\");\r\n}","/** Типы исходящего письма*/\r\nexport enum PkOutgoingKinds\r\n{\r\n /** Ответ на обращение физ. лица*/\r\n ResponseToIndRequestId = \"d88d9f5e-69f7-402d-8a60-1688b6b4ff09\",\r\n\r\n /** Ответ на обращение физ. лица*/\r\n ResponseToIndRequestName = \"Ответ на обращение физ. лица\",\r\n\r\n /** Уведомление о результатах тендера*/\r\n NotificationOfTenderResultsId = \"cb3f5129-20ef-4b3f-bea0-e98c824353b5\",\r\n\r\n /** Уведомление о результатах тендера*/\r\n NotificationOfTenderResultsName = \"Уведомление о результатах тендера\",\r\n\r\n /** Отзыв доверенности*/\r\n PowerOfAttorneyRevocationId = \"076589c7-4606-4d39-b642-e98715cac574\",\r\n\r\n /** Отзыв доверенности*/\r\n PowerOfAttorneyRevocationName = \"Отзыв доверенности\",\r\n\r\n /** Претензия*/\r\n ClaimId = \"e18efb86-b363-494a-8871-586a59b60d0d\",\r\n\r\n /** Претензия*/\r\n ClaimName = \"Отзыв доверенности\"\r\n}","module.exports = tessa.tessa.cards.extensions;","\r\nimport { CdFdTaskTypes } from \"../CdFdTaskTypes\"\r\nimport { CdFdProcessHelper } from \"../CdFdProcessHelper\"\r\nimport { ChFileCategories } from \"src/pkScripts/Helpers/ChFileCategories\"\r\n\r\nexport class CdRequestForMaterialsSharedHelper { \r\n static ApprovementRoles =\r\n {\r\n GeneralDirectorID : \"b33ec830-0d48-4ce6-a6dc-7413000f8691\",\r\n GeneralDirectorName :\"Генеральный директор\",\r\n\r\n DirectorConstructionID : \"8111f857-c86e-495b-a9ef-9dda2372d467\",\r\n DirectorConstructionName :\"Директор строительства\",\r\n\r\n DirectorSMUID : \"87539e21-3121-48a2-9b9f-566375e39d9b\",\r\n DirectorSMUName :\"Директор СМУ\",\r\n\r\n SupplyDivisionLeadSpecialistID : \"b59a21f4-0849-4107-b8f2-b46c04865dc7\",\r\n SupplyDivisionLeadSpecialistName :\"Ведущий специалист отдела снабжения\",\r\n\r\n PTOEngeneerID : \"5925dd24-39f4-4e26-9f1c-4bc0ad8a13df\",\r\n PTOEngeneerName :\"Инженер ПТО\",\r\n\r\n PTOManagerID : \"39d226bf-2d1f-44cf-9538-008e7e9e8a52\",\r\n PTOManagerName :\"Начальник ПТО\",\r\n\r\n PTOManagerSKBID : \"0db1f335-65f0-4d7e-bca8-a975fb20e9ae\",\r\n PTOManagerSKBName :\"Начальник ПТО по СКБ и КП УГС\",\r\n\r\n SupplyDivisionID : \"fcfa4ac8-aadc-4370-a8c2-d2b75e4ff03e\",\r\n SupplyDivisionName :\"Отдел снабжения\",\r\n\r\n DirectorRenovationID : \"6e68a42a-f72e-492d-966a-0de9cd22375a\",\r\n DirectorRenovationName :\"Заместитель генерального директора по строительству (объекты реновации)\",\r\n\r\n DirectorCommercialID : \"d2d4567c-7d4b-486c-82df-8ae034372cdd\",\r\n DirectorCommercialName :\"Заместителя генерального директора - директор по строительному производству (коммерческие объекты)\",\r\n\r\n AdditionalApproversID : \"4006f16c-32a9-409a-b135-9ffb5e758402\",\r\n AdditionalApproversName :\"Дополнительные согласующие\",\r\n }\r\n\r\n static RolesFromRdDivision: Array<{guid,number}> = [\r\n {guid:CdRequestForMaterialsSharedHelper.ApprovementRoles.DirectorConstructionID,number:15}\r\n ,{guid:CdRequestForMaterialsSharedHelper.ApprovementRoles.DirectorSMUID,number:29}\r\n ,{guid:CdRequestForMaterialsSharedHelper.ApprovementRoles.PTOEngeneerID,number:64}\r\n ]; \r\n\r\n static CheckFileCategoryList = [ChFileCategories.RequestForMaterials.id]\r\n\r\n static ApproverTaskStoreInfo =\r\n {\r\n TaskStartProcessOptionsList: [CdFdProcessHelper.PkSendForSigning,CdFdProcessHelper.PkSendForResigning], \r\n TaskStartProcessTypesList : [CdFdTaskTypes.PkSignRequestForMaterialsInitializingTypeID,CdFdTaskTypes.PkSignRequestForMaterialsToReworkTypeID] ,\r\n TaskSignTypesList : [CdFdTaskTypes.PkSignRequestForMaterialsSigningTypeID,CdFdTaskTypes.PkSignRequestForMaterialsEngeneerPTOSigningTypeID]\r\n }\r\n}\r\n\r\n","import { DotNetType, createTypedField } from 'tessa/platform';\r\nimport { showLoadingOverlay, showNotEmpty } from 'tessa/ui';\r\nimport { getFileNameAndExtension, selectFileCerts } from 'tessa/ui/cards/controls';\r\nimport { CardGetFileContentRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { CdRequestTypes } from './CdRequestTypes';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { Card, CardFileState, ICAdESProvider } from 'tessa/cards';\r\nimport { showSelectionDialog } from 'tessa/ui/uiHost';\r\nimport { CertData, FileContainer, FileSignatureEventType, IFile, IFileVersion } from 'tessa/files';\r\nimport { SelectedValue } from 'tessa/views';\r\nimport { CdFileTypes } from './CdFileTypes';\r\nimport { CdGeneralDocumentationClientHelper } from './Cards/CdGeneralDocumentationClientHelper';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { ValidationResult, ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\n\r\nexport interface CustomCertData extends CertData {\r\n issuerFullName: string;\r\n companyAdr?: string;\r\n extendedKeysUsageOids: string[];\r\n ownerName?: string;\r\n ownerOrganization?: string;\r\n}\r\n\r\nexport class ExtractCertInfo {\r\n public static GetCertOwnerName(certSubjectName) {\r\n if (certSubjectName.indexOf('SN=')>0 && certSubjectName.indexOf('G=')>0)\r\n return this.extract(certSubjectName, 'SN=').substr(3) + \" \" + this.extract(certSubjectName, 'G=').substr(2);\r\n else \r\n return this.extract(certSubjectName, 'CN=').substr(3)\r\n }\r\n\r\n public static GetCertOwnerOrganization(certSubjectName) {\r\n if (certSubjectName.indexOf('O=')>0)\r\n return this.extract(certSubjectName, 'O=').substr(2);\r\n else if (certSubjectName.indexOf('OU=')>0)\r\n return this.extract(certSubjectName, 'OU=').substr(3);\r\n else \r\n return this.extract(certSubjectName, 'CN=').substr(3);\r\n }\r\n\r\n public static GetCertOwnerOrganizationAddress(certSubjectName) {\r\n return this.extract(certSubjectName, 'S=').substr(2) + \", \" +\r\n this.extract(certSubjectName, 'L=').substr(2) + \", \" +\r\n this.extractStreet(certSubjectName, 'STREET=').substr(7);\r\n }\r\n\r\n private static extract(from, what) {\r\n let certName = \"\";\r\n let begin = from.indexOf(what);\r\n if (begin >= 0) {\r\n let end = from.indexOf(', ', begin);\r\n certName = (end < 0) ? from.substr(begin) : from.substr(begin, end - begin);\r\n }\r\n return certName;\r\n }\r\n\r\n private static extractStreet(from, what) {\r\n let certName = \"\";\r\n let begin = from.indexOf(what);\r\n if (begin >= 0) {\r\n let end = from.indexOf('=', begin + what.length);\r\n certName = (end < 0) ? from.substr(begin) : from.substr(begin, end - begin);\r\n if (certName.length > 3)\r\n certName = certName.substr(0, certName.length - 3);\r\n }\r\n return certName;\r\n }\r\n}\r\n\r\nexport class CdEDSHelper {\r\n\r\n /** Получение сертификатов. */\r\n public static GetCertsAsync(): Promise {\r\n return new Promise((resolve, reject) => {\r\n window.cadesplugin.async_spawn(\r\n function*(args) {\r\n try {\r\n const oStore = yield window.cadesplugin.CreateObjectAsync('CAdESCOM.Store');\r\n yield oStore.Open(\r\n window.cadesplugin.CAPICOM_CURRENT_USER_STORE,\r\n window.cadesplugin.CAPICOM_MY_STORE,\r\n window.cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);\r\n\r\n const CertificatesObj = yield oStore.Certificates;\r\n const Count = yield CertificatesObj.Count;\r\n const certs: CustomCertData[] = [];\r\n\r\n for (let i = 1; i <= Count; i++) {\r\n const cert = yield CertificatesObj.Item(i);\r\n const subjectName = yield cert.SubjectName;\r\n const issuerName = yield cert.IssuerName;\r\n const validFrom = yield cert.ValidFromDate;\r\n const validTo = yield cert.ValidToDate;\r\n const serialNumber = yield cert.SerialNumber;\r\n const certificateStr = yield cert.Export(window.cadesplugin.CADESCOM_ENCODE_BASE64);\r\n const extendedKeysUsageOids = Array();\r\n const extendedKeyUsage = yield cert.ExtendedKeyUsage();\r\n const ekus = yield extendedKeyUsage.EKUs;\r\n const ekusCount = yield ekus.Count;\r\n for (let j = 1; j < ekusCount; j++) {\r\n const eku = yield ekus.Item(j);\r\n const ekuOid = yield eku.OID;\r\n extendedKeysUsageOids.push(ekuOid);\r\n }\r\n certs.push({\r\n subjectName: CdEDSHelper.GetName(subjectName) as string,\r\n issuerName: CdEDSHelper.GetName(issuerName) as string,\r\n validFrom,\r\n validTo,\r\n serialNumber,\r\n company: CdEDSHelper.GetOwner(subjectName) as string,\r\n issuerFullName: issuerName as string,\r\n certificateStr,\r\n extendedKeysUsageOids,\r\n ownerName: ExtractCertInfo.GetCertOwnerName(subjectName),\r\n ownerOrganization: ExtractCertInfo.GetCertOwnerOrganization(subjectName),\r\n companyAdr: ExtractCertInfo.GetCertOwnerOrganizationAddress(subjectName)\r\n });\r\n }\r\n\r\n yield oStore.Close();\r\n\r\n args[0](certs);\r\n } catch (err) {\r\n const lastError = window.cadesplugin.getLastError(err);\r\n const errorMessage =\r\n \"Не удалось обратиться к плагину Crypto-pro.\\n\" +\r\n \"Пожалуйста, проверьте подключен ли этот плагин у вас в браузере.\\n\" +\r\n \"Если плагин подключен, проверьте его настройки (например, включена ли галочка \\\"Режим инкогнито\\\", если вы сидите под инкогнито).\\n\" +\r\n \"Если плагина нет, обратитесь к администратору!\\n\" +\r\n \"Message: \" + lastError;\r\n args[1](errorMessage);\r\n }\r\n },\r\n resolve,\r\n reject\r\n );\r\n });\r\n }\r\n\r\n private static GetName(str: string | undefined) {\r\n return this.GetParameter(str, 'CN');\r\n }\r\n\r\n private static GetOwner(str: string | undefined) {\r\n return this.GetParameter(str, 'O');\r\n }\r\n\r\n private static GetParameter(str: string | undefined, marker: string) {\r\n if (!str) {\r\n return undefined;\r\n }\r\n\r\n const strArr = str.split(/=|, /);\r\n if (strArr.length === 1) {\r\n return undefined;\r\n }\r\n\r\n const snIndex = strArr.indexOf(marker);\r\n if (snIndex === -1 || snIndex === strArr.length) {\r\n return undefined;\r\n }\r\n\r\n return strArr[snIndex + 1];\r\n }\r\n\r\n /** Получить сертификат с комментарием. */\r\n public static async GetCertificateAsync (\r\n _edsProvider: ICAdESProvider,\r\n issuerName: string | null = null,\r\n enhancedKey: string | null = null,\r\n _withComment: boolean = false) {\r\n // получаем список сертификатов\r\n const fcollection = await this.GetCertsAsync();\r\n\r\n // если было передано наименование организации\r\n if (issuerName != null) {\r\n // прлбегаемся по списку сертов\r\n for (let i = fcollection.length - 1; i >= 0; i--) {\r\n // получаем серт\r\n const certificate = fcollection[i];\r\n\r\n // если наименование не содержится в серте\r\n if (certificate.issuerFullName == null ||\r\n !certificate.issuerFullName.includes(issuerName)) {\r\n // удаляем серт из списка\r\n fcollection.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // если был передан EnhancedKey\r\n if (enhancedKey != null) {\r\n // пробегаемся по списку сертов\r\n for (let i = fcollection.length - 1; i >= 0; i--) {\r\n // получаем серт\r\n const certificate = fcollection[i];\r\n\r\n // если ключ не содержится в серте\r\n if (!this.HasEnhancedKey(certificate, enhancedKey)) {\r\n // удаляем серт из списка\r\n fcollection.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // если после фильтра не осталось сертификатов\r\n if (fcollection.length === 0) {\r\n // возвращаем NULL\r\n return { Certificate: null, Comment: null };\r\n }\r\n\r\n // если после фильтра остался 1 сертификат\r\n if (fcollection.length === 1) {\r\n // возвращаем его\r\n return { Certificate: fcollection[0], Comment: null };\r\n }\r\n\r\n // иначе даем пользователю выбрать сертификат\r\n const selectedCert = await this.SelectCertificateAsync(fcollection);\r\n\r\n // если выбран 1 сертификат\r\n if (selectedCert != null) {\r\n // возвращаем его\r\n return { Certificate: selectedCert, Comment: null };\r\n }\r\n\r\n // иначе возвращаем NULL\r\n return { Certificate: null, Comment: null };\r\n }\r\n\r\n /** Выбор сертификата из коллекции. */\r\n private static async SelectCertificateAsync(certDatas: CustomCertData[]) {\r\n // формируем список значений для выбора\r\n const values = certDatas.map(certData => {\r\n const validFrom = new Date(certData.validFrom);\r\n const validFromDay = validFrom.getDate();\r\n const validFromMonth = validFrom.getMonth() + 1;\r\n const validFromYear = validFrom.getFullYear();\r\n const validTo = new Date(certData.validTo);\r\n const validToDay = validTo.getDate();\r\n const validToMonth = validTo.getMonth() + 1;\r\n const validToYear = validTo.getFullYear();\r\n\r\n const value = new SelectedValue(\r\n certData.subjectName + \". \" +\r\n \"Издатель: \" + certData.issuerName + \". \" +\r\n \"Действителен с: \" +\r\n (validFromDay < 10 ? \"0\" : \"\") + validFromDay + \".\" +\r\n (validFromMonth < 10 ? \"0\" : \"\") + validFromMonth + \".\" +\r\n validFromYear +\r\n \" по \" +\r\n (validToDay < 10 ? \"0\" : \"\") + validToDay + \".\" +\r\n (validToMonth < 10 ? \"0\" : \"\") + validToMonth + \".\" +\r\n validToYear,\r\n certData);\r\n\r\n return value;\r\n });\r\n\r\n // отображаем диалоговое окно и получаем выбранное значение\r\n const selectedValue = await showSelectionDialog(values);\r\n\r\n // возвращаем выбранное значение\r\n return selectedValue?.value as CustomCertData | null;\r\n }\r\n\r\n /** Получить сертификат с платформенным окном выбора. */\r\n public static async GetCertificatePlatformAsync(_edsProvider: ICAdESProvider) {\r\n const certResult = await selectFileCerts(_edsProvider);\r\n if (certResult.cancel || !certResult.cert) {\r\n // иначе возвращаем NULL\r\n return { Certificate: null, Comment: null };\r\n }\r\n\r\n let cert = certResult.cert;\r\n const certs = await this.GetCertsAsync();\r\n let selectedCert = certs.find(x => x.serialNumber.toLowerCase() == cert.serialNumber.toLowerCase());\r\n if (selectedCert) {\r\n return { Certificate: selectedCert, Comment: certResult.comment };\r\n }\r\n\r\n // иначе возвращаем NULL\r\n return { Certificate: null, Comment: null };\r\n }\r\n\r\n /** Проверка наличия Enhanced-ключа в сертификате. */\r\n private static HasEnhancedKey(certificate: CustomCertData, enhancedKey: string) {\r\n // возвращаем признак наличия у сертификата указанного ключа\r\n return certificate.extendedKeysUsageOids.some(x =>\r\n x === enhancedKey);\r\n }\r\n\r\n /** Подписать файлы по ID или хешу. */\r\n public static async SignFilesAsync(\r\n fileContainer: FileContainer,\r\n edsProvider: ICAdESProvider,\r\n card: Card,\r\n files: {ID: string, Hash?: string | null}[],\r\n isDetached: boolean = true,\r\n withoutEnchance: boolean = false,\r\n certificate: CustomCertData | null = null): Promise {\r\n let validationResult: ValidationResultBuilder = new ValidationResultBuilder();\r\n\r\n // если не задан сертификат, то даем сотруднику выбрать его\r\n if (!certificate) {\r\n try {\r\n let selectedCert = await this.GetCertificatePlatformAsync(edsProvider);\r\n if (!selectedCert.Certificate) {\r\n validationResult.add(ValidationResultType.Error, \"Не выбран сертификат.\");\r\n return validationResult;\r\n }\r\n certificate = selectedCert.Certificate;\r\n } catch (e) {\r\n validationResult.add(ValidationResultType.Error, \"Не удалось получить сертификат.\\n\\n\" + ValidationResult.fromError(e).toString());\r\n return validationResult;\r\n }\r\n }\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n let splashMessage: string | undefined =\r\n files.length == 1\r\n ? undefined\r\n : 'Подписание файлов: ' + (i + 1) + \" из \" + files.length;\r\n\r\n try {\r\n await this.SetSignatureAsync(\r\n fileContainer,\r\n card,\r\n files[i],\r\n isDetached,\r\n withoutEnchance,\r\n certificate,\r\n splashMessage\r\n );\r\n } catch (e) {\r\n validationResult.add(ValidationResultType.Error, \"Не удалось подписать файлы.\\n\\n\" + ValidationResult.fromError(e).toString());\r\n return validationResult;\r\n }\r\n }\r\n\r\n return validationResult;\r\n }\r\n \r\n /** Сформировать подпись. */\r\n private static async SetSignatureAsync(\r\n fileContainer: FileContainer,\r\n card: Card,\r\n unsignedFile: {ID: string, Hash?: string | null},\r\n isDetached: boolean = true,\r\n withoutEnchance: boolean = false,\r\n certificate: CustomCertData | null = null,\r\n splashMessage: string | undefined = undefined) {\r\n\r\n // ищем файл в контейнере\r\n var file = fileContainer.files.find(x => x.id == unsignedFile.ID);\r\n if (!file) {\r\n throw new Error('Не удалось найти файл для подписания: ' + unsignedFile.ID);\r\n }\r\n let versionID = file.lastVersion.id;\r\n let fileName = file.lastVersion.name;\r\n\r\n // задаем сплэш\r\n if (!splashMessage) {\r\n splashMessage = 'Подписание файла: ' + fileName;\r\n }\r\n await showLoadingOverlay(async () => {\r\n if (!file || !certificate) {\r\n return;\r\n }\r\n\r\n // получение хеша по госту\r\n if (!unsignedFile.Hash) {\r\n unsignedFile.Hash = await this.GetFileHashAsync(\r\n card.id,\r\n unsignedFile.ID,\r\n versionID,\r\n fileName,\r\n isDetached,\r\n certificate);\r\n if (!unsignedFile.Hash) {\r\n throw new Error('Не удалось получить хеш.');\r\n }\r\n }\r\n\r\n // подписание хеша\r\n let signedHash = await this.GetFileSignatureAsync(certificate.serialNumber, unsignedFile.Hash);\r\n if (!signedHash) {\r\n throw new Error('Не удалось подписать файл простой подписью.');\r\n }\r\n\r\n // усиление подписи\r\n let enhanceSignedHash: string;\r\n if (withoutEnchance) {\r\n enhanceSignedHash = signedHash;\r\n } else {\r\n enhanceSignedHash = await this.GetEnhanceSignatureByHashAsync(\r\n card.id,\r\n unsignedFile.ID,\r\n versionID,\r\n fileName,\r\n unsignedFile.Hash,\r\n signedHash);\r\n if (!enhanceSignedHash) {\r\n throw new Error('Не удалось подписать файл усовершенствованной подписью.');\r\n }\r\n }\r\n\r\n // добавление подписи к файлу\r\n await this.AddSignatureToFileAsync(\r\n card,\r\n fileContainer,\r\n file,\r\n enhanceSignedHash,\r\n isDetached,\r\n certificate);\r\n\r\n }, splashMessage);\r\n }\r\n\r\n /** Получить хеш файла. */\r\n private static async GetFileHashAsync(\r\n cardID: string | null,\r\n fileID: string | null,\r\n versionID: string | null,\r\n fileName: string | null,\r\n isDetached: boolean,\r\n certificate: CustomCertData): Promise {\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetSignatureHash;\r\n request.cardId = cardID;\r\n request.info[\"FileID\"] = createTypedField(fileID, DotNetType.Guid);\r\n request.info[\"VersionID\"] = createTypedField(versionID, DotNetType.Guid);\r\n request.info[\"FileName\"] = createTypedField(fileName, DotNetType.String);\r\n request.info[\"isDetached\"] = createTypedField(isDetached, DotNetType.Boolean);\r\n request.info[\"OwnerName\"] = createTypedField(certificate.subjectName, DotNetType.String);\r\n request.info[\"SerialNumber\"] = createTypedField(certificate.serialNumber, DotNetType.String);\r\n request.info[\"ValidFrom\"] = createTypedField(certificate.validFrom, DotNetType.DateTime);\r\n request.info[\"ValidTo\"] = createTypedField(certificate.validTo, DotNetType.DateTime);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n\r\n if (!response.info!.UnsignedHash ||\r\n !response.info!.UnsignedHash.$value) {\r\n return null;\r\n } else {\r\n return response.info.UnsignedHash.$value;\r\n }\r\n }\r\n\r\n /** Подписать хеш файла. */\r\n private static GetFileSignatureAsync(\r\n certificateSerialNumber: string,\r\n fileHash: string): Promise {\r\n \r\n return new Promise(function(resolve, reject) {\r\n window.cadesplugin.async_spawn(function *(args) {\r\n try {\r\n // TODO TIV: нужно выбирать в зависимости от сертификата\r\n const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 = window.cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;\r\n \r\n // Получаем сертификат нужного формата\r\n let certificate;\r\n let oStore = yield window.cadesplugin.CreateObjectAsync(\"CAdESCOM.Store\");\r\n if (!oStore) return null;\r\n yield oStore.Open();\r\n let certificatesFromStore = yield oStore.Certificates;\r\n let certificatesCount = yield certificatesFromStore.Count;\r\n for (let i = 1; i <= certificatesCount; i++) {\r\n let currentCertificate = yield certificatesFromStore.Item(i);\r\n let currentCertificateSerialNumber = yield currentCertificate.SerialNumber;\r\n\r\n if (currentCertificateSerialNumber === certificateSerialNumber) {\r\n certificate = currentCertificate;\r\n break;\r\n }\r\n }\r\n yield oStore.Close();\r\n\r\n // Без сертификата не подписать, возвращаем null\r\n if (!certificate) {\r\n return null;\r\n }\r\n\r\n // Переменные для подписания\r\n let oSigner = yield window.cadesplugin.CreateObjectAsync(\"CAdESCOM.CPSigner\");\r\n yield oSigner.propset_Certificate(certificate);\r\n yield oSigner.propset_Options(window.cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN);\r\n\r\n let oHashedData = yield window.cadesplugin.CreateObjectAsync(\"CAdESCOM.HashedData\");\r\n yield oHashedData.propset_Algorithm(CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256);\r\n yield oHashedData.SetHashValue(fileHash);\r\n \r\n let oSignedData = yield window.cadesplugin.CreateObjectAsync(\"CAdESCOM.CadesSignedData\");\r\n yield oSignedData.propset_ContentEncoding(window.cadesplugin.CADESCOM_BASE64_TO_BINARY);\r\n\r\n let signedHash = yield oSignedData.SignHash(oHashedData, oSigner, window.cadesplugin.CADESCOM_CADES_BES);\r\n args[0](signedHash);\r\n } catch (e) {\r\n args[1](e);\r\n return null;\r\n }\r\n }, resolve, reject);\r\n });\r\n }\r\n\r\n /** Получить усиленную подпись. */\r\n private static async GetEnhanceSignatureByHashAsync(\r\n cardID: string,\r\n fileID: string,\r\n versionID: string,\r\n fileName: string,\r\n hash: string,\r\n signedHash: string) : Promise {\r\n\r\n const cardGetFileContentRequest = new CardGetFileContentRequest();\r\n cardGetFileContentRequest.fileTypeName = CdFileTypes.EnhanceSignType;\r\n cardGetFileContentRequest.cardId = cardID;\r\n cardGetFileContentRequest.fileId = fileID;\r\n cardGetFileContentRequest.versionRowId = versionID;\r\n cardGetFileContentRequest.fileName = fileName;\r\n cardGetFileContentRequest.info[\"Hash\"] = createTypedField(hash, DotNetType.String);\r\n cardGetFileContentRequest.info[\"SignedHash\"] = createTypedField(signedHash, DotNetType.String);\r\n\r\n const cardGetFileContentResponse = await CardService.instance.getFileContent(cardGetFileContentRequest);\r\n\r\n if (cardGetFileContentResponse.content == null ||\r\n cardGetFileContentResponse.size === 0) {\r\n throw new Error('Ошибка при получении усиленной подписи хеша файла.');\r\n }\r\n\r\n return PkCommonHelper.GetBase64String(cardGetFileContentResponse.content);\r\n }\r\n\r\n /** Добавить подпись файлу. */\r\n public static async AddSignatureToFileAsync(\r\n card: Card,\r\n fileContainer: FileContainer,\r\n file: IFile,\r\n enhanceSignedHash: string,\r\n isDetached: boolean,\r\n certificate: CustomCertData) {\r\n\r\n if (isDetached) {\r\n await this.AddDetachedSignatureToFileAsync(\r\n file.lastVersion,\r\n certificate,\r\n enhanceSignedHash);\r\n\r\n await this.AddDetachedSignatureFileAsync(\r\n fileContainer,\r\n file.lastVersion.name,\r\n certificate.ownerName ?? certificate.subjectName, \r\n enhanceSignedHash);\r\n } else {\r\n // файл будет заменен на сервере, чтобы не прокидывать его лишний раз\r\n let fileCard = card.files.find(x => x.rowId == file.id);\r\n if (fileCard) {\r\n fileCard.state = CardFileState.Modified;\r\n fileCard.info[\"WithAttachedSignature\"] = createTypedField(enhanceSignedHash, DotNetType.String);\r\n }\r\n }\r\n }\r\n\r\n /** Добавление открепленной подписи файлу. */\r\n private static async AddDetachedSignatureToFileAsync(\r\n fileVersion: IFileVersion,\r\n certificate: CustomCertData,\r\n signatureData: string) {\r\n \r\n // создаем токен подписи\r\n const signatureToken = fileVersion.source.getSignatureCreationToken();\r\n signatureToken.eventType = FileSignatureEventType.Signed;\r\n signatureToken.company = certificate.company;\r\n signatureToken.subjectName = certificate.ownerName ?? certificate.subjectName;\r\n signatureToken.serialNumber = certificate.serialNumber;\r\n signatureToken.issuerName = certificate.issuerName;\r\n signatureToken.data = signatureData;\r\n\r\n // создаем подпись\r\n const signature = fileVersion.source.createSignature(signatureToken, fileVersion);\r\n\r\n // добавляем подпись в файл\r\n fileVersion.signatures.push(signature);\r\n\r\n // уведомляем о добавлении подписи\r\n await fileVersion.source.notifySignAdded(signature);\r\n }\r\n\r\n /** Добавление файла открепленной подписи в отдельную категорию. */\r\n public static async AddDetachedSignatureFileAsync(\r\n fileContainer: FileContainer,\r\n fileName: string,\r\n signerName: string,\r\n signatureContent: string) {\r\n // генерируем название файла подписи\r\n const fileSignatureName =\r\n getFileNameAndExtension(fileName).name +\r\n \"_\" +\r\n signerName +\r\n \".sgn\";\r\n\r\n // формируем контент файла подписи\r\n const blobData = CdGeneralDocumentationClientHelper.Base64ToBlob(signatureContent, \"application/sgn\");\r\n const fileData = new File([blobData], fileSignatureName);\r\n\r\n // создаем файл\r\n const fileSignature = fileContainer.createFile(\r\n fileData,\r\n CdFileTypes.DefaultFileType,\r\n ChFileCategories.ElectronicSignatures,\r\n fileSignatureName);\r\n\r\n // добавляем файл\r\n await fileContainer.addFile(fileSignature, false, true);\r\n }\r\n\r\n /** Проверить наличие подписей у файла. */\r\n public static async CheckSignFile(fileVersionRowID) {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdCheckSignFile;\r\n request.info[\"FileVersionID\"] = createTypedField(fileVersionRowID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n }\r\n}","module.exports = tessa.tessa.workflow;","module.exports = tessa.tessa.ui.cards.tasks;","export class CdProcessHelper {\r\n\r\n static Relocate = \"55f42bde-6f91-498d-89c1-44fdbd30fa4b\";\r\n static PerformanceProcessName = \" PkPerformanceProcess\";\r\n static AcquaintanceProcess = \"PkAcquaintanceProcess\";\r\n static SendForRevision = \"5CB1F61D-50B1-4ECF-A75C-CFB40DF76466\";\r\n static FdApprove = \"efb52208-e923-430f-9066-a2949cf5a5ba\";\r\n static FdDisapprove = \"e37b3166-16bc-43d4-a180-1a4b62126142\";\r\n static FdAdditionalExecution = \"2fe9baba-f0b6-48b7-b27c-39fa3d29472d\";\r\n}","import { CardPermissionFlags, CardSectionPermissionInfo, CardStoreMode } from \"tessa/cards\";\r\nimport { CdDocStates } from \"./CdDocStates\";\r\nimport { CdCardTypes } from \"./CdCardTypes\";\r\nimport { tryGetFromInfo } from \"tessa/ui\";\r\nimport { CdCardFlagsInfo } from \"./CdCardFlagsInfo\";\r\n\r\nexport class CdCardHelper {\r\n\r\n public static CanEnableActionTile(model, card): boolean {\r\n return CdCardHelper.CanStartExecutionProcess(model, card) ||\r\n CdCardHelper.CanChangeStateToIrrelevant(model, card) ||\r\n CdCardHelper.CanStartCreateBasedDocument(model, card) ||\r\n (tryGetFromInfo(card.info, CdCardFlagsInfo.PkExecutionTaskFlag, false) ||\r\n tryGetFromInfo(card.info, CdCardFlagsInfo.PkAcquaintanceTaskFlag, false) ||\r\n tryGetFromInfo(card.info, CdCardFlagsInfo.PkNotRelevantFlag, false) ||\r\n tryGetFromInfo(card.info, CdCardFlagsInfo.PkCreateChangesOrdFlag, false) ||\r\n tryGetFromInfo(card.info, CdCardFlagsInfo.PkRecallForRevisionFlag, false) ||\r\n tryGetFromInfo(card.info, CdCardFlagsInfo.PkCreatedBasedFlag, false) ||\r\n tryGetFromInfo(card.info, CdCardFlagsInfo.PkCopyCardFlag, false) ||\r\n tryGetFromInfo(card.info, CdCardFlagsInfo.PkEditRegistrationNumberFlag, false) ||\r\n tryGetFromInfo(card.info, CdCardFlagsInfo.PkCanMergeDuplicatesIDP, false)) ||\r\n CdCardHelper.CheckSkp(model) ||\r\n CdCardHelper.CanAddToFavorites(model, card) ||\r\n CdCardHelper.CanRemoveToFavorites(model, card) ||\r\n CdCardHelper.CanCopyCard(model, card) ||\r\n CdCardHelper.CanStartSearchFileFromCards(model, card);\r\n }\r\n\r\n public static CanStartExecutionProcess(model, card): boolean {\r\n return card.storeMode === CardStoreMode.Update\r\n && (model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID\r\n && tryGetFromInfo(card.info, \"CanStartExecutionProcess\", false)\r\n || CdCardTypes.TileExecutionAcquaintanceCardTypes.indexOf(model.cardType.id) > -1);\r\n }\r\n\r\n public static CanStartAcquaintanceProcess(model, card): boolean {\r\n return card.storeMode === CardStoreMode.Update\r\n && (model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID\r\n && tryGetFromInfo(card.info, \"CardStartAcquaintanceProcess\", false)\r\n || CdCardTypes.TileExecutionAcquaintanceCardTypes.indexOf(model.cardType.id) > -1);\r\n }\r\n\r\n public static CanChangeStateToIrrelevant(model, card): boolean {\r\n return card.storeMode === CardStoreMode.Update\r\n && (model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID\r\n && tryGetFromInfo(card.info, \"CanChangeStateToIrrelevant\", false));\r\n }\r\n\r\n public static CanStartCreateBasedDocument(model, card): boolean {\r\n return card.storeMode === CardStoreMode.Update\r\n && (model.cardType.id === CdCardTypes.PkProtocolTenderTypeID\r\n && CdCardHelper.isRejected(card));\r\n }\r\n\r\n\r\n public static isRejected(card: any): boolean {\r\n let visible = false;\r\n let section;\r\n let filed;\r\n if ((section = card.sections.tryGet('PkDocumentCommonInfo')) != null) {\r\n if (section.fields.tryGet(\"StateID\") != null) {\r\n if ((filed = section.fields.tryGet(\"StateID\")) != null) {\r\n if (filed === CdDocStates.Rejected.id) {\r\n visible = true;\r\n }\r\n }\r\n }\r\n }\r\n return visible;\r\n }\r\n\r\n public static CheckSkp (model): boolean {\r\n let result = false;\r\n let section;\r\n let filed;\r\n if (model != null && model.card != null) {\r\n if ((section = model.card.sections.tryGet('PkDocumentCommonInfo')) != null) {\r\n if (section.fields.tryGet(\"DVID\") != null) {\r\n if ((filed = section.fields.tryGet(\"ArStateID\")) != null) {\r\n if (filed !== CdDocStates.Complete.id) {\r\n result = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public static CanAddToFavorites(model, card): boolean {\r\n return card.storeMode === CardStoreMode.Update\r\n && model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID\r\n && tryGetFromInfo(card.info, \"CanAddToFavorites\", false)\r\n && !tryGetFromInfo(card.info, \"DocumentIsInFavorites\", false);\r\n }\r\n\r\n public static CanRemoveToFavorites(model, card): boolean {\r\n return card.storeMode === CardStoreMode.Update\r\n && model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID\r\n && tryGetFromInfo(card.info, \"CanAddToFavorites\", false)\r\n && tryGetFromInfo(card.info, \"DocumentIsInFavorites\", false);\r\n }\r\n\r\n public static CanCopyCard(model, card): boolean {\r\n return card.storeMode === CardStoreMode.Update\r\n && model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID\r\n && tryGetFromInfo(card.info, \"CanCopyCard\", false);\r\n }\r\n\r\n public static CanStartSearchFileFromCards(model, card): boolean {\r\n return card.storeMode === CardStoreMode.Update\r\n && model.cardType.id === CdCardTypes.PkExecutiveDocumentationTypeID;\r\n }\r\n\r\n /** Проверка прав на доступность поля для изменения в секции. */\r\n public static IsFieldAllowModify(\r\n cardSectionPermissionInfo: CardSectionPermissionInfo | undefined,\r\n fieldName: string) {\r\n // проверяем задана ли секция прав\r\n if (cardSectionPermissionInfo == null){\r\n return true;\r\n }\r\n\r\n // получаем права на поле\r\n const fieldPermissions = cardSectionPermissionInfo.fieldPermissions.tryGet(fieldName);\r\n\r\n // если заданы права на поле\r\n if (fieldPermissions != null) {\r\n // возвращаем доступность прав на поле\r\n return fieldPermissions.$value == CardPermissionFlags.AllowModify;\r\n }\r\n\r\n // иначе возвращаем доступность прав на секцию\r\n return cardSectionPermissionInfo.sectionPermissions == CardPermissionFlags.AllowModify;\r\n }\r\n}","import { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { tryGetFromInfo, showLoadingOverlay, showNotEmpty} from 'tessa/ui';\r\nimport { Card, CardFile, CardRowState} from 'tessa/cards';\r\nimport { ValidationResult, ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { getFileNameAndExtension } from 'tessa/ui/cards/controls';\r\nimport { CertData, FileContainer, FileSignatureEventType, IFile, IFileVersion, readFileContentAsBase64 } from 'tessa/files';\r\nimport { CdEDSHelper, CustomCertData } from 'src/cdScripts/Helpers/CdEDSHelper';\r\nimport { CdRequestTypes } from './CdRequestTypes';\r\nimport { CdTaskTypes } from './CdTaskTypes';\r\nimport { CdFdProcessHelper } from './CdFdProcessHelper';\r\nimport { CdCardTypes } from './CdCardTypes';\r\nimport { CdDssCspType } from './CdDssCspType';\r\nimport { CdGeneralDocumentationClientHelper } from './Cards/CdGeneralDocumentationClientHelper';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\n\r\nexport class CdDSSHelper {\r\n\r\n /** Получение файлов для подписания. */\r\n public static async GetSigningFilesInfoAsync(\r\n context: ICardUIExtensionContext,\r\n userID: string,\r\n completedTaskTypeID: string | null = null,\r\n fileName: string | null = null,\r\n categoryID: guid | null = null) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // инициализируем список файлов, которые нужно подписать\r\n const signingFilesInfo = new Array();\r\n\r\n // инициализируем список поддерживаемых расширений\r\n const officeFormats = new Array(\".docx\", \".doc\", \".xlns\", \".xls\", \".pdf\");\r\n\r\n // пробегаемся по файлам карточки\r\n for (const file of context.fileContainer.files) {\r\n // если категория не указана\r\n if (file.category == null) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // если передана категория\r\n if (categoryID !== null &&\r\n file.category.id !== categoryID.toLowerCase()) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // если передано наименование файла, но оно не совпадает\r\n if (fileName != null && file.name.indexOf(fileName) < 0) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // получаем наименование файла и его расширение\r\n const fileNameAndExt = getFileNameAndExtension(file.name);\r\n\r\n // получаем расширения файла\r\n const fileExt = fileNameAndExt?.ext?.toLowerCase();\r\n\r\n // если в файле есть флаг печатной формы\r\n // или передано наименование файла, но оно не совпадает\r\n // или формат файла не офисный и не PFD\r\n if (tryGetFromInfo(file.options, \"FileForPrint\", false) ||\r\n fileName != null && file.name.indexOf(fileName) < 0 ||\r\n officeFormats.indexOf(fileExt) < 0) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // получаем последнюю версию файла\r\n const lastFileVersion = file.lastVersion;\r\n\r\n // получаем файл из карточки\r\n const cardFile = context.card.files.find(x => x.rowId === file.id) as CardFile;\r\n\r\n // получаем или добавляем секцию с доп. инфой по подписям\r\n const pkfsaiSection = cardFile.card.sections.getOrAdd(\"PkFileSignaturesAdditionalInfo\");\r\n\r\n // проверяем есть ли среди подписей текущего сотрудника удовлетворяющая\r\n const isSignatureAlreadyExist = lastFileVersion.signatures.some(x =>\r\n x.userId === userID &&\r\n pkfsaiSection.rows.some(y =>\r\n y.tryGet(\"SignatureRowID\") === x.id &&\r\n y.tryGet(\"CompletedTaskTypeID\") === completedTaskTypeID));\r\n\r\n // если такая подпись есть\r\n if (isSignatureAlreadyExist) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // получаем контент файла\r\n const lastFileVersionContentResult = await this.GetFileContentAsync(\r\n lastFileVersion,\r\n context.fileContainer);\r\n\r\n // проверяем ошибки\r\n if (!lastFileVersionContentResult.isSuccessful) {\r\n // пишем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Не удалось получить контент файла \\\"\" + lastFileVersion.name + \"\\\".\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n lastFileVersionContentResult.toString());\r\n\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // заполняем объект с данными по файлу\r\n const signingFileInfo = new SigningFileInfo(\r\n cardFile,\r\n lastFileVersion);\r\n\r\n // добавляем объект в список\r\n signingFilesInfo.push(signingFileInfo);\r\n }\r\n\r\n return { signingFilesInfo, validationResult };\r\n }\r\n\r\n /** Проверка карточки на необходимость подписания файлов. */\r\n public static async IsNeedSigningAsync(card: Card) {\r\n // флаг необходимости подписания\r\n let isNeedSigning = false;\r\n\r\n // наименование файла\r\n let fileName: string | null = null;\r\n\r\n // пробегаемся по заданиям\r\n for (const task of card.tasks) {\r\n // если задание не завершалось\r\n if (task.state !== CardRowState.Deleted) {\r\n // смотрим другие задания\r\n continue;\r\n }\r\n\r\n // если завершается задание \"Рассмотрение куратором\" по кнопке \"Подписать документ\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentCuratorReviewingTypeID &&\r\n task.optionId === CdFdProcessHelper.PkSignDocument) {\r\n // устанавливаем флаг подписания\r\n isNeedSigning = true;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Подписание сотрудником\" по кнопке \"Подписать\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentSigningTypeID &&\r\n task.optionId === CdFdProcessHelper.Sign) {\r\n // устанавливаем флаг подписания\r\n isNeedSigning = true;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Соглашение об аннулировании куратором\" по кнопке \"Подписать документ\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentCuratorRevocationAgreementTypeID &&\r\n task.optionId === CdFdProcessHelper.PkSignDocument) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Соглашение об аннулировании сотрудником\" по кнопке \"Подписать\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentEmployeeRevocationAgreementTypeID &&\r\n task.optionId === CdFdProcessHelper.Sign) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Переход на ЭТК\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentEtkTransitionTypeID) {\r\n // по кнопке \"Согласовать\"\r\n if (task.optionId === CdFdProcessHelper.PkAgree) {\r\n // устанавливаем флаг подписания и тип файла\r\n isNeedSigning = true;\r\n fileName = \"Согласие на переход на ЭТК\";\r\n break;\r\n }\r\n\r\n // по кнопке \"Не согласовать\"\r\n if (task.optionId === CdFdProcessHelper.PkDisagree) {\r\n // устанавливаем флаг подписания и тип файла\r\n isNeedSigning = true;\r\n fileName = \"Согласие на сохранение БТК\";\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return { isNeedSigning, fileName };\r\n }\r\n\r\n /** Получение информации для подписания. */\r\n public static async GetSigningInfoAsync(\r\n card: Card,\r\n userID: string,\r\n checkMainCertificate: boolean = false,\r\n withoutNep: boolean = false,\r\n withoutPikProjectCheck: boolean = false) {\r\n // получаем данные по сотруднику и файлам\r\n let signatureContent: string | null = null;\r\n let organizationExtID: number | null = null;\r\n let organizationName: string | null = null;\r\n let certInfo: UserCertInfo | null = null;\r\n let withSignatureContent = card.typeId === CdCardTypes.TechnicalDocumentationTypeID;\r\n\r\n // получаем секцию\r\n const pkpdiSection = card.sections.tryGet(\"PkPersonnelDocumentInfo\");\r\n if (pkpdiSection != null) {\r\n organizationExtID = pkpdiSection.fields.tryGet(\"CompanyExternalID\") as number | null;\r\n organizationName = pkpdiSection.fields.tryGet(\"CompanyName\") as string | null;\r\n }\r\n\r\n // получаем данные по сертификату КЭП\r\n const dssUserCert = await this.GetUserCertInfoAsync(\r\n userID,\r\n undefined,\r\n undefined,\r\n organizationExtID,\r\n checkMainCertificate,\r\n CdDssCspType.Qualified,\r\n withSignatureContent\r\n );\r\n\r\n // получаем данные по сертификату НЭП\r\n const nepUserCert = withoutNep ? null : await this.GetUserCertInfoAsync(\r\n userID,\r\n undefined,\r\n undefined,\r\n organizationExtID,\r\n checkMainCertificate,\r\n CdDssCspType.NonQualified,\r\n withSignatureContent\r\n );\r\n\r\n // устанавливаем флаги\r\n const isExistsDssCert = dssUserCert != null;\r\n const isExistsNepCert = nepUserCert != null;\r\n const isQualifiedOrg = withoutPikProjectCheck ? true : this.IsOrganizationNeedQualifiedSignature(card);\r\n\r\n // Куратор подписывает \"Кадровый документ\"\r\n let isCuratorPersonnelSigning = this.IsCuratorPersonnelSigning(card);\r\n\r\n // объявляем данные для подписания\r\n let externalUserGuid: string | null = null;\r\n let employeeGuid1C: string | null = null;\r\n let dssCspType: CdDssCspType | null = null;\r\n let certIssuerName: string | null = null;\r\n let certEnhancedKey: string | null = null;\r\n let isNeedNepRelease: boolean = false;\r\n let isAutoSigningPersonnelDocuments: boolean = false;\r\n\r\n // если для подписания нужен КЭП (ПИК-Проект, ГП-МСК, ГП-МСФ) и у сотрудника есть сертификат DSS\r\n if ((isQualifiedOrg || isCuratorPersonnelSigning) && isExistsDssCert) {\r\n dssCspType = CdDssCspType.Qualified;\r\n externalUserGuid = dssUserCert!.ExternalUserGuid;\r\n employeeGuid1C = dssUserCert!.EmployeeGuid1C;\r\n isAutoSigningPersonnelDocuments = dssUserCert!.IsAutoSigningPersonnelDocuments;\r\n signatureContent = dssUserCert!.SignatureContent;\r\n certInfo = dssUserCert;\r\n }\r\n\r\n // иначе если у пользователя есть сертифкат НЭП и это не Подписание куратором Кадрового документа (а подписание сотрудником)\r\n else if (isExistsNepCert && !isCuratorPersonnelSigning) {\r\n dssCspType = CdDssCspType.NonQualified;\r\n externalUserGuid = nepUserCert!.ExternalUserGuid;\r\n employeeGuid1C = nepUserCert!.EmployeeGuid1C;\r\n isAutoSigningPersonnelDocuments = nepUserCert!.IsAutoSigningPersonnelDocuments;\r\n signatureContent = nepUserCert!.SignatureContent;\r\n certInfo = nepUserCert;\r\n }\r\n\r\n // если это подписание не куратором, а сотрудником\r\n else if (!isCuratorPersonnelSigning) {\r\n\r\n // проверяем, переводился ли этот сотрудник из ПИК-Проекта в ГП-МСК / ГП-МФС\r\n // и если нет, то устанавливаем необходимость выпуска оНЭП (т.е. это обычный сотрудник, он должен подписывать оНЭПом)\r\n // в противном случае мы даем возможность подписать таким сотрудникам железным сертификатом\r\n if (!isQualifiedOrg) {\r\n certEnhancedKey = \"1.2.643.3.7.3.1001572\";\r\n isNeedNepRelease = true;\r\n }\r\n }\r\n\r\n // возвращаем данные для подписания\r\n return {\r\n externalUserGuid,\r\n employeeGuid1C,\r\n dssCspType,\r\n certIssuerName,\r\n certEnhancedKey,\r\n organizationExtID,\r\n organizationName,\r\n isNeedNepRelease,\r\n isAutoSigningPersonnelDocuments,\r\n signatureContent,\r\n certInfo\r\n };\r\n }\r\n\r\n /** Получение данных об организации пользователя. */\r\n public static async GetUserCertInfoAsync(\r\n userID: string,\r\n boxID: string | null = null,\r\n departmentID: string | null = null,\r\n organizationExtID: number | null = null,\r\n checkMainCertificate: boolean = false,\r\n dssCspType: CdDssCspType | null = null,\r\n withSignatureContent: boolean = false) {\r\n // инициализируем запрос\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetUserCertInfo;\r\n request.info[\"UserID\"] = createTypedField(userID, DotNetType.Guid);\r\n request.info[\"BoxID\"] = boxID != null ? createTypedField(boxID, DotNetType.Guid) : null;\r\n request.info[\"DepartmentID\"] = departmentID != null ? createTypedField(departmentID, DotNetType.Guid) : null;\r\n request.info[\"OrganizationExtID\"] = organizationExtID != null ? createTypedField(organizationExtID, DotNetType.Int64) : null;\r\n request.info[\"CheckMainCertificate\"] = createTypedField(checkMainCertificate, DotNetType.Boolean);\r\n request.info[\"DssCspType\"] = dssCspType != null ? createTypedField(dssCspType.ID, DotNetType.Int32) : null;\r\n request.info[\"WithSignatureContent\"] = createTypedField(withSignatureContent, DotNetType.Boolean);\r\n\r\n // отправляем запрос\r\n const response = await CardService.instance.request(request);\r\n\r\n // проверяем ответ\r\n if (!response.validationResult.isSuccessful ||\r\n !tryGetFromInfo(response.info, \"IsUserHasCertificate\", false)) {\r\n return null;\r\n }\r\n\r\n // получаем данные из ответа\r\n const userCertInfo: UserCertInfo = {\r\n ExternalUserGuid: tryGetFromInfo(response.info, \"ExternalUserGuid\"),\r\n EmployeeGuid1C: tryGetFromInfo(response.info, \"EmployeeGuid1C\"),\r\n IsAutoSigningPersonnelDocuments: tryGetFromInfo(response.info, \"IsAutoSigningPersonnelDocuments\"),\r\n SignatureContent: tryGetFromInfo(response.info, \"SignatureContent\"),\r\n CertCompany: tryGetFromInfo(response.info, \"CertCompany\"),\r\n CertAdr: tryGetFromInfo(response.info, \"CertAdr\"),\r\n CertOwner: tryGetFromInfo(response.info, \"CertOwner\")\r\n };\r\n\r\n // возвращаем данные\r\n return userCertInfo;\r\n }\r\n\r\n /** Нужно ли для подписания сотрудников этой организации использование КЭП (ПИК-Проект, ГП МСК, ГП МФС). */\r\n private static IsOrganizationNeedQualifiedSignature(card: Card) {\r\n // ПИК-Проект, ГП-МСК и ГП-МФС\r\n const qualifiedSignatureOrgExternalIds = [ 42240, 74385, 49340 ] as number[];\r\n\r\n // получаем секцию\r\n const pkpdiSection = card.sections.tryGet(\"PkPersonnelDocumentInfo\");\r\n if (pkpdiSection == null) {\r\n return false;\r\n }\r\n\r\n // получаем ExtID организации\r\n const companyExternalID = pkpdiSection.fields.tryGet(\"CompanyExternalID\") as number;\r\n\r\n // проверяем является ли организация \"ПИК-Проектом\", \"ГП-МСК\" или \"ГП-МФС\"\r\n return qualifiedSignatureOrgExternalIds.includes(companyExternalID);\r\n }\r\n\r\n /** Является ли текущее подписание Подписанием куратора */\r\n private static IsCuratorPersonnelSigning(card: Card) {\r\n return card.tasks.some(task => Guid.equals(task.typeId, CdTaskTypes.PkPersonnelDocumentCuratorReviewingTypeID)\r\n && Guid.equals(task.optionId, CdFdProcessHelper.PkSignDocument));\r\n }\r\n \r\n /** Подписание файлов с помощью DSS-сервиса. */\r\n public static async SignFilesByDssAsync(\r\n context: ICardUIExtensionContext,\r\n userID: string,\r\n externalUserGuid: string | null,\r\n employeeGuid1C: string | null,\r\n dssCspType: CdDssCspType,\r\n certInfo: UserCertInfo | null = null,\r\n fileName: string | null = null,\r\n categoryID: guid | null = null) {\r\n try {\r\n await showLoadingOverlay(async () => {\r\n // получаем тип завершаемого задания\r\n const completedTaskTypeID = context.card.tasks.find(x => x.optionId != null)?.typeId;\r\n\r\n // получаем файлы для подписания\r\n const signingFilesInfoResult = await this.GetSigningFilesInfoAsync(\r\n context,\r\n userID,\r\n completedTaskTypeID,\r\n fileName,\r\n categoryID);\r\n\r\n // проверяем ошибки\r\n if (!signingFilesInfoResult.validationResult.isSuccessful) {\r\n // пробрасываем исключение\r\n throw new Error(signingFilesInfoResult.validationResult.build().toString());\r\n }\r\n\r\n // если сертификат не задан и есть файлы для подписи\r\n if (signingFilesInfoResult.signingFilesInfo.length > 0) {\r\n // инициализируем данные для подписания файлов\r\n const dssRequestFilesSigningInfo = new Array();\r\n\r\n // для РД проставляем штамп Выдано в производство работ перед подписанием\r\n if (context.card.typeId === CdCardTypes.TechnicalDocumentationTypeID) {\r\n if (!certInfo) {\r\n throw new Error(\"Не удалось получить данные о сертификате\");\r\n }\r\n\r\n console.info('[Подписание DSS|Информация]: ' + certInfo.CertCompany + '|' + certInfo.CertOwner + '|' + certInfo.CertAdr);\r\n\r\n // пробегаемся по файлам для подписания\r\n for (const signingFileInfo of signingFilesInfoResult.signingFilesInfo) {\r\n let fileContent = await readFileContentAsBase64(signingFileInfo.Version.content!);\r\n if (fileContent) {\r\n console.info('[fileContent]: ' + fileContent.length);\r\n let isInWork = false;\r\n\r\n if (signingFileInfo.Version.name.toLowerCase().indexOf('.pdf') >= 0)\r\n {\r\n let fileWithStamp = await CdGeneralDocumentationClientHelper.GetRdWithWorkStampAsync(\r\n context.card.id,\r\n signingFileInfo.Version.id,\r\n signingFileInfo.CardFile.rowId,\r\n signingFileInfo.CardFile.name,\r\n certInfo.CertCompany!,\r\n certInfo.CertOwner!,\r\n certInfo.CertAdr!);\r\n fileContent = await PkCommonHelper.GetBase64String(fileWithStamp.Blob);\r\n isInWork = true;\r\n console.info('Файл обработан');\r\n console.info(fileContent == null ? \"не удалось поставить штамп \" : \"штамп успешно добавлен [fileContent]: \" + fileContent!.length);\r\n if (!fileContent) {\r\n throw new Error(\"Не удалось наложить штамп на pdf\");\r\n }\r\n }\r\n\r\n const dssRequestFileSigningInfo = new DssRequestFileSigningInfo(\r\n signingFileInfo.Version.id,\r\n signingFileInfo.Version.name,\r\n fileContent);\r\n\r\n dssRequestFileSigningInfo.IsInWork = isInWork;\r\n dssRequestFilesSigningInfo.push(dssRequestFileSigningInfo);\r\n }\r\n }\r\n }\r\n else {\r\n // пробегаемся по файлам для подписания\r\n for (const signingFileInfo of signingFilesInfoResult.signingFilesInfo) {\r\n const dssRequestFileSigningInfo = new DssRequestFileSigningInfo(\r\n signingFileInfo.Version.id,\r\n signingFileInfo.Version.name,\r\n await readFileContentAsBase64(signingFileInfo.Version.content!));\r\n dssRequestFilesSigningInfo.push(dssRequestFileSigningInfo);\r\n }\r\n }\r\n\r\n // инициализируем запрос\r\n const dssSignRequest = new CardRequest();\r\n dssSignRequest.requestType = CdRequestTypes.PkSignFilesByDss;\r\n dssSignRequest.info[\"ExternalUserGuid\"] = externalUserGuid != null ? createTypedField(externalUserGuid, DotNetType.Guid) : null;\r\n dssSignRequest.info[\"EmployeeGuid1C\"] = employeeGuid1C != null ? createTypedField(employeeGuid1C, DotNetType.Guid) : null;\r\n dssSignRequest.info[\"DssCspType\"] = createTypedField(dssCspType.ID, DotNetType.Int32);\r\n dssSignRequest.info[\"DssRequestFilesSigningInfo\"] = createTypedField(JSON.stringify(dssRequestFilesSigningInfo), DotNetType.String);\r\n\r\n // отправляем запрос\r\n const dssSignResponse = await CardService.instance.request(dssSignRequest);\r\n\r\n console.info('dssSignRequest completed');\r\n // проверяем ошибки в ответе\r\n if (!dssSignResponse.validationResult.isSuccessful) {\r\n // пробрасываем исключение\r\n throw new Error(dssSignResponse.validationResult.build().toString());\r\n }\r\n\r\n // получаем данные по подписанию файлов\r\n const dssResponseFilesSigningInfoJson = tryGetFromInfo(\r\n dssSignResponse.info, \"DssResponseFilesSigningInfo\");\r\n\r\n // если данных по подписанию файлов нет\r\n if (dssResponseFilesSigningInfoJson == null) {\r\n // получаем статус операции\r\n const dssOperationStatusName = tryGetFromInfo(\r\n dssSignResponse.info, \"DssOperationStatusName\");\r\n\r\n // пишем ошибку в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n dssOperationStatusName ?? \"\");\r\n\r\n // отменяем сохранение\r\n context.cancel = true;\r\n\r\n // выходим\r\n return;\r\n }\r\n\r\n // десериализуем данные\r\n const dssResponseFilesSigningInfo: Array = JSON.parse(dssResponseFilesSigningInfoJson);\r\n\r\n // для РД отмечаем isInWork и проставляем контент, чтобы заменился файл\r\n if (context.card.typeId === CdCardTypes.TechnicalDocumentationTypeID) {\r\n // пробегаемся по файлам для подписания\r\n for (const signingFileInfo of dssResponseFilesSigningInfo) {\r\n const dssRequestInfo = dssRequestFilesSigningInfo.find(x => x.VersionRowID === signingFileInfo.VersionRowID);\r\n if (!dssRequestInfo) continue;\r\n signingFileInfo.IsInWork = dssRequestInfo.IsInWork;\r\n signingFileInfo.ContentInBase64 = dssRequestInfo.ContentBase64;\r\n }\r\n }\r\n\r\n await this.SendCdSignRequest(\r\n dssResponseFilesSigningInfo,\r\n context.card,\r\n context.fileContainer.files.find(x =>\r\n x.category?.id == categoryID &&\r\n x.name == fileName),\r\n context.fileContainer);\r\n }\r\n }, \"Подписание файлов\");\r\n } catch (e) {\r\n // отменяем сохранение карточки\r\n context.cancel = true;\r\n\r\n // пишем ошибку в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании файлов.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \" +\r\n \"либо открыв его кликом по ошибке и скопировав стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n ValidationResult.fromError(e).toString());\r\n }\r\n }\r\n\r\n private static async SendCdSignRequest(\r\n dssResponseFilesSigningInfo: Array,\r\n card: Card,\r\n file: IFile | undefined,\r\n fileContainer: FileContainer) {\r\n\r\n let withEdRoles = Guid.equals(card.typeId, CdCardTypes.PkExecutiveDocumentationTypeID);\r\n let withRoles = Guid.equals(card.typeId, CdCardTypes.PkExecutiveSchemeTypeID);\r\n let withApprovementRoles = Guid.equals(card.typeId, CdCardTypes.PkRequestForMaterialsTypeID);\r\n\r\n for (const dssResult of dssResponseFilesSigningInfo) {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.SignInfo;\r\n request.info[\"VersionRowID\"] = createTypedField(dssResult.VersionRowID, DotNetType.Guid);\r\n request.info[\"Comment\"] = createTypedField(null, DotNetType.String);\r\n request.info[\"SubjectName\"] = createTypedField(dssResult.SubjectName, DotNetType.String);\r\n request.info[\"Company\"] = createTypedField(dssResult.Company, DotNetType.String);\r\n request.info[\"Signed\"] = createTypedField(new Date(), DotNetType.DateTime);\r\n request.info[\"SerialNumber\"] = createTypedField(dssResult.SerialNumber, DotNetType.String);\r\n request.info[\"IssuerName\"] = createTypedField(dssResult.IssuerName, DotNetType.String);\r\n request.info[\"Data\"] = createTypedField(dssResult.SignBase64, DotNetType.String);\r\n request.info[\"isEnhanceSign\"] = createTypedField(true, DotNetType.Boolean);\r\n request.info[\"TypeID\"] = createTypedField(card.typeId, DotNetType.Guid);\r\n request.info[\"WithEdRoles\"] = createTypedField(withEdRoles, DotNetType.Boolean);\r\n request.info[\"WithRoles\"] = createTypedField(withRoles, DotNetType.Boolean);\r\n request.info[\"WithApprovementRoles\"] = createTypedField(withApprovementRoles, DotNetType.Boolean);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n\r\n if (file && (withEdRoles || withRoles || withApprovementRoles)) {\r\n let certificate: CustomCertData = {\r\n company: dssResult.Company,\r\n subjectName: dssResult.SubjectName,\r\n serialNumber: dssResult.SerialNumber,\r\n issuerName: dssResult.IssuerName,\r\n validFrom: dssResult.ValidFrom,\r\n validTo: dssResult.ValidTo,\r\n issuerFullName: dssResult.IssuerName,\r\n certificateStr: '',\r\n extendedKeysUsageOids: []\r\n };\r\n\r\n /* 5770 исключено из-за дублирования инфо о подписи\r\n await CdEDSHelper.AddSignatureToFileAsync(\r\n card,\r\n fileContainer,\r\n file,\r\n dssResult.SignBase64,\r\n true,\r\n certificate);\r\n */\r\n\r\n await CdEDSHelper.AddDetachedSignatureFileAsync(\r\n fileContainer,\r\n file.lastVersion.name,\r\n certificate.ownerName ?? certificate.subjectName, \r\n dssResult.SignBase64); \r\n }\r\n }\r\n }\r\n\r\n /** Подписание файла. */\r\n public static async SignFileAsync(\r\n cardFile: CardFile,\r\n fileVersion: IFileVersion,\r\n certificate: CertData,\r\n signatureData: string,\r\n completedTaskTypeID: string | null = null) {\r\n // получаем или добавляем секцию с доп. инфой по подписям\r\n const pkfsaiSection = cardFile.card.sections.getOrAdd(\"PkFileSignaturesAdditionalInfo\");\r\n\r\n // создаем токен подписи\r\n const signatureToken = fileVersion.source.getSignatureCreationToken();\r\n signatureToken.eventType = FileSignatureEventType.Signed;\r\n signatureToken.company = certificate.company;\r\n signatureToken.subjectName = certificate.subjectName;\r\n signatureToken.serialNumber = certificate.serialNumber;\r\n signatureToken.issuerName = certificate.issuerName;\r\n signatureToken.data = signatureData;\r\n\r\n // создаем подпись\r\n const signature = fileVersion.source.createSignature(signatureToken, fileVersion);\r\n\r\n // добавляем подпись в файл\r\n fileVersion.signatures.push(signature);\r\n\r\n // уведомляем о добавлении подписи\r\n await fileVersion.source.notifySignAdded(signature);\r\n\r\n // добавляем доп. инфо по подписи\r\n const pkfsRow = pkfsaiSection.rows.add();\r\n pkfsRow.rowId = Guid.newGuid();\r\n pkfsRow.set(\"SignatureRowID\", createTypedField(signature.id, DotNetType.Guid));\r\n if (completedTaskTypeID != null) {\r\n pkfsRow.set(\"CompletedTaskTypeID\", createTypedField(completedTaskTypeID, DotNetType.Guid));\r\n }\r\n pkfsRow.state = CardRowState.Inserted;\r\n }\r\n\r\n /** Получение контента файла. */\r\n public static async GetFileContentAsync(\r\n fileVersion: IFileVersion,\r\n fileContainer: FileContainer) {\r\n // если контент файла пустой\r\n if (fileVersion.content == null ||\r\n fileVersion.content.size === 0) {\r\n // получаем контент\r\n const fileVersionContent = await fileContainer.getFileContent(fileVersion);\r\n\r\n // если не удалось получить контент\r\n if (!fileVersionContent.validationResult.isSuccessful ||\r\n fileVersionContent.data == null) {\r\n return fileVersionContent.validationResult;\r\n }\r\n\r\n // устанавливаем контент\r\n await fileVersion.setContent(fileVersionContent.data);\r\n }\r\n\r\n return ValidationResult.empty;\r\n }\r\n\r\n}\r\n\r\n/** Информация по файлу для подписания. */\r\nexport class SigningFileInfo {\r\n public CardFile: CardFile;\r\n\r\n public Version: IFileVersion;\r\n\r\n public constructor(\r\n cardFile: CardFile,\r\n version: IFileVersion) {\r\n this.CardFile = cardFile;\r\n this.Version = version;\r\n }\r\n}\r\n\r\nexport class DssRequestFileSigningInfo {\r\n public VersionRowID: string;\r\n public FileName: string;\r\n public ContentBase64: string | null;\r\n public IsInWork: boolean | null;\r\n\r\n public constructor(\r\n versionRowID: string,\r\n fileName: string,\r\n contentBase64: string | null) {\r\n this.VersionRowID = versionRowID;\r\n this.FileName = fileName;\r\n this.ContentBase64 = contentBase64;\r\n }\r\n}\r\n\r\nexport class DssResponseFileSigningInfo {\r\n public VersionRowID: string;\r\n public SignBase64: string;\r\n public SubjectName: string;\r\n public SerialNumber: string;\r\n public IssuerName: string;\r\n public Company: string;\r\n public ValidFrom: string;\r\n public ValidTo: string;\r\n public IsInWork: boolean | null;\r\n public ContentInBase64: string | null;\r\n}\r\n\r\n/** Информация по сертификату пользователя. */\r\nexport class UserCertInfo {\r\n public ExternalUserGuid: string | null;\r\n public EmployeeGuid1C: string | null;\r\n public IsAutoSigningPersonnelDocuments: boolean;\r\n public SignatureContent: string | null;\r\n public CertCompany: string | null;\r\n public CertOwner: string | null;\r\n public CertAdr: string | null;\r\n}","module.exports = tessa.ui;","/// \r\n/// Данное перечисление создано в рамках задачи TES-8902, так как в рамках задачи TES-8640 был реализован\r\n/// схожий функционал в методе AllowEditESUDDocs(ICardUIExtensionContext context, ISession session)\r\n/// отличие лишь в табличных частях с которыми мы работаем, соотвественно, чтобы не плодить кучу схожих методов\r\n/// решил добавить перечисление, где 3-им аргументов будет прокидываться enum секции, как опознавательный знак\r\n/// P.S. возможно пригодится для других задач\r\n/// \r\nexport enum DocumentSections {\r\n ContractArticleIdp = 1,\r\n ArContractPartnersTable = 2\r\n}","module.exports = tessa.tessa.ui.views.extensions;","export class ECMRequestTypes {\r\n /** Определение связанной с категорией договора Статьи БК */\r\n static ECMGetCostItemByCategoryRequestID = '7C248788-EC83-4279-B40F-78A4EA8B97E0';\r\n\r\n /** Проверка доступности создать доп соглашение или СоР через тайл. */\r\n static VisibilityTileCreateContractDocument = 'D8BEE905-3278-438A-B716-5B08E1F619F7';\r\n\r\n /** Относится ли КА КСК к периметру ПИК-Комфорт. */\r\n static ECMIsPartnerInComfortPerimeterRequestID = 'FBF438EE-AE90-4EB4-AA97-D5288B53C8FC';\r\n\r\n /** Перезапускает указанный процесс.*/\r\n static ECMResetProcessesRequestID = 'BDE829B3-FCDA-4460-823F-A140EC2A4B06';\r\n\r\n /** Определяет вхождение в роль*/\r\n static PkIsUserBelongsToRole = '3D6D95D8-1773-423D-89C2-2CC75D5C017D';\r\n}","// Типы исполнительных схем\r\nexport class CdExecutiveSchemeTypes {\r\n // Геодезическая\r\n public static GeodeticSchemeType: guid = '0f8d8698-cabc-47d9-9a3a-0e8e75f32e96';\r\n // Негеодезическая\r\n public static NonGeodeticSchemeType : guid = 'eabd83d9-10cb-4fb0-af64-2c9fe604e372'; \r\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import { createTypedField, DotNetType } from 'tessa/platform';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\nimport { userSession } from 'common/utility';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\n\r\nexport class PkMatrixWorkplaceHelper {\r\n\r\n public static async CheckUserInRoleAsync(roleID: string | null) : Promise {\r\n const requestIsUserInRole = new CardRequest();\r\n requestIsUserInRole.requestType = CdRequestTypes.CheckUserInRole;\r\n requestIsUserInRole.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n requestIsUserInRole.info[\"RoleID\"] = createTypedField(roleID, DotNetType.Guid);\r\n\r\n const responseIsUserInRole = await CardService.instance.request(requestIsUserInRole);\r\n\r\n if (!responseIsUserInRole.validationResult.isSuccessful)\r\n {\r\n return false;\r\n }\r\n\r\n let isUserInRole = responseIsUserInRole.info.IsUserInRole.$value as boolean;\r\n\r\n if (!isUserInRole)\r\n { \r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public static GetCardTypeByAlias(alias : string | undefined) : string | null\r\n {\r\n switch (alias)\r\n {\r\n case \"PkMatrixLawyer\":\r\n {\r\n return PkCardTypes.PkMatrixLawyerTypeID;\r\n }\r\n\r\n case \"PkMatrixRemark\":\r\n {\r\n return PkCardTypes.PkMatrixRemarkTypeID;\r\n }\r\n\r\n case \"PkMatrixAccountant\":\r\n {\r\n return PkCardTypes.PkMatrixAccountantTypeID;\r\n }\r\n\r\n case \"PkMatrixAccountantOHR\":\r\n {\r\n return PkCardTypes.PkMatrixAccountantOHRTypeID;\r\n }\r\n\r\n case \"PkMatrixEditorHistoricalDocuments\":\r\n {\r\n return PkCardTypes.PkMatrixEditorHistoricalDocumentsTypeID;\r\n }\r\n\r\n case \"PkMatrixConsolidating\":\r\n {\r\n return PkCardTypes.PkMatrixConsolidatingTypeID;\r\n }\r\n \r\n case \"PkMatrixLandAssetCompanies\":\r\n {\r\n return PkCardTypes.PkMatrixLandAssetCompaniesTypeID;\r\n } \r\n case \"PkCreatorsContractsTechnicalCategory\":\r\n {\r\n return PkCardTypes.PkCreatorsContractsTechnicalCategoryTypeID;\r\n }\r\n\r\n default: return null;\r\n }\r\n }\r\n\r\n public static GetColumnNameByAlias(alias : string | undefined) : string | null\r\n {\r\n switch (alias)\r\n {\r\n case \"PkMatrixLawyer\":\r\n {\r\n return \"MatrixLawyerID\";\r\n }\r\n\r\n case \"PkMatrixRemark\":\r\n {\r\n return \"MatrixRemarkID\";\r\n }\r\n\r\n case \"PkMatrixAccountant\":\r\n {\r\n return \"MatrixAccountantID\";\r\n }\r\n\r\n case \"PkMatrixAccountantOHR\":\r\n {\r\n return \"MatrixAccountantOHRID\";\r\n }\r\n\r\n case \"PkMatrixEditorHistoricalDocuments\":\r\n {\r\n return \"PkMatrixEditorHistoricalDocumentsID\";\r\n }\r\n\r\n case \"PkMatrixConsolidating\":\r\n {\r\n return \"MatrixConsolidatingID\";\r\n }\r\n\r\n case \"PkCreatorsContractsTechnicalCategory\":\r\n {\r\n return \"PkCreatorsContractsTechnicalCategoryID\";\r\n }\r\n\r\n default: return null;\r\n }\r\n }\r\n\r\n public static GetRoleIDByAlias(alias : string | undefined) : string | null\r\n {\r\n switch (alias)\r\n {\r\n case \"PkMatrixLawyer\":\r\n {\r\n return \"209b7107-2565-4b37-8570-3c50ec6beafa\";\r\n }\r\n\r\n case \"PkMatrixRemark\":\r\n {\r\n return \"070ca508-0b01-48f7-ab18-896ad2f9b9fd\";\r\n }\r\n\r\n case \"PkMatrixAccountant\":\r\n case \"PkMatrixAccountantOHR\":\r\n {\r\n return \"f73c3091-56f9-41b5-b7e8-54cccb0a3f6f\";\r\n }\r\n\r\n case \"PkMatrixEditorHistoricalDocuments\":\r\n {\r\n return \"58836ab1-f234-4519-bb60-37fde8dbfbef\";\r\n }\r\n\r\n case \"PkMatrixConsolidating\":\r\n {\r\n return \"e49092a0-1a18-4363-87fc-6b95cb321414\";\r\n }\r\n \r\n case \"PkMatrixLandAssetCompanies\":\r\n {\r\n return \"c7a32bf4-add6-4042-850d-2dadf4dec37f\";\r\n }\r\n case \"PkCreatorsContractsTechnicalCategory\":\r\n {\r\n return \"c90df157-16d4-4124-ad2a-5c8f2904e4f5\";\r\n }\r\n\r\n default: return null;\r\n }\r\n }\r\n}","module.exports = tessa.tessa.localization;","module.exports = tessa.tessa.ui.views;","module.exports = mobxReact;","import { CdDocStates } from \"../CdDocStates\";\r\nimport { CardSection, Card } from \"tessa/cards\";\r\nimport { number, string } from \"prop-types\";\r\nimport { CdFdTaskTypes } from \"../CdFdTaskTypes\"\r\nimport { ChTaskTypes } from \"src/pkScripts/Helpers/ChTaskTypes\";\r\n\r\n\r\nexport class CdExecutiveSchemeSharedHelper { \r\n public static GetRoles() {\r\n let roles = [{Name: string, IntID: number}];\r\n //@ts-ignore\r\n roles[0] = {IntID: 0, Name: 'Представитель лица, выполнившего работы, осуществивший подготовку исполнительной схемы'}; \r\n //@ts-ignore\r\n roles[1] = {IntID: 1, Name: 'Представитель лица, выполнившего работы, подлежащие освидетельствованию'};\r\n //@ts-ignore\r\n roles[2] = {IntID: 2, Name: 'Представитель заказчика, ответственный за геодезическую проверку выполненных работ'}; \r\n //@ts-ignore\r\n roles[3] = {IntID: 3, Name: 'Дополнительные согласующие'}; \r\n //@ts-ignore\r\n roles[4] = {IntID: 4, Name: 'Авторский надзор'}; \r\n \r\n return roles;\r\n }\r\n\r\n // Получить ID роли по состоянию (используется для синхронизации согласующий в таблице и задании)\r\n public static GetRoleID(docState: number | undefined | null) {\r\n if (!docState) {\r\n return -1;\r\n }\r\n\r\n if (docState === CdDocStates.OnApprovalSubcontractor.id ||\r\n docState === CdDocStates.OnSigningSubcontractor.id) {\r\n return 0;\r\n }\r\n else if (docState === CdDocStates.OnApprovalContractor.id ||\r\n docState === CdDocStates.OnSigningContractor.id) {\r\n return 1;\r\n }\r\n else if (docState === CdDocStates.OnApprovalGPExecutorWorks.id ||\r\n docState === CdDocStates.OnSigningGPExecutorWorks.id) {\r\n return 2;\r\n }\r\n else if (docState === CdDocStates.OnApprovalGP.id ||\r\n docState === CdDocStates.OnSigningGP.id) {\r\n return 3;\r\n }\r\n else if (docState === CdDocStates.OnApprovalAuthorSupervision.id ||\r\n docState === CdDocStates.OnSigningAuthorSupervision.id) {\r\n return 5;\r\n }\r\n else if (docState === CdDocStates.OnApprovalCustomer.id ||\r\n docState === CdDocStates.OnSigningCustomer.id) {\r\n return 4;\r\n }\r\n else if (docState === CdDocStates.OnApprovalOperatingOrganization.id ||\r\n docState === CdDocStates.OnSigningOperatingOrganization.id) {\r\n return 6;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n\r\n // Получить актуальный номер роли согласующего\r\n public static GetActualRole(currentRole: number) {\r\n return currentRole === 4 || currentRole === 5\r\n ? currentRole === 4\r\n ? 5\r\n : 4\r\n : currentRole;\r\n }\r\n\r\n /** Получить ИД шаблона файла */\r\n public static GetCurrentTemplateFileRowID(card: Card) {\r\n let ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n if (!ediSection) return null;\r\n let templateFileRowID: guid | undefined = ediSection.fields.tryGet('TemplateFileRowID');\r\n if (!templateFileRowID) return null;\r\n return templateFileRowID;\r\n }\r\n\r\n static ApproverTaskStoreInfo =\r\n {\r\n TaskSignTypesList : [\r\n CdFdTaskTypes.PkSignExecutiveSchemeAgreementTypeID,\r\n CdFdTaskTypes.PkSignExecutiveSchemeAgreementWithAgreementorTypeID,\r\n ChTaskTypes.PkSignerAgreementTypeID\r\n ] \r\n }\r\n\r\n}","import { Card, CardSection, CardPermissionFlags } from \"tessa/cards\";\r\nimport { ICardModel, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { DotNetType, createTypedField, Visibility, Guid } from \"tessa/platform\";\r\nimport { GridViewModel, GridRowAction, ButtonViewModel } from \"tessa/ui/cards/controls\"; //,GridRowAction //, FileFiltering, FileInternalFiltering\r\nimport { showNotEmpty, UIButton } from \"tessa/ui\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { CdRequestTypes } from \"../CdRequestTypes\";\r\nimport { reaction } from \"mobx\";\r\nimport { CdRdStages } from \"../CdRdStages\";\r\nimport { CdUIHelper } from \"src/cdScripts/UI/CdUIHelper\";\r\nimport { CdCommonHelper } from \"../CdCommonHelper\";\r\nimport { IFile } from 'tessa/files';\r\nimport { CdRdListHelper } from '../../Helpers/CdRdListHelper';\r\nimport { CdCardTypes } from \"../CdCardTypes\";\r\nimport { CdDocStates } from \"../CdDocStates\";\r\n\r\n\r\nexport class CdTechnicalDocumentationClientHelper {\r\n // Список контролов, отображаемых, если в карточке РД был выбран объект не по реновации\r\n static controlNamesIfNotRenovation: string[] =\r\n [\r\n \"PkPIKProjectGroup\",\r\n \"PkCustomerProjectTeam\",\r\n \"Gip\",\r\n \"PkMainConstructionControl\",\r\n \"PkQualityControlSpecialist\",\r\n \"PkMechanicalEngineer\",\r\n \"PkElectricalEngineer\",\r\n \"PkConstructionControlSSEngineer\",\r\n \"PkCustomerServiceEngineerHeatSupply\",\r\n \"PkCustomerServiceEngineerVK\",\r\n \"PkCustomerServiceEngineerSS\",\r\n \"PkCustomerServiceEngineerEOM\",\r\n \"PtoEngineers\"\r\n ]\r\n\r\n // Список контролов, отображаемых, если в карточке РД был выбран объект по реновации\r\n static controlNamesIfRenovation: string[] =\r\n [\r\n \"TDClerk\",\r\n \"TDPtoEngineers\",\r\n \"TDEngineersGroup\",\r\n \"ProjectManagers\",\r\n \"Designer\"\r\n ];\r\n\r\n // Список контролов, отображаемых для старого процесса согласования.\r\n static controlNamesOldAgreementTDProcess: string[] =\r\n [\r\n \"Uks\",\r\n \"UksPto\",\r\n \"Gip\",\r\n \"Osp\",\r\n \"ProjectGroup\",\r\n \"ExternalApprovalResponsible\",\r\n \"CurrentPerformers\",\r\n \"ProductDepartment\",\r\n \"AcquaintancedUsers\",\r\n \"SignderOfTD\",\r\n \"ProjectGroupPM\",\r\n \"Designer\"\r\n ];\r\n\r\n public static ReferenceTableLogic(context: ICardUIExtensionContext, _disposer: Function | null) {\r\n let referencesTableAlias = \"RefsTable\";\r\n let referencesGrid = context.model.controls.get(referencesTableAlias) as GridViewModel;\r\n if (referencesGrid != null) {\r\n _disposer = reaction(() => referencesGrid.selectedRow, row => {\r\n if (row!.row != null) {\r\n let refTypeName = \"Обратная ссылка\";\r\n if (row!.row.get(\"RefTypeName\") === refTypeName) {\r\n context.model.card.permissions.sections.getOrAdd(\"PkReferencesVirtual\").setSectionPermissions(CardPermissionFlags.ProhibitDeleteRow);\r\n }\r\n else {\r\n context.model.card.permissions.sections.getOrAdd(\"PkReferencesVirtual\").setSectionPermissions(CardPermissionFlags.AllowDeleteRow);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n public static TechDocPagesTableLogic(context: ICardUIExtensionContext, disposer: Function | null) {\r\n let table = context.model.controls.get(\"TechDocPagesTable\") as GridViewModel;\r\n if (!table) return;\r\n\r\n table.rowInvoked.add(e => {\r\n if (e.action === GridRowAction.Deleting) {\r\n e.cancel = true;\r\n let eorder = e.row.tryGetField(\"Order\")!.$value;\r\n table!.rows.forEach(row => {\r\n let order = row.row.tryGetField(\"Order\")!.$value;\r\n if (order && row.rowId != e.row.rowId && order >= eorder)\r\n row.row.set(\"Order\", createTypedField(order + 1, DotNetType.Int32))\r\n });\r\n }\r\n if (e.action === GridRowAction.Inserted) {\r\n e.cancel = true;\r\n }\r\n });\r\n let currentFile: IFile | null = null;\r\n let currentRowName: string = \"лист\";\r\n let fileVirtual = context.model.fileContainer.files.find(x => Guid.equals(x.id, CdRdListHelper.RdListFileID));\r\n let downloadFile = new UIButton(\"Сохранить файл\",\r\n async () => {\r\n if (!currentFile) return;\r\n await currentFile!.ensureContentLoaded();\r\n let data = currentFile!.lastVersion.content as Blob;\r\n // @ts-ignore\r\n download(data, currentRowName + \".pdf\", 'application/pdf');\r\n });\r\n downloadFile.setIsEnabled(false);\r\n table.rightButtons.push(downloadFile);\r\n if (disposer == null) {\r\n disposer = reaction(() => table.selectedRows, async () => {\r\n if (!table.selectedRow) return;\r\n let row = table.selectedRow!.row;\r\n let fileID: guid = row.tryGetField(\"FileID\") != null ? row.tryGetField(\"FileID\")!.$value : null;\r\n let order: number = row.tryGetField(\"Order\") != null ? row.tryGetField(\"Order\")!.$value : null;\r\n currentRowName = row.tryGetField(\"Name\") != null ? row.tryGetField(\"Name\")!.$value : null\r\n if (!order || !fileID) return;\r\n let request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdSetSelectedTechDocPage;\r\n request.cardId = context.card.id;\r\n request.info[\"Order\"] = createTypedField(order, DotNetType.Int32);\r\n request.info[\"FileID\"] = createTypedField(fileID, DotNetType.Guid);\r\n\r\n //файл клонируется, потому что не понял как очищать кэщ\r\n currentFile = fileVirtual!.clone(fileVirtual!.source);\r\n downloadFile.setIsEnabled(currentFile != null);\r\n let response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n context.model.previewManager.showPreview(currentFile!);\r\n });\r\n }\r\n\r\n }\r\n\r\n\r\n /** Проверить инвестиционный проект */\r\n public static CheckIsInvestment(card: Card) {\r\n\r\n let rdSection = card.sections.tryGet(\"PkRdProperties\");\r\n let isRenovation: boolean =\r\n rdSection !== null && rdSection !== undefined &&\r\n rdSection.fields.has(\"isRenovation\") &&\r\n rdSection.fields.tryGet(\"isRenovation\") != null &&\r\n rdSection.fields.tryGet(\"isRenovation\") == true;\r\n\r\n let isInvestment: boolean =\r\n card.typeId == CdCardTypes.TechnicalDocumentationTypeID && !isRenovation;\r\n\r\n return isInvestment;\r\n }\r\n\r\n\r\n // Логика доступности, заполнения и видимости полей\r\n public static async AvailableAndClearFields(context: ICardUIExtensionContext) {\r\n let model: ICardModel = context.model;\r\n let card: Card = context.model.card;\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n let rdSection: CardSection | undefined = card.sections.tryGet('PkRdProperties');\r\n let stageID, objectID, rdDivisionID: number | undefined;\r\n if (!pdciSection || !rdSection) return false;\r\n\r\n\r\n //#region Проверка при сохранении\r\n // if (fromSaving) {\r\n // stageID = pdciSection.fields.tryGet('StageID');\r\n // let rdSubdivisionID = rdSection.fields.tryGet('RdSubdivisionID');\r\n // if (stageID &&\r\n // stageID === CdRdStages.WorkingDocumentation &&\r\n // !rdSubdivisionID) {\r\n // showMessage('Подраздел РД обязателен для заполнения', 'Ошибка');\r\n // return false;\r\n // } else return true;\r\n // }\r\n //#endregion\r\n\r\n //#region Доступность полей при открытии карточки\r\n stageID = pdciSection.fields.tryGet('StageID');\r\n objectID = rdSection.fields.tryGet('ObjectID');\r\n rdDivisionID = rdSection.fields.tryGet('RdDivisionID');\r\n let cipherIsReadonly: boolean = !(objectID || stageID);\r\n await this.SetRenovation(card);\r\n this.SetControlVisibility(card, model);\r\n this.ReadOnlyFields(model, cipherIsReadonly, [\"Cipher\"]);\r\n this.ReadOnlyFields(model, !rdDivisionID, [\"RdSubdivisionControl\", \"ContractDivision\", \"SubDivision\"]);\r\n this.VisabilityControls(model, stageID === CdRdStages.WorkingDocumentation, [\"RdSubdivisionControl\"]);\r\n let stateID = pdciSection.fields.tryGet(\"StateID\");\r\n if (model.controls.has(\"RefreshApprovers\")) {\r\n let refreshApprovers = model.controls.get(\"RefreshApprovers\")!;\r\n if ((stateID == CdDocStates.Project.id || stateID == CdDocStates.Rework.id)\r\n && card.sections.has(\"PkContractors\")\r\n && card.permissions.sections.tryGet(\"PkContractors\")?.sectionPermissions == CardPermissionFlags.AllowModify) {\r\n refreshApprovers.controlVisibility = Visibility.Visible;\r\n refreshApprovers.block.blockVisibility = Visibility.Visible;\r\n var button = refreshApprovers as ButtonViewModel;\r\n if (rdSection) {\r\n button.onClick = async () => await CdUIHelper.FillApprovers(context, rdSection as CardSection);\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Доступность, очистка и заполнение полей при смене значений\r\n pdciSection.fields.fieldChanged.add(async e => {\r\n if (rdSection && pdciSection) {\r\n // Изменение поля \"Стадия\"\r\n if (e.fieldName === 'StageID') {\r\n stageID = pdciSection.fields.tryGet('StageID');\r\n objectID = rdSection.fields.tryGet('ObjectID');\r\n this.ClearFields(rdSection, [\"ContractDivision\", \"RdDivisionCipher\", \"RdDivisionID\", \"RdDivisionName\", \"SubDivision\", \"RdSubdivisionCipher\", \"RdSubdivisionID\", \"RdSubdivisionName\"]);\r\n this.ReadOnlyFields(model, true, [\"RdSubdivisionControl\", \"ContractDivision\", \"SubDivision\"]);\r\n this.ReadOnlyFields(model, !objectID || !stageID, [\"Cipher\"]);\r\n this.VisabilityControls(model, stageID !== undefined && stageID === CdRdStages.WorkingDocumentation, [\"RdSubdivisionControl\"]);\r\n }\r\n }\r\n });\r\n\r\n rdSection.fields.fieldChanged.add(async e => {\r\n if (rdSection && pdciSection) {\r\n // Изменение поля \"Объект\"\r\n if (e.fieldName === 'ObjectID') {\r\n await this.SetRenovation(card);\r\n stageID = pdciSection.fields.tryGet('StageID');\r\n objectID = rdSection.fields.tryGet('ObjectID');\r\n this.ClearFields(rdSection, [\"ContractDivision\", \"RdDivisionCipher\", \"RdDivisionID\", \"RdDivisionName\", \"SubDivision\", \"RdSubdivisionCipher\", \"RdSubdivisionID\", \"RdSubdivisionName\"]);\r\n this.ReadOnlyFields(model, true, [\"RdSubdivisionControl\", \"ContractDivision\", \"SubDivision\"]);\r\n this.ReadOnlyFields(model, !objectID || !stageID, [\"Cipher\"]);\r\n await this.FillRegionCityAndProject(rdSection, objectID);\r\n this.SetControlVisibility(card, model);\r\n await CdUIHelper.FillApprovers(context, rdSection);\r\n }\r\n // Изменение поля \"Шифр раздела\"\r\n else if (e.fieldName === 'RdDivisionName') {\r\n stageID = pdciSection.fields.tryGet('StageID');\r\n rdDivisionID = rdSection.fields.tryGet('RdDivisionID');\r\n this.ClearFields(rdSection, [\"ContractDivision\", \"SubDivision\", \"RdSubdivisionCipher\", \"RdSubdivisionID\", \"RdSubdivisionName\"]);\r\n this.ReadOnlyFields(model, !rdDivisionID, [\"RdSubdivisionControl\", \"ContractDivision\", \"SubDivision\"]);\r\n await this.SetRenovation(card);\r\n await CdUIHelper.FillApprovers(context, rdSection);\r\n\r\n // Предзаполнение шифра и названия раздела (если стадия \"Проектная документация\")\r\n if (stageID !== undefined &&\r\n stageID === CdRdStages.ProjectDocumentation &&\r\n rdDivisionID !== undefined) {\r\n this.ReadOnlyFields(model, !rdDivisionID, [\"ContractDivision\", \"SubDivision\"]);\r\n let rdDivisionCipher = rdSection.fields.tryGet('RdDivisionCipher');\r\n let rdDivisionName = rdSection.fields.tryGet('RdDivisionName');\r\n rdSection.fields.set('ContractDivision', createTypedField(rdDivisionCipher, DotNetType.String));\r\n rdSection.fields.set('SubDivision', createTypedField(rdDivisionName, DotNetType.String));\r\n }\r\n }\r\n // Изменение поля \"Шифр подраздела\"\r\n else if (e.fieldName === 'RdSubdivisionName') {\r\n this.ClearFields(rdSection, [\"ContractDivision\", \"SubDivision\"]);\r\n\r\n // Предзаполнение шифра и названия подраздела (если стадия \"Рабочая документация\")\r\n let rdSubdivisionCipher = rdSection.fields.tryGet('RdSubdivisionCipher');\r\n let rdSubdivisionName = rdSection.fields.tryGet('RdSubdivisionName');\r\n rdSection.fields.set('ContractDivision', createTypedField(rdSubdivisionCipher, DotNetType.String));\r\n rdSection.fields.set('SubDivision', createTypedField(rdSubdivisionName, DotNetType.String));\r\n }\r\n }\r\n });\r\n //#endregion\r\n\r\n return true;\r\n }\r\n private static async SetRenovation(card: Card) {\r\n var prpSection = card.sections.tryGet(\"PkRdProperties\");\r\n var objectID = null;\r\n\r\n if (prpSection == null)\r\n return;\r\n\r\n if ((objectID = prpSection.fields.tryGet(\"ObjectID\")) != null) {\r\n var request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRenovationAndProjectType;\r\n request.info[\"ObjectID\"] = createTypedField(objectID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful)\r\n return;\r\n prpSection.fields.set(\"isRenovation\", response.info.IsRenovation)\r\n }\r\n }\r\n\r\n /// Устанавливает видимость полей в блоке Участники в зависимости от признака Реновации\r\n private static SetControlVisibility(card: Card, model: ICardModel) {\r\n // Сначала скроем всех участников\r\n CdTechnicalDocumentationClientHelper.controlNamesOldAgreementTDProcess.forEach(controlName => {\r\n var control = model.controls.get(controlName);\r\n if (control != null) {\r\n control.controlVisibility = Visibility.Collapsed\r\n }\r\n });\r\n\r\n CdTechnicalDocumentationClientHelper.controlNamesIfRenovation.forEach(controlName => {\r\n var control = model.controls.get(controlName);\r\n if (control != null) {\r\n control.controlVisibility = Visibility.Collapsed\r\n }\r\n });\r\n\r\n CdTechnicalDocumentationClientHelper.controlNamesIfNotRenovation.forEach(controlName => {\r\n var control = model.controls.get(controlName);\r\n if (control != null) {\r\n control.controlVisibility = Visibility.Collapsed\r\n }\r\n });\r\n\r\n var prpSection = card.sections.tryGet(\"PkRdProperties\");\r\n let IsRenovation: boolean = prpSection != null\r\n && prpSection.fields.tryGet(\"isRenovation\") != null\r\n && prpSection.fields.tryGet(\"isRenovation\") == true;\r\n\r\n // Откроем список участников для реновации или для инвестицонных\r\n if (IsRenovation) {\r\n CdTechnicalDocumentationClientHelper.controlNamesIfRenovation.forEach(controlName => {\r\n var control = model.controls.get(controlName);\r\n if (control != null)\r\n control.controlVisibility = Visibility.Visible\r\n });\r\n }\r\n else {\r\n CdTechnicalDocumentationClientHelper.controlNamesIfNotRenovation.forEach(controlName => {\r\n var control = model.controls.get(controlName);\r\n if (control != null)\r\n control.controlVisibility = Visibility.Visible\r\n });\r\n }\r\n }\r\n private static async FillRegionCityAndProject(rdPropsSection: CardSection, objectId) {\r\n if (objectId == null) {\r\n rdPropsSection.fields.set(\"RegionID\", null);\r\n rdPropsSection.fields.set(\"RegionName\", null);\r\n rdPropsSection.fields.set(\"CityID\", null);\r\n rdPropsSection.fields.set(\"CityName\", null);\r\n rdPropsSection.fields.set(\"ProjectID\", null);\r\n rdPropsSection.fields.set(\"ProjectName\", null);\r\n rdPropsSection.fields.set(\"ObjectName\", null);\r\n rdPropsSection.fields.set(\"ObjectPlaceID\", null);\r\n rdPropsSection.fields.set(\"ObjectPlaceLivingComplex\", null);\r\n rdPropsSection.fields.set(\"ObjectCategoryID\", null);\r\n rdPropsSection.fields.set(\"ObjectCategoryName\", null);\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRdDivisionRoleProperties;\r\n request.info[\"FieldID\"] = createTypedField(objectId, DotNetType.Guid);\r\n request.info[\"FieldRoleType\"] = createTypedField(0, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n rdPropsSection.fields.set(\"RegionID\", null);\r\n rdPropsSection.fields.set(\"RegionName\", null);\r\n rdPropsSection.fields.set(\"CityID\", null);\r\n rdPropsSection.fields.set(\"CityName\", null);\r\n rdPropsSection.fields.set(\"ProjectID\", null);\r\n rdPropsSection.fields.set(\"ProjectName\", null);\r\n rdPropsSection.fields.set(\"ObjectName\", null);\r\n rdPropsSection.fields.set(\"ObjectPlaceID\", null);\r\n rdPropsSection.fields.set(\"ObjectPlaceLivingComplex\", null);\r\n rdPropsSection.fields.set(\"ObjectCategoryID\", null);\r\n rdPropsSection.fields.set(\"ObjectCategoryName\", null);\r\n return;\r\n }\r\n\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"RegionID\", response.info.RegionID);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"RegionName\", response.info.RegionName);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"CityID\", response.info.CityID);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"CityName\", response.info.CityName);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"ProjectID\", response.info.ProjectID);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"ProjectName\", response.info.ProjectName);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"ObjectPlaceID\", response.info.ResidentialComplexID);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"ObjectPlaceLivingComplex\", response.info.ResidentialComplexName);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"ObjectCategoryID\", response.info.ObjectCategoryID);\r\n CdCommonHelper.SetFieldToSection(rdPropsSection, \"ObjectCategoryName\", response.info.ObjectCategoryName);\r\n\r\n }\r\n\r\n // Очистка значений в полях секции\r\n private static ClearFields(sections: CardSection, fieldNames: string[]) {\r\n fieldNames.forEach(fieldName => {\r\n sections.fields.set(fieldName, null);\r\n });\r\n }\r\n\r\n // Установить доступность поля\r\n private static ReadOnlyFields(model: ICardModel, isReadOnly: boolean, controlNames: string[]) {\r\n controlNames.forEach(controlName => {\r\n let control = model.controls.get(controlName);\r\n if (control != null) control.isReadOnly = isReadOnly;\r\n });\r\n }\r\n\r\n // Установить видимость поля\r\n private static VisabilityControls(model: ICardModel, isVisible: boolean, controlNames: string[]) {\r\n controlNames.forEach(controlName => {\r\n let control = model.controls.get(controlName);\r\n if (control != null) control.controlVisibility =\r\n isVisible\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n });\r\n }\r\n}","export class CdRdStages {\r\n\r\n // Проектная документация\r\n static ProjectDocumentation = 1;\r\n\r\n // Рабочая документация\r\n static WorkingDocumentation = 2;\r\n}","export class ChContextRoles {\r\n\r\n /** директор дирекции */\r\n static DirectionManager = 'bda11182-18bf-4b0d-9d04-3acc9936b50c';\r\n\r\n /** Дополнительный согласующий для договорного документа. */\r\n static ArContractAdditionalApprover = '10dbcab2-a1ed-475c-875e-19a87df9586f';\r\n\r\n /** Руководитель инициатора для договорного документа. */\r\n static ArContractInitiatorLeader = '69e4ba9b-04bd-468e-a5ec-38bd0de38f66';\r\n\r\n /** Автор документа */\r\n static AuthorId = 'fd655183-a59e-409a-9a9b-1232087b0cb8';\r\n\r\n /** Подрядчик */\r\n static Contractor = 'ae6d3ff6-5c50-424e-94d9-cd573e6bd0c9';\r\n\r\n}","import { Card } from \"tessa/cards\";\r\n\r\nexport class CdExtensionHelper {\r\n // Получить список объектов для карточки из секции PkObjectList (секцию PkObjectList предварительно проверять не надо)\r\n public static GetObjectListFromPkObjectListSection(card: Card) {\r\n let objectList = [{ ID: null }];\r\n let index = 0;\r\n let olSection = card.sections.tryGet('PkObjectList');\r\n if (olSection) {\r\n for (let i = 0; i < olSection.rows.length; i++) {\r\n let row = olSection.rows[i];\r\n let objectID = row.getField('ObjectID') as guid | null | undefined;\r\n if (objectID) {\r\n // @ts-ignore\r\n objectList[index++] = { ID: objectID };\r\n }\r\n }\r\n }\r\n if (index > 0)\r\n return objectList;\r\n else\r\n return null;\r\n }\r\n}","export class CdApprovalListHelper {\r\n\r\n static ApprovalListFileName = \"История согласования.html\";\r\n static AcquaintanceListFileName = \"История ознакомления.html\";\r\n static ApprovalListName = \"PkApprovalList\";\r\n }","module.exports = Moment;","export class CdStaticRoles {\r\n\r\n /// \r\n /// Разрешено подписывать без усиления\r\n /// \r\n static CdSimpleSignAllowed = \"ace772e6-6646-4a66-bec1-9bc1693c61d4\";\r\n\r\n \r\n /// \r\n /// Администратор доверенностей\r\n /// \r\n static PoAAdminRoleID = \"91707309-ab6c-4b6c-96f1-df16bea8d8e9\";\r\n \r\n /// \r\n /// Просмотр xml в МЧД\r\n /// \r\n static CanWatchXmlInMachineReadablePoA = \"c3cb692e-a4af-421b-9a51-252448e77d51\";\r\n\r\n /// \r\n /// Администраторы ИРД.\r\n /// \r\n static IrdAdministrators = 'dd4fe9fd-d6f0-4a1e-8746-c17303aab803';\r\n\r\n // Управление Достроя И Восстановления\r\n static УправлениеДострояИВосстановления = 'df7f50ab-e7bd-4f45-a469-0d7224d9ee58';\r\n }","export class DefaultCompletionOptions {\r\n\r\n static CreateChildResolution = \"793bbafa-7f62-4af8-a156-515887d4d066\";\r\n static Delegate = \"b997a7f2-ad57-036f-8798-298c14309f46\";\r\n static Complete = \"5b108223-92db-49b9-8085-336758ccabaa\";\r\n\r\n }","module.exports = tessa.common.utility.userSession;","export class CdRdListHelper {\r\n\r\n static RdListFileName = \"Лист РД.pdf\";\r\n static RdListFileID = \"E21E685D-EB85-4730-BE6B-918EA7EDC2BE\";\r\n\r\n }","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","'use strict';var _typeof='function'==typeof Symbol&&'symbol'==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&'function'==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?'symbol':typeof a};(function(a){'use strict';var b=function(){for(var d=arguments.length,c=Array(d),f=0;f\r\n /// Возможность изменять коле \"Номенклатура дел\" (Дело)\r\n /// \r\n static PkEditCaseFlag = \"CanEditCase\";\r\n\r\n /// \r\n /// Возможность создать карточку на основании DV\r\n /// \r\n static PkCreatedBasedDVFlag = \"BasedDV\";\r\n\r\n /// \r\n /// Возможность регистрации без согласования\r\n /// \r\n static PkRegistrationWithoutAgreementFlag = \"CanRegistrationWithoutAgreement\";\r\n\r\n /// \r\n /// Возможность начать процесс на рассмотрение (Входящие)\r\n /// \r\n static PkStartReviewProcessFlag = \"CanStartReviewProcess\";\r\n\r\n /// \r\n /// Возможность начать процесс на согласование (Исходящие)\r\n /// \r\n static PkStartAlignmentOutgoingProcessFlag = \"CanStartAlignmentOutgoingProcess\";\r\n\r\n /// \r\n /// Возможность начать процесс на согласование (Служебка)\r\n /// \r\n static PkStartAlignmentMemoProcessFlag = \"CanStartAlignmentMemoProcess\";\r\n\r\n /// \r\n /// Возможность начать процесс на согласование (ОРД)\r\n /// \r\n static PkStartAlignmentOrdProcessFlag = \"CanStartAlignmentORDProcess\";\r\n\r\n /// \r\n /// Возможность начать процесс на исполение (Поручения)\r\n /// \r\n static PkStartExecutionsAssignmentProcessFlag = \"CanStartExecutionsAssignmentProcess\";\r\n\r\n /// \r\n /// Возможность перерегистрации\r\n /// \r\n static PkReRegistrationFlag = \"CanReRegistration\";\r\n\r\n /// \r\n /// Возможность перерегистрации ОРД\r\n /// \r\n static PkReRegistrationORDFlag = \"CanReRegistrationORD\";\r\n\r\n /// \r\n /// Возможность добавления контрагентов на \"лету\"\r\n /// \r\n static PkAddPartnerFlag = \"CanAddPartner\";\r\n\r\n /// \r\n /// Возможность начать процесс согласования в Распорядительном письме\r\n /// \r\n static PkStartLetterCreditProcessFlag = \"CanStartLetterCreditProcess\";\r\n\r\n /// \r\n /// Возможность изменять дату регистрации\r\n /// \r\n static PkEditRegistrationDateFlag = \"CanEditRegistrationDate\";\r\n\r\n /// \r\n /// Пользователь в статической роли \"Аналитики\"\r\n /// \r\n static PkUserInAnalyticsRole = \"CanHandleDocument\";\r\n\r\n /// \r\n /// Возможность отправлять сообщение в тп в служебке\r\n /// \r\n static PkCanSendMailIntoSupport = \"CanSendMailIntoSupport\";\r\n\r\n /// \r\n /// Возможность удалить расширенным способом\r\n /// \r\n static PkCanCustomDelete = \"CanCustomDelete\";\r\n\r\n /// \r\n /// Возможность аннулирования документа.\r\n /// \r\n static PkCanRevocateDocument = \"CanRevocateDocument\";\r\n}","export class ChProcessHelper {\r\n\r\n static PkIncommingProcessName = \" PkIncommingProcess\";\r\n static PkOutgoingProcessName = \" PkOutgoingProcess\";\r\n static PkMemoProcessName = \" PkMemoProcess\";\r\n static PkLetterCreditProcess = \"PkLetterCreditProcess\";\r\n static PkAssignmentProcessName = \" PkAssignmentProcess\";\r\n static PkRdndProcessName = \" PkRDNDProcess\";\r\n static ApprovalProcess = \"PkApprovalProcess\";\r\n\r\n\r\n static DocumentIsSigned = \"e3e573df-fd6a-489c-8de4-db1aa1b5b989\";\r\n static ForApproval = \"bf7958cc-3013-489f-a3b9-fcc875d1e069\";\r\n static SendForResubscriptionID = \"f934f6d2-4bc3-49a5-b1a0-5f3367ef43ad\";\r\n static PkReturnToCoordinator = \"35698e18-8a3a-4f72-a524-37c91d7ed36e\";\r\n static PkReturnToCoordinators = \"ebc93b73-d80b-4ebd-96d4-ce71e0cd0891\";\r\n static SendToPerformer = \"F4EBE563-14F6-4B20-A61F-0BAC4C11C8AC\";\r\n static PkStopAgreement = \"cc9f057f-1113-482c-bf43-756046634fcf\";\r\n static SendForRevision = \"5CB1F61D-50B1-4ECF-A75C-CFB40DF76466\";\r\n static Reject = \"297333cc-d62c-4980-a626-942ab88daf70\";\r\n static SignWithEDS = \"42f28e57-a763-4358-9f56-42c16308b333\";\r\n static PkSignInDiadoc = \"e0f9ff5d-d45f-48ad-9a37-53a3f7b6af99\";\r\n static PkSign = \"80df932d-4774-42ce-a86c-d3b1d269fd38\";\r\n static PkRegisterDocument = \"3ca54274-f704-4864-890e-47ea2390b081\";\r\n static PkSendRepeat = \"8a99564f-3421-4bd5-b331-2b7b2674229b\";\r\n\r\n\r\n}","export class PkIncomingKinds {\r\n\r\n static PaymentToTheSupplierID = \"4c50ebc7-ced1-47d0-ab59-8c4bae961653\";\r\n static PaymentToTheSupplierName = \"Оплата поставщику\";\r\n static ReturnToBuyerID = \"0a3a4411-d18f-437b-a31d-9c1ff0ca942a\";\r\n static ReturnToBuyerName = \"Возврат покупателю\";\r\n\r\n static ProvisionOfDocumentsID = \"1DEE41F1-683E-4372-978E-003F00D6B74D\";\r\n static ProvisionOfDocumentsName = \"Предоставление документов\";\r\n\r\n static CompensationID = \"2710FF25-7CAA-468F-863D-4136C804DA6E\";\r\n static CompensationName = \"Компенсация\";\r\n\r\n static RefundID = \"DBD42E6E-022C-490C-86F2-8DDDD12523AD\";\r\n static RefundName = \"Возврат денежных средств\";\r\n\r\n static RequireID = \"5DD01F6F-F24A-4B5B-9ED7-962FA15F5D48\";\r\n static RequireName = \"Претензия\";\r\n\r\n static PenaltyID = \"1C0E95D5-C6FB-4672-B7EA-B00253273A47\";\r\n static PenaltyName = \"Неустойка\";\r\n\r\n static COActID = \"9F6DE14A-5BD5-4E0F-871A-B087E6A1D0BD\";\r\n static COActName = \"Акт КО\";\r\n\r\n static PopulationID = \"0DD4C69D-4062-4001-A232-ED4248E69C26\";\r\n static PopulationName = \"Заселение\";\r\n\r\n static AgendaID = \"4d927f42-bd51-4186-90e0-2049b9225817\";\r\n static AgendaName = \"Повестка\";\r\n\r\n static DeclarationID = \"181dcb99-c69d-4ea5-b494-1c37342ebf68\";\r\n static DeclarationName = \"Исковое заявление\";\r\n\r\n static JudgementID = \"c8b844b8-64e3-44df-b282-c51277d7f8c3\";\r\n static JudgementName = \"Решение суда\";\r\n\r\n static PerfomanceListID = \"f4c47e8a-f502-4fc0-aeea-3d4cb10c9b5d\";\r\n static PerfomanceListName = \"Исполнительный лист\";\r\n\r\n static ResolutionOfBailiffsID = \"8ca6406b-0ca0-4493-ab93-2f2ee20cf136\";\r\n static ResolutionOfBailiffsName = \"Постановление судебных приставов\";\r\n\r\n static RequestFromLawID = \"db91f0b7-263a-46d6-a45f-5d11be951e73\";\r\n static RequestFromLawName = \"Запрос от судов\";\r\n\r\n static DefinitionID = \"fd98093e-5a26-47ec-a022-6dea0947af2b\";\r\n static DefinitionName = \"Определение\";\r\n\r\n static RequestFromGovernmentID = \"e77fb750-cf3c-4d82-91ec-3441660bdcc9\";\r\n static RequestFromGovernmentName = \"Запрос от государственных органов\";\r\n\r\n static WarrantyServiceID = \"53e99953-9e5e-4492-ac57-0017288b0899\";\r\n static WarrantyServiceName = \"Гарантийное обслуживание\";\r\n\r\n static TransmittalLetterID = \"af927335-7561-43ba-aa17-3e67806bd238\";\r\n static TransmittalLetterName = \"Сопроводительное письмо\";\r\n\r\n static NotificationsRequestsID = \"58cda491-ab9a-414e-aa8b-07209650d0ca\";\r\n static NotificationsRequestsName = \"Уведомления/запросы\";\r\n\r\n static FinesID = \"7b934e8e-7d31-4a19-9675-bca193990b11\";\r\n static FinesName = \"Штрафы\";\r\n\r\n static CooperationID = \"379be7d8-2a45-4190-a631-db1629ea27f3\";\r\n static CooperationName = \"Сотрудничество\";\r\n\r\n static TransferToCRMSDID = \"ca98c73a-09d6-470f-bb41-0be9bda68378\";\r\n static TransferToCRMSDName = \"Передача в CRM SD\";\r\n \r\n static ViolationOfTheTermID = \"ec080564-880e-43b0-bbb0-677287247aea\"; \r\n static ViolationOfTheTermName = \"Компенсация за нарушение сроков\";\r\n \r\n static RepairPaymentID = \"b754795c-b525-4dfc-9f2e-808572f01024\";\r\n static RepairPaymentName = \"Компенсация (оплата ремонта)\";\r\n \r\n static PropertyID = \"f05be482-bc60-4761-8fa4-c3df9492f390\";\r\n static PropertyName = \"Компенсация (имущество)\";\r\n \r\n static FinishingBuilderID = \"b86d4856-9543-46ff-9acc-04141746c648\"; \r\n static FinishingBuilderName = \"Компенсация (отделка застройщика)\";\r\n \r\n static RecalculationID = \"d77f7e88-79b9-492a-98a2-c9634a1704fe\";\r\n static RecalculationName = \"Компенсация (перерасчет)\";\r\n\r\n static TerminationOfDDUID = \"dbab46ba-859f-437f-9eaf-34897ef8d5da\";\r\n static TerminationOfDDUName = \"Одностороннее расторжение ДДУ\";\r\n \r\n static TerminationOfPDKPID = \"1c7f4547-54c7-48eb-8f8d-162b020fe1af\";\r\n static TerminationOfPDKPName = \"Расторжение ПДКП (Клиент)\";\r\n }","export enum PkSettingsCardSingletones\r\n{\r\n PkBlackBoxSettingsCard = \"0383f69e-9991-4322-bbe6-91301758087c\",\r\n PkCDWSettingsCard = \"CC99CD92-534E-433A-B291-8E91A94C5F29\",\r\n PkDssSettingsCard = \"16a60e57-b16f-4731-9f79-120ec564e5d3\",\r\n PkMdsSettingsCardTypeName = \"PkMdsSettingsCard\",\r\n PkCourtsSettingsCard = \"a4251501-d64c-4a2a-920e-0447d9d4cd91\",\r\n IrdSettingsCardName = 'IrdSettingsCard',\r\n IrdSettingsCardID = '45d23065-64c6-4496-8559-2a3d27d5c187',\r\n}","export class ChStaticRoles {\r\n\r\n static ElectronicApplicationForPass = \"d6b3a003-21dc-4b4b-a7ad-2a7aa4cda72a\";\r\n\r\n /** Наблюдатели по всем повесткам */\r\n static ObserverOnAllAgendasID = \"b6992f7f-bbe7-4ecb-8c42-bcb72e065c65\";\r\n\r\n /* Координаторы_ОГО */\r\n static PkCoordinatorOGO = \"35130e71-9649-4efa-ba71-e52072f91e52\";\r\n\r\n /* Координаторы_ОГО Имя*/\r\n static PkCoordinatorOGOName = \"Координатор_ОГО\";\r\n\r\n /* Административная группа. */\r\n static AdministrativeGroupRoleID = \"ff63482b-97f4-4595-b9aa-5a0922a18bbd\";\r\n\r\n /* Суды общей юрисдикции_Москва и МО */\r\n static CivilianCourtsMOID = \"89469a4b-d4f9-435e-8208-bc5c18406cf5\";\r\n\r\n /* Суды общей юрисдикции_Москва и МО */\r\n static CivilianCourtsMOName = \"Суды общей юрисдикции_Москва и МО\";\r\n\r\n /* Суды_арбитраж */\r\n static ArbitraryCourtsID = \"d515b6fa-288e-49ca-a153-595331d9ea2c\";\r\n\r\n /* Суды_арбитраж */\r\n static ArbitraryCourtsName = \"Суды_арбитраж\";\r\n\r\n /** Администратор ТП */\r\n static SupportAdministratorID = \"58836ab1-f234-4519-bb60-37fde8dbfbef\";\r\n\r\n /** Администратор ТП */\r\n static SupportAdministratorName = \"Администратор ТП\";\r\n\r\n /** Доступ к ДМС */\r\n static AccessToDmsID = \"e9fac391-0b62-4fa7-a578-70daf88e6706\";\r\n\r\n /** Доступ к ДМС */\r\n static AccessToDmsName = \"Доступ к ДМС\";\r\n}","export class ChMetaRoles{\r\n static AllContractorsID = '0bf892fd-7d5b-4e19-8a7e-97469eb9f000';\r\n}","import { TileExtension, ITileGlobalExtensionContext, Tile, TileGroups,\r\n TileEvaluationEventArgs , ITileLocalExtensionContext,\r\n disableWithCollapsing} from 'tessa/ui/tiles';\r\nimport { tryGetFromInfo, showConfirm, UIContext, showError, showNotEmpty,\r\n createCardModel, UIButton , showMessage, showConfirmWithCancel , LoadingOverlay, IUIContext } from 'tessa/ui';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { createTypedField, DotNetType, Guid, DbType, TypedField } from 'tessa/platform';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { CardNewRequest, CardService , CardRequest} from 'tessa/cards/service';\r\nimport { showFormDialog, showViewsDialog, createCard, openCard } from 'tessa/ui/uiHost';\r\nimport { RequestParameterBuilder } from 'tessa/views';\r\nimport { ViewParameterMetadata, equalsCriteriaOperator, nonEqualsCriteriaOperator, RequestParameter } from 'tessa/views/metadata';\r\nimport { KrToken } from 'tessa/workflow';\r\nimport { ChCardFlagsInfo } from '../Helpers/ChCardFlagsInfo';\r\nimport { ChFileCategories } from '../Helpers/ChFileCategories';\r\nimport { ChProcessHelper } from '../Helpers/ChProcessHelper';\r\nimport { PkCommonHelper } from '../Helpers/PkCommonHelper';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { ChRequestTypes } from '../Helpers/ChRequestTypes';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdProcessHelper } from 'src/cdScripts/Helpers/CdProcessHelper';\r\nimport { CdCardFlagsInfo } from 'src/cdScripts/Helpers/CdCardFlagsInfo';\r\nimport { CdCardHelper } from 'src/cdScripts/Helpers/CdCardHelper';\r\nimport { PkIncomingKinds } from '../Helpers/PkIncomingKinds';\r\nimport { userSession } from 'common/utility';\r\nimport { ChStaticRoles } from '../Helpers/ChStaticRoles';\r\nimport { PkSettingsCardSingletones } from '../helpers/PkSettingsCardSingletones';\r\nimport { Card } from 'tessa/cards';\r\nimport { PkOutgoingKinds } from '../Helpers/PkOutgoingKinds';\r\nimport { CdDocStates } from '../../cdScripts/Helpers/CdDocStates';\r\nimport { ChMetaRoles } from '../Helpers/ChMetaRoles';\r\n\r\nexport class ChChanceryTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n panel.tiles.push(new Tile({\r\n name: \"PkStartIncomingProcess\",\r\n caption: \"На рассмотрение\",\r\n icon: \"ta icon-thin-191\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ChChanceryTileExtensionHelper.startIncomingProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartIncomingProcess\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkOutgoingProcess\",\r\n caption: \"Начать согласование\",\r\n icon: \"ta icon-thin-191\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ChChanceryTileExtensionHelper.startOutgoingProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartOutgoingProcess\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkMemoProcess\",\r\n caption: \"Начать согласование\",\r\n icon: \"ta icon-thin-191\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ChChanceryTileExtensionHelper.startMemoProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartMemoProcess\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkLetterCreditProcess\",\r\n caption: \"Начать согласование\",\r\n icon: \"ta icon-thin-191\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ChChanceryTileExtensionHelper.startLetterCreditProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartLetterCreditProcess\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkAssignmentProcess\",\r\n caption: \"Отправить поручение\",\r\n icon: \"ta icon-thin-191\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ChChanceryTileExtensionHelper.startAssignmentProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartAssignmentProcess\r\n }));\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"ChUpdateOutgoingStamp\",\r\n caption: \"Обновить штамп исх.д. и отправить уведомление на Email\",\r\n icon: \"\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: ChChanceryTileExtensionHelper.updateStamps,\r\n evaluating: ChChanceryTileExtensionHelper.canUpdateStamps\r\n }));\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"AttachCorrespondencePrintForm\",\r\n caption: \"Добавить печатную форму\",\r\n icon: \"ta icon-thin-064\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: ChChanceryTileExtensionHelper.AttachCorrespondencePrintForm,\r\n evaluating: ChChanceryTileExtensionHelper.canAttachCorrespondencePrintForm\r\n }));\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"ChSendEmailNotificationToClient\",\r\n caption: \"Отправить клиенту уведомление на Email\",\r\n icon: \"\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: ChChanceryTileExtensionHelper.sendEmailNotification,\r\n evaluating: ChChanceryTileExtensionHelper.canSendEmailNotification\r\n }));\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"PkRDNDProcess\",\r\n caption: \"Начать согласование\",\r\n icon: \"ta icon-thin-191\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ChChanceryTileExtensionHelper.startRdndProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartRdndProcess\r\n }));\r\n \r\n panel.tiles.push(new Tile({\r\n name: \"PkVndProcess\",\r\n caption: \"Утверждение Грифом\",\r\n icon: \"ta icon-thin-191\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 80,\r\n command: ChChanceryTileExtensionHelper.startRdndProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartVndProcess\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkRegisterDocument\",\r\n caption: \"Зарегистрировать\\nдокумент\\nбез согласования\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 15,\r\n command: ChChanceryTileExtensionHelper.startRegistrationWithoutAgreementAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartRegistrationWithoutAgreement\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkReRegistration\",\r\n caption: \"Изменить дату\\nрегистрации\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 19,\r\n command: ChChanceryTileExtensionHelper.startEditRegistrationDateAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartEditRegistrationDate\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkReRegistration\",\r\n caption: \"Зарегистрировать\\nзадним числомv\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 20,\r\n command: ChChanceryTileExtensionHelper.startReRegistrationAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartReRegistration\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkReRegistration\",\r\n caption: \"Зарегистрировать\\nза другую дату\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 21,\r\n command: ChChanceryTileExtensionHelper.startReRegistrationORDAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartReRegistrationORD\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkRevocateIncoming\",\r\n caption: \"Аннулировать документ\",\r\n icon: \"ta icon-thin-065\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 11,\r\n command: ChChanceryTileExtensionHelper.RevocateDocumentTileAction,\r\n evaluating: ChChanceryTileExtensionHelper.CanRevocateDocument\r\n })); \r\n panel.tiles.push(new Tile({\r\n name: \"PkReRegistration\",\r\n caption: \"Редактировать\\nномер документа\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 22,\r\n command: ChChanceryTileExtensionHelper.editRegNumber,\r\n evaluating: ChChanceryTileExtensionHelper.canEditRegistrationNumber\r\n }));\r\n\r\n let actionTile = panel.tryGetTile('CdActions');\r\n if (actionTile != null) {\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkPerformanceProcess\",\r\n caption: \"Создать задачу\\nна исполнение\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ChChanceryTileExtensionHelper.startPerformanceProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartExecutionTile\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkAcquaintanceProcess\",\r\n caption: \"Создать задачу\\nна ознакомление\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 15,\r\n command: ChChanceryTileExtensionHelper.startAcquaintanceProcessAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartAcquaintanceTile\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkChangeStateToIrrelevant\",\r\n caption: \"Отметить документ\\nкак неактуальный\",\r\n icon: \"ta icon-thin-404\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 20,\r\n command: ChChanceryTileExtensionHelper.changeStateToIrrelevantAction,\r\n evaluating: ChChanceryTileExtensionHelper.canChangeStateToIrrelevant\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkCreateChange\",\r\n caption: \"Создать\\nизменение\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 35,\r\n command: ChChanceryTileExtensionHelper.createChangeAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartCreateChange\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkRecallForRevision\",\r\n caption: \"Вернуть\\nна доработку\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 25,\r\n command: ChChanceryTileExtensionHelper.startRecallForRevisionAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartRecallForRevision\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkCreateBasedDocument\",\r\n caption: \"Создать документ\\nна основании\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 30,\r\n command: ChChanceryTileExtensionHelper.startCreateBasedDocumentAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartCreateBasedDocument\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"CompleteStatusSkp\",\r\n caption: \"Завершить статус в СКП\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 31,\r\n command: ChChanceryTileExtensionHelper.chChangeStateToCompleted,\r\n evaluating: ChChanceryTileExtensionHelper.canChangeStateToCompleted\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"ArMergeDuplicatesIDP\",\r\n caption: \"Слияние дубликатов\",\r\n icon: \"ta icon-thin-444\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 90,\r\n command: ChChanceryTileExtensionHelper.startMergeDuplicatesIDPAction,\r\n evaluating: ChChanceryTileExtensionHelper.canStartMergeDuplicatesIDP\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkSendMailIntoSupport\",\r\n caption: \"Отправить на почту ТП\",\r\n icon: \"ta icon-thin-012\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 91,\r\n command: ChChanceryTileExtensionHelper.sendMailIntoSupport,\r\n evaluating: ChChanceryTileExtensionHelper.canSendMailIntoSupport\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkOutgoingMailSenderRequestID\",\r\n caption: \"Ответить на e-mail\",\r\n icon: \"ta icon-thin-012\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 41,\r\n command: ChChanceryTileExtensionHelper.PkOutgoingMailSenderCommand,\r\n evaluating: ChChanceryTileExtensionHelper.CanSeePkOutgoingMailSender\r\n })); \r\n\r\n }\r\n\r\n const cardOthers = panel.tryGetTile('CardOthers');\r\n if (cardOthers != null) {\r\n cardOthers.tiles.push(new Tile({\r\n name: \"ChDeleteCard\",\r\n caption: \"Удалить карточку\",\r\n icon: \"ta icon-thin-058\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: ChChanceryTileExtensionHelper.deleteCard,\r\n evaluating: ChChanceryTileExtensionHelper.canDeleteCard\r\n }));\r\n }\r\n// var arProcesses =\r\n// new Tile(\r\n// \"Actions\",\r\n// \"Архивные процессы\",\r\n// context.Icons.Get(\"Thin222\"),\r\n// context.Workspace.RightPanel,\r\n// DelegateCommand.Empty,\r\n// TileGroups.Cards,\r\n// order: 70,\r\n// size: TileSize.Full,\r\n// evaluating: CanStartArProcesses);\r\n// context.Workspace.RightPanel.Tiles.Add(arProcesses);\r\n// arProcesses.Tiles.Add(\r\n// new Tile(\r\n// \"StartArProcesses\",\r\n// \"Создать инициализацию\" + Environment.NewLine + \"для архивных карточек\",\r\n// context.Icons.Get(\"Thin111\"),\r\n// context.Workspace.RightPanel,\r\n// new DelegateCommand(StartArProcesses),\r\n// TileGroups.Cards,\r\n// order: 70,\r\n// evaluating: CanStartArProcesses));\r\n\r\n// arProcesses.Tiles.Add(\r\n// new Tile(\r\n// \"StartArProcesses\",\r\n// \"Завершение инициализации\" + Environment.NewLine + \"для архивных карточек\",\r\n// context.Icons.Get(\"Thin111\"),\r\n// context.Workspace.RightPanel,\r\n// new DelegateCommand(ComplitedInitializapionArProcesses),\r\n// TileGroups.Cards,\r\n// order: 71,\r\n// evaluating: CanStartArProcesses));\r\n\r\n this.SetIsObserverOnAllAgendasAsync();\r\n const settingsTiles = context.workspace.rightPanel.tiles.find(x => x.name == \"Dialogues\")!.tiles\r\n || context.workspace.rightPanel.tiles;\r\n settingsTiles.push(\r\n new Tile({\r\n name: \"PkCourtsSettings\",\r\n caption: \"\\nНастройка закрепления\\n сотрудников по судам\",\r\n icon: \"\",\r\n contextSource: panel.contextSource,\r\n command: this.OpenCourtsSettingsAsync,\r\n group: TileGroups.Settings,\r\n evaluating: this.CanOpenCourtsSettings\r\n }));\r\n }\r\n\r\n public async initializingLocal(context: ITileLocalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n const editor = panel.context.cardEditor;\r\n let typeid;\r\n if(await this.IsUserContractor()){\r\n this.HideTilesForContractor(context);\r\n }\r\n if (editor == null || editor.cardModel == null ||\r\n editor.cardModel.cardType.id == null) {\r\n return;\r\n }\r\n typeid = editor.cardModel.cardType.id;\r\n if (!(typeid === CdCardTypes.PkKCKPartnerTypeID ||\r\n PkCardTypes.ChanceryCardTypes.indexOf(typeid) > -1 ||\r\n typeid === PkCardTypes.InstructionTypeID ||\r\n typeid === PkCardTypes.PkProtocolTenderTypeID)) {\r\n return;\r\n }\r\n if (typeid === PkCardTypes.PkIncomingTypeID ||\r\n typeid === PkCardTypes.PkOutgoingTypeID ||\r\n typeid === PkCardTypes.PkMemoTypeID ||\r\n typeid === PkCardTypes.RdndTypeID ||\r\n typeid === PkCardTypes.PkInternalDocumentationTypeID) {\r\n const otherTile = panel.tryGetTile('CardOthers');\r\n if (otherTile != null) {\r\n let deleteTile = otherTile.tryGetTile('DeleteCard');\r\n if (deleteTile != null) {\r\n disableWithCollapsing(deleteTile);\r\n }\r\n }\r\n }\r\n\r\n const createFileFromTemplate = panel.tryGetTile('CreateFileFromTemplate');\r\n if (createFileFromTemplate != null) {\r\n disableWithCollapsing(createFileFromTemplate);\r\n }\r\n }\r\n\r\n \r\n private static _isObserverOnAllAgendas: boolean | undefined = undefined;\r\n\r\n public async SetIsObserverOnAllAgendasAsync()\r\n {\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.CheckUserInRole\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(ChStaticRoles.ObserverOnAllAgendasID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.build().isSuccessful)\r\n {\r\n ChChanceryTileExtension._isObserverOnAllAgendas = response.info.IsUserInRole.$value;\r\n }\r\n }\r\n\r\n // \r\n /// Проверка, является ли пользователь подрядчиком\r\n /// \r\n private async IsUserContractor()\r\n {\r\n const contractorRole = ChMetaRoles.AllContractorsID;\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.CheckUserInRole\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(contractorRole, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n return response.validationResult.build().isSuccessful && response.info.IsUserInRole.$value;\r\n \r\n }\r\n\r\n private HiddenTilesForContractor = [\r\n \"PkIncoming\",\r\n \"PkOutgoing\",\r\n \"PkInternalDocumentation\",\r\n \"RDND\",\r\n \"PkProtocol\",\r\n \"PkProtocolTender\",\r\n \"PkMemo\"];\r\n\r\n /// \r\n /// Прячет тайлы для подрядчиков\r\n /// \r\n private HideTilesForContractor(context: ITileLocalExtensionContext){\r\n let tiles = context.workspace.rightPanel.tiles.find(t => t.name == 'CreateCard')?.tiles.find(t => t.name == 'Documents')?.tiles;\r\n tiles?.forEach(t => {\r\n if(this.HiddenTilesForContractor.some(a => t.name == a)){\r\n t.isEnabled = false;\r\n t.isCollapsed = true;\r\n }\r\n });\r\n }\r\n\r\n private async OpenCourtsSettingsAsync()\r\n {\r\n openCard({cardId:PkSettingsCardSingletones.PkCourtsSettingsCard});\r\n }\r\n\r\n private CanOpenCourtsSettings(e: TileEvaluationEventArgs)\r\n {\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n ChChanceryTileExtension._isObserverOnAllAgendas || false);\r\n }\r\n\r\n\r\n}\r\n\r\nexport class ChChanceryTileExtensionHelper {\r\n\r\n public static canStartIncomingProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n if (editor == null || editor.cardModel == null){\r\n e.setIsCollapsed(e.currentTile, true);\r\n return;\r\n }\r\n let pdiSection = editor.cardModel.card.sections.tryGet('PkIncomingInfo');\r\n if (pdiSection == null){\r\n e.setIsCollapsed(e.currentTile, true);\r\n return;\r\n }\r\n const kindID: guid | null | undefined = pdiSection.fields.tryGet('KindID');\r\n let isRefund = false;\r\n let isDDY = false;\r\n let isPDKP = false;\r\n let cardTypeIDIsIncoming = false;\r\n if (kindID != null\r\n && kindID.toLowerCase() === PkIncomingKinds.RefundID.toLowerCase()){\r\n isRefund = true;\r\n }\r\n if (kindID != null\r\n && kindID.toLowerCase() === PkIncomingKinds.TerminationOfDDUID.toLowerCase()){\r\n isDDY = true;\r\n }\r\n if (kindID != null\r\n && kindID.toLowerCase() === PkIncomingKinds.TerminationOfPDKPID.toLowerCase()){\r\n isPDKP = true;\r\n }\r\n if (editor.cardModel.card.typeId === CdCardTypes.PkIncomingTypeID){\r\n cardTypeIDIsIncoming = true;\r\n }\r\n\r\n if (editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkStartReviewProcessFlag, false)\r\n && cardTypeIDIsIncoming === true\r\n && isRefund === false\r\n && isDDY === false\r\n && isPDKP === false){\r\n e.setIsEnabledWithCollapsing(e.currentTile, true);\r\n }\r\n else{\r\n e.setIsCollapsed(e.currentTile, true);\r\n }\r\n \r\n }\r\n\r\n public static canStartOutgoingProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null \r\n && (editor.cardModel.card.sections.tryGet(\"PkOutgoing\")?.fields.tryGet(\"TypeID\") != PkOutgoingKinds.ClaimId || (editor.cardModel.card.sections.tryGet(\"PkOutgoing\")?.fields.tryGet(\"TypeID\") == PkOutgoingKinds.ClaimId && editor.cardModel.card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") == CdDocStates.Project))\r\n && tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkStartAlignmentOutgoingProcessFlag, false));\r\n }\r\n\r\n public static canStartMemoProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkStartAlignmentMemoProcessFlag, false));\r\n }\r\n\r\n public static canStartLetterCreditProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkStartLetterCreditProcessFlag, false));\r\n }\r\n\r\n public static canStartAssignmentProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkStartExecutionsAssignmentProcessFlag, false));\r\n }\r\n\r\n public static canStartRdndProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkStartAlignmentOrdProcessFlag, false) &&\r\n editor!.cardModel!.cardType.id == PkCardTypes.RdndTypeID);\r\n }\r\n\r\n public static canStartVndProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkStartAlignmentOrdProcessFlag, false) &&\r\n editor!.cardModel!.cardType.id == PkCardTypes.PkInternalDocumentationTypeID\r\n && editor!.cardModel!.card.sections.get(\"PkInternalDocumentation\")!.fields.get(\"Version\") == 1);\r\n }\r\n \r\n public static canStartRegistrationWithoutAgreement(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkRegistrationWithoutAgreementFlag, false)); \r\n ;\r\n }\r\n\r\n public static canStartEditRegistrationDate(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkEditRegistrationDateFlag, false));\r\n }\r\n\r\n public static canStartReRegistration(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkReRegistrationFlag, false));\r\n }\r\n\r\n public static canStartReRegistrationORD(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkReRegistrationORDFlag, false));\r\n }\r\n\r\n public static canEditRegistrationNumber(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkEditRegistrationNumberFlag, false));\r\n }\r\n\r\n public static canStartExecutionTile(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkExecutionTaskFlag, false) &&\r\n editor.cardModel.card.typeId != PkCardTypes.PkWorkOrderTypeID);\r\n }\r\n\r\n public static canStartAcquaintanceTile(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkAcquaintanceTaskFlag, false) &&\r\n editor.cardModel.card.typeId != PkCardTypes.PkWorkOrderTypeID);\r\n }\r\n\r\n public static canChangeStateToIrrelevant(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkNotRelevantFlag, false));\r\n }\r\n\r\n public static canStartCreateChange(e: TileEvaluationEventArgs) {\r\n e.setIsEnabledWithCollapsing(e.currentTile, false);\r\n }\r\n\r\n public static canStartRecallForRevision(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkRecallForRevisionFlag, false));\r\n }\r\n\r\n public static canStartCreateBasedDocument(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkCreatedBasedFlag, false));\r\n }\r\n\r\n public static canChangeStateToCompleted(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n CdCardHelper.CheckSkp(editor.cardModel));\r\n }\r\n\r\n public static canStartMergeDuplicatesIDP(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkCanMergeDuplicatesIDP, false));\r\n }\r\n\r\n public static canSendMailIntoSupport(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkCanSendMailIntoSupport, false));\r\n }\r\n\r\n public static CanSeePkOutgoingMailSender(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null &&\r\n model.cardType.id === CdCardTypes.PkOutgoingTypeID &&\r\n tryGetFromInfo(model.card.info, \"CanSendMailsFromOutgoingDocuments\", false));\r\n }\r\n\r\n public static canCopyCard(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkCopyCardFlag, false));\r\n }\r\n\r\n public static canDeleteCard(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkCanCustomDelete, false));\r\n }\r\n\r\n public static CanRevocateDocument(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n tryGetFromInfo(editor.cardModel.card.info, ChCardFlagsInfo.PkCanRevocateDocument, false));\r\n }\r\n public static async startIncomingProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n let card;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n (card = model.card) == null) {\r\n return;\r\n }\r\n\r\n let exist = false;\r\n let files;\r\n if ((files = card.get(\"Files\")) != null) {\r\n for (let file of files) {\r\n if (file.CategoryID.$value === ChFileCategories.Primary.id) {\r\n exist = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!exist) {\r\n await showError(\"$UI_Common_UploadFileMainCategory\");\r\n return;\r\n }\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(ChProcessHelper.PkIncommingProcessName, DotNetType.String)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startOutgoingProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(ChProcessHelper.PkOutgoingProcessName, DotNetType.String)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startMemoProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(ChProcessHelper.PkMemoProcessName, DotNetType.String)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startLetterCreditProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n let card;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n (card = model.card) == null) {\r\n return;\r\n }\r\n\r\n let files = card.get(\"Files\");\r\n if (files == null || files.Count === 0) {\r\n await showError(\"Файлы обязательны для заполнения\");\r\n return;\r\n }\r\n let section;\r\n if ((section = model.card.sections.get('PkLetterCreditInfo')!) != null) {\r\n if (section.fields.get(\"PlannedPaymentDate\") == null) {\r\n await showError(\"Плановая дата оплаты обязательна для заполнения\");\r\n return;\r\n }\r\n }\r\n\r\n const result = await showConfirm(\"Запустить процесс согласования?\");\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(ChProcessHelper.PkLetterCreditProcess, DotNetType.String),\r\n 'CheckFields': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startAssignmentProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(ChProcessHelper.PkAssignmentProcessName, DotNetType.String)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startRdndProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(ChProcessHelper.PkRdndProcessName, DotNetType.String)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startRegistrationWithoutAgreementAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n const result = await showConfirm(\"Зарегистрировать без согласования?\");\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n 'RegistrationWithoutAgreement': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startEditRegistrationDateAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null ) {\r\n return;\r\n }\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'EditRegistrationDate');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n let section;\r\n if ((section = _form.cardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n section.fields.set(\"RearDate\", PkCommonHelper.GetDateTimeNow(null), DotNetType.DateTime);\r\n }\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n let success = true;\r\n let rearDate = section.fields.get(\"RearDate\");\r\n let date = new Date(rearDate);\r\n date.setMinutes(date.getMinutes() + date.getTimezoneOffset());\r\n if (rearDate == null) {\r\n await showError(\"Дата регистрации обязательна для заполнения\");\r\n success = false;\r\n }\r\n if (success) {\r\n const storeInfo: IStorage = {\r\n 'EditRegistrationDate': createTypedField(true, DotNetType.Boolean),\r\n 'RearDate': createTypedField(date, DotNetType.DateTime)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n public static async startReRegistrationAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null ) {\r\n return;\r\n }\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'RegisterRearNumberDialog');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n let section;\r\n if ((section = _form.cardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n section.fields.set(\"RearDate\", PkCommonHelper.GetDateTimeNow(-1), DotNetType.DateTime);\r\n }\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n let success = true;\r\n let rearDate = section.fields.get(\"RearDate\");\r\n let dateCheck = new Date();\r\n dateCheck.setDate(dateCheck.getDate() - 1);\r\n if (rearDate == null) {\r\n await showError(\"Дата регистрации обязательна для заполнения\");\r\n success = false;\r\n }\r\n else if (new Date(rearDate).setHours(0, 0, 0, 0) > dateCheck.setHours(0, 0, 0, 0)) {\r\n await showError(\"Дата регистрации задним числом должна быть раньше текущей даты\");\r\n success = false;\r\n }\r\n if (success) {\r\n const storeInfo: IStorage = {\r\n 'RegisterRearDate': createTypedField(true, DotNetType.Boolean),\r\n 'RearDate': createTypedField(rearDate, DotNetType.DateTime)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n public static async startReRegistrationORDAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null ) {\r\n return;\r\n }\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'RegisterRearNumberORDDialog');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n let section;\r\n if ((section = _form.cardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n section.fields.set(\"RearDate\", PkCommonHelper.GetDateTimeNow(-1), DotNetType.DateTime);\r\n section.fields.set(\"Comment\", \"\", DotNetType.String);\r\n }\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n let success = true;\r\n let rearDate = section.fields.get(\"RearDate\");\r\n let fullNumber = section.fields.get(\"Comment\");\r\n if (rearDate == null) {\r\n await showError(\"Дата регистрации обязательна для заполнения\");\r\n success = false;\r\n }\r\n else if (PkCommonHelper.IsNullOrWhitespace(fullNumber)) {\r\n await showError(\"Номер документа обязателен к заполнению\");\r\n success = false;\r\n }\r\n if (success) {\r\n const storeInfo: IStorage = {\r\n 'RegisterRearDate': createTypedField(true, DotNetType.Boolean),\r\n 'RearDate': createTypedField(rearDate, DotNetType.DateTime),\r\n 'FullNumber': createTypedField(fullNumber, DotNetType.String)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n public static async editRegNumber() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null ) {\r\n return;\r\n }\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'EditRegistrationNumber');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n let success = true;\r\n let serialNumber = section.fields.get(\"SerialNumber\");\r\n let year = section.fields.get(\"Year\");\r\n if (serialNumber == null) {\r\n await showError(\"Порядковый номер обязателен для заполнения\");\r\n success = false;\r\n }\r\n if (year == null) {\r\n await showError(\"Год издания/вступления обязателен для заполнению\");\r\n success = false;\r\n }\r\n if (success) {\r\n const storeInfo: IStorage = {\r\n 'EditRegistrationNumber': createTypedField(true, DotNetType.Boolean),\r\n 'SerialNumber': createTypedField(serialNumber, DotNetType.Int32),\r\n 'Year': createTypedField(year, DotNetType.Int32)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n public static async startPerformanceProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(CdProcessHelper.PerformanceProcessName, DotNetType.String),\r\n 'WithInitialization': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startAcquaintanceProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(CdProcessHelper.AcquaintanceProcess, DotNetType.String),\r\n 'WithInitialization': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async changeStateToIrrelevantAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null ) {\r\n return;\r\n }\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'DialogComment');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n let success = true;\r\n let comment = section.fields.get(\"Comment\");\r\n if (comment == null) {\r\n await showError(\"Комментарий обязателен для заполнения\");\r\n success = false;\r\n }\r\n if (success) {\r\n const result = await showConfirm(\"Отметить документ как неактуальный? Все запущенные процессы будут отменены\");\r\n if (result) {\r\n const storeInfo: IStorage = {\r\n 'CancelProcesses': createTypedField(true, DotNetType.Boolean),\r\n 'DialogComment': createTypedField(comment, DotNetType.String)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n public static async createChangeAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n const result = await showConfirm(\"Создать изменение? Все запущенные процессы будут отменены\");\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n 'CreateChange': createTypedField(true, DotNetType.Boolean)\r\n };\r\n const success = await editor!.saveCard(uiContext, storeInfo);\r\n if (!success) {\r\n return;\r\n }\r\n\r\n const baseCard = editor.cardModel!.card;\r\n const requestInfo: IStorage = {};\r\n requestInfo['KrCreateBasedOnCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n requestInfo['KrCreateBasedOnCopyFiles'] = createTypedField(false, DotNetType.Boolean);\r\n requestInfo['CreateChangeCard'] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const baseCardToken = KrToken.tryGet(baseCard.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n requestInfo['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: model.cardType.id,\r\n cardTypeName: model.cardType.name,\r\n info: requestInfo,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn'\r\n });\r\n });\r\n }\r\n\r\n public static async startRecallForRevisionAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null ) {\r\n return;\r\n }\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'DialogComment');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n let success = true;\r\n let comment = section.fields.get(\"Comment\");\r\n if (comment == null) {\r\n await showError(\"Комментарий обязателен для заполнения\");\r\n success = false;\r\n }\r\n if (success) {\r\n const result = await showConfirm(\"Вернуть документ на доработку? Текущий процесс согласования будет прерван\");\r\n if (result) {\r\n const storeInfo: IStorage = {\r\n 'ReturnToRework': createTypedField(true, DotNetType.Boolean),\r\n 'DialogComment': createTypedField(comment, DotNetType.String)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n public static async startCreateBasedDocumentAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n let typeID;\r\n let typeName;\r\n if (model.cardType.id === PkCardTypes.PkIncomingTypeID) {\r\n typeID = PkCardTypes.PkOutgoingTypeID;\r\n typeName = \"Исходящий документ\";\r\n }\r\n else {\r\n typeID = PkCardTypes.PkIncomingTypeID;\r\n typeName = \"Входящий документ\";\r\n }\r\n\r\n const result = await showConfirm(\"Создать \" + typeName + \" на основании текущего?\");\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const baseCard = editor.cardModel!.card;\r\n const requestInfo: IStorage = {};\r\n requestInfo['KrCreateBasedOnCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n requestInfo['KrCreateBasedOnCopyFiles'] = createTypedField(false, DotNetType.Boolean);\r\n requestInfo['CreateBasedDocument'] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const baseCardToken = KrToken.tryGet(baseCard.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n requestInfo['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: typeID,\r\n cardTypeName: typeName,\r\n info: requestInfo,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn'\r\n });\r\n });\r\n }\r\n\r\n public static async chChangeStateToCompleted() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n const result = await showConfirm(\"Вы уверены, что хотите изменить “Статус СКП” на “Завершен”? Действие нельзя будет отменить.\");\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n 'ChangeStateToCompleted': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startMergeDuplicatesIDPAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n let projectIDs = \"\";\r\n let docKindID;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n let rows;\r\n if ((rows = model.card.sections.tryGet('PkObjectList')!.rows) != null) {\r\n for (let row of rows) {\r\n projectIDs += row.get(\"ProjectID\") + \",\";\r\n }\r\n }\r\n projectIDs = projectIDs.slice(0, -1);\r\n\r\n let section;\r\n if ((section = model.card.sections.tryGet('ArchiveDocumentIDP')) != null) {\r\n docKindID = section.fields.get(\"DocumentIDPTypeID\");\r\n }\r\n if (PkCommonHelper.IsNullOrWhitespace(projectIDs) || docKindID == null)\r\n return;\r\n\r\n\r\n let projectRequestParameter = ChChanceryTileExtensionHelper.getProjectsCriterial(projectIDs);\r\n let docKindParamMetadata = ChChanceryTileExtensionHelper.getDocKindCriterial(docKindID);\r\n let besidesCardRequestParameter = ChChanceryTileExtensionHelper.getBesidesCardCriterial(model.card.id);\r\n\r\n const parameterList = [projectRequestParameter, docKindParamMetadata, besidesCardRequestParameter];\r\n\r\n await ChChanceryTileExtensionHelper.selectDoublesCardsAndSave(parameterList, editor, uiContext);\r\n }\r\n /** Аннулирование документа. */\r\n public static async RevocateDocumentTileAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n const card: Card | undefined = editor?.cardModel?.card;\r\n if (uiContext == null || editor == null || card == null) {\r\n return;\r\n }\r\n\r\n let answer = await showConfirmWithCancel('Вы действительно хотите аннулировать документ?');\r\n if (!answer) {\r\n return;\r\n }\r\n card.info[\"PkRevocateDocument\"] = true;\r\n\r\n let storeResult = await editor.saveCard(uiContext);\r\n if (storeResult) {\r\n await showMessage(\"Документ успешно переведен в статус \\\"Аннулирован\\\".\");\r\n }\r\n }\r\n\r\n private static getProjectsCriterial(projectIDs) {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = 'ProjectIDs';\r\n parameterMetadata.caption = 'Проекты';\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.String;\r\n parameterMetadata.multiple = false;\r\n\r\n return new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', projectIDs )\r\n .readOnly(true)\r\n .asRequestParameter();\r\n }\r\n\r\n private static getDocKindCriterial(docKindID) {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = 'DocKindHiddenID';\r\n parameterMetadata.caption = 'Вид документа скрытый';\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n return new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', docKindID )\r\n .asRequestParameter();\r\n }\r\n\r\n private static getBesidesCardCriterial(cardID) {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = 'BesidesDocID';\r\n parameterMetadata.caption = 'Кроме документа по ID';\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n return new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(nonEqualsCriteriaOperator(), '', cardID )\r\n .asRequestParameter();\r\n }\r\n\r\n private static async selectDoublesCardsAndSave(parameterList, editor, context) {\r\n await showViewsDialog(\r\n 'ArDocumentIDP_RemoveDoubles',\r\n async () => {\r\n return;\r\n },\r\n parameterList,\r\n async (ctx) => {\r\n let doubleCardIds = \"\";\r\n const selectedRows = ctx.viewContext.selectedRows!;\r\n selectedRows.forEach(row => {\r\n doubleCardIds += row.get(\"DOCIDPID\") + \",\";\r\n });\r\n doubleCardIds = doubleCardIds.slice(0, -1);\r\n\r\n ChChanceryTileExtensionHelper.Merge(doubleCardIds, editor, context);\r\n }\r\n );\r\n }\r\n\r\n private static Merge(doubleCardIds, editor, uiContext) {\r\n if (PkCommonHelper.IsNullOrWhitespace(doubleCardIds))\r\n return;\r\n\r\n const storeInfo: IStorage = {\r\n 'MergeDoubleCards': createTypedField(true, DotNetType.Boolean),\r\n 'DoubleCardIds': createTypedField(doubleCardIds, DotNetType.String)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async sendMailIntoSupport() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n let card;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n (card = model.card) == null) {\r\n return;\r\n }\r\n\r\n const result = await showConfirm(\"Отправить данные по документу в ТП?\");\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n\r\n request.requestType = ChRequestTypes.SendMailIntoSupport;\r\n\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n\r\n const defaultRolesResponse = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(defaultRolesResponse.validationResult.build());\r\n if (!defaultRolesResponse.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n showMessage(\"Сообщение успешно отправлено на электронную почту технической поддержки.\");\r\n }\r\n\r\n public static async PkOutgoingMailSenderCommand() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n let parameters = Array();\r\n await showViewsDialog(\r\n \"Notifications\", \r\n async (value) => {\r\n if (!value\r\n || !editor) {\r\n return;\r\n }\r\n let selectedItem = value;\r\n await editor.saveCard(uiContext);\r\n const request = new CardRequest();\r\n\r\n request.requestType = ChRequestTypes.PkOutgoingMailSenderRequest;\r\n\r\n request.info[\"CardID\"] = createTypedField(model.card.id, DotNetType.Guid);\r\n request.info[\"RowID\"] = createTypedField(selectedItem.value,DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n else{\r\n await showMessage(\"Сообщение успешно отправлено.\");\r\n }\r\n },\r\n parameters\r\n );\r\n\r\n \r\n }\r\n\r\n public static async copyCard() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n let saveBeforeCreatingCard = false;\r\n if (model.hasChanges()) {\r\n const result = await showConfirmWithCancel(\"$UI_Cards_ConfirmSavingCardBeforeCreatingBasedOn\");\r\n if (result == null) {\r\n return;\r\n }\r\n saveBeforeCreatingCard = result;\r\n }\r\n\r\n if (saveBeforeCreatingCard) {\r\n const success = await editor!.saveCard(uiContext);\r\n if (!success) {\r\n return;\r\n }\r\n }\r\n\r\n const baseCard = editor.cardModel!.card;\r\n const requestInfo: IStorage = {};\r\n requestInfo['KrCreateBasedOnCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n requestInfo['KrCreateBasedOnCopyFiles'] = createTypedField(false, DotNetType.Boolean);\r\n\r\n const baseCardToken = KrToken.tryGet(baseCard.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n requestInfo['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: model.cardType.id,\r\n cardTypeName: model.cardType.name,\r\n info: requestInfo,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn'\r\n });\r\n });\r\n }\r\n\r\n \r\n /** Добавить печатную форму к выбранным карточкам*/\r\n public static AttachCorrespondencePrintForm()\r\n {\r\n let cards: TypedField[] = new Array;\r\n const context: IUIContext = UIContext.current;\r\n cards = context!.viewContext!.selectedRows!.map(x => createTypedField(x.get(\"DocID\") || x.get(\"CardID\"), DotNetType.Guid));\r\n\r\n const contractRequest = new CardRequest();\r\n contractRequest.requestType = ChRequestTypes.AttachCorrespondencePrintForm;\r\n contractRequest.info[\"Cards\"] = cards;\r\n CardService.instance.request(contractRequest).then(response=>{\r\n showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n context!.viewContext!.refreshView();\r\n });\r\n }\r\n \r\n /** Разблокировать выбранные карточки в папке поддержки для рм админ. */\r\n public static updateStamps()\r\n {\r\n const context: IUIContext = UIContext.current;\r\n let cards = context!.viewContext!.selectedRows!.map(x => createTypedField(x.get(\"OperationID\"), DotNetType.Guid));\r\n\r\n const contractRequest = new CardRequest();\r\n contractRequest.requestType = ChRequestTypes.ChUpdateOutgoingStamp;\r\n contractRequest.info[\"Cards\"] = cards;\r\n CardService.instance.request(contractRequest).then(response=>{\r\n showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n context!.viewContext!.refreshView();\r\n });\r\n }\r\n\r\n /** Отправить уведомление по выбранным карточкам. */\r\n public static sendEmailNotification()\r\n {\r\n const context: IUIContext = UIContext.current;\r\n let cards = context!.viewContext!.selectedRows!.map(x => createTypedField(x.get(\"DocID\"), DotNetType.Guid));\r\n\r\n const contractRequest = new CardRequest();\r\n contractRequest.requestType = ChRequestTypes.ChSendEmailNotificationToClient;\r\n contractRequest.info[\"Cards\"] = cards;\r\n CardService.instance.request(contractRequest).then(response=>{\r\n showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n context!.viewContext!.refreshView();\r\n });\r\n }\r\n\r\n \r\n public static canSendEmailNotification(e:TileEvaluationEventArgs)\r\n { \r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || !viewContext.view\r\n || !viewContext.view.metadata \r\n || (viewContext.view.metadata.alias != 'PkIncomingDocuments'\r\n && viewContext.view.metadata.alias != 'PkOutgoingDocuments'\r\n )\r\n || !viewContext!.selectedRows\r\n || !userSession.isAdmin\r\n ) {\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile, false);\r\n return;\r\n }\r\n \r\n let context = e.currentTile.context;\r\n let cards = context!.viewContext!.selectedRows!.map(x => createTypedField(x.get(\"DocID\"), DotNetType.Guid));\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n cards.length > 0);\r\n }\r\n\r\n \r\n\r\n public static canAttachCorrespondencePrintForm(e:TileEvaluationEventArgs)\r\n { \r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || !viewContext.view\r\n || !viewContext.view.metadata \r\n || (viewContext.view.metadata.alias != 'PkCorrespondenceSendingRequests' \r\n && viewContext.view.metadata.alias != 'PkAllCard'\r\n )\r\n || !viewContext!.selectedRows\r\n || !userSession.isAdmin\r\n ) {\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile, false);\r\n return;\r\n }\r\n\r\n let context = e.currentTile.context;\r\n let cards = context!.viewContext!.selectedRows!.map(x => createTypedField(x.get(\"DocID\") || x.get(\"CardID\"), DotNetType.Guid));\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n cards.length > 0);\r\n }\r\n\r\n public static canUpdateStamps(e:TileEvaluationEventArgs)\r\n { \r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || !viewContext.view\r\n || !viewContext.view.metadata \r\n || (viewContext.view.metadata.alias != 'Operations')\r\n || !viewContext!.selectedRows\r\n || !userSession.isAdmin\r\n \r\n ) {\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile, false);\r\n return;\r\n }\r\n \r\n let context = e.currentTile.context;\r\n let cards = context!.viewContext!.selectedRows!.map(x => createTypedField(x.get(\"OperationID\"), DotNetType.Guid));\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n cards.length > 0);\r\n }\r\n\r\n\r\n public static async deleteCard() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n let deleteFlag = false;\r\n const result = await showConfirmWithCancel(\"Освободить регистрационный номер?\");\r\n if (result == null) {\r\n return;\r\n }\r\n deleteFlag = result;\r\n\r\n const storeInfo: IStorage = {\r\n 'DeleteWithReleaseRegistrationNumber': createTypedField(deleteFlag, DotNetType.Boolean)\r\n };\r\n editor!.deleteCard({context: uiContext, info: storeInfo});\r\n editor!.close();\r\n }\r\n\r\n\r\n}","export class PkFileTypes {\r\n static GetFilesFromCardType = 'GetFilesFromCard';\r\n static GetInventoryContentType = 'GetInventoryContent';\r\n static CorrespondenceSendingRequestPrintForm = \"CorrespondenceSendingRequestPrintForm\";\r\n static PkGetDownloadContractsReportContent = \"PkGetDownloadContractsReportContent\";\r\n static PkGetDownloadActsAndContractsReportContent = \"PkGetDownloadActsAndContractsReportContent\";\r\n static PkGetDownloadActsReportContent = \"PkGetDownloadActsReportContent\";\r\n static PkGetDownloadLinkedDocsReportContent = \"PkGetDownloadLinkedDocsReportContent\";\r\n}","export class CsvDataService {\r\n static exportToCsv(filename: string, rows: Object[], separator = ';', headers?: string[]) {\r\n if (!rows || !rows.length) {\r\n return;\r\n }\r\n let columHearders: string[];\r\n const keys = Object.keys(rows[0]);\r\n if (headers) {\r\n columHearders = headers;\r\n } else {\r\n columHearders = keys;\r\n }\r\n const csvData = '\\ufeff' +\r\n columHearders.join(separator) +\r\n '\\n' +\r\n rows.map(row => {\r\n return keys.map(k => {\r\n let cell = row[k] === null || row[k] === undefined ? '' : row[k];\r\n cell = cell instanceof Date\r\n ? cell.toLocaleString()\r\n : cell.toLocaleString().toString().replace(/\"/g, '\"\"');\r\n if (cell.search(/(\"|,|\\n)/g) >= 0) {\r\n cell = `\"${cell}\"`;\r\n }\r\n return cell;\r\n }).join(separator);\r\n }).join('\\n');\r\n const blob = new Blob([csvData], { type: 'text/csv;charset=utf-8;' });\r\n const link = document.createElement('a');\r\n if (link.download !== undefined) {\r\n const url = URL.createObjectURL(blob);\r\n link.setAttribute('href', url);\r\n link.setAttribute('download', filename);\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n }\r\n}","import { TileExtension, ITileGlobalExtensionContext, Tile, TileGroups,\r\n TileEvaluationEventArgs} from 'tessa/ui/tiles';\r\nimport { tryGetFromInfo, UIContext, showConfirm, showError, createCardModel, UIButton, showNotEmpty, showConfirmWithCancel, LoadingOverlay, showLoadingOverlay} from 'tessa/ui';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { CardStoreMode } from 'tessa/cards';\r\nimport { ChProcessHelper } from '../Helpers/ChProcessHelper';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { showFormDialog, createCard } from 'tessa/ui/uiHost';\r\nimport { CardNewRequest, CardService, CardGetFileContentRequest } from 'tessa/cards/service';\r\nimport { KrToken } from 'tessa/workflow';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdProcessHelper } from 'src/cdScripts/Helpers/CdProcessHelper';\r\nimport { CdCardHelper } from 'src/cdScripts/Helpers/CdCardHelper';\r\nimport { CdTechnicalDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdTechnicalDocumentationClientHelper';\r\nimport { PkFileTypes } from '../Helpers/PkFileTypes';\r\nimport { PkCommonHelper } from '../Helpers/PkCommonHelper';\r\nimport { CsvDataService } from '../Helpers/PkExportToCsv';\r\n \r\n\r\nexport class PkCardTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n panel.tiles.push(new Tile({\r\n name: \"Button1\",\r\n caption: \"Начать\\nсогласование\",\r\n icon: \"ta icon-thin-195\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: PkCardTileExtensionHelper.startApprovalProcessAction,\r\n evaluating: PkCardTileExtensionHelper.canStartProcess\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"Button1233\",\r\n caption: \"Выдать в производство\\nработ\",\r\n icon: \"ta icon-thin-231\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 12,\r\n command: PkCardTileExtensionHelper.startProductionProcess,\r\n evaluating: PkCardTileExtensionHelper.canStartProductionProcess\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"TestButton4\",\r\n caption: \"Вернуть\\nна доработку\",\r\n icon: \"ta icon-thin-411\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 15,\r\n command: PkCardTileExtensionHelper.returnToRework,\r\n evaluating: PkCardTileExtensionHelper.canReturnToRework\r\n }));\r\n \r\n\r\n let actionTile = panel.tryGetTile('CdActions');\r\n if (actionTile != null) {\r\n actionTile.tiles.push(new Tile({\r\n name: \"Button2\",\r\n caption: \"Создать задачу\\nна исполнение\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 20,\r\n command: PkCardTileExtensionHelper.startExecutionProcessAction,\r\n evaluating: PkCardTileExtensionHelper.canStartExecutionProcess\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"Button3\",\r\n caption: \"Создать задачу\\nна ознакомление\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 25,\r\n command: PkCardTileExtensionHelper.startAcquaintanceProcessAction,\r\n evaluating: PkCardTileExtensionHelper.canStartAcquaintanceProcess\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"ChangeStateToIrrelevant\",\r\n caption: \"Отметить карточку\\nкак неактуальную\",\r\n icon: \"ta icon-thin-404\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 30,\r\n command: PkCardTileExtensionHelper.changeStateToIrrelevantAction,\r\n evaluating: PkCardTileExtensionHelper.canChangeStateToIrrelevant\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"PkCreateBasedDocument\",\r\n caption: \"Создать документ\\nна основании\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 70,\r\n command: PkCardTileExtensionHelper.startCreateBasedDocumentAction,\r\n evaluating: PkCardTileExtensionHelper.canStartCreateBasedDocument\r\n }));\r\n }\r\n let pkDownloadContractsReportRootTile = new Tile({\r\n name: \"PkDownloadContractsReportRootTile\",\r\n caption: \"Выгрузка документов\",\r\n icon: \"ta icon-thin-069\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Bottom,\r\n order: 0,\r\n evaluating: PkCardTileExtensionHelper.canDownloadContractsReportRoot\r\n });\r\n\r\n pkDownloadContractsReportRootTile.tiles.push(new Tile({\r\n name: \"PkDownloadContractsReportFiles\",\r\n caption: \"Выгрузить файлы\",\r\n icon: \"ta icon-thin-063\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 0,\r\n command: PkCardTileExtensionHelper.downloadContractsReportFiles\r\n }));\r\n\r\n pkDownloadContractsReportRootTile.tiles.push(new Tile({\r\n name: \"PkDownloadContractsReportCsvFiles\",\r\n caption: \"Сформировать реестр\",\r\n icon: \"ta icon-thin-063\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 1,\r\n command: PkCardTileExtensionHelper.downloadContractsCsvFiles\r\n }));\r\n\r\n context.workspace.leftPanel.tiles.push(pkDownloadContractsReportRootTile);\r\n\r\n let pkDownloadActsReportRootTile = new Tile({\r\n name: \"PkDownloadActsReportRootTile\",\r\n caption: \"Выгрузка документов\",\r\n icon: \"ta icon-thin-069\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Bottom,\r\n order: 0,\r\n evaluating: PkCardTileExtensionHelper.canDownloadActsReportRoot\r\n });\r\n \r\n pkDownloadActsReportRootTile.tiles.push(new Tile({\r\n name: \"PkDownloadActsReportActsAndContracts\",\r\n caption: \"Выгрузка акты+договоры\",\r\n icon: \"ta icon-thin-063\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 1,\r\n command: PkCardTileExtensionHelper.downloadActsAndContractsFiles\r\n })); \r\n\r\n pkDownloadActsReportRootTile.tiles.push(new Tile({\r\n name: \"PkDownloadActsReportActs\",\r\n caption: \"Выгрузка акты\",\r\n icon: \"ta icon-thin-063\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 2,\r\n command: PkCardTileExtensionHelper.downloadActsFiles\r\n })); \r\n\r\n pkDownloadActsReportRootTile.tiles.push(new Tile({\r\n name: \"PkDownloadActsReportCsvFiles\",\r\n caption: \"Сформировать реестр\",\r\n icon: \"ta icon-thin-063\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 3,\r\n command: PkCardTileExtensionHelper.downloadActsCSVReportAsync\r\n })); \r\n\r\n context.workspace.leftPanel.tiles.push(pkDownloadActsReportRootTile);\r\n }\r\n}\r\n\r\nexport class PkCardTileExtensionHelper {\r\n\r\n public static canStartProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n card.storeMode === CardStoreMode.Update &&\r\n model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID &&\r\n tryGetFromInfo(model.card.info, \"CanStartApprovalProcess\", false) &&\r\n PkCardTileExtensionHelper.isWorkingDocumentation(card)\r\n && model.card.sections.tryGet(\"PkRdProperties\")!.fields.tryGet(\"isRenovation\") != true\r\n && !CdTechnicalDocumentationClientHelper.CheckIsInvestment(card));\r\n }\r\n\r\n private static isWorkingDocumentation(card: any) {\r\n let techDocTileVis = false;\r\n let section;\r\n let filed;\r\n if ((section = card.sections.tryGet('PkDocumentCommonInfo')) != null) {\r\n if (section.fields.tryGet(\"StageID\") != null) {\r\n if ((filed = section.fields.tryGet(\"StageID\")) != null) {\r\n if (filed === 2) {\r\n techDocTileVis = true;\r\n }\r\n }\r\n }\r\n }\r\n return techDocTileVis;\r\n }\r\n\r\n public static canStartProductionProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n card.storeMode === CardStoreMode.Update &&\r\n model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID &&\r\n tryGetFromInfo(model.card.info, \"AllowStartProductionProcess\", false) &&\r\n PkCardTileExtensionHelper.isWorkingDocumentation(card) &&\r\n !CdTechnicalDocumentationClientHelper.CheckIsInvestment(card));\r\n }\r\n\r\n public static canReturnToRework(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n card.storeMode === CardStoreMode.Update &&\r\n model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID &&\r\n tryGetFromInfo(model.card.info, \"CanReturnToRework\", false) &&\r\n PkCardTileExtensionHelper.isWorkingDocumentation(card)\r\n && model.card.sections.tryGet(\"PkRdProperties\")!.fields.tryGet(\"isRenovation\") != true);\r\n }\r\n\r\n public static canCreateBasedDocumentAction(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n card.storeMode === CardStoreMode.Update &&\r\n model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID &&\r\n tryGetFromInfo(model.card.info, \"CanCreateBasedDocumentAction\", false) &&\r\n PkCardTileExtensionHelper.isWorkingDocumentation(card));\r\n }\r\n\r\n public static canStartExecutionProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n (CdCardHelper.CanStartExecutionProcess(model, card) /*||\r\n tryGetFromInfo(editor.cardModel!.card.info, CdCardFlagsInfo.PkExecutionTaskFlag, false)*/));\r\n }\r\n\r\n public static canStartAcquaintanceProcess(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n (CdCardHelper.CanStartAcquaintanceProcess(model, card) /*||\r\n tryGetFromInfo(editor.cardModel!.card.info, CdCardFlagsInfo.PkAcquaintanceTaskFlag, false)*/));\r\n }\r\n\r\n public static canChangeStateToIrrelevant(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n CdCardHelper.CanChangeStateToIrrelevant(model, card) &&\r\n !CdTechnicalDocumentationClientHelper.CheckIsInvestment(card));\r\n }\r\n\r\n public static canStartCreateBasedDocument(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n CdCardHelper.CanStartCreateBasedDocument(model, card));\r\n }\r\n\r\n public static canDownloadContractsReportRoot(e: TileEvaluationEventArgs) {\r\n let visible = false;\r\n let viewContext = e.currentTile.context.viewContext;\r\n if (viewContext != null && viewContext.data != null && viewContext.data.length > 0\r\n && viewContext.view != null && viewContext.workplace != null && viewContext.workplace.currentItem != null)\r\n {\r\n let item = viewContext.workplace.currentItem;\r\n while (item.parent != null && item.parent.parent != null)\r\n {\r\n if (item.text === \"Выгрузка договоров из Tessa\")\r\n {\r\n visible = true;\r\n break;\r\n }\r\n item = item.parent;\r\n }\r\n }\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n public static canDownloadActsReportRoot(e: TileEvaluationEventArgs) {\r\n let visible = false;\r\n let viewContext = e.currentTile.context.viewContext;\r\n if (viewContext != null && viewContext.data != null && viewContext.data.length > 0\r\n && viewContext.view != null && viewContext.workplace != null && viewContext.workplace.currentItem != null)\r\n {\r\n let item = viewContext.workplace.currentItem;\r\n while (item.parent != null && item.parent.parent != null)\r\n {\r\n if (item.text === \"Выгрузка первичных документов\")\r\n {\r\n visible = true;\r\n break;\r\n }\r\n item = item.parent;\r\n }\r\n }\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n } \r\n\r\n public static async startApprovalProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n let card;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n (card = model.card) == null) {\r\n return;\r\n }\r\n\r\n let section;\r\n let rows;\r\n let mess = \"Начать процесс согласования? Подрядчик по выбранному объекту не определен\";\r\n if ((section = card.sections.tryGet('PkContractorsVirtual')) != null &&\r\n (rows = section.tryGetRows()) != null &&\r\n rows.length > 0) {\r\n mess = \"Начать процесс согласования?\";\r\n }\r\n\r\n const result = await showConfirm(mess);\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(ChProcessHelper.ApprovalProcess, DotNetType.String)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startProductionProcess() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n let card;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n (card = model.card) == null) {\r\n return;\r\n }\r\n\r\n let section;\r\n let rows;\r\n let mess = \"Выдать в производство работ? Подрядчик по выбранному объекту не определен\";\r\n if ((section = card.sections.tryGet('PkContractorsVirtual')!) != null &&\r\n (rows = section.tryGetRows()) != null &&\r\n rows.length > 0) {\r\n mess = \"Выдать в производство работ?\";\r\n }\r\n\r\n const result = await showConfirm(mess);\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(CdProcessHelper.AcquaintanceProcess, DotNetType.String),\r\n 'IsProductionProcess': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async returnToRework() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'PkReturnToReworkDialog');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n let success = true;\r\n let comment = section.fields.get(\"Comment\");\r\n if (comment == null) {\r\n await showError(\"Комментарий обязателен для заполнения\");\r\n success = false;\r\n }\r\n if (success) {\r\n const storeInfo: IStorage = {\r\n 'ReturnToRework': createTypedField(true, DotNetType.Boolean),\r\n 'Comment': createTypedField(comment, DotNetType.DateTime)\r\n };\r\n editor!.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n public static async copyBasedOnAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n let saveBeforeCreatingCard = false;\r\n if (model.hasChanges()) {\r\n const result = await showConfirmWithCancel(\"$UI_Cards_ConfirmSavingCardBeforeCreatingBasedOn\");\r\n if (result == null) {\r\n return;\r\n }\r\n saveBeforeCreatingCard = result;\r\n }\r\n\r\n if (saveBeforeCreatingCard) {\r\n const success = await editor!.saveCard(uiContext);\r\n if (!success) {\r\n return;\r\n }\r\n }\r\n\r\n const baseCard = editor.cardModel!.card;\r\n const requestInfo: IStorage = {};\r\n requestInfo['KrCreateBasedOnCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n requestInfo['KrCreateBasedOnCopyFiles'] = createTypedField(false, DotNetType.Boolean);\r\n requestInfo['BasedOn'] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const baseCardToken = KrToken.tryGet(baseCard.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n requestInfo['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: model.cardType.id,\r\n cardTypeName: model.cardType.name,\r\n info: requestInfo,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn'\r\n });\r\n });\r\n }\r\n\r\n public static async startExecutionProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(CdProcessHelper.PerformanceProcessName, DotNetType.String),\r\n 'WithInitialization': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async startAcquaintanceProcessAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n const storeInfo: IStorage = {\r\n '.startProcess': createTypedField(CdProcessHelper.AcquaintanceProcess, DotNetType.String),\r\n 'WithInitialization': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n public static async changeStateToIrrelevantAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n if (model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID) {\r\n const result = await showConfirm(\"Отменить документ как неактуальный? Все запущенные процессы будут отменены\");\r\n if (!result) {\r\n return;\r\n }\r\n const storeInfo: IStorage = {\r\n 'CancelProcesses': createTypedField(true, DotNetType.Boolean)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n\r\n public static async startCreateBasedDocumentAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n const result = await showConfirm(\"Создать \" + model.cardType.caption + \" на основании текущего?\");\r\n if (!result) {\r\n return;\r\n }\r\n\r\n const baseCard = editor.cardModel!.card;\r\n const requestInfo: IStorage = {};\r\n requestInfo['KrCreateBasedOnCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n requestInfo['KrCreateBasedOnCopyFiles'] = createTypedField(false, DotNetType.Boolean);\r\n requestInfo['BasedOn'] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const baseCardToken = KrToken.tryGet(baseCard.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n requestInfo['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: model.cardType.id,\r\n cardTypeName: model.cardType.name,\r\n info: requestInfo,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn'\r\n });\r\n });\r\n }\r\n\r\n public static async downloadContractsReportFiles() {\r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || viewContext.view === null\r\n || viewContext.data === null\r\n ) {\r\n return;\r\n }\r\n const info = UIContext.current.info;\r\n const reportVMInfo = info[\"PkContractDownloadReportVM\"] as Map>;\r\n // const reportVMInfo1 = viewContext.workplace.context.info[\"PkContractDownloadReportVM\"] as Map>;\r\n // const cards = reportVMInfo!.values!.length > 0 ? Array.from(reportVMInfo.values()) : viewContext.selectedRows!.length > 0 ? viewContext.selectedRows : viewContext.data;\r\n const cards = reportVMInfo.size > 0 ? Array.from(reportVMInfo.values()) : viewContext.selectedRows!.length > 0 ? viewContext.selectedRows : viewContext.data;\r\n // reportVMInfo1.clear();\r\n\r\n if (cards != null && cards.length > 0)\r\n {\r\n let listID = new Array;\r\n for (let rowValue of cards) {\r\n const id = createTypedField(rowValue.get('ContractID'), DotNetType.Guid);\r\n listID.push(id);\r\n }\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = PkFileTypes.PkGetDownloadContractsReportContent;\r\n getFileContentRequest.versionRowId = Guid.empty;\r\n getFileContentRequest.fileId = Guid.empty;\r\n getFileContentRequest.fileName = PkFileTypes.PkGetDownloadContractsReportContent;\r\n getFileContentRequest.info[\"CardIds\"] = cards.map(x => createTypedField(x.get(\"ContractID\"), DotNetType.Guid));\r\n\r\n const getFileContentResponse = await showLoadingOverlay(async () => {\r\n return await CardService.instance.getFileContent(getFileContentRequest);\r\n }, \"Выполняется выгрузка файла...\");\r\n await showNotEmpty(getFileContentResponse.validationResult.build());\r\n if (getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n return;\r\n }\r\n const dlgFileName = \"Выгрузка договоров из Tessa\";\r\n const dlgDefaultExt = \".zip\";\r\n PkCommonHelper.SaveFileContent(dlgFileName + dlgDefaultExt, getFileContentResponse.content);\r\n }\r\n }\r\n\r\n public static async downloadContractsCsvFiles() {\r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || viewContext.view === null\r\n || viewContext.data === null\r\n ) {\r\n return;\r\n }\r\n \r\n const reportVMInfo = UIContext.current.info[\"PkContractDownloadReportVM\"] as Map>;\r\n\r\n const cards = reportVMInfo.size > 0 ? Array.from(reportVMInfo.values()) : viewContext.selectedRows!.length > 0 ? viewContext.selectedRows : viewContext.data;\r\n\r\n const columnsArray: string[] = [\"ContractPartner1\", \"ContractPartner2\", \"Subject\", \"ObjectName\", \"ProjectName\", \"ContractItemKind\", \"ContractNumber\", \"ContractDate\", \"ContractStatus\"];\r\n const headers: string[] = [\"Организация\", \"Контрагент\", \"Наименование договора\", \"Объект ИДП\", \"Проект ИДП\", \"Вид документа\", \"Номер документа\", \"Дата документа\", \"Состояние\"];\r\n const objectArray: object[] = cards!.map((readonlyMap) => {\r\n const obj: any = {};\r\n readonlyMap.forEach((value, key) => {\r\n if (columnsArray.includes(key)) {\r\n obj[key] = value;\r\n }\r\n });\r\n return obj;\r\n });\r\n CsvDataService.exportToCsv(\"Реестр договоров\", objectArray, ';', headers);\r\n }\r\n\r\n public static async downloadActsAndContractsFiles() {\r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || viewContext.view === null\r\n || viewContext.data === null\r\n ) {\r\n return;\r\n }\r\n const info = UIContext.current.info;\r\n const reportVMInfo = info[\"PkActDownloadReportVM\"] as Map>;\r\n const cards = reportVMInfo.size > 0 ? Array.from(reportVMInfo.values()) : viewContext.selectedRows!.length > 0 ? viewContext.selectedRows : viewContext.data;\r\n\r\n if (cards != null && cards.length > 0)\r\n {\r\n let listID = new Array;\r\n for (let rowValue of cards) {\r\n const id = createTypedField(rowValue.get('ContractID'), DotNetType.Guid);\r\n listID.push(id);\r\n }\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = PkFileTypes.PkGetDownloadActsAndContractsReportContent;\r\n getFileContentRequest.versionRowId = Guid.empty;\r\n getFileContentRequest.fileId = Guid.empty;\r\n getFileContentRequest.fileName = PkFileTypes.PkGetDownloadActsAndContractsReportContent;\r\n getFileContentRequest.info[\"CardContractIDs\"] = cards.map(x => createTypedField(x.get(\"ContractID\"), DotNetType.Guid));\r\n getFileContentRequest.info[\"CardActIDs\"] = cards.map(x => createTypedField(x.get(\"ActID\"), DotNetType.Guid));\r\n\r\n const getFileContentResponse = await showLoadingOverlay(async () => {\r\n return await CardService.instance.getFileContent(getFileContentRequest);\r\n }, \"Выполняется выгрузка файла...\");\r\n await showNotEmpty(getFileContentResponse.validationResult.build());\r\n if (getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n return;\r\n }\r\n const dlgFileName = \"Выгрузка первичных документов\";\r\n const dlgDefaultExt = \".zip\";\r\n PkCommonHelper.SaveFileContent(dlgFileName + dlgDefaultExt, getFileContentResponse.content);\r\n } \r\n }\r\n \r\n public static async downloadActsFiles() {\r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || viewContext.view === null\r\n || viewContext.data === null\r\n ) {\r\n return;\r\n }\r\n const info = UIContext.current.info;\r\n const reportVMInfo = info[\"PkActDownloadReportVM\"] as Map>;\r\n const cards = reportVMInfo.size > 0 ? Array.from(reportVMInfo.values()) : viewContext.selectedRows!.length > 0 ? viewContext.selectedRows : viewContext.data;\r\n\r\n if (cards != null && cards.length > 0)\r\n {\r\n let listID = new Array;\r\n for (let rowValue of cards) {\r\n const id = createTypedField(rowValue.get('ActID'), DotNetType.Guid);\r\n listID.push(id);\r\n }\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = PkFileTypes.PkGetDownloadActsReportContent;\r\n getFileContentRequest.versionRowId = Guid.empty;\r\n getFileContentRequest.fileId = Guid.empty;\r\n getFileContentRequest.fileName = PkFileTypes.PkGetDownloadActsReportContent;\r\n getFileContentRequest.info[\"CardActIDs\"] = cards.map(x => createTypedField(x.get(\"ActID\"), DotNetType.Guid));\r\n\r\n const getFileContentResponse = await showLoadingOverlay(async () => {\r\n return await CardService.instance.getFileContent(getFileContentRequest);\r\n }, \"Выполняется выгрузка файла...\");\r\n await showNotEmpty(getFileContentResponse.validationResult.build());\r\n if (getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n return;\r\n }\r\n const dlgFileName = \"Выгрузка первичных документов\";\r\n const dlgDefaultExt = \".zip\";\r\n PkCommonHelper.SaveFileContent(dlgFileName + dlgDefaultExt, getFileContentResponse.content);\r\n }\r\n }\r\n \r\n public static async downloadActsCSVReportAsync() {\r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || viewContext.view === null\r\n || viewContext.data === null\r\n ) {\r\n return;\r\n }\r\n \r\n const reportVMInfo = UIContext.current.info[\"PkActDownloadReportVM\"] as Map>;\r\n\r\n const cards = reportVMInfo.size > 0 ? Array.from(reportVMInfo.values()) : viewContext.selectedRows!.length > 0 ? viewContext.selectedRows : viewContext.data;\r\n\r\n const columnsArray: string[] = [\"ReceiverName\", \"SenderName\", \"ActKindName\", \"ActNumber\", \"ActDate\", \"ActAmount\", \"ContractNumber\", \"ContractDate\"];\r\n const headers: string[] = [\"Вид документа (акт, упд, единый строительный акт и т.д)\", \"Номер документа\", \"Дата документа\", \"Сумма\", \"Заказчик\", \"Исполнитель/Контрагент\", \"Номер договора\", \"Дата договора\"];\r\n const objectArray: object[] = cards!.map((readonlyMap) => {\r\n const obj: any = {};\r\n readonlyMap.forEach((value, key) => {\r\n if (columnsArray.includes(key)) {\r\n obj[key] = value;\r\n }\r\n });\r\n return obj;\r\n });\r\n CsvDataService.exportToCsv(\"Реестр актов\", objectArray, ';', headers);\r\n }\r\n}","import { TileExtension, ITileGlobalExtensionContext, ITileLocalExtensionContext } from 'tessa/ui/tiles';\r\nimport { userSession } from 'common/utility';\r\nimport { UserAccessLevel } from 'common/cards';;\r\nimport { ChCardFlagsInfo } from '../Helpers/ChCardFlagsInfo';\r\nimport { tryGetFromInfo } from 'tessa/ui';\r\n\r\n\r\nexport class PkDeleteTileOfViewExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n let viewDelete = panel.tryGetTile('DeleteCardFromView');\r\n if (viewDelete == null)\r\n return;\r\n else{\r\n viewDelete.evaluating.add(e => {\r\n const session = userSession;\r\n let isAdmin = false;\r\n if (session.AccessLevel === UserAccessLevel.Administrator) {\r\n isAdmin = true;\r\n }\r\n if (isAdmin != true){\r\n e.setIsEnabledWithCollapsing(e.currentTile, false);\r\n }\r\n else\r\n e.setIsEnabledWithCollapsing(e.currentTile, true);\r\n //e.setIsEnabledWithCollapsing(e.currentTile, isAdmin);\r\n });\r\n }\r\n }\r\n\r\n public initializingLocal(context: ITileLocalExtensionContext) {\r\n \r\n let panel = context.workspace?.leftPanel;\r\n \r\n let tileDeleteCard = panel.tryGetTile('DeleteCard');\r\n\r\n \r\n tileDeleteCard?.evaluating.add(e =>{\r\n const canCustomDelete = tryGetFromInfo(e.current.context.info, ChCardFlagsInfo.PkCanCustomDelete, null);// TES-7713\r\n if (canCustomDelete) {\r\n e.setIsEnabledWithCollapsing(e.currentTile, (canCustomDelete === true));\r\n }\r\n });\r\n }\r\n}","export class TessaActKinds {\r\n\r\n static ActWorkServicesTessa = \"b79fc5ac-8ee0-4a52-9581-74e9665f70cc\";\r\n static EmptyTessa = null;\r\n static TorgTessa = \"beb053ff-68e0-469e-8318-a74460173c1b\";\r\n static InvoiceTessa = \"b9a6ff41-85d7-44e5-850c-b25428fe403a\";\r\n static ProformaInvoiceTessa = \"d6cffd86-f3e0-4121-9872-f09c5dbc5f7f\";\r\n static UPDInvoiceTessa = \"79daefd1-7fe0-4e71-ab47-35ae17df83a8\";\r\n static UPDSetTessa = \"63b0dd64-fe3e-49a4-b0da-39d2bd5d0f85\";\r\n static UPDTransferTessa = \"f0892e34-d78f-4c73-8c55-0d940a41879a\";\r\n static ReconciliationActTessa = \"e8cdd20b-a59c-4e92-a63f-9702d8124582\";\r\n static ServiceDetailsTessa = \"20ed87e0-bdc3-4a94-a20e-86bbcfbf8ec4\";\r\n static NonformalizedEtcTessa = \"01cc7f49-a42d-4058-8692-16ec49ade5fd\";\r\n static Ks2Tessa = \"fb0bb715-d9db-42ad-b1cd-c4294bb71b93\";\r\n static Ks3Tessa = \"789ce6e6-1e31-4e15-bbd6-d496d711df21\";\r\n static NotificationTessa = \"6940c593-8d6c-405b-9fb1-a3dde2f03cf1\";\r\n static PrescriptionTessa = \"1ccdfa10-73ae-4ce2-a8dd-07060acb90b1\";\r\n static CorrespondenceTessa = \"fe9db5c2-3f2e-4cc6-89e4-99cb71d02031\";\r\n static PackageAttachmentTessa = \"a2d58ebc-3cf3-4b72-b01b-29498dbd29a7\";\r\n static ActTransferPermissionsTessa = \"e2ed7c5e-1e44-4324-a020-1a11f836e813\";\r\n static PrepaymentInvoiceTessa = \"84392b98-a155-40f9-ad77-83e85a7907ef\";\r\n static ActAttachmentWithUseAgreementTessaID = \"98295866-c009-4c0d-8704-171702e15988\";\r\n static ActStartGuaranteeDeadlineTessaID = \"8fc9306e-b840-4922-b6a1-9db5ea942769\";\r\n static ActReceivingtTransferTessaID = \"08b9998b-c0e6-4e9c-be32-ae28576f484b\";\r\n static UKDTessaID = \"5a7b3fff-cf4a-4790-8996-bb10b494fccf\";\r\n static AdjustmentInvoiceTessaID = \"c1e76f2e-da98-4b27-8b15-a2eb95d649b4\";\r\n static AdjustmentActTessaID = \"2cc896b3-52cc-4750-b4ac-cc2deb2e9968\";\r\n static AdjustmentActAndInvoiceTessaID = \"5df53e11-388b-47c1-b508-e32de28fd67a\";\r\n static InvoiceRevisionTessaID = \"7784d4ae-7ae3-49cd-a0b6-e9d68490b771\";\r\n static InvoiceCorrectionRevisionTessaID = \"2f4c1dbb-ddb7-4794-9a4c-8249cb2858bc\";\r\n static UniversalCorrectionDocumentRevisionTessaID = \"39465a6a-cea2-4a42-bf41-d5d3a4ef473d\";\r\n static UniversalTransferDocumentRevisionTessaID = \"bdd8783f-c3c4-41e9-b2d2-36acea098b0f\";\r\n static ActKsAndInvoiceTessaID = \"5f2b5d2b-011a-404d-bbb3-a2718c308144\";\r\n static ActWorkServicesAndInvoiceTessaID = \"472f754d-d253-4706-816e-e6f96d0ba8d5\";\r\n static SingleBuildingActTessaID = \"eadfdb86-dcd7-41af-9ef7-049450eaea70\";\r\n\r\n // Корректировочные акты и с.ф\r\n static AdjustmentActs: string[] = [\r\n TessaActKinds.AdjustmentInvoiceTessaID,\r\n TessaActKinds.AdjustmentActTessaID,\r\n TessaActKinds.AdjustmentActAndInvoiceTessaID,\r\n TessaActKinds.InvoiceRevisionTessaID,\r\n TessaActKinds.UniversalTransferDocumentRevisionTessaID,\r\n TessaActKinds.InvoiceCorrectionRevisionTessaID,\r\n TessaActKinds.UniversalCorrectionDocumentRevisionTessaID\r\n ];\r\n}\r\n\r\n/** ArContract Договорной документ */\r\nexport class TessaArContractKinds {\r\n /** Договор */\r\n static ContractKindTessaID = \"e2fd547b-afe9-4246-abb1-8dcbccb65f14\";\r\n /** Дополнительное соглашение */\r\n static AdditionalAgreementKindTessaID = \"2f0060fa-2880-43c6-8a90-b50ebb203f04\";\r\n /** Соглашение о расторжении */\r\n static CancellationAgreementKindTessaID = \"937d278a-7be2-4105-827c-51e0ac662629\";\r\n /** Счет без договора */\r\n static AccountWithoutContractKindTessaID = \"dacd7db6-e400-4955-83bd-3d1b7738eb42\";\r\n /** Технический договор */\r\n static TechnicalContractKindTessaID = \"66bd72b8-b677-41e2-8ebe-c8d72bb6549a\";\r\n /** Уступка */\r\n static AssignmentKindTessaID = \"5d89c997-d37f-47f5-b923-fadcea2a0e64\";\r\n}\r\n\r\nexport class TessaEDocumentKinds {\r\n\r\n static ContractTessa = \"b0ffbbc2-b168-47e3-b3d6-364153b69b31\";\r\n static SupplementaryAgreementTessa = \"0a2e1cc1-9148-4612-8962-d44f1da6a320\";\r\n static NonformalizedUnidentifiedTessa = \"7224e7ca-7a3e-4df2-a294-803639553b16\";\r\n static ContractCancellationTessa = \"fe97f6a0-da3a-42fd-bd21-74d0b8709edb\";\r\n static AccountWithoutContractTessa = \"e3fe8f45-b15a-4044-9d71-46b2c5838398\";\r\n static ContractAttachmentTessa = \"ca0fb4d1-0b08-4d56-95d0-4edbf1a2328c\";\r\n static ContractSupplementTessa = \"184b5adc-452d-4be6-8c37-c33c7ff86fe1\";\r\n static ContractTechnicalDocumentationTessa = \"7beb36f9-0198-4f3e-958c-f29caf18c522\";\r\n\r\n static ActTransferPermissionsTessa = \"fa5ef13a-1ace-4ea7-aa67-3b81c0de9596\";\r\n static PrepaymentInvoiceTessa = \"ddb891a2-2af3-4f59-a614-7c85986d24ac\";\r\n static ActWorkServicesTessa = \"4d9c074b-2663-42a8-891b-05ae29007a43\";\r\n static ReconciliationActTessa = \"9af3b079-576a-494f-9f96-05c8b1932123\";\r\n static NonPikDocumentsTessa = \"9d7a8b53-f856-48ef-9128-184c415a6f87\";\r\n static AdjustmentInvoiceTessa = \"4e72c301-7a4e-4275-9bc0-3fd793152917\";\r\n static InvitationToEdoTessa = \"9f7fc372-7332-409d-8b7f-6727b475404f\";\r\n static ConfidentialityAgreementNDA = \"423f04d8-db01-4798-9202-6f185432768c\";\r\n static LetterCreditTessa = \"c5ad7ff7-0e14-4f12-adda-2e0ae6e76c4c\";\r\n static UKDTessa = \"a82b99d2-e153-4ad1-bb4d-f96732faed85\";\r\n static TorgTessa = \"e9fb86b3-20e0-43a2-928a-39c9a15bf12c\";\r\n static InvoiceTessa = \"700c0e0c-2656-4db7-b0f4-5ac9b9314940\";\r\n static ProformaInvoiceTessa = \"b8055669-a6c6-4013-912f-5da8b6a504f8\";\r\n static UPDInvoiceTessa = \"1b20c5e9-cd9d-4330-bf7b-598a3598f0eb\";\r\n static UPDSetTessa = \"503295f4-69b3-4002-a1e7-c22293108996\";\r\n static UPDTransferTessa = \"9a98c616-7a0d-4f4e-968a-5558a4c58e8a\";\r\n static ServiceDetailsTessa = \"fa7c1c55-f079-4a9f-899f-cd8a6e7095c9\";\r\n static Ks2Tessa = \"3d12386f-0ce1-4166-96b5-5f70f4d4316d\";\r\n static Ks3Tessa = \"d174caa1-0c3f-4bef-bd00-1e0e9fe154f8\";\r\n static NotificationTessa = \"1dfdc23d-8f00-4d51-b990-d94cac055fff\";\r\n static LetterTessa = \"34ffbc9a-a13b-4a41-a35a-a0dbc3af156d\";\r\n static PackageAttachmentTessa = \"b7c7988c-fdef-4030-9a67-36e0a94c2c4e\";\r\n\r\n // Массив видов документов, для которых требуется конвертация\r\n static EDocumentShouldBeConverted = Array(\r\n TessaEDocumentKinds.ActTransferPermissionsTessa,\r\n TessaEDocumentKinds.ActWorkServicesTessa,\r\n TessaEDocumentKinds.ReconciliationActTessa,\r\n TessaEDocumentKinds.PackageAttachmentTessa,\r\n TessaEDocumentKinds.ServiceDetailsTessa,\r\n TessaEDocumentKinds.Ks2Tessa,\r\n TessaEDocumentKinds.Ks3Tessa,\r\n TessaEDocumentKinds.TorgTessa,\r\n TessaEDocumentKinds.ProformaInvoiceTessa,\r\n TessaEDocumentKinds.PrepaymentInvoiceTessa\r\n );\r\n\r\n // Массив видов документов, для которых должен быть отправлен отказ в Диадок\r\n static EDocumentShouldSendRejectToDiadoc = Array(\r\n TessaEDocumentKinds.InvoiceTessa,\r\n TessaEDocumentKinds.AdjustmentInvoiceTessa,\r\n TessaEDocumentKinds.UPDSetTessa,\r\n TessaEDocumentKinds.UPDTransferTessa,\r\n TessaEDocumentKinds.UPDInvoiceTessa,\r\n TessaEDocumentKinds.UKDTessa\r\n );\r\n\r\n}\r\n\r\nexport class TessaMemoKinds {\r\n\r\n static StandardOnTheFormTessaID = \"298f707c-e58b-46f1-bca5-6e43560bf571\";\r\n\r\n}\r\n\r\nexport class TessaPersonnelDocumentKinds {\r\n\r\n static EtkTransmitionAgreementID = \"dc6ab23c-609a-4f36-832d-2a952af6d8b9\";\r\n static EdoAgreementID = \"4d7269da-09c4-490b-ade6-186c5a25ca0c\";\r\n static RemoteWorkTransmittionAgreementID = \"eccc1eb6-549d-4bde-bc06-49681c6f09a5\";\r\n static MolContractID = \"a6c0b294-4eca-49d1-bac0-c6bb4fe2b746\";\r\n static AdditionalAgreementID = \"3dad0901-0908-4c29-b69e-76f7d520aa2a\";\r\n static EmploymentContractID = \"636c9aa1-eb7c-4578-a947-d2e0903a2f88\";\r\n static StaffReductionNotificationID = \"008eb35f-9b13-4d55-b7cb-8ded4154d408\";\r\n static ResignationLetterID = \"d227bdc0-29fb-4c08-99d1-183d2a29eda6\";\r\n static PersonnelTransferT5FormID = \"3678d6db-9ce4-4f72-8088-c89110d0cce7\";\r\n static AdditionalAgreementToTdIntellectualPropertyID = \"8dd2f276-1f8f-4f57-bab1-08ab008c7772\";\r\n static RemoteWorkContractID = \"5b9fd917-5e50-458a-b14b-03f753ec4301\";\r\n static RevokeResignationLetterID = \"57f608c3-a360-48e1-b9d5-cdcb3e1f3ecc\";\r\n static WorkbookForwardingLetterID = \"10f9a4f1-3ffd-4eae-97b6-12ded8c36132\";\r\n static WorkOnDayOffAgreementID = \"178fc39f-a1fb-48bc-817f-d98abd4816d2\";\r\n static OvertimeWorkOnDayOffAndHolidayOrderID = \"39a784f6-c5e2-49a5-876b-12431b061668\";\r\n static ConnectToPayDaySystemLetterID = \"992e2986-d7ea-4009-9352-683f11c62d15\";\r\n\r\n /** Массив видов документов, для которых необходимо проставление штампа \"Экземпляр получен\". */\r\n static ShouldBeShowCopyReceivedStampKinds = Array(\r\n TessaPersonnelDocumentKinds.EmploymentContractID,\r\n TessaPersonnelDocumentKinds.AdditionalAgreementID,\r\n TessaPersonnelDocumentKinds.MolContractID,\r\n TessaPersonnelDocumentKinds.StaffReductionNotificationID,\r\n TessaPersonnelDocumentKinds.EdoAgreementID\r\n );\r\n\r\n /** Массив видов документов, для которых необходимо отображение кнопки \"Отказаться от подписания\". */\r\n static ShowRefuseSigningActionKinds = Array(\r\n TessaPersonnelDocumentKinds.EdoAgreementID,\r\n TessaPersonnelDocumentKinds.RemoteWorkTransmittionAgreementID\r\n );\r\n\r\n /** Массив видов документов, для которых необходим пропуск этапа подписания куратором. */\r\n static ShouldBeSkippedCuratorSigningKinds = Array(\r\n TessaPersonnelDocumentKinds.EtkTransmitionAgreementID,\r\n TessaPersonnelDocumentKinds.ResignationLetterID,\r\n TessaPersonnelDocumentKinds.RevokeResignationLetterID,\r\n TessaPersonnelDocumentKinds.WorkbookForwardingLetterID,\r\n TessaPersonnelDocumentKinds.WorkOnDayOffAgreementID,\r\n TessaPersonnelDocumentKinds.ConnectToPayDaySystemLetterID\r\n );\r\n}","/** Тип рассчета роли. */\r\nexport class PkRoleCalculationType {\r\n /** ID. */\r\n public ID: number;\r\n\r\n /** Наименование. */\r\n public Name: string;\r\n\r\n /** Описание. */\r\n public Caption: string;\r\n\r\n /** Конструктор. */\r\n constructor(id: number, name: string, caption: string) {\r\n this.ID = id;\r\n this.Name = name;\r\n this.Caption = caption;\r\n }\r\n\r\n public static DivisionRoles = new PkRoleCalculationType(0, \"DivisionRoles\", \"Роли по объектам\");\r\n public static AccountantEntity = new PkRoleCalculationType(1, \"AccountantEntity\", \"Паспорт контракта\");\r\n public static Role = new PkRoleCalculationType(2, \"Role\", \"Роль\");\r\n public static Manual = new PkRoleCalculationType(3, \"Manual\", \"Ручной ввод\");\r\n public static Other = new PkRoleCalculationType(4, \"Other\", \"Другое\");\r\n public static ByDepartment = new PkRoleCalculationType(5, \"ByDepartment\", \"По департаменту\");\r\n\r\n /** Типы рассчета роли. */\r\n public static Collection: PkRoleCalculationType[] = new Array(\r\n PkRoleCalculationType.DivisionRoles,\r\n PkRoleCalculationType.AccountantEntity,\r\n PkRoleCalculationType.Role,\r\n PkRoleCalculationType.Manual,\r\n PkRoleCalculationType.Other,\r\n PkRoleCalculationType.ByDepartment\r\n );\r\n}","export class PkTaskTypes {\r\n\r\n static PkUksApprovalTaskTypeID = \"e135de09-4f50-4d2b-b29b-11ccde5aaefc\";\r\n static PkProjectGroupApprovalTaskTypeID = \"a5d25a39-042a-4bbb-93cf-2cbbe3924fd0\";\r\n static PkGipApprovalTaskTypeID = \"5f132e2c-0e77-49c2-9cc1-6623b332ba98\";\r\n static PkOspApprovalTaskTypeID = \"f3562560-8d12-4efe-8471-57b5a726c984\";\r\n static PkDepProductApprovalTaskTypeID = \"ca4842e0-3f6f-429b-990e-4c78413e2221\";\r\n static PkExternalApprovalTaskTypeID = \"a840f4f8-433a-42fd-8428-833c162de75b\";\r\n static PkStartAcquaintanceProcessTechDocTaskTypeID = \"291aff62-8e24-4d12-9669-44d8accd3aca\";\r\n static PkSignTaskTypeID = \"8d4a0809-7b22-404e-810a-c75fa461034c\";\r\n static PkSigningInitiationTypeID = \"f01ace3a-933d-421c-8275-3712ca7c7b01\";\r\n static PkPersonnelDocumentCuratorReviewingTypeID = \"8f3bf968-feb5-45e8-8bfd-ca7321fb03d7\";\r\n static PkPersonnelDocumentSigningTypeID = \"9bc786d9-dbf8-4822-bb50-9f29d98615a7\";\r\n static PkPersonnelDocumentEtkTransitionTypeID = \"6d483723-ca60-4a16-921e-3702bfdfc000\";\r\n static PkPersonnelDocumentCuratorRevocationAgreementTypeID = \"18728975-1156-40fb-ae26-43c2a896592d\";\r\n static PkPersonnelDocumentEmployeeRevocationAgreementTypeID = \"726a4a7e-4a4c-4ce4-b549-4e41650c524b\";\r\n static PkWorkScopeApprovingTypeID = \"5c5c516a-2e94-42af-a5f6-3c8adddbda0f\";\r\n static PkEngineerPTOCheckContractorTypeID = \"0045ba7e-e88d-44f2-a3a3-f9aabee0b7cc\";\r\n static PkLoadingDocumentsTypeID = \"19380473-90c5-48b2-9903-b66d7412a503\";\r\n static PkSignInDiadocTypeID = \"3157fde3-a311-4754-98bb-07b04c07dfd1\";\r\n static PkAdditionalOrderConsiderationTypeID = \"4e67a14d-9fc4-4067-bd57-03e1c14cd377\";\r\n static PkStartAdditionalOrderConsiderationTypeID = \"685e0c8a-2931-4ebe-8733-7436acec1fe4\";\r\n static PkApproversAgreementFEUTypeID = \"e2e445fd-a4c7-4153-ae7e-279613ab9220\";\r\n static PkActBecameResponsibleTypeID = \"eeccddf7-dd5b-492e-85f6-1db076899983\";\r\n static PkApproversAgreementTypeID = \"945b9439-0008-4d22-a3c3-003d1f05ae1b\";\r\n static PkExecutionTaskTypeID = \"b57fafe6-6639-4b8e-8763-7ac703f4d4a2\";\r\n static PkAcquaintanceEFSTypeID = \"054646E8-5EAB-4C94-A269-EBB24FC8145D\";\r\n static ArMatrixApproveTypeID = \"0115e441-b200-461f-a2a3-9e5dd8e539ff\";\r\n static ArMatrixEditTypeID = \"1724c92e-af26-4054-bbe1-86af3c4942aa\";\r\n static ArMatrixConfirmStartProcessTypeID = \"da112eca-0203-4906-8c0a-2655f653300d\";\r\n static ArMatrixConfirmVgoStartProcessTypeID = \"296a3a25-0706-4538-8b17-5e4b85953b69\";\r\n static ArMatrixStartProcessTypeID = \"c537d836-a637-4937-9b40-f215ba26d8bf\";\r\n static ArMatrixFillEmptyRolesTypeID = \"cc0ff4d1-6fc6-41a2-99c3-efa30ef2f4b3\";\r\n static ArMatrixVgoPerformerConfirmTypeID = \"b3a54043-cd26-4012-a7aa-b1150b8e45bb\";\r\n static ArMatrixEditForProcurementControlTypeID = \"6bd0c221-651c-4c6b-9fe4-faa12d84697e\";\r\n static ArFillFromAUDTypeID = \"51a4db1d-64e4-4185-8d7b-0bc092f61856\"\r\n }","export class PkFdProcessHelper {\r\n static CreateAddAgreement = \"4e2b2bc5-9ee3-4769-be05-87f08533238e\";\r\n static Sign = \"80df932d-4774-42ce-a86c-d3b1d269fd38\";\r\n static PkSignDocument = \"ddb96cfc-64bd-4797-a893-573e02e153c7\";\r\n static PkReturnToEdit = \"93c0a8b5-e4a5-43dc-93f0-4e2730544b9b\";\r\n static PkCancelTask = \"dcd3fe6b-57e3-48b6-b8f9-1711e44b38f3\";\r\n static PkRefuseSigning = \"c8d86eb5-e9f0-461a-bd8c-3d1197b42fed\";\r\n static PkAskAboutDocument = \"32dffb72-657c-4b20-892f-844986e9a99c\";\r\n static Approve = \"8cf5cf41-8347-05b4-b3b2-519e8e621225\";\r\n static Disapprove = \"811d41ef-5610-421e-a573-fcdfd821713e\";\r\n static PkAgree = \"9cfe6de4-ad82-4c72-81c9-0dad4b67d167\";\r\n static PkDisagree = \"95772dc5-87c2-4f08-b6a9-270e203eed94\";\r\n static SignWithEDS = \"42f28e57-a763-4358-9f56-42c16308b333\";\r\n static SubmitForExecution = \"ca064935-d581-467d-8fa0-986b0aa928bc\";\r\n static SubmitForReview = \"f4035f7f-163a-48ba-8f55-c5cfb388cd50\";\r\n static PkSendToFEU = \"0bfe64d4-2792-44ba-84da-e2f9828dce9c\";\r\n static DigitalSigning = \"b0e3d041-3914-4091-9229-8b7c2bc6ca2f\";\r\n static FdDelegate = \"6adfc3c9-7bde-4339-8863-768e673aaaad\";\r\n static PkNotMyDoc = \"30409e0a-ea7f-483d-9ec8-a99c91bc57ee\";\r\n static DocumentIsSigned = \"E3E573DF-FD6A-489C-8DE4-DB1AA1B5B989\";\r\n static PkNoAnswer = \"948d57eb-1742-4ca8-a656-b134cc6da35f\";\r\n static PkReasonedRefusal = \"c0b019fb-b0c4-492e-86ad-891332a6f874\";\r\n \r\n static SendToMdsProcessID = \"5a4af371-b7df-4f4a-b7f6-6d5a27d39044\"\r\n static UpdateContractFromESUDProcessID = \"f4cb8067-ea40-4958-b6e2-d4e9be6aada3\"\r\n static UpdateCalculationFromKCProcessID = \"c5ca56a6-dd3e-4230-b871-92378742b209\"\r\n static FillCalculationFromAUDProcessID = \"12d3ec67-c984-4cf5-bd49-1062c16c328a\"\r\n static ResetCalculationProcess = \"8045bad1-b6ea-43b4-a427-2ac8428c5c3b\"\r\n\r\n /** Подготовить приказ. */\r\n static PkPrepareOrder = \"50c2bcdd-130b-4b96-abd0-968847fe2b26\";\r\n static PkCancelRevocation = \"3ce17c57-f97e-4ac0-a534-5dc690ad42b5\";\r\n static PkAssingNumber = \"70c0260f-c8de-415b-ab53-7b44aa83e0cb\";\r\n static PkSendByRussianPost = \"e2dafa3e-a8e2-46c1-a4df-17e32e56456a\";\r\n static PkSent = \"6d62e3ba-8413-4914-9571-1079f131280a\";\r\n static PkEnvelopePrepared = \"afbd902b-c36d-4c05-a920-961ab5ab26d0\";\r\n static PkDone = \"dbe5f266-9e8a-4d71-9753-4837cb9ae6a5\";\r\n static PkNotDone = \"abb6c50c-115c-492e-9847-a69949304f07\";\r\n static PkDelivered = \"86638973-9d2e-4ead-b076-239c9eb37933\";\r\n static PkNotDelivered = \"1559620d-cb38-40c8-9a7f-494dd90adc3e\";\r\n static PkNotSent = \"7005720b-b420-453f-86e3-157713043d7a\";\r\n}","export class SignatureInfo {\r\n public SerialNumber: string;\r\n public Organization: string;\r\n public Date: string;\r\n public Name: string;\r\n public Role: string;\r\n\r\n public constructor(\r\n serialNumber: string,\r\n organization: string,\r\n date: string,\r\n name: string,\r\n role: string) {\r\n this.SerialNumber = serialNumber;\r\n this.Organization = organization;\r\n this.Date = date;\r\n this.Name = name;\r\n this.Role = role;\r\n }\r\n}","export enum PkSigningType\r\n{\r\n // Собственноручно на бумаге\r\n OnPapper,\r\n\r\n // Электронной подписью с использованием КЭП\r\n WithKep,\r\n\r\n // Железным сертом\r\n WithIronCert,\r\n\r\n // Локальное подписание\r\n Local\r\n}","export class ArCompleteOptions {\r\n\r\n static Acquainted = \"e2322198-bd53-4f37-abac-88b670e4ad32\";\r\n static Reply = \"5b9206ce-2353-4ed9-a7d9-5f4eafd6ee54\";\r\n static RecallSignDiadoc = \"06ac7e18-cea1-46c6-9d6e-622ad79efd46\";\r\n static RecallRejectDiadoc = \"51c08171-35e0-4f84-b3d6-0fba1eb6a44e\";\r\n static GoDiadoc = \"4074d96c-d943-4d76-867b-40d9c25df9ee\";\r\n static TransferSignature = \"6d9fa22e-d4be-45b2-81ff-ea2c0cd60f97\";\r\n static TransferRejectionSignature = \"97ac7e2a-27bd-4a37-a104-3a0076c50b1a\";\r\n static SendRemoteAccountant = \"5b5b85d6-4626-43c1-9ad7-556f3f38cf1f\";\r\n static SendNotification = \"855cb3f9-cfc9-412d-90a5-56d00da1244f\";\r\n static StartReviewAct = \"641ba9b6-7840-498f-8063-917aa76087f4\";\r\n static DefineDocumentType = \"384d034f-71ea-42a4-a8dd-49ee0252bbff\";\r\n static SendToEsud = \"f84ec375-9459-4711-87eb-0e2bcde6bf0f\";\r\n static SubmitDocumentToResponsible = \"1fd47df7-b259-43b3-8b94-98488825cac6\";\r\n static RejectToPartnerInDiadoc = \"a55ed773-a496-4eb8-ab95-770c79bdda7b\";\r\n static PkSignDSS = \"6b8a111f-3397-42bd-bb84-87b3da23a119\";\r\n static PkSign = \"80DF932D-4774-42CE-A86C-D3B1D269FD38\";\r\n static CreateKSD = \"A37CBF15-0AE3-4B4B-944B-5A31ED284B1D\";\r\n static AttachDocument = \"73aa02cc-6efb-430e-9869-f4e1f6f67988\";\r\n}","/** Типы исходящего письма*/\r\nexport enum DownloadType\r\n{\r\n /** Получить в виде одного файла */\r\n Cobine,\r\n\r\n /** Получить файлы в виде архива */\r\n Archive\r\n}\r\n\r\nexport enum PkPeriodicity\r\n{\r\n Daily = 0,\r\n Weekly = 1,\r\n Monthly = 2,\r\n Quarterly = 3,\r\n Yearly = 4,\r\n OnWeekDays = 5,\r\n Other = 6\r\n}\r\n\r\nexport enum PkPeriod\r\n{\r\n Daily = 0,\r\n Weekly = 1,\r\n Monthly = 2,\r\n Quarterly = 3,\r\n Yearly = 4\r\n}\r\n\r\nexport enum PkDayType\r\n{\r\n Work = 0,\r\n Calendar = 1\r\n}\r\n\r\nexport enum PkWeekdays\r\n{\r\n Monday = 0,\r\n Tuesday = 1,\r\n Wednesday = 2,\r\n Thursday = 3,\r\n Friday = 4,\r\n Saturday = 5,\r\n Sunday = 6\r\n}\r\n\r\nexport enum ArticleType\r\n{\r\n Ohr = 0,\r\n Idp = 1\r\n}\r\n\r\n/** Способ расшифровки на стикеры. */\r\nexport enum PkMethodsEmbroideryOnStickersID\r\n{\r\n /** Вручную */\r\n Manually = 0,\r\n\r\n /** Excel. */\r\n Excel = 1,\r\n\r\n /** Из ЕСУД. */\r\n FromEsud = 2,\r\n\r\n /** Скрипт 1:1. */\r\n Script1To1 = 3,\r\n\r\n /** Конструктор актов. */\r\n ConstructorOfActs = 4,\r\n\r\n /** ЕФС. */\r\n EFS = 5,\r\n\r\n /** АУД. */\r\n AUD = 6\r\n}\r\n\r\nexport const EfsAudMethodIds: number[] = [5, 6]; \r\n\r\n/** Способ расшифровки на стикеры. */\r\nexport const PkMethodsEmbroideryOnStickers = new Map([\r\n [PkMethodsEmbroideryOnStickersID.Manually, 'Вручную'],\r\n [PkMethodsEmbroideryOnStickersID.Excel, 'Excel'],\r\n [PkMethodsEmbroideryOnStickersID.FromEsud, 'Из ЕСУД'],\r\n [PkMethodsEmbroideryOnStickersID.Script1To1, 'Скрипт 1:1'],\r\n [PkMethodsEmbroideryOnStickersID.ConstructorOfActs, 'Конструктор актов'],\r\n [PkMethodsEmbroideryOnStickersID.ConstructorOfActs, 'ЕФС'],\r\n [PkMethodsEmbroideryOnStickersID.ConstructorOfActs, 'АУД']\r\n]);\r\n\r\nexport enum ArContractTypes\r\n { \r\n /**Основной */ \r\n Main = 0,\r\n\r\n /**Перевода долга */ \r\n Debt = 1,\r\n\r\n /**Поставки материалов(давальческая схема) */\r\n Materials = 2,\r\n\r\n /**Рамочный */\r\n Framework = 3,\r\n\r\n /**Тарифный */\r\n Tariff = 4\r\n }","import { CardSection, CardRowState, CardRow, Card, CardFile, CardTask } from \"tessa/cards\";\r\nimport { CardGetFileContentRequest, CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { DotNetType, createTypedField, Guid, TypedField } from \"tessa/platform\";\r\nimport { ChRequestTypes } from \"./ChRequestTypes\";\r\nimport { showNotEmpty, tryGetFromInfo } from \"tessa/ui\";\r\nimport { TessaActKinds, TessaPersonnelDocumentKinds } from \"./PkPrimaryDocsHelper\";\r\nimport { PkRoleCalculationType } from \"./PkRoleCalculationType\";\r\nimport { PkTaskTypes } from \"./PkTaskTypes\";\r\nimport { PkFdProcessHelper } from \"./PkFdProcessHelper\";\r\nimport { CertData, FileCategory, FileContainer, FileSignatureEventType, IFile, IFileVersion } from \"tessa/files\";\r\nimport { ValidationResult, ValidationResultBuilder, ValidationResultType } from \"tessa/platform/validation\";\r\nimport { getFileNameAndExtension } from \"tessa/ui/cards/controls\";\r\nimport { CdFileTypes } from \"src/cdScripts/Helpers/CdFileTypes\";\r\nimport { SignatureInfo } from \"./CdClassHelper\";\r\nimport { ChFileCategories } from \"./ChFileCategories\";\r\nimport { userSession } from \"common/utility\";\r\nimport { CdTaskTypes } from \"src/cdScripts/Helpers/CdTaskTypes\";\r\nimport { ArCompleteOptions } from \"./ArCompleteOptions\";\r\nimport { PkSigningType } from \"./PkSigningTypes\";\r\nimport { PkCardTypes } from \"./PkCardTypes\";\r\nimport { ChTaskTypes } from \"./ChTaskTypes\";\r\nimport { CdDssCspType } from \"src/cdScripts/Helpers/CdDssCspType\";\r\nimport { CdDSSHelper } from \"src/cdScripts/Helpers/CdDSSHelper\";\r\nimport { ChProcessHelper } from \"./ChProcessHelper\";\r\nimport { CdGeneralDocumentationClientHelper } from \"src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper\";\r\nimport { ArticleType } from \"./PkEnums\";\r\nimport { MapStorage } from \"tessa/platform/storage\";\r\n\r\nexport class PkCardHelper {\r\n\r\n /** Признак вхождения сотрудника в указанную роль. */\r\n public static async IsUserInRoleAsync(userId: guid , roleId: guid) {\r\n\r\n let request = new CardRequest();\r\n request.requestType = ChRequestTypes.CheckUserInRole;\r\n request.info[\"UserID\"] = createTypedField(userId, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(roleId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n\r\n if (response.validationResult.build().isSuccessful) {\r\n return response.info[\"IsUserInRole\"] as boolean ?? false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Заполнение ответственных */\r\n public static async FillPassportInfo(\r\n card: Card,\r\n filterByArticleObjects: boolean = false,\r\n requiredApproversOnly: boolean = false,\r\n contractID: guid | null = null) {\r\n\r\n const aaSection = card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) {\r\n return;\r\n }\r\n\r\n const contractIDs = this.GetActContractIDsString(card);\r\n const objectIDs = filterByArticleObjects ? this.GetObjectIDsFromTableArticleIdp(card) : null;\r\n const objectWithSumIDs = filterByArticleObjects ? this.GetObjectWithSumIDsFromTableArticleIdp(card) : null;\r\n const livingComplexIDs = filterByArticleObjects ? this.GetLivingComplexIDsFromTableArticleIdp(card) : null;\r\n const receiverKckExternalID = aaSection.fields.tryGet(\"ReceiverKCKExternalID\");\r\n const senderKckExternalID = aaSection.fields.tryGet(\"SenderKCKExternalID\");\r\n let articleType: ArticleType;\r\n const articleOHRListSection = card.sections.tryGet(\"ArArticleOHRListVirtual\");\r\n if(articleOHRListSection != null && articleOHRListSection.rows.some(c => c.state != CardRowState.Deleted)) {\r\n articleType = ArticleType.Ohr;\r\n }\r\n else {\r\n articleType = ArticleType.Idp;\r\n }\r\n\r\n const financialResponsibilityCenterIDs = this.GetFinancialResponsibilityCenterIDsFromTableArticleOhr(card);\r\n const objectOtherIDs = this.GetObjectOtherIDsFromTableArticleOhr(card);\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.PkGetBookkeepers;\r\n request.cardId = card.id;\r\n request.info[\"ReceiverKCKExternalID\"] = receiverKckExternalID != null ? createTypedField(receiverKckExternalID, DotNetType.Int64) : null;\r\n request.info[\"SenderKCKExternalID\"] = senderKckExternalID != null ? createTypedField(senderKckExternalID, DotNetType.Int64) : null;\r\n request.info[\"CardTypeID\"] = createTypedField(card.typeId, DotNetType.Guid);\r\n request.info[\"ContractIDs\"] = contractIDs;\r\n request.info[\"ObjectIDs\"] = objectWithSumIDs;\r\n request.info[\"ArticleType\"] = createTypedField(articleType, DotNetType.Int32);\r\n request.info[\"FinancialResponsibilityCenterIDs\"] = financialResponsibilityCenterIDs;\r\n request.info[\"ObjectOtherIDs\"] = objectOtherIDs;\r\n request.info[\"ContractID\"] = contractID != null ? createTypedField(contractID, DotNetType.Guid) : null;\r\n\r\n // если разных ЖК или объектов меньше 2 - ответственных не заполняем\r\n if ((livingComplexIDs != null && livingComplexIDs.length < 2) ||\r\n (objectIDs != null && objectIDs.length < 2)) {\r\n return;\r\n }\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const bookkeeperInfo = response.info!.PkBookkeepersInfo!;\r\n const approversInfo = response.info!.PkApproversInfo!;\r\n const requiredApproversInfo = response.info!.PkRequiredApproversInfo!;\r\n const signersInfo = response.info!.PkSignersInfo!;\r\n const executorsInfo = response.info!.PkExecutorsInfo!;\r\n\r\n if (requiredApproversOnly) {\r\n this.FillRequiredApprovers(card, requiredApproversInfo, filterByArticleObjects);\r\n return;\r\n }\r\n\r\n this.FillSigner(aaSection, signersInfo, filterByArticleObjects);\r\n this.FillBookkeepers(card, bookkeeperInfo, filterByArticleObjects);\r\n this.FillApprovers(card, approversInfo, filterByArticleObjects);\r\n this.FillRequiredApprovers(card, requiredApproversInfo, filterByArticleObjects);\r\n this.FillExecutors(card, executorsInfo, filterByArticleObjects);\r\n }\r\n\r\n /** Заполнение бухгалтеров */\r\n private static FillBookkeepers(card: Card, bookkeeperInfo: any, filterByArticleObjects: boolean) {\r\n const bookkeepersSection = card.sections.tryGet('PkResponsibleBookkeepers');\r\n\r\n // проверка секции\r\n if (bookkeepersSection == null) {\r\n return;\r\n }\r\n\r\n if (bookkeeperInfo == null) {\r\n return;\r\n }\r\n\r\n // проверяем нужно ли обновлять сотрудников по объектам\r\n if (filterByArticleObjects && !this.IsNeedFillByObjects(bookkeeperInfo)) {\r\n return;\r\n }\r\n\r\n // чистка данных\r\n for (let i = bookkeepersSection.rows.length - 1; i >= 0; i--) {\r\n if (bookkeepersSection.rows[i].state === CardRowState.Inserted) {\r\n bookkeepersSection.rows.splice(i, 1);\r\n }\r\n else {\r\n bookkeepersSection.rows[i].state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n // добавление данных\r\n for (let values of bookkeeperInfo) {\r\n\r\n const calculationType = PkRoleCalculationType.Collection.find(x => x.ID === values.CalculationType.$value);\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", values.RoleID);\r\n row.set(\"RoleName\", values.RoleName);\r\n if (calculationType != null) {\r\n row.set(\"CalculationTypeID\", createTypedField(calculationType.ID, DotNetType.Int32));\r\n row.set(\"CalculationTypeName\", createTypedField(calculationType.Name, DotNetType.String));\r\n row.set(\"CalculationTypeCaption\", createTypedField(calculationType.Caption, DotNetType.String));\r\n }\r\n row.state = CardRowState.Inserted;\r\n bookkeepersSection.rows.push(row);\r\n }\r\n }\r\n\r\n /** Заполнение согласующих */\r\n private static FillApprovers(card: Card, approversInfo: any, filterByArticleObjects: boolean = false) {\r\n const approversSection = card.sections.tryGet('PkApprovers');\r\n\r\n // проверка секции\r\n if (approversSection == null) {\r\n return;\r\n }\r\n\r\n if (approversInfo == null) {\r\n return;\r\n }\r\n\r\n // проверяем нужно ли обновлять сотрудников по объектам\r\n if (filterByArticleObjects && !this.IsNeedFillByObjects(approversInfo)) {\r\n return;\r\n }\r\n\r\n // чистка данных\r\n for (let i = approversSection.rows.length - 1; i >= 0; i--) {\r\n if (approversSection.rows[i].state === CardRowState.Inserted) {\r\n approversSection.rows.splice(i, 1);\r\n }\r\n else {\r\n approversSection.rows[i].state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n // добавление данных\r\n for (let values of approversInfo) {\r\n const calculationType = PkRoleCalculationType.Collection.find(x => x.ID === values.CalculationType.$value);\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"ApproverID\", values.RoleID);\r\n row.set(\"ApproverName\", values.RoleName);\r\n if (calculationType != null) {\r\n row.set(\"CalculationTypeID\", createTypedField(calculationType.ID, DotNetType.Int32));\r\n row.set(\"CalculationTypeName\", createTypedField(calculationType.Name, DotNetType.String));\r\n row.set(\"CalculationTypeCaption\", createTypedField(calculationType.Caption, DotNetType.String));\r\n }\r\n row.state = CardRowState.Inserted;\r\n approversSection.rows.push(row);\r\n }\r\n }\r\n\r\n /** Заполнение обязательных согласующих */\r\n private static FillRequiredApprovers(card: Card, requiredApproversInfo: any, filterByArticleObjects: boolean = false) {\r\n const requiredApproversSection = card.sections.tryGet('PkRequiredApprovers');\r\n\r\n // проверка секции\r\n if (requiredApproversSection == null) {\r\n return;\r\n }\r\n\r\n if (requiredApproversInfo == null) {\r\n return;\r\n }\r\n\r\n // проверяем нужно ли обновлять сотрудников по объектам\r\n if (filterByArticleObjects && !this.IsNeedFillByObjects(requiredApproversInfo)) {\r\n return;\r\n }\r\n\r\n // чистка данных\r\n for (let i = requiredApproversSection.rows.length - 1; i >= 0; i--) {\r\n if (requiredApproversSection.rows[i].state === CardRowState.Inserted) {\r\n requiredApproversSection.rows.splice(i, 1);\r\n }\r\n else {\r\n requiredApproversSection.rows[i].state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n // добавление данных\r\n for (let values of requiredApproversInfo) {\r\n const calculationType = PkRoleCalculationType.Collection.find(x => x.ID === values.CalculationType.$value);\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", values.RoleID);\r\n row.set(\"RoleName\", values.RoleName);\r\n if (calculationType != null) {\r\n row.set(\"CalculationTypeID\", createTypedField(calculationType.ID, DotNetType.Int32));\r\n row.set(\"CalculationTypeName\", createTypedField(calculationType.Name, DotNetType.String));\r\n row.set(\"CalculationTypeCaption\", createTypedField(calculationType.Caption, DotNetType.String));\r\n }\r\n row.state = CardRowState.Inserted;\r\n requiredApproversSection.rows.push(row);\r\n }\r\n }\r\n\r\n /** Заполнение подписанта (только если в списке рассчитался 1 сотрудник) */\r\n private static FillSigner(aaSection: CardSection, signersInfo: any, filterByArticleObjects: boolean = false) {\r\n if (signersInfo == null) {\r\n return;\r\n }\r\n\r\n // проверяем нужно ли обновлять сотрудников по объектам\r\n if (filterByArticleObjects && !this.IsNeedFillByObjects(signersInfo)) {\r\n return;\r\n }\r\n\r\n // чистка данных\r\n aaSection.fields.set(\"SignerID\", null);\r\n aaSection.fields.set(\"SignerName\", null);\r\n aaSection.fields.set(\"SignerDiadocID\", null);\r\n aaSection.fields.set(\"SignerCalculationTypeID\", null);\r\n aaSection.fields.set(\"SignerCalculationTypeName\", null);\r\n aaSection.fields.set(\"SignerCalculationTypeCaption\", null);\r\n\r\n if (signersInfo.length !== 1) return;\r\n\r\n const values = signersInfo[0];\r\n const calculationType = PkRoleCalculationType.Collection.find(x => x.ID === values.CalculationType.$value);\r\n\r\n // добавление данных\r\n aaSection.fields.set(\"SignerID\", values.RoleID);\r\n aaSection.fields.set(\"SignerName\", values.RoleName);\r\n aaSection.fields.set(\"SignerDiadocID\", values.GuidDiadoc);\r\n if (calculationType != null) {\r\n aaSection.fields.set(\"SignerCalculationTypeID\", createTypedField(calculationType.ID, DotNetType.Int32));\r\n aaSection.fields.set(\"SignerCalculationTypeName\", createTypedField(calculationType.Name, DotNetType.String));\r\n aaSection.fields.set(\"SignerCalculationTypeCaption\", createTypedField(calculationType.Caption, DotNetType.String));\r\n }\r\n }\r\n\r\n /** Заполнение ответственных */\r\n private static FillExecutors(card: Card, executorsInfo: any, filterByArticleObjects: boolean = false) {\r\n const executorsSection = card.sections.tryGet('PkResponsibleExecutors');\r\n\r\n // проверка секции\r\n if (executorsSection == null) {\r\n return;\r\n }\r\n\r\n if (executorsInfo == null) {\r\n return;\r\n }\r\n\r\n // проверяем нужно ли обновлять сотрудников по объектам\r\n if (filterByArticleObjects && !this.IsNeedFillByObjects(executorsInfo)) {\r\n return;\r\n }\r\n\r\n // чистка данных\r\n for (let i = executorsSection.rows.length - 1; i >= 0; i--) {\r\n if (executorsSection.rows[i].state === CardRowState.Inserted) {\r\n executorsSection.rows.splice(i, 1);\r\n }\r\n else {\r\n executorsSection.rows[i].state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n // добавление данных\r\n for (let values of executorsInfo) {\r\n const calculationType = PkRoleCalculationType.Collection.find(x => x.ID === values.CalculationType.$value);\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", values.RoleID);\r\n row.set(\"RoleName\", values.RoleName);\r\n if (calculationType != null) {\r\n row.set(\"CalculationTypeID\", createTypedField(calculationType.ID, DotNetType.Int32));\r\n row.set(\"CalculationTypeName\", createTypedField(calculationType.Name, DotNetType.String));\r\n row.set(\"CalculationTypeCaption\", createTypedField(calculationType.Caption, DotNetType.String));\r\n }\r\n row.state = CardRowState.Inserted;\r\n executorsSection.rows.push(row);\r\n }\r\n }\r\n\r\n /** Нужно ли заполнять ответственных по объектам. */\r\n private static IsNeedFillByObjects(roles: any): boolean {\r\n // заполняем, если сотрудники рассчитались по ролям по объектам\r\n return roles.length > 0 &&\r\n roles.every(x => x.CalculationType.$value === 0);\r\n }\r\n\r\n /** Получение списка ID договоров */\r\n public static GetActContractIDsString(card: Card): Array> {\r\n const aaSection = card.sections.tryGet(\"ArchiveAct\");\r\n const acSection = card.sections.tryGet(\"ArContracts\");\r\n if (aaSection == null || acSection == null)\r\n return [];\r\n\r\n const documentKindID = aaSection.fields.tryGet(\"DocumentKindID\");\r\n\r\n const contractsIDs = documentKindID === TessaActKinds.ReconciliationActTessa\r\n ? acSection.rows\r\n .filter(x => x.state !== CardRowState.Deleted)\r\n .map(x => x.tryGet(\"ViewID\") as string)\r\n : new Array(aaSection.fields.tryGet(\"ContractID\"));\r\n\r\n return contractsIDs.filter(x => Guid.isValid(x)).map(x => createTypedField(x, DotNetType.Guid));\r\n }\r\n\r\n /** Получение списка ID объектов по статьям ИДП */\r\n private static GetObjectIDsFromTableArticleIdp(card: Card): Array> {\r\n const idpSectionVirtual = card.sections.tryGet(\"ArArticleIDPListVirtual\");\r\n const objectIDs: Array = [];\r\n\r\n if (idpSectionVirtual == null) {\r\n return [];\r\n }\r\n\r\n for (const row of idpSectionVirtual.rows) {\r\n\r\n // получаем ID объекта из статьи\r\n const objectID = row.tryGet(\"ObjectID\") as string | undefined | null;\r\n\r\n // если ID объекта не задан - продолжаем смотреть другие статьи\r\n if (objectID == null) {\r\n continue;\r\n }\r\n\r\n // если ID объекта уже есть в списке - продолжаем смотреть другие статьи\r\n if (objectIDs.indexOf(objectID) >= 0) {\r\n continue;\r\n }\r\n\r\n // добавляем ID объекта в список\r\n objectIDs.push(objectID);\r\n }\r\n\r\n // возвращаем список ID объектов\r\n return objectIDs.map(x => createTypedField(x, DotNetType.Guid));\r\n }\r\n\r\n /** Получение списка ЦФО по статьям ОХР */\r\n private static GetFinancialResponsibilityCenterIDsFromTableArticleOhr(card: Card): Array> {\r\n const ohrSectionVirtual = card.sections.tryGet(\"ArArticleOHRListVirtual\");\r\n const financialResponsibilityCenterIDs: Array = [];\r\n\r\n if (ohrSectionVirtual == null) {\r\n return [];\r\n }\r\n\r\n for (const row of ohrSectionVirtual.rows) {\r\n if (row.state == CardRowState.Deleted) {\r\n continue;\r\n }\r\n\r\n const financialResponsibilityCenterID = row.tryGet(\"FinancialResponsibilityCenterID\") as string | undefined | null;\r\n if (financialResponsibilityCenterID == null) {\r\n continue;\r\n }\r\n\r\n if (financialResponsibilityCenterIDs.indexOf(financialResponsibilityCenterID) >= 0) {\r\n continue;\r\n }\r\n\r\n financialResponsibilityCenterIDs.push(financialResponsibilityCenterID);\r\n }\r\n\r\n return financialResponsibilityCenterIDs.map(x => createTypedField(x, DotNetType.Guid));\r\n }\r\n\r\n /** Получение прочих объектов инвестирования по статьям ОХР */\r\n private static GetObjectOtherIDsFromTableArticleOhr(card: Card): Array> {\r\n const ohrSectionVirtual = card.sections.tryGet(\"ArArticleOHRListVirtual\");\r\n const objectOtherIDs: Array = [];\r\n\r\n if (ohrSectionVirtual == null) {\r\n return [];\r\n }\r\n\r\n for (const row of ohrSectionVirtual.rows) {\r\n if (row.state == CardRowState.Deleted) {\r\n continue;\r\n }\r\n\r\n const objectOtherID = row.tryGet(\"ObjectOtherID\") as string | undefined | null;\r\n\r\n if (objectOtherID == null) {\r\n continue;\r\n }\r\n\r\n if (objectOtherIDs.indexOf(objectOtherID) >= 0) {\r\n continue;\r\n }\r\n\r\n objectOtherIDs.push(objectOtherID);\r\n }\r\n\r\n return objectOtherIDs.map(x => createTypedField(x, DotNetType.Guid));\r\n }\r\n\r\n /** Получение списка ID объектов с заполненными суммами по статьям ИДП */\r\n private static GetObjectWithSumIDsFromTableArticleIdp(card: Card): Array> {\r\n const idpSectionVirtual = card.sections.tryGet(\"ArArticleIDPListVirtual\");\r\n const objectIDs: Array = [];\r\n\r\n if (idpSectionVirtual == null) {\r\n return [];\r\n }\r\n\r\n for (const row of idpSectionVirtual.rows) {\r\n // получаем сумму из статьи\r\n const amount = row.tryGet(\"Amount\") as number | undefined | null;\r\n\r\n // не берем объект из статьи, если по ней не установлена сумма\r\n if (amount == null || amount <= 0) {\r\n continue;\r\n }\r\n\r\n // получаем ID объекта из статьи\r\n const objectID = row.tryGet(\"ObjectID\") as string | undefined | null;\r\n\r\n // если ID объекта не задан - продолжаем смотреть другие статьи\r\n if (objectID == null) {\r\n continue;\r\n }\r\n\r\n // если ID объекта уже есть в списке - продолжаем смотреть другие статьи\r\n if (objectIDs.indexOf(objectID) >= 0) {\r\n continue;\r\n }\r\n\r\n // добавляем ID объекта в список\r\n objectIDs.push(objectID);\r\n }\r\n\r\n // возвращаем список ID объектов\r\n return objectIDs.map(x => createTypedField(x, DotNetType.Guid));\r\n }\r\n\r\n /** Получение списка ID ЖК по статьям ИДП */\r\n private static GetLivingComplexIDsFromTableArticleIdp(card: Card): Array> {\r\n const idpSectionVirtual = card.sections.tryGet(\"ArArticleIDPListVirtual\");\r\n const livingComplexIDs: Array = [];\r\n\r\n if (idpSectionVirtual == null) {\r\n return [];\r\n }\r\n\r\n for (const row of idpSectionVirtual.rows) {\r\n\r\n // получаем ID ЖК из статьи\r\n const livingComplexID = row.tryGet(\"ObjectID\") as string | undefined | null;\r\n\r\n // если ID ЖК не задан - продолжаем смотреть другие статьи\r\n if (livingComplexID == null) {\r\n continue;\r\n }\r\n\r\n // если ID ЖК уже есть в списке - продолжаем смотреть другие статьи\r\n if (livingComplexIDs.indexOf(livingComplexID) >= 0) {\r\n continue;\r\n }\r\n\r\n // добавляем ID ЖК в список\r\n livingComplexIDs.push(livingComplexID);\r\n }\r\n\r\n // возвращаем список ID ЖК\r\n return livingComplexIDs.map(x => createTypedField(x, DotNetType.Guid));\r\n }\r\n\r\n /** Получение контента файла. */\r\n public static async GetFileContentAsync(\r\n fileVersion: IFileVersion,\r\n fileContainer: FileContainer) {\r\n // если контент файла пустой\r\n if (fileVersion.content == null ||\r\n fileVersion.content.size === 0) {\r\n // получаем контент\r\n const fileVersionContent = await fileContainer.getFileContent(fileVersion);\r\n\r\n // если не удалось получить контент\r\n if (!fileVersionContent.validationResult.isSuccessful ||\r\n fileVersionContent.data == null) {\r\n return fileVersionContent.validationResult;\r\n }\r\n\r\n // устанавливаем контент\r\n await fileVersion.setContent(fileVersionContent.data);\r\n }\r\n\r\n return ValidationResult.empty;\r\n }\r\n\r\n /** Обновление значения в полях по ключу. */\r\n public static UpdateKeyValue(\r\n fields: MapStorage,\r\n key: string,\r\n value: any,\r\n type: DotNetType) {\r\n const oldValue = fields.tryGet(key);\r\n\r\n if (oldValue?.$value == value) {\r\n return;\r\n }\r\n\r\n if (value == null) {\r\n fields.set(key, null);\r\n }\r\n else {\r\n fields.set(key, createTypedField(value, type));\r\n }\r\n }\r\n\r\n /** Обновление значения в строке по ключу. */\r\n public static UpdateRowKeyValue(\r\n row: CardRow,\r\n key: string,\r\n value: any,\r\n type: DotNetType) {\r\n const oldValue = row.tryGetField(key);\r\n\r\n if (oldValue?.$value == value) {\r\n return;\r\n }\r\n\r\n if (value == null) {\r\n row.set(key, null);\r\n }\r\n else {\r\n row.set(key, createTypedField(value, type));\r\n }\r\n }\r\n\r\n /** Подписание файла. */\r\n public static async SignFileAsync(\r\n cardFile: CardFile,\r\n fileVersion: IFileVersion,\r\n certificate: CertData,\r\n signatureData: string,\r\n completedTaskTypeID: string | null = null) {\r\n // пишем в лог\r\n console.info(\"Подписываем файл ID: \" + fileVersion.file.id + \", VersionID: \" + fileVersion.id);\r\n\r\n // получаем или добавляем секцию с доп. инфой по подписям\r\n const pkfsaiSection = cardFile.card.sections.getOrAdd(\"PkFileSignaturesAdditionalInfo\");\r\n\r\n // создаем токен подписи\r\n const signatureToken = fileVersion.source.getSignatureCreationToken();\r\n signatureToken.eventType = FileSignatureEventType.Signed;\r\n signatureToken.company = certificate.company;\r\n signatureToken.subjectName = certificate.subjectName;\r\n signatureToken.serialNumber = certificate.serialNumber;\r\n signatureToken.issuerName = certificate.issuerName;\r\n signatureToken.data = signatureData;\r\n\r\n // создаем подпись\r\n const signature = fileVersion.source.createSignature(signatureToken, fileVersion);\r\n\r\n // добавляем подпись в файл\r\n fileVersion.signatures.push(signature);\r\n\r\n // уведомляем о добавлении подписи\r\n await fileVersion.source.notifySignAdded(signature);\r\n\r\n // добавляем доп. инфо по подписи\r\n const pkfsRow = pkfsaiSection.rows.add();\r\n pkfsRow.rowId = Guid.newGuid();\r\n pkfsRow.set(\"SignatureRowID\", createTypedField(signature.id, DotNetType.Guid));\r\n if (completedTaskTypeID != null) {\r\n pkfsRow.set(\"CompletedTaskTypeID\", createTypedField(completedTaskTypeID, DotNetType.Guid));\r\n }\r\n pkfsRow.state = CardRowState.Inserted;\r\n }\r\n\r\n /** Добавление файла подписи. */\r\n public static async AddFileSignatureAsync(\r\n fileContainer: FileContainer,\r\n file: IFile,\r\n name: string,\r\n signatureContent: string) {\r\n // генерируем название файла подписи\r\n const fileSignatureName =\r\n getFileNameAndExtension(file.name).name +\r\n \"_\" +\r\n name +\r\n \".sgn\";\r\n\r\n // пишем в лог\r\n console.info(\"Обновляем файл печатной формы: \" + fileSignatureName);\r\n\r\n // формируем контент файла подписи\r\n const blobData = CdGeneralDocumentationClientHelper.Base64ToBlob(signatureContent, \"application/sgn\");\r\n const fileData = new File([blobData], fileSignatureName);\r\n\r\n // пытаемся найти существующий\r\n const existingFile = fileContainer.files.find(x =>\r\n x.name === fileSignatureName);\r\n\r\n // если файл есть\r\n if (existingFile != null) {\r\n // заменяем его\r\n await existingFile.replace(fileData, false);\r\n }\r\n else {\r\n // создаем файл\r\n const fileSignature = fileContainer.createFile(\r\n fileData,\r\n CdFileTypes.DefaultFileType,\r\n ChFileCategories.ElectronicSignatures,\r\n fileSignatureName);\r\n\r\n // добавляем файл\r\n await fileContainer.addFile(fileSignature, false, true);\r\n }\r\n }\r\n\r\n /** Добавление печатных форм. */\r\n public static async AddPrintFormsAsync(\r\n cardID: string,\r\n fileContainer: FileContainer,\r\n insertModeID: number = 0,\r\n signedInfo: string | null = null,\r\n showRole: boolean = true,\r\n showSignedDate: boolean = false,\r\n showCopyReceivedStamp: boolean = false,\r\n showOrganization: boolean = true,\r\n fileName: string | null = null,\r\n fileCategory: FileCategory | null = null) {\r\n // инициализируем результат валидации по получению контента ПФ\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // инициализируем список поддерживаемых расширений\r\n const officeFormats = new Array(\".docx\", \".doc\", \".xlns\", \".xls\", \".pdf\");\r\n\r\n // пробегаемся по файлам\r\n for (let i = fileContainer.files.length - 1; i >= 0; i--) {\r\n // получаем файл\r\n const file = fileContainer.files[i];\r\n\r\n // получаем наименование файла и его расширение\r\n const fileNameAndExt = getFileNameAndExtension(file.name);\r\n\r\n // получаем расширения файла\r\n const fileExt = fileNameAndExt?.ext?.toLowerCase();\r\n\r\n // если в файле есть флаг печатной формы\r\n // или передана категория файла, но она не совпадает\r\n // или передано наименование файла, но оно не совпадает\r\n // или формат файла не офисный и не PFD\r\n if (tryGetFromInfo(file.options, \"FileForPrint\", false) ||\r\n fileCategory != null && file.category?.id !== fileCategory.id ||\r\n fileName != null && file.name.indexOf(fileName) < 0 ||\r\n officeFormats.indexOf(fileExt) < 0) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // получаем последнюю версию файла\r\n const lastFileVersion = file.lastVersion;\r\n\r\n // получаем информацию по подписям (актуально, если подписи удалились или добавились)\r\n const signaturesInfo = lastFileVersion.signatures.map(x => new SignatureInfo(\r\n x.serialNumber,\r\n x.company ?? \"\",\r\n x.signed,\r\n x.subjectName,\r\n \"\"\r\n ));\r\n\r\n // создаем запрос на получение контента печатной формы\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = CdFileTypes.GetFileForPrintType;\r\n getFileContentRequest.cardId = cardID;\r\n getFileContentRequest.versionRowId = lastFileVersion.id;\r\n getFileContentRequest.fileId = file.id;\r\n getFileContentRequest.fileName = file.name;\r\n getFileContentRequest.info[\"InsertModeID\"] = createTypedField(insertModeID, DotNetType.Int32);\r\n getFileContentRequest.info[\"SignedInfo\"] = createTypedField(signedInfo, DotNetType.String);\r\n getFileContentRequest.info[\"ShowRole\"] = createTypedField(showRole, DotNetType.Boolean);\r\n getFileContentRequest.info[\"ShowSignedDate\"] = createTypedField(showSignedDate, DotNetType.Boolean);\r\n getFileContentRequest.info[\"ShowCopyReceivedStamp\"] = createTypedField(showCopyReceivedStamp, DotNetType.Boolean);\r\n getFileContentRequest.info[\"ShowOrganization\"] = createTypedField(showOrganization, DotNetType.Boolean);\r\n getFileContentRequest.info[\"SignaturesInfo\"] = createTypedField(JSON.stringify(signaturesInfo), DotNetType.String);\r\n\r\n // отправляем запрос\r\n const getFileContentResponse = await CardService.instance.getFileContent(getFileContentRequest);\r\n\r\n // если запрос выполнился с ошибками\r\n // или Result пустой\r\n if (!getFileContentResponse.validationResult.isSuccessful ||\r\n getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Не удалось сформировать контент печатной формы для файла: \\\"\" + lastFileVersion.name + \"\\\"\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n getFileContentResponse.validationResult.build().toString());\r\n\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // генерируем название файла\r\n const fileForPrintName = fileNameAndExt.name + \" (для печати).pdf\";\r\n\r\n // формируем контент файла\r\n const fileData = new File([getFileContentResponse.content], fileForPrintName);\r\n\r\n // ищем печатную форму по этому файлу\r\n const existingFileForPrint = fileContainer.files.find(x =>\r\n tryGetFromInfo(x.options, \"FileForPrint\", false) &&\r\n tryGetFromInfo(x.options, \"ParentFileID\", null) === file.id);\r\n\r\n // если файл есть\r\n if (existingFileForPrint != null) {\r\n // заменяем его\r\n await existingFileForPrint.replace(fileData, false);\r\n }\r\n else {\r\n // создаем файл печатной формы\r\n const fileForPrint = fileContainer.createFile(\r\n fileData,\r\n CdFileTypes.DefaultFileType,\r\n file.category,\r\n fileForPrintName);\r\n\r\n // добавляем флаг печатной формы\r\n fileForPrint.options[\"FileForPrint\"] = true;\r\n\r\n // добавляем флаг родительского файла\r\n fileForPrint.options[\"ParentFileID\"] = file.id;\r\n\r\n // добавляем флаг родительской версии файла\r\n fileForPrint.options[\"ParentFileVersionID\"] = lastFileVersion.id;\r\n\r\n // добавляем файл\r\n await fileContainer.addFile(fileForPrint, false, true);\r\n }\r\n }\r\n\r\n // возвращаем рузультат валидации\r\n return validationResult.build();\r\n }\r\n\r\n /** Проверка карточки на необходимость подписания файлов. */\r\n public static async IsNeedSigningAsync(card: Card) {\r\n // флаг необходимости подписания\r\n let isNeedSigning = false;\r\n\r\n // наименование файла\r\n let fileName: string | null = null;\r\n\r\n // категория файла\r\n let fileCategory: FileCategory | null = null;\r\n\r\n // пробегаемся по заданиям\r\n for (const task of card.tasks) {\r\n // если задание не завершалось\r\n if (task.state !== CardRowState.Deleted) {\r\n // смотрим другие задания\r\n continue;\r\n }\r\n\r\n // если завершается задание \"Подписание\" по кнопке \"Подписать\"\r\n if (task.typeId === CdTaskTypes.PkSigningTypeID &&\r\n task.optionId === PkFdProcessHelper.Sign) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Рассмотрение куратором\" по кнопке \"Подписать документ\"\r\n if (task.typeId === PkTaskTypes.PkPersonnelDocumentCuratorReviewingTypeID &&\r\n task.optionId === PkFdProcessHelper.PkSignDocument) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Подписание сотрудником\" по кнопке \"Подписать\"\r\n if (task.typeId === PkTaskTypes.PkPersonnelDocumentSigningTypeID &&\r\n task.optionId === PkFdProcessHelper.Sign) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Соглашение об аннулировании куратором\" по кнопке \"Подписать документ\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentCuratorRevocationAgreementTypeID &&\r\n task.optionId === PkFdProcessHelper.PkSignDocument) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n fileCategory = ChFileCategories.Revocation;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Соглашение об аннулировании сотрудником\" по кнопке \"Подписать\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentEmployeeRevocationAgreementTypeID &&\r\n task.optionId === PkFdProcessHelper.Sign) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Переход на ЭТК\"\r\n if (task.typeId === PkTaskTypes.PkPersonnelDocumentEtkTransitionTypeID) {\r\n // по кнопке \"Согласовать\"\r\n if (task.optionId === PkFdProcessHelper.PkAgree) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n fileName = \"Согласие на переход на ЭТК\";\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n\r\n // по кнопке \"Не согласовать\"\r\n if (task.optionId === PkFdProcessHelper.PkDisagree) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n fileName = \"Согласие на сохранение БТК\";\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n }\r\n\r\n // если завершается задание \"На подписание\" по кнопке \"Подписать с ЭЦП\" или \"Подписать DSS\"\r\n if (task.typeId === PkTaskTypes.PkSignInDiadocTypeID &&\r\n (task.optionId === PkFdProcessHelper.SignWithEDS ||\r\n task.optionId === ArCompleteOptions.PkSignDSS ||\r\n Guid.equals(task.optionId, ArCompleteOptions.PkSign))) {\r\n // устанавливаем флаги\r\n isNeedSigning = true;\r\n break;\r\n }\r\n\r\n if (await PkCardHelper.OutgoingNeedSigningAsync(card) === true) {\r\n isNeedSigning = true;\r\n break;\r\n }\r\n }\r\n\r\n return { isNeedSigning, fileName, fileCategory };\r\n }\r\n\r\n /** Проверка карточки на необходимость добавления ПФ. */\r\n public static async IsNeedAddPrintFormsAsync(card: Card) {\r\n // флаг необходимости добавления ПФ\r\n let isNeedAddPrintForms = false;\r\n\r\n // флаг необходимости добавления штампа \"Экземпляр получен\"\r\n let isNeedShowCopyReceivedStamp = false;\r\n\r\n // наименование файла\r\n let fileName: string | null = null;\r\n\r\n // категория файла\r\n let fileCategory: FileCategory | null = null;\r\n\r\n // пробегаемся по заданиям\r\n for (const task of card.tasks) {\r\n // если задание не завершалось\r\n if (task.state !== CardRowState.Deleted) {\r\n // смотрим другие задания\r\n continue;\r\n }\r\n\r\n // если завершается задание \"Подписание\" по кнопке \"Подписать\"\r\n if (task.typeId === CdTaskTypes.PkSigningTypeID &&\r\n task.optionId === PkFdProcessHelper.Sign) {\r\n // устанавливаем флаги\r\n isNeedAddPrintForms = true;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Рассмотрение куратором\" по кнопке \"Подписать документ\"\r\n if (task.typeId === PkTaskTypes.PkPersonnelDocumentCuratorReviewingTypeID &&\r\n task.optionId === PkFdProcessHelper.PkSignDocument) {\r\n // устанавливаем флаги\r\n isNeedAddPrintForms = true;\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Подписание сотрудником\" по кнопке \"Подписать\"\r\n if (task.typeId === PkTaskTypes.PkPersonnelDocumentSigningTypeID &&\r\n task.optionId === PkFdProcessHelper.Sign) {\r\n // устанавливаем флаги\r\n isNeedAddPrintForms = true;\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Соглашение об аннулировании куратором\" по кнопке \"Подписать документ\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentCuratorRevocationAgreementTypeID &&\r\n task.optionId === PkFdProcessHelper.PkSignDocument) {\r\n // устанавливаем флаги\r\n isNeedAddPrintForms = true;\r\n fileCategory = ChFileCategories.Revocation;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Соглашение об аннулировании сотрудником\" по кнопке \"Подписать\"\r\n if (task.typeId === CdTaskTypes.PkPersonnelDocumentEmployeeRevocationAgreementTypeID &&\r\n task.optionId === PkFdProcessHelper.Sign) {\r\n // устанавливаем флаги\r\n isNeedAddPrintForms = true;\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Переход на ЭТК\"\r\n if (task.typeId === PkTaskTypes.PkPersonnelDocumentEtkTransitionTypeID) {\r\n // по кнопке \"Согласовать\"\r\n if (task.optionId === PkFdProcessHelper.PkAgree) {\r\n // устанавливаем флаги\r\n isNeedAddPrintForms = true;\r\n fileName = \"Согласие на переход на ЭТК\";\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n\r\n // по кнопке \"Не согласовать\"\r\n if (task.optionId === PkFdProcessHelper.PkDisagree) {\r\n // устанавливаем флаги\r\n isNeedAddPrintForms = true;\r\n fileName = \"Согласие на сохранение БТК\";\r\n fileCategory = ChFileCategories.Primary;\r\n break;\r\n }\r\n }\r\n\r\n // если завершается задание \"Подписание сотрудником\" по кнопке \"Подписать\"\r\n if (Guid.equals(task.typeId, PkTaskTypes.PkSignInDiadocTypeID) &&\r\n Guid.equals(task.optionId, PkFdProcessHelper.Sign)) {\r\n // устанавливаем флаг подписания\r\n isNeedAddPrintForms = true;\r\n break;\r\n }\r\n\r\n if (await PkCardHelper.OutgoingNeedSigningAsync(card) === true) {\r\n isNeedAddPrintForms = true;\r\n break;\r\n }\r\n\r\n // если завершается задание \"Подписание сотрудником\" по кнопке \"Подписать\"\r\n // если завершается задание \"На подписание\" по кнопке \"Подписать с ЭЦП\" или \"Подписать DSS\"\r\n if (Guid.equals(card.typeId, PkCardTypes.PkOutgoingTypeID)\r\n && Guid.equals(task.typeId, ChTaskTypes.PkSignerAgreementTypeID)\r\n && task.optionId === ChProcessHelper.PkSign) {\r\n // получаем секцию\r\n const pkpdiSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if (pkpdiSection != null) {\r\n // получаем вид документа\r\n let receivingMethodID = pkpdiSection.fields.tryGet(\"ReceivingMethodID\");\r\n if (receivingMethodID === 1) {\r\n // устанавливаем флаг подписания\r\n isNeedAddPrintForms = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // если флаг добавления ПФ установлен\r\n if (isNeedAddPrintForms) {\r\n // получаем секцию\r\n const pkpdiSection = card.sections.tryGet(\"PkPersonnelDocumentInfo\");\r\n\r\n if (pkpdiSection != null) {\r\n // получаем вид документа\r\n const documentKindID = pkpdiSection.fields.tryGet(\"DocumentKindID\");\r\n\r\n // устанавливаем флаг отображения штампа \"Экземпляр получен\"\r\n isNeedShowCopyReceivedStamp = TessaPersonnelDocumentKinds.ShouldBeShowCopyReceivedStampKinds\r\n .some(x => x === documentKindID);\r\n }\r\n }\r\n\r\n\r\n\r\n return { isNeedAddPrintForms, isNeedShowCopyReceivedStamp, fileName, fileCategory };\r\n }\r\n\r\n /**Нужно ли подписание в исходящем */\r\n public static OutgoingNeedSigningAsync(card: Card): boolean {\r\n // флаг необходимости подписания\r\n let isNeedSigning = false;\r\n\r\n // наименование файла\r\n // let fileName: string = null;\r\n\r\n let signingType: PkSigningType | null = null;\r\n let pkOutgoing = card!.sections.tryGet(\"PkOutgoing\");\r\n if (!pkOutgoing) {\r\n return false;\r\n }\r\n\r\n signingType = pkOutgoing.fields.tryGet(\"SigningTypeID\")! as PkSigningType | null;\r\n\r\n\r\n // выполняем подписание только локальное.\r\n if (!Guid.equals(card.typeId, PkCardTypes.PkOutgoingTypeID) || signingType !== PkSigningType.Local) {\r\n return isNeedSigning;\r\n }\r\n\r\n // получаем завершаемое задание с необходимым вариантом завершения\r\n let completedTask = card.tasks.find(x =>\r\n Guid.equals(x.optionId, PkFdProcessHelper.Sign) && Guid.equals(x.typeId, ChTaskTypes.PkSignerAgreementTypeID));\r\n if (completedTask != null) {\r\n isNeedSigning = true;\r\n }\r\n\r\n return isNeedSigning;\r\n }\r\n\r\n /** Получение ID подразделения. */\r\n public static GetDepartmentID(card: Card) {\r\n // проверяем секцию\r\n const dciSection = card.sections.tryGet(\"DocumentCommonInfo\");\r\n if (dciSection == null) {\r\n return null;\r\n }\r\n\r\n // возвращаем ID подразделения\r\n return dciSection.fields.tryGet(\"DepartmentID\") as string;\r\n }\r\n\r\n /** Получение файлов для подписания. */\r\n public static async GetSigningFilesInfoAsync(cardsFilesInfo: CardFilesInfo[], withContent: boolean = true) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // инициализируем список файлов, которые нужно подписать\r\n const signingFilesInfo = new Array();\r\n\r\n // инициализируем список поддерживаемых расширений\r\n const officeFormats = new Array(\".docx\", \".doc\", \".xlns\", \".xls\", \".pdf\");\r\n\r\n // пробегаемся по карточкам с информацией по файлам\r\n for (const cardFilesInfo of cardsFilesInfo) {\r\n // пробегаемся по файлам карточки\r\n for (const file of cardFilesInfo.FileContainer.files) {\r\n // если категория не указана\r\n if (file.category == null) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // или передана категория файла, но она не совпадает\r\n if (cardFilesInfo.SigningInfo.FileCategory != null && file.category?.id !== cardFilesInfo.SigningInfo.FileCategory.id) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // если передано наименование файла, но оно не совпадает\r\n if (cardFilesInfo.SigningInfo.FileName != null && file.name.indexOf(cardFilesInfo.SigningInfo.FileName) < 0) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // получаем наименование файла и его расширение\r\n const fileNameAndExt = getFileNameAndExtension(file.name);\r\n\r\n // получаем расширения файла\r\n const fileExt = fileNameAndExt?.ext?.toLowerCase();\r\n\r\n // если в файле есть флаг печатной формы\r\n // или передано наименование файла, но оно не совпадает\r\n // или формат файла не офисный и не PFD\r\n if (tryGetFromInfo(file.options, \"FileForPrint\", false) ||\r\n officeFormats.indexOf(fileExt) < 0) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // получаем последнюю версию файла\r\n const lastFileVersion = file.lastVersion;\r\n\r\n // получаем файл из карточки\r\n const cardFile = cardFilesInfo.Card.files.find(x => x.rowId === file.id) as CardFile;\r\n\r\n // получаем или добавляем секцию с доп. инфой по подписям\r\n const pkfsaiSection = cardFile.card.sections.getOrAdd(\"PkFileSignaturesAdditionalInfo\");\r\n\r\n // проверяем есть ли среди подписей текущего сотрудника удовлетворяющая\r\n const isSignatureAlreadyExist = lastFileVersion.signatures.some(x =>\r\n x.userId === userSession.UserID &&\r\n pkfsaiSection.rows.some(y =>\r\n y.tryGet(\"SignatureRowID\") === x.id &&\r\n y.tryGet(\"CompletedTaskTypeID\") === cardFilesInfo.CompletedTask?.typeId));\r\n\r\n // если такая подпись есть\r\n if (isSignatureAlreadyExist) {\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // получаем контент файла\r\n const lastFileVersionContentResult = withContent\r\n ? await PkCardHelper.GetFileContentAsync(lastFileVersion, cardFilesInfo.FileContainer)\r\n : ValidationResult.empty;\r\n\r\n // проверяем ошибки\r\n if (!lastFileVersionContentResult.isSuccessful) {\r\n // пишем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Не удалось получить контент файла \\\"\" + lastFileVersion.name + \"\\\".\\n\" +\r\n (lastFileVersionContentResult.hasErrors ? \"Error: \" + lastFileVersionContentResult.toString() : \"\"));\r\n\r\n // смотрим другие файлы\r\n continue;\r\n }\r\n\r\n // заполняем объект с данными по файлу\r\n const signingFileInfo = new SigningFileInfo(\r\n cardFilesInfo.Card.id,\r\n cardFile,\r\n lastFileVersion,\r\n cardFilesInfo.FileContainer,\r\n cardFilesInfo.SigningInfo.ExternalUserGuid,\r\n cardFilesInfo.SigningInfo.EmployeeGuid1C,\r\n cardFilesInfo.SigningInfo.DssCspType,\r\n cardFilesInfo.CompletedTask);\r\n\r\n // добавляем объект в список\r\n signingFilesInfo.push(signingFileInfo);\r\n }\r\n }\r\n\r\n return { signingFilesInfo, validationResult };\r\n }\r\n}\r\n\r\n/** Информация по файлу для подписания. */\r\nexport class SigningFileInfo {\r\n public CardID: string;\r\n\r\n public CardFile: CardFile;\r\n\r\n public Version: IFileVersion;\r\n\r\n public FileContainer: FileContainer;\r\n\r\n public ExternalUserGuid: string | null;\r\n\r\n public EmployeeGuid1C: string | null;\r\n\r\n public DssCspType: CdDssCspType | null;\r\n\r\n public CompletedTask: CardTask | undefined;\r\n\r\n public constructor(\r\n cardID: string,\r\n cardFile: CardFile,\r\n version: IFileVersion,\r\n filecContainer: FileContainer,\r\n externalUserGuid: string | null,\r\n employeeGuid1C: string | null,\r\n dssCspType: CdDssCspType | null,\r\n completedTask: CardTask | undefined) {\r\n this.CardID = cardID;\r\n this.CardFile = cardFile;\r\n this.Version = version;\r\n this.FileContainer = filecContainer;\r\n this.ExternalUserGuid = externalUserGuid;\r\n this.EmployeeGuid1C = employeeGuid1C;\r\n this.DssCspType = dssCspType;\r\n this.CompletedTask = completedTask;\r\n }\r\n}\r\n\r\n/** Информация по подписанию карточки. */\r\nexport class SigningCardInfo {\r\n public IsNeedSigning: boolean;\r\n\r\n public FileName: string | null;\r\n\r\n public FileCategory: FileCategory | null;\r\n\r\n public ExternalUserGuid: string | null;\r\n\r\n public EmployeeGuid1C: string | null;\r\n\r\n public DssCspType: CdDssCspType | null;\r\n\r\n public CertIssuerName: string | null;\r\n\r\n public CertEnhancedKey: string | null;\r\n\r\n public IsNeedDssSigning: boolean;\r\n\r\n public CompanyExtID: number | null;\r\n\r\n public CompanyName: string | null;\r\n\r\n public IsNeedNepRelease: boolean;\r\n\r\n public IsAutoSigningPersonnelDocuments: boolean;\r\n\r\n public constructor(\r\n isNeedSigning: boolean,\r\n fileName: string | null = null,\r\n fileCategory: FileCategory | null = null,\r\n externalUserGuid: string | null = null,\r\n employeeGuid1C: string | null = null,\r\n dssCspType: CdDssCspType | null = null,\r\n certIssuerName: string | null = null,\r\n certEnhancedKey: string | null = null,\r\n companyExtID: number | null = null,\r\n companyName: string | null = null,\r\n isNeedNepRelease: boolean = false,\r\n isAutoSigningPersonnelDocuments: boolean = false) {\r\n this.IsNeedSigning = isNeedSigning;\r\n this.FileName = fileName;\r\n this.FileCategory = fileCategory;\r\n this.ExternalUserGuid = externalUserGuid;\r\n this.EmployeeGuid1C = employeeGuid1C;\r\n this.DssCspType = dssCspType;\r\n this.CertIssuerName = certIssuerName;\r\n this.CertEnhancedKey = certEnhancedKey;\r\n this.IsNeedDssSigning = (externalUserGuid != null || employeeGuid1C != null) && dssCspType != null;\r\n this.CompanyExtID = companyExtID;\r\n this.CompanyName = companyName;\r\n this.IsNeedNepRelease = isNeedNepRelease;\r\n this.IsAutoSigningPersonnelDocuments = isAutoSigningPersonnelDocuments;\r\n }\r\n\r\n /** Создание информации по подписанию карточки. */\r\n public static async CreateAsync(\r\n card: Card,\r\n userID: string,\r\n checkMainCertificate: boolean = false,\r\n isNeedSigning: boolean | null = null,\r\n fileName: string | null = null,\r\n fileCategory: FileCategory | null = null): Promise {\r\n // получаем результат необходимости подписания\r\n const isNeedSigningResult = isNeedSigning != null\r\n ? { isNeedSigning: isNeedSigning, fileName: fileName, fileCategory: fileCategory }\r\n : await PkCardHelper.IsNeedSigningAsync(card);\r\n\r\n // проверяем необходимость подписания\r\n if (!isNeedSigningResult.isNeedSigning) {\r\n return new SigningCardInfo(false);\r\n }\r\n\r\n // получаем данные для подписания\r\n const signingInfo = await CdDSSHelper.GetSigningInfoAsync(\r\n card,\r\n userID,\r\n checkMainCertificate);\r\n\r\n // создаем и возвращаем объект\r\n return new SigningCardInfo(\r\n isNeedSigningResult.isNeedSigning,\r\n isNeedSigningResult.fileName,\r\n isNeedSigningResult.fileCategory,\r\n signingInfo.externalUserGuid,\r\n signingInfo.employeeGuid1C,\r\n signingInfo.dssCspType,\r\n signingInfo.certIssuerName,\r\n signingInfo.certEnhancedKey,\r\n signingInfo.organizationExtID,\r\n signingInfo.organizationName,\r\n signingInfo.isNeedNepRelease,\r\n signingInfo.isAutoSigningPersonnelDocuments);\r\n }\r\n}\r\n\r\n/** Информация по печатным формам карточки. */\r\nexport class PrintFormsCardInfo {\r\n public IsNeedAddPrintForms: boolean;\r\n\r\n public IsNeedShowCopyReceivedStamp: boolean;\r\n\r\n public FileName: string | null;\r\n\r\n public FileCategory: FileCategory | null;\r\n\r\n public constructor(\r\n isNeedAddPrintForms: boolean,\r\n fileName: string | null,\r\n isNeedShowCopyReceivedStamp: boolean,\r\n fileCategory: FileCategory | null) {\r\n this.IsNeedAddPrintForms = isNeedAddPrintForms;\r\n this.FileName = fileName;\r\n this.IsNeedShowCopyReceivedStamp = isNeedShowCopyReceivedStamp;\r\n this.FileCategory = fileCategory;\r\n }\r\n\r\n /** Создание информации по печатным формам карточки. */\r\n public static async CreateAsync(card: Card): Promise {\r\n // получаем результат необходимости добавления печатных форм\r\n const isNeedAddPrintFormsResult = await PkCardHelper.IsNeedAddPrintFormsAsync(card);\r\n\r\n // создаем и возвращаем объект\r\n return new PrintFormsCardInfo(\r\n isNeedAddPrintFormsResult.isNeedAddPrintForms,\r\n isNeedAddPrintFormsResult.fileName,\r\n isNeedAddPrintFormsResult.isNeedShowCopyReceivedStamp,\r\n isNeedAddPrintFormsResult.fileCategory);\r\n }\r\n}\r\n\r\n/** Информация по карточке с файлами. */\r\nexport class CardFilesInfo {\r\n public Card: Card;\r\n\r\n public FileContainer: FileContainer;\r\n\r\n public SigningInfo: SigningCardInfo;\r\n\r\n public PrintFormsInfo: PrintFormsCardInfo;\r\n\r\n public CompletedTask: CardTask | undefined;\r\n\r\n public constructor(\r\n card: Card,\r\n fileContainer: FileContainer,\r\n signingInfo: SigningCardInfo,\r\n printFormsInfo: PrintFormsCardInfo) {\r\n this.Card = card;\r\n this.FileContainer = fileContainer;\r\n this.SigningInfo = signingInfo;\r\n this.PrintFormsInfo = printFormsInfo;\r\n this.CompletedTask = card.tasks.find(x => x.optionId != null);\r\n }\r\n\r\n /** Создание информации по карточке и файлам. */\r\n public static async CreateAsync(\r\n card: Card,\r\n fileContainer: FileContainer,\r\n userID: string,\r\n checkMainCertificate: boolean = false,\r\n isNeedSigning: boolean | null = null,\r\n fileName: string | null = null,\r\n fileCategory: FileCategory | null = null): Promise {\r\n const signingInfo = await SigningCardInfo.CreateAsync(\r\n card,\r\n userID,\r\n checkMainCertificate,\r\n isNeedSigning,\r\n fileName,\r\n fileCategory);\r\n\r\n const printFormsInfo = await PrintFormsCardInfo.CreateAsync(card);\r\n\r\n return new CardFilesInfo(\r\n card,\r\n fileContainer,\r\n signingInfo,\r\n printFormsInfo);\r\n }\r\n}","/** Виды служебных записок*/\r\nexport enum PkMemoKinds {\r\n /** Вид СЗ \"Подтверждающие документы по командировкам\"*/\r\n BusinessTripId = \"a398e750-35be-4edc-89a4-d53637224ab6\",\r\n\r\n /** Наименование СЗ \"Подтверждающие документы по командировкам\"*/\r\n BusinessTripName = \"Подтверждающие документы по командировкам\",\r\n\r\n /** Вид СЗ \"Подтверждающие документы по хоз. расходам\"*/\r\n AdvanceReportId = \"AC56D189-4FC3-432B-9E9B-414EBEAEFADB\",\r\n\r\n /** Наименование СЗ \"Подтверждающие документы по хоз. расходам\"*/\r\n AdvanceReportName = \"Подтверждающие документы по хоз. расходам\",\r\n\r\n /** Вид СЗ \"Стандартная на бланке\"*/\r\n StandardOnBlankId = \"298F707C-E58B-46F1-BCA5-6E43560BF571\",\r\n\r\n /** Наименование СЗ \"Стандартная на бланке\"*/\r\n StandardOnBlankName = \"Стандартная на бланке\",\r\n\r\n /** Вид СЗ \"Стандартная электронная\"*/\r\n StandardElectrId = \"1D89C3E2-607F-4E22-B07E-E717A8F38A2B\",\r\n\r\n /** Наименование СЗ \"Стандартная электронная\"*/\r\n StandardElectrName = \"Стандартная электронная\",\r\n\r\n /** Вид СЗ \"Электронная заявка на пропуск\"*/\r\n ElectrToPassId = \"68DF8F34-9BC9-4DE5-B773-FF494BB8393F\",\r\n\r\n /** Наименование СЗ \"Электронная заявка на пропуск\"*/\r\n ElectrToPassName = \"Электронная заявка на пропуск\",\r\n\r\n /** Вид СЗ \"Соглашение об ЭДО с кандидатом\"*/\r\n EdoTypeID = \"44a61491-8983-41fd-8368-77c8d858e769\",\r\n\r\n /** Наименование СЗ \"Соглашение об ЭДО с кандидатом\"*/\r\n EdoTypeName = \"Соглашение об ЭДО с кандидатом\",\r\n\r\n /** Вид СЗ \"Кадровые документы\"*/\r\n PersonnelDocumentsTypeID = \"8a8ecfab-5521-48e8-8746-adb3aae1a018\",\r\n\r\n /** Наименование СЗ \"Кадровые документы\"*/\r\n PersonnelDocumentsTypeName = \"Кадровые документы\",\r\n \r\n /** Вид СЗ \"Переход клиента на другой ОН\"*/\r\n ClientSwitchingToAnotherONTypeID = \"158e4b0c-8380-4469-b226-2f74d6b645db\",\r\n\r\n /** Наименование СЗ \"Переход клиента на другой ОН\"*/\r\n ClientSwitchingToAnotherONTypeName = \"Переход клиента на другой ОН\",\r\n\r\n /** Вид СЗ \"Расторжение без перехода на другой ОН\"*/\r\n CancellationWithoutSwitchingToAnotherONTypeID = \"8e78d0e2-0239-4255-9cfc-03151f0b3779\",\r\n\r\n /** Наименование СЗ \"Расторжение без перехода на другой ОН\"*/\r\n CancellationWithoutSwitchingToAnotherONTypeName = \"Расторжение без перехода на другой ОН\",\r\n \r\n /** Вид СЗ \"Расторжение по инициативе клиента\" */\r\n CancellationByClientInitiativeTypeID = \"4b4a3fc8-7260-424a-9576-6c6f449df006\",\r\n \r\n /** Наименование СЗ \"Расторжение по инициативе клиента\" */\r\n CancellationByClientInitiativeTypeName = \"Расторжение по инициативе клиента\",\r\n \r\n /** Вид СЗ \"Расторжение по инициативе застройщика\" */\r\n CancellationByBuilderCompanyInitiativeTypeID = \"438f328e-7424-4aff-960a-1325de4062da\",\r\n\r\n /** Наименование СЗ \"Расторжение по инициативе застройщика\" */\r\n CancellationByBuilderCompanyInitiativeTypeName = \"Расторжение по инициативе застройщика\",\r\n\r\n /** Вид СЗ \"Мотивация ВИС\" */\r\n MotivationVISTypeID = \"732ed477-f56b-4c50-a7af-1fce9c25d2a0\",\r\n\r\n /** Наименование СЗ \"Мотивация ВИС\" */\r\n MotivationVISTypeName = \"Мотивация ВИС\",\r\n\r\n /** Вид СЗ \"Мотивация Отделка\" */\r\n MotivationFinishingTypeID = \"71b82190-331d-4073-a648-06e1066f261b\",\r\n\r\n /** Наименование СЗ \"Мотивация Отделка\" */\r\n MotivationFinishingTypeName = \"Мотивация Отделка\"\r\n}","export class ArDiadocDocumentKindsEnum {\r\n\r\n /// \r\n /// Неформализованный документ\r\n /// \r\n static Nonformalized = 0;\r\n\r\n /// \r\n /// Приглашение к ЭДО\r\n /// \r\n static TrustConnectionRequest = 1;\r\n\r\n /// \r\n /// Неформализованный ТОРГ-12\r\n /// \r\n static Torg12 = 2;\r\n\r\n /// \r\n /// Неформализованный акт\r\n /// \r\n static AcceptanceCertificate = 3;\r\n\r\n /// \r\n /// Счет\r\n /// \r\n static ProformaInvoice = 4;\r\n\r\n /// \r\n /// Ценовой лист\r\n /// \r\n static PriceList = 5;\r\n\r\n /// \r\n /// Протокол согласования цены\r\n /// \r\n static PriceListAgreement = 6;\r\n\r\n /// \r\n /// Реестр сертификатов\r\n /// \r\n static CertificateRegistry = 7;\r\n\r\n /// \r\n /// Акт сверки\r\n /// \r\n static ReconciliationAct = 8;\r\n\r\n /// \r\n /// Договор\r\n /// \r\n static Contract = 9;\r\n\r\n /// \r\n /// Накладная\r\n /// \r\n static Torg13 = 10;\r\n\r\n /// \r\n /// Детализация\r\n /// \r\n ServiceDetails = 11;\r\n\r\n /// \r\n /// Доп. соглашение\r\n /// \r\n SupplementaryAgreement = 12;\r\n\r\n /// \r\n /// Формализованный акт\r\n /// \r\n static XmlAcceptanceCertificate = 13;\r\n\r\n /// \r\n /// Счет-фактура (СФ)\r\n /// \r\n static Invoice = 14;\r\n\r\n /// \r\n /// Исправление СФ\r\n /// \r\n static InvoiceRevision = 15;\r\n\r\n /// \r\n /// Корректировочный СФ (КСФ)\r\n /// \r\n static InvoiceCorrection = 16;\r\n\r\n /// \r\n /// Исправление КСФ\r\n /// \r\n static InvoiceCorrectionRevision = 17;\r\n\r\n /// \r\n /// Формализованный ТОРГ-12\r\n /// \r\n static XmlTorg12 = 18;\r\n\r\n /// \r\n /// УПД\r\n /// \r\n static UniversalTransferDocument = 19;\r\n\r\n /// \r\n /// Исправление УПД\r\n /// \r\n static UniversalTransferDocumentRevision = 20;\r\n\r\n /// \r\n /// УКД\r\n /// \r\n static UniversalCorrectionDocument = 21;\r\n\r\n /// \r\n /// Исправление УКД\r\n /// \r\n static UniversalCorrectionDocumentRevision = 22\r\n\r\n}","export class PkLetterCreditKinds {\r\n\r\n static PaymentToTheSupplierID = \"4c50ebc7-ced1-47d0-ab59-8c4bae961653\";\r\n static PaymentToTheSupplierName = \"Оплата поставщику\";\r\n static ReturnToBuyerID = \"0a3a4411-d18f-437b-a31d-9c1ff0ca942a\";\r\n static ReturnToBuyerName = \"Возврат покупателю\";\r\n static PaymentForServicesID = \"f0be5dbe-fdcc-4ab9-bbe6-2cd6a7c049bb\";\r\n static PaymentForServicesName = \"Оплата услуг\";\r\n }","/** Типы исходящего письма*/\r\nexport enum PkOutgoingKinds\r\n{\r\n /** Ответ на обращение физ. лица*/\r\n ResponseToIndRequestId = \"d88d9f5e-69f7-402d-8a60-1688b6b4ff09\",\r\n\r\n /** Ответ на обращение физ. лица*/\r\n ResponseToIndRequestName = \"Ответ на обращение физ. лица\",\r\n\r\n /** Уведомление о результатах тендера*/\r\n NotificationOfTenderResultsId = \"cb3f5129-20ef-4b3f-bea0-e98c824353b5\",\r\n\r\n /** Уведомление о результатах тендера*/\r\n NotificationOfTenderResultsName = \"Уведомление о результатах тендера\",\r\n\r\n /** Отзыв доверенности*/\r\n PowerOfAttorneyRevocationId = \"076589c7-4606-4d39-b642-e98715cac574\",\r\n\r\n /** Отзыв доверенности*/\r\n PowerOfAttorneyRevocationName = \"Отзыв доверенности\",\r\n\r\n /** Претензия*/\r\n ClaimId = \"e18efb86-b363-494a-8871-586a59b60d0d\",\r\n\r\n /** Претензия*/\r\n ClaimName = \"Отзыв доверенности\"\r\n}","/** Номенклатуры (для авансовых отчетов в служебных записках). */\r\nexport enum PkMemoNomenclatureKinds {\r\n /** ID номенклатуры \"Нотариальные услуги\". */\r\n NotaryServicesID = \"A51A2567-78BD-4204-BC63-C6B7566654AA\",\r\n\r\n /** Наименование номенклатуры \"Нотариальные услуги\". */\r\n NotaryServicesName = \"Нотариальные услуги\",\r\n\r\n /** ID номенклатуры \"Почтовые расходы\". */\r\n PostageID = \"8B2A4A77-49A8-42CB-8421-45BC983E573A\",\r\n\r\n /** Наименование номенклатуры \"Почтовые расходы\". */\r\n PostageName = \"Почтовые расходы\",\r\n\r\n /** ID номенклатуры \"Хозяйственные расходы\". */\r\n EconomicExpensesID = \"DBC94A6F-1613-48FB-9590-0CE2CE036125\",\r\n\r\n /** Наименование номенклатуры \"Хозяйственные расходы\". */\r\n EconomicExpensesName = \"Хозяйственные расходы\",\r\n\r\n /** ID номенклатуры \"Прочие расходы\". */\r\n OtherExpensesID = \"6BE05091-5A5D-4D50-BB27-1630F27EE384\",\r\n\r\n /** Наименование номенклатуры \"Прочие расходы\". */\r\n OtherExpensesName = \"Прочие расходы\",\r\n\r\n /** ID номенклатуры \"Госпошлина\". */\r\n StateDutyID = \"25DCA0C1-E45A-4B11-8E59-FD1FE397D03A\",\r\n\r\n /** Наименование номенклатуры \"Госпошлина\". */\r\n StateDutyName = \"Госпошлина\",\r\n\r\n /** ID номенклатуры \"Компенсация за проезд\". */\r\n TravelCompensationID = \"BB6DAB79-CB08-4C8D-9CA5-A246B549ED7F\",\r\n\r\n /** Наименование номенклатуры \"Компенсация за проезд\". */\r\n TravelCompensationName = \"Компенсация за проезд\",\r\n\r\n /** ID номенклатуры \"Услуги Росреестра\". */\r\n RosreestrServicesID = \"55E8C31C-D986-4BEE-8779-E33060E58500\",\r\n\r\n /** Наименование номенклатуры \"Услуги Росреестра\". */\r\n RosreestrServicesName = \"Услуги Росреестра\"\r\n}","/** Виды судебных дел*/\r\nexport enum PkCourtTypes {\r\n /** Гражданское */\r\n Civilian = 0,\r\n /** Арбитражное*/\r\n Arbitration = 1,\r\n}","/** Роли участников суда*/\r\nexport enum PkCourtRoles { \r\n Ответчик = 0, \r\n Истец = 1,\r\n}","export class PkOutgoinClaimType {\r\n\r\n /// \r\n /// Претензия РВР\r\n /// \r\n static RVR = 0;\r\n /// \r\n /// Перевыставление штрафов от органов власти.\r\n /// \r\n static ReimbursementOfFinesFromTheAuthorities = 1;\r\n /// \r\n /// Штрафы от ДПК (департамент по качеству).\r\n /// \r\n static FinesFromTheQualityDepartment = 2;\r\n /// \r\n /// Штрафы по договору.\r\n /// \r\n static ContractFees = 3;\r\n /// \r\n /// Гарантия.\r\n /// \r\n static Warranty = 4;\r\n}","import { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { showNotEmpty } from 'tessa/ui';\r\nimport { CardRowState, CardRow, CardSection, CardStoreMode, Card } from 'tessa/cards';\r\nimport { ChRequestTypes } from '../Helpers/ChRequestTypes';\r\n\r\nexport class ArHelper {\r\n\r\n public static KCKPartnerGPMFSExtID = 49340;\r\n public static async ClearArticlesOHR(context: ICardUIExtensionContext) {\r\n if (context.model.card.sections.get(\"ArArticleOHRListVirtual\") != null) {\r\n const arArticleOhrListVirtual = context.model.card.sections.get(\"ArArticleOHRListVirtual\");\r\n if (arArticleOhrListVirtual!.rows.length > 0) {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, arArticleOhrListVirtual!);\r\n }\r\n }\r\n }\r\n\r\n public static async ClearCollectionSection(storeMode: CardStoreMode, section: CardSection) {\r\n for (let row of section.rows.filter(x => x.state != CardRowState.Deleted)) {\r\n ArHelper.RemoveRowFromCollectionSection(storeMode, section, row)\r\n }\r\n }\r\n\r\n public static async RemoveRowFromCollectionSection(storeMode: CardStoreMode, section: CardSection, row: CardRow) {\r\n if (storeMode == CardStoreMode.Update && row.state != CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n else {\r\n section.rows.remove(row);\r\n }\r\n }\r\n\r\n public static async FillArticlesOHR(context: ICardUIExtensionContext, contractID: string) {\r\n const arArticleOhrListVirtual = context.model.card.sections.tryGet('ArArticleOHRListVirtual');\r\n if (arArticleOhrListVirtual == null) return;\r\n\r\n // Удаление существующих виртуальных записей в таблице Статьи затрат ИДП\r\n ArHelper.ClearArticlesOHR(context);\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.ArActContractArticleOhr;\r\n if (contractID == null) request.info[\"ContractID\"] = null;\r\n else request.info[\"ContractID\"] = createTypedField(contractID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n let amount = 0;\r\n if (response.info!.ArticleOhrInfo!) {\r\n for (let article of response.info.ArticleOhrInfo) {\r\n // if (article.IsCostItem && article.IsCostItem.$value && article.ArticleOHRID == null)\r\n // {\r\n // continue;\r\n // }\r\n\r\n let rowVirtual = new CardRow();\r\n rowVirtual.rowId = Guid.newGuid();\r\n\r\n rowVirtual.set('ArticleID', article.ArticleID);\r\n rowVirtual.set('ArticleName', article.ArticleName);\r\n rowVirtual.set('HierarchicalCode', article.HierarchicalCode);\r\n rowVirtual.set('Amount', createTypedField(amount?.toString() ?? null, DotNetType.Decimal));\r\n rowVirtual.set('VAT', null);\r\n rowVirtual.set('VATRateID', null);\r\n rowVirtual.set('VATRateCaption', null);\r\n rowVirtual.set('ActivityKindID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterExtID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterName', null);\r\n rowVirtual.set('ActivityKindName', null);\r\n rowVirtual.set('AmountVAT', null);\r\n\r\n\r\n rowVirtual.set('ObjectOtherID', null);\r\n rowVirtual.set('ObjectOtherExtID', null);\r\n rowVirtual.set('ObjectOtherName', null);\r\n rowVirtual.set('ObjectOtherFullName', null);\r\n rowVirtual.set('ObjectOtherCode1c', null);\r\n rowVirtual.set('ObjectOtherLivingComplex', null);\r\n rowVirtual.set('ObjectOtherAddressPost', null);\r\n\r\n rowVirtual.set('ObjectID', null);\r\n rowVirtual.set('ObjectExtID', null);\r\n rowVirtual.set('ObjectName', null);\r\n rowVirtual.set('ObjectFullName', null);\r\n rowVirtual.set('ObjectCode1c', null);\r\n rowVirtual.set('ObjectLivingComplex', null);\r\n rowVirtual.set('ObjectAddressPost', null);\r\n\r\n rowVirtual.set('AmountAdvance', createTypedField(\"0.00\", DotNetType.Decimal));\r\n rowVirtual.set('SumToPay', createTypedField(\"0.00\", DotNetType.Decimal));\r\n\r\n rowVirtual.state = CardRowState.Inserted;\r\n arArticleOhrListVirtual.rows.push(rowVirtual);\r\n }\r\n }\r\n }\r\n\r\n // Обновление сумм в статьях (если статья 1)\r\n public static UpdateArticleAmounts(card: Card) {\r\n var sections = [\"ArArticleIDPList\", \"ArArticleOHRList\"];\r\n for (let section of sections) {\r\n const arArticleIdpList = card.sections.tryGet(section);\r\n const arArticleIdpListVirtual = card.sections.tryGet(section + 'Virtual');\r\n const dciSect = card.sections.tryGet('DocumentCommonInfo');\r\n const aaSect = card.sections.tryGet('ArchiveAct');\r\n\r\n if (arArticleIdpList == null ||\r\n arArticleIdpListVirtual == null ||\r\n dciSect == null ||\r\n aaSect == null)\r\n continue;\r\n\r\n let arArticleIdpListRows = arArticleIdpList.rows.filter(x => x.state !== CardRowState.Deleted);\r\n let arArticleIdpListVirtualRows = arArticleIdpListVirtual.rows.filter(x => x.state !== CardRowState.Deleted);\r\n\r\n if (arArticleIdpListRows.length == 1 && arArticleIdpListVirtualRows.length == 1)\r\n {\r\n let articleIdpRow = arArticleIdpListRows[0];\r\n let articleIdpRowVirtual = arArticleIdpListVirtualRows[0];\r\n\r\n const amount = dciSect.fields.getField(\"Amount\");\r\n const amountVat = aaSect.fields.getField(\"VATAmount\");\r\n articleIdpRowVirtual.set(\"Amount\", amount!);\r\n articleIdpRowVirtual.set(\"AmountVAT\", amountVat!);\r\n \r\n // В статьях ОХР в реальную секцию данные копируются на сервере\r\n if (section != \"ArArticleOHRList\"){\r\n articleIdpRow.set(\"Amount\", amount!);\r\n articleIdpRow.set(\"AmountVAT\", amountVat!);\r\n }\r\n else{\r\n articleIdpRowVirtual.set(\"SumToPay\", amount != null ? amount : createTypedField(\"0.00\", DotNetType.Decimal));\r\n } \r\n } \r\n }\r\n }\r\n}","export class PkIncomingRefundTypesEnum {\r\n\r\n /// \r\n /// Неформализованный документ\r\n /// \r\n static RefundCashBTI = 0;\r\n /// \r\n /// Повторные обмеры по БТИ\r\n /// \r\n static RefundRepeatedMeasurementBTI = 1;\r\n /// \r\n /// Возврат ДС переплата\r\n /// \r\n static RefundCashOverpay = 2;\r\n /// \r\n /// Возврат ДС по расторжению\r\n /// \r\n static RefundCashByTermination = 3;\r\n}","/** Способы отправки исходящих документов. */\r\nexport enum PkOutgoingReceivingMethods {\r\n ЭДО = 13,\r\n Email = 1,\r\n Gosuslugi = 14,\r\n RussianPost = -1,\r\n RussianPostWithEmail = -1\r\n}","import { ICardUIExtensionContext, ICardModel, ICardEditorModel, IFormViewModel, IControlViewModel } from 'tessa/ui/cards';\r\nimport { IStorage } from \"tessa/platform/storage\";\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { createTypedField, DotNetType, Visibility, Guid, hasFlag, DbType } from 'tessa/platform';\r\nimport { showNotEmpty, tryGetFromInfo, showConfirm, showMessage, IUIContext, UIContext,showError, UIButton, showLoadingOverlay } from 'tessa/ui';\r\nimport { ChRequestTypes } from '../Helpers/ChRequestTypes';\r\nimport { GridViewModel, AutoCompleteEntryViewModel, AutoCompleteTableViewModel, ButtonViewModel, GridRowAction, TabControlViewModel } from 'tessa/ui/cards/controls';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { CardRowState, CardStoreMode, CardSection, CardRow, Card, CardPermissionFlags, CardFileState, CardFieldChangedEventArgs } from 'tessa/cards';\r\nimport { PkCommonHelper } from '../Helpers/PkCommonHelper';\r\nimport { ChCardFlagsInfo } from '../Helpers/ChCardFlagsInfo';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkMemoKinds } from '../Helpers/PkMemoKinds';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { ChTaskTypes } from '../Helpers/ChTaskTypes';\r\nimport { ChProcessHelper } from '../Helpers/ChProcessHelper';\r\nimport { PkLetterCreditKinds } from '../Helpers/PkLetterCreditKinds';\r\nimport { PkIncomingKinds } from '../Helpers/PkIncomingKinds';\r\nimport { ArUIHelper } from './ArUIHelper';\r\nimport { reaction } from 'mobx';\r\nimport { CdCommonHelper } from 'src/cdScripts/Helpers/CdCommonHelper';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\nimport { openCard, createCard, showViewsDialog} from 'tessa/ui/uiHost';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { userSession } from 'common/utility';\r\nimport { PkOutgoingKinds } from '../helpers/PkOutgoingKinds';\r\nimport { PkOutgoinClaimType } from '../helpers/PkOutgoinClaimType';\r\nimport { KrToken } from 'tessa/workflow';\r\nimport { PkClientHelper } from '../Helpers/PkClientHelper';\r\nimport { ArHelper } from '../helpers/ArHelper';\r\nimport { RequestParameterBuilder, SelectedValue } from 'tessa/views';\r\nimport { equalsCriteriaOperator, isFalseCriteriaOperator, RequestParameter, ViewParameterMetadata } from 'tessa/views/metadata';\r\nimport { ChStaticRoles } from '../Helpers/ChStaticRoles';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { PkMemoNomenclatureKinds } from '../Helpers/PkMemoNomenclatureKinds';\r\nimport { PkCourtTypes } from '../Helpers/PkCourtTypes';\r\nimport { PkCourtRoles } from '../Helpers/PkCourtRoles';\r\nimport { PkIncomingRefundTypesEnum } from '../Helpers/PkIncomingRefundTypesEnum';\r\nimport { CdFdTaskTypes } from 'src/cdScripts/Helpers/CdFdTaskTypes';\r\nimport { PkOutgoingReceivingMethods } from '../Helpers/PkOutgoingReceivingMethods';\r\n\r\nexport class ChUIHelper {\r\n\r\n /** Блокировать редактирование полей если не задан вид СЗ **/\r\n public static LockTemplateControls(model: ICardModel, kind: guid)\r\n {\r\n if (kind != null){\r\n return;\r\n }\r\n\r\n const templateControls = [\"AddreseeControl\",\r\n \"AddreseeByBelongingControl\", \"PerfomerControl\", \"SignerControl\",\r\n \"Subject\", \"Description\"];\r\n for (let name of templateControls)\r\n {\r\n const control = model.controls.get(name);\r\n if (isNullOrUndefined(control)){\r\n continue;\r\n }\r\n control.isReadOnly = true;\r\n }\r\n }\r\n\r\n public static InitializeTableObjects(context: ICardUIExtensionContext) {\r\n const objects = context.model.controls.get('Objects') as GridViewModel;\r\n const isProhibitModify = hasFlag(context.model.card.permissions.resolver\r\n .getSectionPermissions(\"PkObjectList\"), CardPermissionFlags.ProhibitModify);\r\n if (!objects || isProhibitModify) return;\r\n const control = context.model.controls.get('RealEstate');\r\n if (control) control.isReadOnly = true;\r\n\r\n const objectList = context.model.card.sections.tryGet('PkObjectList');\r\n if (objectList == null) return;\r\n objects.rowInitializing.add(e => {\r\n if (e.rowModel!.controls.get('RealEstate') == null) {\r\n return;\r\n }\r\n\r\n let realEstate = e.rowModel!.controls.get('RealEstate');\r\n let project = e.rowModel!.controls.get('Project');\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkClientDocumentTypeID))\r\n {\r\n if (e.row.tryGet(\"RealEstateID\") != null ||\r\n e.row.tryGet(\"ObjectID\") != null) {\r\n realEstate!.isReadOnly = false; \r\n project!.isReadOnly = true; \r\n }\r\n else {\r\n realEstate!.isReadOnly = true; \r\n project!.isReadOnly = false; \r\n }\r\n }\r\n\r\n e.row.fieldChanged.add(async e2 => {\r\n if (e2.fieldName !== \"ObjectID\") return;\r\n\r\n realEstate!.isReadOnly = false;\r\n project!.isReadOnly = false;\r\n\r\n if (e2.fieldValue == null) {\r\n e.row.set(\"RegionID\", null);\r\n e.row.set(\"RegionName\", null);\r\n e.row.set(\"CityID\", null);\r\n e.row.set(\"CityName\", null);\r\n e.row.set(\"ProjectID\", null);\r\n e.row.set(\"ProjectName\", null);\r\n e.row.set(\"LivingComplex\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"AddressPost\", null);\r\n e.row.set(\"RealEstateName\", null);\r\n e.row.set(\"ResidentialComplexID\", null);\r\n e.row.set(\"ResidentialComplexName\", null);\r\n e.row.set(\"Guid1C\", null);\r\n e.row.set(\"SectionID\", null);\r\n e.row.set(\"SectionNumber\", null);\r\n e.row.set(\"FloorID\", null);\r\n e.row.set(\"FloorNumber\", null);\r\n realEstate!.isReadOnly = true;\r\n // realEstate.Block.Rearrange();\r\n\r\n project!.isReadOnly = false;\r\n // project.Block.Rearrange();\r\n }\r\n else {\r\n let objectId = e2.fieldValue;\r\n realEstate!.isReadOnly = false;\r\n\r\n project!.isReadOnly = true;\r\n // project.Block.Rearrange();\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRegionCityAndProjectByObject;\r\n request.info[\"ObjectId\"] = createTypedField(objectId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n e.row.set(\"RegionID\", null);\r\n e.row.set(\"RegionName\", null);\r\n e.row.set(\"CityID\", null);\r\n e.row.set(\"CityName\", null);\r\n e.row.set(\"ProjectID\", null);\r\n e.row.set(\"ProjectName\", null);\r\n e.row.set(\"LivingComplex\", null);\r\n e.row.set(\"ObjectName\", null);\r\n e.row.set(\"AddressPost\", null);\r\n e.row.set(\"RealEstateName\", null);\r\n e.row.set(\"ResidentialComplexID\", null);\r\n e.row.set(\"ResidentialComplexName\", null);\r\n e.row.set(\"Guid1C\", null);\r\n e.row.set(\"SectionID\", null);\r\n e.row.set(\"SectionNumber\", null);\r\n e.row.set(\"FloorID\", null);\r\n e.row.set(\"FloorNumber\", null);\r\n realEstate!.isReadOnly = true;\r\n // realEstate.Block.Rearrange();\r\n\r\n project!.isReadOnly = false;\r\n // project.Block.Rearrange();\r\n return;\r\n }\r\n\r\n if (response.info) {\r\n CdCommonHelper.SetFieldToRow(e.row, \"RegionID\", response.info.RegionID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"RegionName\", response.info.RegionName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"CityID\", response.info.CityID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"CityName\", response.info.CityName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectID\", response.info.ProjectID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ProjectName\", response.info.ProjectName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ObjectName\", response.info.ObjectName);\r\n CdCommonHelper.SetFieldToRow(e.row, \"LivingComplex\", response.info.LivingComplex);\r\n CdCommonHelper.SetFieldToRow(e.row, \"Guid1C\", response.info.Guid1C);\r\n CdCommonHelper.SetFieldToRow(e.row, \"AddressPost\", response.info.AddressPost);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexID\", response.info.ResidentialComplexID);\r\n CdCommonHelper.SetFieldToRow(e.row, \"ResidentialComplexName\", response.info.ResidentialComplexName);\r\n }\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n public static CalculateVATAmount(context: ICardUIExtensionContext) {\r\n const dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (dciSection != null) {\r\n dciSection.fields.fieldChanged.add(async e => {\r\n // если было изменено другое поле, то никак не реагируем\r\n if (e.fieldName !== 'Amount') {\r\n return;\r\n }\r\n\r\n let aaSection = context.model.card.sections.tryGet('ArchiveAct');\r\n let pklciSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n let pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n let pkidiSection = context.model.card.sections.tryGet('PkInnerDocumentInfo');\r\n let pksmSection = context.model.card.sections.tryGet('PkServiceMessageInfo');\r\n if (e.fieldValue !== 0) {\r\n let vatRateID;\r\n if (aaSection != null &&\r\n (vatRateID = aaSection.fields.tryGet('VATRateID')) != null &&\r\n pksmSection != null) {\r\n if (vatRateID != null && pksmSection.fields.tryGet('SystemID') == null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(e.fieldValue || \"0.0\", DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n CdCommonHelper.SetFieldToSection(aaSection, \"VATAmount\", response.info.VATAmount);\r\n }\r\n }\r\n }\r\n\r\n if (pklciSection != null &&\r\n (vatRateID = pklciSection.fields.tryGet('VATRateID')) != null) {\r\n if (vatRateID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(e.fieldValue?.toString() ?? null, DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n CdCommonHelper.SetFieldToSection(pklciSection, \"VATAmount\", response.info.VATAmount);\r\n }\r\n }\r\n }\r\n\r\n if (pkiiSection != null &&\r\n (vatRateID = pkiiSection.fields.tryGet('VATRateID')) != null && pkiiSection.fields.get(\"KindID\") != null && Guid.equals(pkiiSection.fields.get(\"KindID\"), PkIncomingKinds.RefundID)) {\r\n if (vatRateID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(e.fieldValue?.toString() ?? null, DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n CdCommonHelper.SetFieldToSection(pkiiSection, \"VATAmount\", response.info.VATAmount);\r\n }\r\n }\r\n }\r\n\r\n if (pkidiSection != null &&\r\n (vatRateID = pkidiSection.fields.tryGet('VATRateID')) != null) {\r\n if (vatRateID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(e.fieldValue?.toString() ?? null, DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n CdCommonHelper.SetFieldToSection(pkidiSection, \"VATAmount\", response.info.VATAmount);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (aaSection != null) {\r\n aaSection.fields.set(\"VATAmount\", null);\r\n }\r\n if (pklciSection != null) {\r\n pklciSection.fields.set(\"VATAmount\", null);\r\n }\r\n if (pkiiSection != null && pkiiSection.fields.get(\"KindID\") != null && Guid.equals(pkiiSection.fields.get(\"KindID\"), PkIncomingKinds.RefundID)) {\r\n pkiiSection.fields.set(\"VATAmount\", null);\r\n }\r\n if (pkidiSection != null) {\r\n pkidiSection.fields.set(\"VATAmount\", null);\r\n }\r\n }\r\n });\r\n }\r\n\r\n let aaSection = context.model.card.sections.tryGet('ArchiveAct');\r\n if (aaSection != null) {\r\n aaSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName !== \"VATRateID\") return;\r\n\r\n if (e.fieldValue != null) {\r\n\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n let pksmSection = context.model.card.sections.tryGet('PkServiceMessageInfo');\r\n let amount;\r\n if (dciSection != null && \r\n (amount = dciSection.fields.tryGet('Amount')) != null &&\r\n pksmSection != null) {\r\n if (pksmSection.fields.tryGet('SystemID') == null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(amount.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(e.fieldValue, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info && aaSection) {\r\n CdCommonHelper.SetFieldToSection(aaSection, \"VATAmount\", response.info.VATAmount);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (aaSection) {\r\n aaSection.fields.set(\"VATAmount\", null);\r\n }\r\n }\r\n });\r\n }\r\n\r\n let pklciSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pklciSection != null) {\r\n pklciSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName !== \"VATRateID\") return;\r\n\r\n if (e.fieldValue != null) {\r\n\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n let amount;\r\n if (dciSection != null && (amount = dciSection.fields.tryGet('Amount')) != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(amount.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(e.fieldValue, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info && pklciSection) {\r\n CdCommonHelper.SetFieldToSection(pklciSection, \"VATAmount\", response.info.VATAmount);\r\n }\r\n }\r\n }\r\n else {\r\n if (pklciSection) {\r\n pklciSection.fields.set(\"VATAmount\", null);\r\n }\r\n }\r\n });\r\n }\r\n\r\n let pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pkiiSection != null) {\r\n pkiiSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName !== \"VATRateID\") return;\r\n\r\n if (e.fieldValue != null) {\r\n\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n let amount;\r\n if (dciSection != null && (amount = dciSection.fields.tryGet('Amount')) != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(amount.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(e.fieldValue, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info && pkiiSection) {\r\n CdCommonHelper.SetFieldToSection(pkiiSection, \"VATAmount\", response.info.VATAmount);\r\n }\r\n }\r\n }\r\n else {\r\n if (pkiiSection) {\r\n pkiiSection.fields.set(\"VATAmount\", null);\r\n }\r\n }\r\n });\r\n }\r\n\r\n let pkidiSection = context.model.card.sections.tryGet('PkInnerDocumentInfo');\r\n if (pkidiSection != null) {\r\n pkidiSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName !== \"VATRateID\") return;\r\n\r\n if (e.fieldValue != null) {\r\n\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n let amount;\r\n if (dciSection != null && (amount = dciSection.fields.tryGet('Amount')) != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(amount.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(e.fieldValue, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info && pkidiSection) {\r\n CdCommonHelper.SetFieldToSection(pkidiSection, \"VATAmount\", response.info.VATAmount);\r\n }\r\n }\r\n }\r\n else {\r\n if (pkidiSection) {\r\n pkidiSection.fields.set(\"VATAmount\", null);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n public static BindingDepartmentWithAddressees(context: ICardUIExtensionContext, disposer: Function | null = null) {\r\n let departmentControl = context.model.controls.get('DepartmentControl') as AutoCompleteEntryViewModel;\r\n let addreseeControl = context.model.controls.get('AddreseeControl') as AutoCompleteTableViewModel;\r\n let addreseeByBelongingControl = context.model.controls.get('AddreseeByBelongingControl') as AutoCompleteTableViewModel;\r\n\r\n if (departmentControl == null || addreseeControl == null || addreseeByBelongingControl == null) return;\r\n\r\n ChUIHelper.CheckBindingDepartmentWithAdressees(context, departmentControl, addreseeControl, addreseeByBelongingControl);\r\n\r\n if (disposer == null) {\r\n disposer = reaction(() => departmentControl.item, () => {\r\n ChUIHelper.CheckBindingDepartmentWithAdressees(context, departmentControl, addreseeControl, addreseeByBelongingControl);\r\n });\r\n }\r\n }\r\n \r\n /// \r\n /// Скрытие полей в зависимости от параметров (входящие документы)\r\n /// \r\n public static PackageContentsControlInitialization(context: ICardUIExtensionContext) {\r\n\r\n var info = context.card.info;\r\n if (!info.isAddButtonAvaible \r\n || !info.isDeleteButtonAvaible \r\n || !info.isRejectButtonAvaible ){\r\n return;\r\n }\r\n\r\n var isAddButtonAvaible = info.isAddButtonAvaible.$value;\r\n var isDeleteButtonAvaible = info.isDeleteButtonAvaible.$value;\r\n var isRejectButtonAvaible = info.isRejectButtonAvaible.$value;\r\n\r\n let PackageContents = context.model.controls.get('PackageContents') as GridViewModel;\r\n let addRowButton2 = new UIButton(\"Добавить\",\r\n async () => { \r\n await this.AddClientDocumentLogicAsync(context);\r\n });\r\n PackageContents.leftButtons.push(addRowButton2);\r\n addRowButton2.setIsEnabled(isAddButtonAvaible); \r\n\r\n let removeRowButton = new UIButton(\"Удалить\",\r\n async () => { \r\n if(PackageContents.selectedRow!=null) \r\n {\r\n let row = PackageContents.rows.find(x => x.rowId === PackageContents.selectedRow?.rowId);\r\n if(row!=null)\r\n {\r\n row.isSelected=true; \r\n } \r\n await PackageContents.removeRow(); \r\n }\r\n },\r\n null,\r\n () => PackageContents!.selectedRows!.length>0 && isDeleteButtonAvaible == true);\r\n \r\n PackageContents.leftButtons.push(removeRowButton);\r\n \r\n let rejectRowButton = new UIButton(\"Отклонить\",\r\n async () => { \r\n if(PackageContents.selectedRow!=null) \r\n {\r\n let row = PackageContents.rows.find(x => x.rowId === PackageContents.selectedRow?.rowId);\r\n\r\n let result = await showConfirm(\"Вы действительно хотите отклонить документ?\");\r\n if (result) {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkRejectClientDocument;\r\n request.info[\"DocID\"] = createTypedField(row!.row.tryGet(\"DocID\"), DotNetType.Guid);\r\n request.info[\"ID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n request.info[\"RowID\"] = createTypedField(row?.rowId, DotNetType.Guid);\r\n request.cardId = context.model.card.id;\r\n\r\n // проверка ответа\r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful \r\n || response.validationResult.items.some(x => x.message.includes(\" уже запущен.\")) \r\n && response.validationResult.items.some(x => x.message.includes(\"Процесс\"))) {\r\n await showNotEmpty(response.validationResult.build());\r\n return;\r\n }\r\n \r\n if(row != null)\r\n {\r\n row.isSelected = true; \r\n }\r\n\r\n context.card.sections.get(\"PkPackageOfOriginalVirtual\")!.rows.remove(row!.row);\r\n }\r\n }\r\n },\r\n null,\r\n () => { return PackageContents!.selectedRows!.length==1 && isRejectButtonAvaible == true;});\r\n\r\n PackageContents.leftButtons.push( rejectRowButton); \r\n }\r\n\r\n public static async AddClientDocumentLogicAsync(context: ICardUIExtensionContext) {\r\n const refSection = \"PkClientDocuments_For_Packet_Actions\";\r\n const parameters = this.GetParametersForClientDocsLogic(context);\r\n let PkPackageOfOriginalVirtual = context.model.card.sections.tryGet('PkPackageOfOriginalVirtual');\r\n if(PkPackageOfOriginalVirtual==null) return;\r\n await showViewsDialog(\r\n refSection,\r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n let selectedItem = value;\r\n // this.selectedRow=selectedItem.selectedRow ;\r\n // TODO доделать множественный выбор\r\n \r\n if (selectedItem != null && selectedItem.selectedRow != null) {\r\n selectedItem.viewContext?.selectedRows?.forEach( selectedRow=>{\r\n let row = new CardRow();\r\n \r\n row.set(\"ID\", context.model.card.id, DotNetType.Guid);\r\n row.rowId = Guid.newGuid();\r\n let DocID = selectedRow.get(\"DocID\");\r\n if (DocID == null) row.set(\"DocID\", null);\r\n else row.set(\"DocID\", createTypedField(DocID, DotNetType.Guid));\r\n \r\n\r\n let Number = selectedRow.get(\"IncCardIDNumber\");\r\n if (Number == null) row.set(\"Number\", null);\r\n else row.set(\"Number\", createTypedField(Number, DotNetType.String));\r\n \r\n let FullNumber = selectedRow.get(\"Number\");\r\n if (FullNumber == null) row.set(\"FullNumber\", null);\r\n else row.set(\"FullNumber\", createTypedField(FullNumber, DotNetType.String));\r\n\r\n \r\n let DocDate = selectedRow.get(\"DocDate\");\r\n if (DocDate == null) row.set(\"DocDate\", null);\r\n else row.set(\"DocDate\", createTypedField(DocDate, DotNetType.DateTime));\r\n \r\n let Kind = selectedRow.get(\"KindName\");\r\n if (Kind == null) row.set(\"Kind\", null);\r\n else row.set(\"Kind\", createTypedField(Kind, DotNetType.String));\r\n\r\n let partnerExternalID = selectedRow.get(\"PartnerExtID\");\r\n if (partnerExternalID == null) row.set(\"PartnerExternalID\", null);\r\n else row.set(\"PartnerExternalID\", createTypedField(partnerExternalID, DotNetType.Int64));\r\n \r\n let PartnerName= selectedRow.get(\"PartnerName\");\r\n if (PartnerName == null) row.set(\"PartnerName\", null);\r\n else row.set(\"PartnerName\", createTypedField(PartnerName, DotNetType.String));\r\n \r\n let partnerID = selectedRow.get(\"PartnerID\");\r\n if (partnerID == null) row.set(\"PartnerID\", null);\r\n else row.set(\"PartnerID\", createTypedField(partnerID, DotNetType.Guid));\r\n \r\n let Subject = selectedRow.get(\"Subject\");\r\n if (Subject == null) row.set(\"Subject\", null);\r\n else row.set(\"Subject\", createTypedField(Subject, DotNetType.String));\r\n\r\n row.set(\"SheetQuantity\", null);\r\n row.set(\"SheetOriginals\", null);\r\n \r\n let DocTypeName = selectedRow.get(\"DocType\");\r\n if (DocTypeName == null) row.set(\"DocTypeName\", null);\r\n else row.set(\"DocTypeName\", createTypedField(DocTypeName, DotNetType.String));\r\n\r\n row.set(\"CountNZK\", null)\r\n \r\n let dealNumber = selectedRow.get(\"DealNumber\");\r\n if (dealNumber || undefined != undefined)\r\n {\r\n row.set(\"DealNumber\",createTypedField(dealNumber, DotNetType.String));\r\n }\r\n\r\n row.state = CardRowState.Inserted;\r\n if(PkPackageOfOriginalVirtual!=null)\r\n PkPackageOfOriginalVirtual.rows.push(row); \r\n }) \r\n }\r\n },\r\n parameters\r\n );\r\n }\r\n\r\n public static GetDocListJson(model: ICardModel)\r\n {\r\n let list = new Array();\r\n let card = model.card; \r\n let PkPackageOfOriginalVirtual = card.sections.tryGet(\"PkPackageOfOriginalVirtual\");\r\n if (isNullOrUndefined(PkPackageOfOriginalVirtual)) return;\r\n \r\n let actualDocs = PkPackageOfOriginalVirtual.rows.filter(\r\n r => r.state != CardRowState.Deleted);\r\n actualDocs.forEach(row => { \r\n if (row != null) \r\n list.push(row.tryGet(\"DocID\")); \r\n });\r\n let json = JSON.stringify(list);\r\n return json; \r\n }\r\n\r\n // Получение параметров для представления\r\n public static GetParametersForClientDocsLogic(context: ICardUIExtensionContext) {\r\n const parameters = Array();\r\n let paramAlias = \"ExcludeDocsJson\";\r\n let paramCaption = \"ID\";\r\n let json = this.GetDocListJson(context.model);\r\n if(json!=null && json!=\"\")\r\n {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = paramAlias;\r\n parameterMetadata.caption = paramCaption;\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n const requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '',json)\r\n .asRequestParameter();\r\n\r\n parameters.push(requestParameter);\r\n } \r\n\r\n\r\n const paramAlias3 = \"StateCrm\";\r\n const parameterMetadata3 = new ViewParameterMetadata();\r\n parameterMetadata3.alias = paramAlias3;\r\n parameterMetadata3.caption = paramAlias3;\r\n parameterMetadata3.hidden = true;\r\n parameterMetadata3.dataType = DbType.String;\r\n parameterMetadata3.multiple = false;\r\n\r\n const requestParameter3 = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata3)\r\n .addCriteria(equalsCriteriaOperator(), 'Активно',\"Активно\")\r\n .asRequestParameter();\r\n\r\n parameters.push(requestParameter3);\r\n\r\n return parameters;\r\n }\r\n\r\n /// \r\n /// Скрытие полей в зависимости от параметров (входящие документы)\r\n /// \r\n public static IncomingControlInitialization(context: ICardUIExtensionContext) {\r\n let pkIncomingInfo = context.model.card.sections.tryGet(\"PkIncomingInfo\");\r\n if (pkIncomingInfo != null) {\r\n let kindID = pkIncomingInfo.fields.tryGet(\"KindID\");\r\n\r\n // Скрытие/отображение полей в зависимости от вида\r\n ChUIHelper.ChangingFieldsByIncomingDocumentKind(context, kindID);\r\n\r\n ChUIHelper.AccessibilityOfEditingControlsByTask(context, kindID);\r\n\r\n let customerRequest = pkIncomingInfo.fields.tryGet(\"CustomerRequest\");\r\n let IsDAiAP = pkIncomingInfo.fields.tryGet(\"KindIsDAiAP\");\r\n\r\n // Скрытие/отображение полей в зависимости от Обращения контрагента/клиента\r\n ChUIHelper.ChangingFieldsByIncomingDocumentCustomerRequest(context, customerRequest);\r\n ChUIHelper.CheckCourtBlock(context, IsDAiAP);\r\n\r\n if (IsDAiAP != null && customerRequest != null) {\r\n ChUIHelper.CheckLogicCourtBlock(context, IsDAiAP, customerRequest, false);\r\n }\r\n }\r\n }\r\n\r\n /// \r\n /// Проверка юр лица и организации на VGO\r\n /// \r\n public static ShowVGOControls(context: ICardUIExtensionContext,flag : boolean)\r\n {\r\n let PkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if(PkDocumentCommonInfo!=null)\r\n if(flag!=null && flag==true)\r\n {\r\n if (PkDocumentCommonInfo.fields.tryGet(\"VgoID\") == null)\r\n PkDocumentCommonInfo.fields.set(\"VgoID\", Guid.newGuid(), DotNetType.Guid);\r\n // context.model.card.info[\"IsVgoControlsVisible\"]=createTypedField(true, DotNetType.Boolean);;\r\n if(context.model.card.typeId!=PkCardTypes.PkIncomingTypeID)\r\n {\r\n let UserFioOutgoingControl = context.model.controls.get('UserFioOutgoingControl');\r\n if (UserFioOutgoingControl != null) UserFioOutgoingControl.controlVisibility = Visibility.Collapsed;\r\n let AddreseeControl = context.model.controls.get('AddreseeControl');\r\n if (AddreseeControl != null) AddreseeControl.controlVisibility = Visibility.Visible;\r\n let AddreseeByBelongingControl = context.model.controls.get('AddreseeByBelongingControl');\r\n if (AddreseeByBelongingControl != null) AddreseeByBelongingControl.controlVisibility = Visibility.Visible;\r\n let OutgoingVgoDocTypeControl = context.model.controls.get('OutgoingVgoDocTypeControl');\r\n if (OutgoingVgoDocTypeControl != null) OutgoingVgoDocTypeControl.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n } else\r\n {\r\n PkDocumentCommonInfo.fields.set(\"VgoID\",null);\r\n if(context.model.card.typeId!=PkCardTypes.PkIncomingTypeID)\r\n {\r\n let UserFioOutgoingControl = context.model.controls.get('UserFioOutgoingControl');\r\n if (UserFioOutgoingControl != null) UserFioOutgoingControl.controlVisibility = Visibility.Visible;\r\n let AddreseeControl = context.model.controls.get('AddreseeControl');\r\n if (AddreseeControl != null) AddreseeControl.controlVisibility = Visibility.Collapsed;\r\n let AddreseeByBelongingControl = context.model.controls.get('AddreseeByBelongingControl');\r\n if (AddreseeByBelongingControl != null) AddreseeByBelongingControl.controlVisibility = Visibility.Collapsed;\r\n let OutgoingVgoDocTypeControl = context.model.controls.get('OutgoingVgoDocTypeControl');\r\n if (OutgoingVgoDocTypeControl != null) OutgoingVgoDocTypeControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n } \r\n }\r\n public static async RequesVGOPartners(context: ICardUIExtensionContext, DepartmentID: guid) {\r\n var extID : object[] = [];\r\n \r\n let PkChanceryPartners = context.model.card.sections.tryGet(\"PkChanceryPartners\"); \r\n if(PkChanceryPartners!=null)\r\n PkChanceryPartners!.rows.forEach(row =>\r\n {\r\n if (row.state != CardRowState.Deleted)\r\n { \r\n extID.push(createTypedField(row.tryGet(\"PartnerExternalID\"),DotNetType.Int64)); \r\n }\r\n });\r\n let PkOutgoingPartnersKCK = context.model.card.sections.tryGet(\"PkOutgoingPartnersKCK\"); \r\n if(PkOutgoingPartnersKCK!=null)\r\n PkOutgoingPartnersKCK!.rows.forEach(row =>\r\n {\r\n if (row.state != CardRowState.Deleted)\r\n { \r\n extID.push(createTypedField(row.tryGet(\"PartnerExternalID\"),DotNetType.Int64)); \r\n }\r\n });\r\n let PkOutgoingReceiverKCK = context.model.card.sections.tryGet(\"PkOutgoingReceiverKCK\"); \r\n if(PkOutgoingReceiverKCK!=null)\r\n PkOutgoingReceiverKCK!.rows.forEach(row =>\r\n {\r\n if (row.state != CardRowState.Deleted)\r\n { \r\n extID.push(createTypedField(row.tryGet(\"PartnerExternalID\"),DotNetType.Int64)); \r\n }\r\n }); \r\n let pkoSection = context.model.card.sections.tryGet(\"PkOutgoing\");\r\n if (pkoSection != null && pkoSection.fields.tryGet(\"PartnerKCKExternalID\") != null)\r\n {\r\n extID.push(createTypedField(pkoSection.fields.tryGet(\"PartnerKCKExternalID\"), DotNetType.Int64));\r\n }\r\n \r\n if (extID.length == 0) {this.ShowVGOControls(context, false); return;}\r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.PkCheckVgoCard;\r\n request.info[\"ExtID\"] = extID; \r\n request.info[\"DepartmentID\"] = DepartmentID;\r\n request.info[\"TypeID\"] = createTypedField(PkCardTypes.PkOutgoingTypeID, DotNetType.Guid); \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n if(response.info.IsVGO!=null) \r\n {\r\n this.ShowVGOControls(context, response.info.IsVGO.$value);\r\n } \r\n } \r\n }\r\n public static async RequesVGOPartnersForIncoming(context: ICardUIExtensionContext, DepartmentID: guid,PartnerExtID) {\r\n var extID : object[] = [];\r\n if(PartnerExtID!=null)\r\n extID.push(createTypedField(PartnerExtID,DotNetType.Int64)); \r\n \r\n if (extID.length == 0) {this.ShowVGOControls(context, false); return;}\r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.PkCheckVgoCard;\r\n request.info[\"ExtID\"] = extID; \r\n request.info[\"DepartmentID\"] = DepartmentID;\r\n request.info[\"TypeID\"] = createTypedField(PkCardTypes.PkIncomingTypeID, DotNetType.Guid); \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n if(response.info.IsVGO!=null) \r\n {\r\n this.ShowVGOControls(context, response.info.IsVGO.$value);\r\n } \r\n if(response.info.IsNotAutomated!=null) \r\n {\r\n let pkii = context.model.card.sections.tryGet(\"PkIncomingInfo\");\r\n if(pkii!=null) \r\n {\r\n pkii.fields.set(\"PartnerKCKIsNotAutomated\",createTypedField(true,DotNetType.Boolean));\r\n this.CheckNumberConrol(context);\r\n }\r\n } else\r\n {\r\n let pkii = context.model.card.sections.tryGet(\"PkIncomingInfo\");\r\n if(pkii!=null) pkii.fields.set(\"PartnerKCKIsNotAutomated\",createTypedField(false,DotNetType.Boolean));\r\n this.CheckNumberConrol(context);\r\n } \r\n } \r\n }\r\n \r\n\r\n /** При изменении организации заполнение поля Email.*/\r\n public static InitIncomingEmailFilling(context: ICardUIExtensionContext)\r\n {\r\n const pkIncomingInfo = context.card.sections.tryGet(\"PkIncomingInfo\")\r\n if (!pkIncomingInfo)\r\n {\r\n return;\r\n }\r\n\r\n pkIncomingInfo.fields.fieldChanged.add((e) =>\r\n {\r\n if (e.fieldName != \"PartnerKCKEmailAddress\")\r\n {\r\n return;\r\n }\r\n\r\n let mail: string | null = e.fieldValue;\r\n if (mail == \"Не указан\")\r\n {\r\n mail = null;\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(mail))\r\n {\r\n mail += ';';\r\n }\r\n\r\n pkIncomingInfo.fields.set(\"AdditionalEmailsForPartners\", mail, DotNetType.String);\r\n });\r\n }\r\n\r\n\r\n /// \r\n /// При изменении организации заполнение поля Email\r\n /// \r\n public static CheckChangesPartnersEmail(context: ICardUIExtensionContext)\r\n { \r\n let PkOutgoingPartnersKCK = context.model.card.sections.tryGet(\"PkOutgoingPartnersKCK\"); \r\n if(PkOutgoingPartnersKCK!=null)\r\n PkOutgoingPartnersKCK!.rows.collectionChanged.add( row => { \r\n row.added.forEach(row2 =>\r\n {\r\n let Email=row2.getField('PartnerEmail');\r\n if(Email!=null)\r\n this.AddPartnersEmail(Email.$value,context.model.card);\r\n }\r\n ); \r\n });\r\n let PkOutgoingReceiverKCK = context.model.card.sections.tryGet(\"PkOutgoingReceiverKCK\"); \r\n if(PkOutgoingReceiverKCK!=null)\r\n PkOutgoingReceiverKCK!.rows.collectionChanged.add( row => {\r\n row.added.forEach(row2 =>\r\n {\r\n let Email=row2.getField('PartnerEmail');\r\n if(Email!=null)\r\n this.AddPartnersEmail(Email.$value,context.model.card);\r\n }\r\n ); \r\n }); \r\n let PkOutgoingPartnersKCKCopy = context.model.card.sections.tryGet(\"PkOutgoingPartnersKCKCopy\"); \r\n if(PkOutgoingPartnersKCKCopy!=null)\r\n PkOutgoingPartnersKCKCopy!.rows.collectionChanged.add( row => { \r\n row.added.forEach(row2 =>\r\n {\r\n let Email=row2.getField('PartnerEmail');\r\n if(Email!=null)\r\n this.AddPartnersEmail(Email.$value,context.model.card);\r\n }\r\n ); \r\n });\r\n let PkOutgoingReceiverKCKCopy = context.model.card.sections.tryGet(\"PkOutgoingReceiverKCKCopy\"); \r\n if(PkOutgoingReceiverKCKCopy!=null)\r\n PkOutgoingReceiverKCKCopy!.rows.collectionChanged.add( row => {\r\n row.added.forEach(row2 =>\r\n {\r\n let Email=row2.getField('PartnerEmail');\r\n if(Email!=null)\r\n this.AddPartnersEmail(Email.$value,context.model.card);\r\n }\r\n ); \r\n });\r\n let PkChanceryPartners = context.model.card.sections.tryGet(\"PkChanceryPartners\"); \r\n if(PkChanceryPartners!=null)\r\n PkChanceryPartners!.rows.collectionChanged.add( row => { \r\n row.added.forEach(row2 =>\r\n {\r\n let Email=row2.getField('PartnerEmail');\r\n if(Email!=null)\r\n this.AddPartnersEmail(Email.$value,context.model.card);\r\n }\r\n ); \r\n });\r\n let PkChanceryPartnersCopy = context.model.card.sections.tryGet(\"PkChanceryPartnersCopy\"); \r\n if(PkChanceryPartnersCopy!=null)\r\n PkChanceryPartnersCopy!.rows.collectionChanged.add( row => {\r\n row.added.forEach(row2 =>\r\n {\r\n let Email=row2.getField('PartnerEmail');\r\n if(Email!=null)\r\n this.AddPartnersEmail(Email.$value,context.model.card);\r\n }\r\n ); \r\n });\r\n let pkoSection = context.model.card.sections.tryGet(\"PkOutgoing\");\r\n if (pkoSection != null)\r\n {\r\n pkoSection.fields.fieldChanged.add((e) =>\r\n {\r\n if (e.fieldName === \"PartnerKCKEmailAddress\")\r\n {\r\n pkoSection?.fields.set(\"AdditionalEmailsForPartners\", e.fieldValue, DotNetType.String);\r\n }\r\n });\r\n }\r\n }\r\n /// \r\n /// Добавление Email\r\n /// \r\n public static AddPartnersEmail(value: string, card: Card)\r\n {\r\n if (value == null || value.length == 0 || value == \"Не указан\") return;\r\n let Email = \"\";\r\n let pko=card.sections.tryGet(\"PkOutgoing\");\r\n if (pko!=null)\r\n {\r\n Email = pko.fields.tryGet('AdditionalEmailsForPartners') \r\n if (Email != null && Email.length > 0)\r\n if (Email[Email.length - 1] != ';')\r\n Email = Email+';';\r\n let result = \"\";\r\n if(Email==null)\r\n result=value+';'; \r\n else\r\n result=Email+value+';';\r\n pko.fields.set('AdditionalEmailsForPartners',createTypedField(result,DotNetType.String)); \r\n }\r\n }\r\n\r\n /// \r\n /// Проверка юр лица и организации на VGO\r\n /// \r\n public static CheckVGOPartners(context: ICardUIExtensionContext) { \r\n if (context.model.card.typeId == PkCardTypes.PkOutgoingTypeID)\r\n { \r\n let DocumentCommonInfo = context.model.card.sections.tryGet(\"DocumentCommonInfo\"); \r\n if(context.model.card.storeMode==CardStoreMode.Insert && DocumentCommonInfo!=null && DocumentCommonInfo.fields.tryGet(\"DepartmentID\")!=null)\r\n { \r\n this.RequesVGOPartners(context,DocumentCommonInfo.fields.tryGet(\"DepartmentID\")); \r\n }\r\n \r\n if (DocumentCommonInfo!=null)\r\n {\r\n DocumentCommonInfo.fields.fieldChanged.add( e => {\r\n if (e.fieldName == \"DepartmentID\")\r\n {\r\n this.RequesVGOPartners(context,e.fieldValue); \r\n }\r\n });\r\n } \r\n let PkChanceryPartners = context.model.card.sections.tryGet(\"PkChanceryPartners\"); \r\n if(PkChanceryPartners!=null)\r\n PkChanceryPartners!.rows.collectionChanged.add( row => {\r\n let DocumentCommonInfo = context.model.card.sections.tryGet(\"DocumentCommonInfo\"); \r\n if(row==null || DocumentCommonInfo==null) return; \r\n this.RequesVGOPartners(context,DocumentCommonInfo.fields.tryGet(\"DepartmentID\")); \r\n });\r\n let PkOutgoingPartnersKCK = context.model.card.sections.tryGet(\"PkOutgoingPartnersKCK\"); \r\n if(PkOutgoingPartnersKCK!=null)\r\n PkOutgoingPartnersKCK!.rows.collectionChanged.add( row => {\r\n let DocumentCommonInfo = context.model.card.sections.tryGet(\"DocumentCommonInfo\"); \r\n if(row==null || DocumentCommonInfo==null) return; \r\n this.RequesVGOPartners(context,DocumentCommonInfo.fields.tryGet(\"DepartmentID\")); \r\n });\r\n let PkOutgoingReceiverKCK = context.model.card.sections.tryGet(\"PkOutgoingReceiverKCK\"); \r\n if(PkOutgoingReceiverKCK!=null)\r\n PkOutgoingReceiverKCK!.rows.collectionChanged.add( row => {\r\n let DocumentCommonInfo = context.model.card.sections.tryGet(\"DocumentCommonInfo\"); \r\n if(row==null || DocumentCommonInfo==null) return; \r\n this.RequesVGOPartners(context,DocumentCommonInfo.fields.tryGet(\"DepartmentID\")); \r\n }); \r\n let pkoSection = context.model.card.sections.tryGet(\"PkOutgoing\");\r\n if (pkoSection != null)\r\n {\r\n pkoSection.fields.fieldChanged.add((e) =>\r\n {\r\n if (e.fieldName === \"PartnerKCKExternalID\")\r\n {\r\n let DocumentCommonInfo = context.model.card.sections.tryGet(\"DocumentCommonInfo\"); \r\n if(e.fieldValue ==null || DocumentCommonInfo==null) return; \r\n this.RequesVGOPartners(context,DocumentCommonInfo.fields.tryGet(\"DepartmentID\")); \r\n\r\n }\r\n });\r\n } \r\n } else\r\n if (context.model.card.typeId == PkCardTypes.PkIncomingTypeID)\r\n {\r\n let DocumentCommonInfo = context.model.card.sections.tryGet(\"DocumentCommonInfo\"); \r\n let PkIncomingInfo = context.model.card.sections.tryGet(\"PkIncomingInfo\"); \r\n if(context.model.card.storeMode==CardStoreMode.Insert && DocumentCommonInfo!=null && PkIncomingInfo!=null && DocumentCommonInfo.fields.tryGet(\"DepartmentID\")!=null)\r\n { \r\n this.RequesVGOPartnersForIncoming(context,DocumentCommonInfo.fields.tryGet(\"DepartmentID\"), PkIncomingInfo.fields.tryGet(\"PartnerKCKExternalID\")); \r\n }\r\n \r\n if (DocumentCommonInfo!=null)\r\n {\r\n DocumentCommonInfo.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"DepartmentID\")\r\n { \r\n let PkIncomingInfo = context.model.card.sections.tryGet(\"PkIncomingInfo\"); \r\n if(PkIncomingInfo != null)\r\n this.RequesVGOPartnersForIncoming(context,e.fieldValue, PkIncomingInfo.fields.tryGet(\"PartnerKCKExternalID\")); \r\n }\r\n });\r\n } \r\n if(PkIncomingInfo!=null)\r\n PkIncomingInfo.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"PartnerKCKExternalID\")\r\n { \r\n let DocumentCommonInfo = context.model.card.sections.tryGet(\"DocumentCommonInfo\"); \r\n if(DocumentCommonInfo != null)\r\n this.RequesVGOPartnersForIncoming(context, DocumentCommonInfo.fields.tryGet(\"DepartmentID\"), e.fieldValue); \r\n }\r\n }); \r\n }\r\n \r\n }\r\n/// \r\n /// Кастомное фио\r\n /// \r\n public static CheckFIOControl(context: ICardUIExtensionContext) { \r\n let PkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if(PkDocumentCommonInfo!=null)\r\n {\r\n let VgoID = PkDocumentCommonInfo.fields.tryGet(\"VgoID\");\r\n if(VgoID!=null)\r\n { \r\n let UserFioIncomingVgoControl = context.model.controls.get('UserFioIncomingVgoControl');\r\n if (UserFioIncomingVgoControl != null) UserFioIncomingVgoControl.controlVisibility = Visibility.Visible;\r\n let FIOControl = context.model.controls.get('FIOControl');\r\n if (FIOControl != null) FIOControl.controlVisibility = Visibility.Collapsed; \r\n } else\r\n {\r\n let UserFioIncomingVgoControl = context.model.controls.get('UserFioIncomingVgoControl');\r\n if (UserFioIncomingVgoControl != null) UserFioIncomingVgoControl.controlVisibility = Visibility.Collapsed;\r\n let FIOControl = context.model.controls.get('FIOControl');\r\n if (FIOControl != null) FIOControl.controlVisibility = Visibility.Visible; \r\n }\r\n PkDocumentCommonInfo.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"VgoID\") {\r\n if(e.fieldValue!=null)\r\n {\r\n let UserFioIncomingVgoControl = context.model.controls.get('UserFioIncomingVgoControl');\r\n if (UserFioIncomingVgoControl != null) UserFioIncomingVgoControl.controlVisibility = Visibility.Visible;\r\n let FIOControl = context.model.controls.get('FIOControl');\r\n if (FIOControl != null) FIOControl.controlVisibility = Visibility.Collapsed;\r\n if(PkDocumentCommonInfo!=null) \r\n PkDocumentCommonInfo.fields.set(\"PartnersContacts\",null); \r\n \r\n } else\r\n {\r\n let UserFioIncomingVgoControl = context.model.controls.get('UserFioIncomingVgoControl');\r\n if (UserFioIncomingVgoControl != null) UserFioIncomingVgoControl.controlVisibility = Visibility.Collapsed;\r\n let FIOControl = context.model.controls.get('FIOControl');\r\n if (FIOControl != null) FIOControl.controlVisibility = Visibility.Visible;\r\n if(PkDocumentCommonInfo!=null)\r\n { \r\n PkDocumentCommonInfo.fields.set(\"PartnersContactsForVgoID\",null); \r\n PkDocumentCommonInfo.fields.set(\"PartnersContactsForVgoName\",null); \r\n PkDocumentCommonInfo.fields.set(\"PartnersContactsForVgoDepartmentID\",null); \r\n } \r\n }\r\n }\r\n });\r\n } \r\n \r\n }\r\n /// \r\n /// ИСХ, Покажем контролы если карточка ВГО\r\n /// \r\n public static IncomingVisibilityControlsVgo(context: ICardUIExtensionContext) { \r\n let PkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if(PkDocumentCommonInfo!=null)\r\n {\r\n let VgoID = PkDocumentCommonInfo.fields.tryGet(\"VgoID\");\r\n if(VgoID!=null)\r\n { \r\n //context.model.card.info[\"IsVgoControlsVisible\"]=createTypedField(true, DotNetType.Boolean);;\r\n let UserFioOutgoingControl = context.model.controls.get('UserFioOutgoingControl');\r\n if (UserFioOutgoingControl != null) UserFioOutgoingControl.controlVisibility = Visibility.Collapsed;\r\n let AddreseeControl = context.model.controls.get('AddreseeControl');\r\n if (AddreseeControl != null) AddreseeControl.controlVisibility = Visibility.Visible;\r\n let AddreseeByBelongingControl = context.model.controls.get('AddreseeByBelongingControl');\r\n if (AddreseeByBelongingControl != null) AddreseeByBelongingControl.controlVisibility = Visibility.Visible;\r\n let OutgoingVgoDocTypeControl = context.model.controls.get('OutgoingVgoDocTypeControl');\r\n if (OutgoingVgoDocTypeControl != null) OutgoingVgoDocTypeControl.controlVisibility = Visibility.Visible;\r\n }\r\n } \r\n \r\n }\r\n /// \r\n /// Подписываемся в ВХ на кнопку вложить ответ, для ВГО\r\n /// \r\n public static IncomingPutAnswerButtonOnClick(context: ICardUIExtensionContext) { \r\n let button = context.model.controls.get(\"IncomingPutAnswerButton\") as ButtonViewModel;\r\n if (button != null) { \r\n button.onClick = async () => {\r\n await this.CreateCardFromTaskIsVgo(context);\r\n }; \r\n } \r\n }\r\n\r\n /// \r\n /// Скрытие отображение поля номер исходящего (только для вго)\r\n /// \r\n public static ControllerNumberConrol(context: ICardUIExtensionContext) \r\n { \r\n \r\n this.CheckNumberConrol(context);\r\n \r\n let pkdci= context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n let pkii= context.model.card.sections.tryGet('PkIncomingInfo');\r\n if(pkdci==null || pkii==null) return;\r\n pkdci.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"VgoID\") \r\n {\r\n if(e.fieldValue==null && pkii!=null)\r\n pkii.fields.set('IsMissingOutgoing',createTypedField(false,DotNetType.Boolean)); \r\n this.CheckNumberConrol(context); \r\n }\r\n });\r\n pkii.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"IsMissingOutgoing\" || e.fieldName === \"PartnerKCKIsNotAutomated\" || e.fieldName ===\"KindID\") \r\n { \r\n this.CheckNumberConrol(context); \r\n }\r\n });\r\n }\r\n\r\n /// \r\n /// Скрытие отображение поля номер исходящего (только для вго)\r\n /// \r\n public static CheckNumberConrol(context: ICardUIExtensionContext) { \r\n let pkdci= context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n let pkii= context.model.card.sections.tryGet('PkIncomingInfo'); \r\n if(pkdci!=null && pkii!=null)\r\n {\r\n let Supported = true;\r\n let kindID=pkii.fields.tryGet(\"KindID\");\r\n if(kindID!=null && (Guid.equals(kindID, PkIncomingKinds.RefundID) ||Guid.equals(kindID, PkIncomingKinds.RecalculationID) || Guid.equals(kindID, PkIncomingKinds.FinishingBuilderID) || Guid.equals(kindID, PkIncomingKinds.PropertyID) || Guid.equals(kindID, PkIncomingKinds.RepairPaymentID) || Guid.equals(kindID, PkIncomingKinds.ViolationOfTheTermID)))\r\n Supported=false;\r\n let PartnerKCKIsNotAutomated = pkii.fields.tryGet(\"PartnerKCKIsNotAutomated\");\r\n if(pkdci.fields.tryGet(\"VgoID\")!=null && (PartnerKCKIsNotAutomated==null || PartnerKCKIsNotAutomated!=true) && Supported)\r\n {\r\n\r\n let CheckNumber = context.model.controls.get('CheckNumber');\r\n if (CheckNumber != null) CheckNumber.controlVisibility = Visibility.Visible;\r\n\r\n //let pkii= context.model.card.sections.tryGet('PkIncomingInfo');\r\n if(pkii!=null)\r\n {\r\n if(pkii.fields.tryGet(\"IsMissingOutgoing\")==true)\r\n {\r\n let IncomingNumberRef = context.model.controls.get('IncomingNumberRef');\r\n if (IncomingNumberRef != null) IncomingNumberRef.controlVisibility = Visibility.Collapsed;\r\n\r\n let IncomingNumber = context.model.controls.get('IncomingNumber');\r\n if (IncomingNumber != null) \r\n {\r\n IncomingNumber.controlVisibility = Visibility.Visible;\r\n IncomingNumber.isReadOnly = true; \r\n }\r\n } else\r\n {\r\n let IncomingNumberRef = context.model.controls.get('IncomingNumberRef');\r\n if (IncomingNumberRef != null) IncomingNumberRef.controlVisibility = Visibility.Visible\r\n\r\n let IncomingNumber = context.model.controls.get('IncomingNumber');\r\n if (IncomingNumber != null) \r\n {\r\n IncomingNumber.controlVisibility = Visibility.Collapsed;\r\n IncomingNumber.isReadOnly = false; \r\n }\r\n }\r\n }\r\n } else\r\n {\r\n let IncomingNumberRef = context.model.controls.get('IncomingNumberRef');\r\n if (IncomingNumberRef != null) IncomingNumberRef.controlVisibility = Visibility.Collapsed\r\n\r\n let CheckNumber = context.model.controls.get('CheckNumber');\r\n if (CheckNumber != null) CheckNumber.controlVisibility = Visibility.Collapsed\r\n\r\n let IncomingNumber = context.model.controls.get('IncomingNumber');\r\n if (IncomingNumber != null) \r\n {\r\n IncomingNumber.controlVisibility = Visibility.Visible;\r\n IncomingNumber.isReadOnly = false; \r\n }\r\n }\r\n } \r\n \r\n }\r\n\r\n /// \r\n /// Скрытие отображение судебного блока\r\n /// \r\n public static CheckCourtBlock(context: ICardUIExtensionContext,IsDAiAP) { \r\n let CourtBlock = context.model.blocks.get('CourtBlock');\r\n if (CourtBlock != null)\r\n { \r\n if(IsDAiAP!=null && IsDAiAP==true)\r\n CourtBlock.blockVisibility = Visibility.Visible; \r\n else\r\n CourtBlock.blockVisibility = Visibility.Collapsed; \r\n } \r\n \r\n \r\n }\r\n\r\n /// \r\n /// Логика отображения полей договоров в ВХ.\r\n /// \r\n public static CheckLogicCourtBlock(context: ICardUIExtensionContext, IsDAiAP, FlagTwo, withClear) { \r\n //правка\r\n // Перерисовка блока \"Основная информация\"\r\n let pklciSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n let courtBlock = context.model.controls.get('CustomContractControll');\r\n if (courtBlock != null)\r\n { \r\n if(IsDAiAP == true && (FlagTwo == null || FlagTwo == false))\r\n {\r\n courtBlock.controlVisibility = Visibility.Visible; \r\n }\r\n else\r\n {\r\n if (withClear && pklciSection != null) {\r\n pklciSection.fields.set(\"ContractCourtID\", null);\r\n pklciSection.fields.set(\"ContractCourtNumberVirtual\", null);\r\n pklciSection.fields.set(\"ContractCourtExtID\", null);\r\n }\r\n courtBlock.controlVisibility = Visibility.Collapsed; \r\n }\r\n } \r\n }\r\n \r\n /// \r\n /// Отображение предупреждения, о потере данныхз из ТЧ Судебный блок.\r\n /// \r\n public static async ChangeNotSavedDataCourt(context: ICardUIExtensionContext) { \r\n // Имеется ли хотя бы одна строка\r\n let pkPartCourtSection = context.model.card.sections.tryGet('PkParticipantsCourt')\r\n if(!pkPartCourtSection) return;\r\n if (pkPartCourtSection.rows.some(x => x.state != CardRowState.Deleted)) {\r\n const dialogResult = await showConfirm(\"Связанные с договором данные будут перезаполнены в документе. Продолжить?\");\r\n if (!dialogResult){\r\n return;\r\n }\r\n }\r\n else\r\n {\r\n return;\r\n }\r\n\r\n const polSectionRows = context.model.card.sections.tryGet('PkParticipantsCourt')!.rows;\r\n if (polSectionRows != null) {\r\n for (let i = polSectionRows.length - 1; i >= 0; i--) {\r\n if (polSectionRows[i].state === CardRowState.None || polSectionRows[i].state === CardRowState.Modified) {\r\n polSectionRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n polSectionRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n public static async CreateCardFromTaskIsVgo(context: ICardUIExtensionContext) {\r\n\r\n let files = context.model.card.files;\r\n files.forEach(e=>{if(e.state!=CardFileState.None)\r\n {\r\n showError(\"Перед вложением ответа следует сохранить карточку\");\r\n return;\r\n }\r\n });\r\n\r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.PkGetVgoIdRequest;\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id,DotNetType.Guid); \r\n request.info[\"CardTypeID\"] = createTypedField(context.model.card.typeId,DotNetType.Guid); \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n if(response.info.CheckVgoID==null || response.info.CheckVgoID.$value==false) \r\n {\r\n //context.validationResult.add(ValidationResultType.Error,\"Данная карточка не является ВГО\");\r\n //return;\r\n } \r\n } \r\n\r\n var editor = context.uiContext.cardEditor;\r\n if(editor!=null)\r\n editor.setOperationInProgress(async () =>\r\n {\r\n let info={};\r\n \r\n info['KrCreateBasedOnCardID'] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n info['KrCreateBasedOnCopyFiles'] = createTypedField(false, DotNetType.Boolean);\r\n info['CreateBasedDocument'] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const baseCardToken = KrToken.tryGet(context.model.card.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n info['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n\r\n info[\"CreateBasedDocument\"]=createTypedField(true,DotNetType.Boolean); \r\n info[\"IsVgo\"]=response.info.IsVgo; \r\n let PkDocumentCommonInfo = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (PkDocumentCommonInfo != null)\r\n { \r\n info[\"OldVgoID\"]=PkDocumentCommonInfo.fields.get(\"VgoID\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"VgoID\"),DotNetType.Guid) : null;\r\n info[\"OldSheetQuantity\"]=PkDocumentCommonInfo.fields.get(\"SheetQuantity\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"SheetQuantity\"),DotNetType.Int32) : null;\r\n info[\"OldApplication\"]=PkDocumentCommonInfo.fields.get(\"Application\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"Application\"),DotNetType.String) : null;\r\n info[\"OldComment\"]=PkDocumentCommonInfo.fields.get(\"Comment\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"Comment\"),DotNetType.String) : null;\r\n info[\"OldDescription\"]=PkDocumentCommonInfo.fields.get(\"Description\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"Description\"),DotNetType.String) : null;\r\n info[\"OldReceivingMethodID\"]=PkDocumentCommonInfo.fields.get(\"ReceivingMethodID\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"ReceivingMethodID\"),DotNetType.Int32) : null;\r\n info[\"OldReceivingMethodName\"]=PkDocumentCommonInfo.fields.get(\"ReceivingMethodName\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"ReceivingMethodName\"),DotNetType.String) : null;\r\n info[\"OldCaseNewID\"]=PkDocumentCommonInfo.fields.get(\"CaseNewID\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"CaseNewID\"),DotNetType.Guid) : null;\r\n info[\"OldCaseNewName\"]=PkDocumentCommonInfo.fields.get(\"CaseNewName\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"CaseNewName\"),DotNetType.String) : null;\r\n info[\"OldCaseOfTheTopLevelID\"]=PkDocumentCommonInfo.fields.get(\"CaseOfTheTopLevelID\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"CaseOfTheTopLevelID\"),DotNetType.Guid) : null;\r\n info[\"OldCaseOfTheTopLevelName\"]=PkDocumentCommonInfo.fields.get(\"CaseOfTheTopLevelName\")!=null ? createTypedField(PkDocumentCommonInfo.fields.get(\"CaseOfTheTopLevelName\"),DotNetType.String) : null; \r\n }\r\n let PkIncomingInfo = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (PkIncomingInfo != null)\r\n { \r\n info[\"OldKindID\"]=PkIncomingInfo.fields.get(\"KindID\")!=null ? createTypedField(PkIncomingInfo.fields.get(\"KindID\"),DotNetType.Guid) : null;\r\n info[\"OldKindDocumentKind\"]=PkIncomingInfo.fields.get(\"KindDocumentKind\")!=null ? createTypedField(PkIncomingInfo.fields.get(\"KindDocumentKind\"),DotNetType.String) : null; \r\n }\r\n\r\n let DocumentCommonInfo = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (DocumentCommonInfo != null)\r\n { \r\n info[\"OldSubject\"]=DocumentCommonInfo.fields.get(\"Subject\")!=null ? createTypedField(DocumentCommonInfo.fields.get(\"Subject\"),DotNetType.String) : null; \r\n }\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkOutgoingTypeID,\r\n saveCreationRequest: false,\r\n context : UIContext.current,\r\n info: info,\r\n creationModeDisplayText: \"$UI_Tiles_CreateCard_Suffix_BasedOn\",\r\n cardModifierAction : ctx =>\r\n {\r\n let newCard = ctx.card;\r\n \r\n var PkDCI = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n var PkAddressees = newCard.sections.tryGet('PkAddressees');\r\n if(PkDCI!=null)\r\n {\r\n if(PkDCI.fields.get(\"PartnersContactsForVgoID\")==null) return;\r\n if(PkAddressees!=null)\r\n {\r\n var newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n \r\n newRow.set(\"AddresseeID\" ,createTypedField(PkDCI.fields.get(\"PartnersContactsForVgoID\"),DotNetType.Guid));\r\n newRow.set(\"AddresseeName\" , createTypedField(PkDCI.fields.get(\"PartnersContactsForVgoName\"),DotNetType.String));\r\n if(PkDCI.fields.get(\"AddresseeDepartmentID\")!=null)\r\n newRow.set(\"AddresseeDepartmentID\",createTypedField(PkDCI.fields.get(\"PartnersContactsForVgoDepartmentID\"),DotNetType.Guid));\r\n else\r\n newRow.set(\"AddresseeDepartmentID\",null); \r\n newRow.set(\"Order\",createTypedField(0,DotNetType.Int32)); \r\n newRow.state = CardRowState.Inserted; \r\n PkAddressees.rows.push(newRow);\r\n }\r\n } \r\n } \r\n }); \r\n\r\n \r\n });\r\n }\r\n /// \r\n /// Скрытие полей в зависимости от параметров (исходящие документы)\r\n /// \r\n public static OutgoingControlInitialization(context: ICardUIExtensionContext) {\r\n let pkOutgoing = context.model.card.sections.tryGet(\"PkOutgoing\");\r\n if (pkOutgoing != null) {\r\n let customerRequest = pkOutgoing.fields.tryGet(\"CustomerRequest\");\r\n let typeID = pkOutgoing.fields.tryGet(\"TypeID\");\r\n\r\n //if (customerRequest != null) {\r\n // Скрытие/отображение полей в зависимости от Обращения контрагента/клиента\r\n ChUIHelper.ChangingFieldsByOutgoingDocumentCustomerRequest(context, customerRequest, typeID);\r\n // }\r\n }\r\n }\r\n\r\n private static CheckBindingDepartmentWithAdressees(context: ICardUIExtensionContext,\r\n departmentComplete: AutoCompleteEntryViewModel,\r\n addreseeComplete: AutoCompleteTableViewModel,\r\n addreseeByBelongingComplete: AutoCompleteTableViewModel) {\r\n if (departmentComplete.item == null) {\r\n let pkaSection = context.model.card.sections.tryGet('PkAddressees');\r\n if (pkaSection != null) {\r\n for (let row of pkaSection.rows) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n let pkabbSection = context.model.card.sections.tryGet('PkAddresseesByBelonging');\r\n if (pkabbSection != null) {\r\n for (let row of pkabbSection.rows) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n addreseeComplete.isReadOnly = true;\r\n addreseeByBelongingComplete.isReadOnly = true;\r\n }\r\n else {\r\n addreseeComplete.isReadOnly = departmentComplete.isReadOnly;\r\n addreseeByBelongingComplete.isReadOnly = departmentComplete.isReadOnly;\r\n }\r\n }\r\n\r\n public static BundleCaseTopLevelCase(context: ICardUIExtensionContext) {\r\n let pkdciSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pkdciSection == null) return;\r\n\r\n pkdciSection.fields.fieldChanged.add(async e => {\r\n if (pkdciSection == null) return;\r\n if (e.fieldName === \"CaseNewID\") {\r\n let caseNewId = e.fieldValue;\r\n\r\n if (caseNewId == null && pkdciSection) {\r\n pkdciSection.fields.set(\"CaseOfTheTopLevelID\", null);\r\n pkdciSection.fields.set(\"CaseOfTheTopLevelName\", null);\r\n }\r\n else {\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.GetCaseOfTheTopLevel;\r\n request.info[\"CaseNewId\"] = createTypedField(caseNewId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info != null && response.info.CaseOfTheTopLevelId && !PkCommonHelper.IsNullOrWhitespace(response.info.CaseOfTheTopLevelName.$value)) {\r\n CdCommonHelper.SetFieldToSection(pkdciSection, \"CaseOfTheTopLevelID\", response.info.CaseOfTheTopLevelId);\r\n CdCommonHelper.SetFieldToSection(pkdciSection, \"CaseOfTheTopLevelName\", response.info.CaseOfTheTopLevelName);\r\n }\r\n else {\r\n pkdciSection.fields.set(\"CaseOfTheTopLevelID\", null);\r\n pkdciSection.fields.set(\"CaseOfTheTopLevelName\", null);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static CanAddPartnerPermission(context: ICardUIExtensionContext) {\r\n let canAddPartners = context.model.controls.get('CanAddPartnersControl') as AutoCompleteTableViewModel;\r\n let partners = context.model.controls.get('PartnersControl') as AutoCompleteTableViewModel;\r\n\r\n if (canAddPartners == null || partners == null) return;\r\n\r\n if (tryGetFromInfo(context.model.card.info, ChCardFlagsInfo.PkAddPartnerFlag, false)) {\r\n canAddPartners.controlVisibility = Visibility.Visible;\r\n partners.controlVisibility = Visibility.Collapsed;\r\n }\r\n else {\r\n canAddPartners.controlVisibility = Visibility.Collapsed;\r\n partners.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n\r\n if (context.model.card.typeId !== PkCardTypes.PkOutgoingTypeID) {\r\n return;\r\n }\r\n\r\n let canAddPartnersCopy = context.model.controls.get('CanAddPartnersCopyControl') as AutoCompleteTableViewModel;\r\n let partnersCopy = context.model.controls.get('PartnersCopyControl') as AutoCompleteTableViewModel;\r\n\r\n if (canAddPartnersCopy == null || partnersCopy == null) return;\r\n\r\n if (tryGetFromInfo(context.model.card.info, ChCardFlagsInfo.PkAddPartnerFlag, false)) {\r\n canAddPartnersCopy.controlVisibility = Visibility.Visible;\r\n partnersCopy.controlVisibility = Visibility.Collapsed;\r\n }\r\n else {\r\n canAddPartnersCopy.controlVisibility = Visibility.Collapsed;\r\n partnersCopy.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n\r\n public static BindingDepartmentWithMemoType(context: ICardUIExtensionContext, disposer: Function | null = null) {\r\n var departmentControl = CdUIHelper.GetUIControl(context, 'DepartmentControl')!;\r\n var kindControl = CdUIHelper.GetUIControl(context, 'Kind')!;\r\n ChUIHelper.CheckBindingDepartmentWithMemoType(departmentControl, kindControl);\r\n\r\n if (disposer == null) {\r\n disposer = reaction(() => departmentControl.item, () => {\r\n ChUIHelper.CheckBindingDepartmentWithMemoType(departmentControl, kindControl);\r\n });\r\n }\r\n }\r\n \r\n private static CheckBindingDepartmentWithMemoType(\r\n departmentControl: AutoCompleteEntryViewModel, kindControl: AutoCompleteEntryViewModel) {\r\n if(departmentControl.hasEmptyValue) {\r\n kindControl.isReadOnly = true;\r\n }\r\n else {\r\n kindControl.isReadOnly = false;\r\n }\r\n }\r\n\r\n public static BindingDepartmentWithSigner(context: ICardUIExtensionContext, disposer: Function | null = null) {\r\n let departmentControl = context.model.controls.get('DepartmentControl') as AutoCompleteEntryViewModel;\r\n let signerControl = context.model.controls.get('SignerControl') as AutoCompleteTableViewModel;\r\n\r\n if (departmentControl == null || signerControl == null) return;\r\n\r\n ChUIHelper.CheckBindingDepartmentWithSigner(context, departmentControl, signerControl);\r\n\r\n if (disposer == null) {\r\n disposer = reaction(() => departmentControl.item, () => {\r\n ChUIHelper.CheckBindingDepartmentWithSigner(context, departmentControl, signerControl);\r\n });\r\n }\r\n }\r\n\r\n private static CheckBindingDepartmentWithSigner(context: ICardUIExtensionContext,\r\n departmentComplete: AutoCompleteEntryViewModel, signerComplete: AutoCompleteTableViewModel) {\r\n let pkMemoInfoSection: CardSection | undefined = context.card.sections.tryGet('PkMemoInfo');\r\n if (pkMemoInfoSection && pkMemoInfoSection.fields.get('KindID') == PkMemoKinds.AdvanceReportId.toLowerCase()) {\r\n return;\r\n }\r\n \r\n if (departmentComplete.item == null) {\r\n let pkpsSection = context.model.card.sections.tryGet('PkPersonalSigners');\r\n if (pkpsSection != null) {\r\n for (let row of pkpsSection.rows) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n signerComplete.isReadOnly = true;\r\n }\r\n else {\r\n signerComplete.isReadOnly = departmentComplete.isReadOnly;\r\n }\r\n }\r\n\r\n public static WrkWithATemplate(context: ICardUIExtensionContext) {\r\n if (context.model == null) return;\r\n\r\n // Получаем контрол \"Изменить содержимое файла\"\r\n let fileContentEditorControl = context.model.controls.get(\"FileContentEditor\");\r\n if (fileContentEditorControl != null) fileContentEditorControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // Получаем кнопку \"Обновить содержимое файла\"\r\n let uploadFileContentButton = context.model.controls.get(\"UploadFileContent\");\r\n if (uploadFileContentButton != null) uploadFileContentButton.controlVisibility = Visibility.Collapsed;\r\n\r\n context.fileContainer.containerFileChanging.add(async (e) => {\r\n const fileAdded = e.added;\r\n const fileRemoved = e.removed;\r\n\r\n if (context.card.storeMode == CardStoreMode.Update){\r\n if (fileAdded != null){\r\n \r\n var blobFile = fileAdded.lastVersion.content as Blob;\r\n var reader = new FileReader();\r\n reader.readAsArrayBuffer(blobFile);\r\n reader.onload = async readerEvent => {\r\n \r\n var content = (readerEvent as any).target.result;\r\n var data = new Uint8Array(content);\r\n\r\n let base64string = btoa(\r\n data.reduce(function (data, byte) {\r\n return data + String.fromCharCode(byte);\r\n }, '')\r\n );\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkWrkWithTemplateWeb;\r\n request.info[\"WhereItComeFrom\"] = createTypedField(\"Desktop-get\", DotNetType.String);\r\n request.info[\"CardID\"] = createTypedField(context.card.id, DotNetType.Guid);\r\n request.info[\"FileContent\"] = createTypedField(base64string, DotNetType.String);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n let editedText = response.info[\"EditedText\"];\r\n if (editedText === undefined || editedText === null) return;\r\n\r\n let pkOutgoing: CardSection | undefined = context.card.sections.tryGet(\"PkOutgoing\");\r\n if (pkOutgoing === null) return;\r\n\r\n pkOutgoing!.fields.set(\"TemplateText\", editedText);\r\n\r\n fileContentEditorControl!.controlVisibility = Visibility.Visible;\r\n uploadFileContentButton!.controlVisibility = Visibility.Visible;\r\n\r\n let button: ButtonViewModel = uploadFileContentButton as ButtonViewModel;\r\n \r\n button.onClick = () => this.ActionFileTemplate(fileAdded, pkOutgoing);\r\n }\r\n };\r\n }\r\n if (fileRemoved !== null){\r\n // Получаем контрол \"Изменить содержимое файла\"\r\n let fileContentEditorControl = context.model.controls.get(\"FileContentEditor\");\r\n if (fileContentEditorControl != null) fileContentEditorControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // Получаем кнопку \"Обновить содержимое файла\"\r\n let uploadFileContentButton = context.model.controls.get(\"UploadFileContent\");\r\n if (uploadFileContentButton != null) uploadFileContentButton.controlVisibility = Visibility.Collapsed;\r\n\r\n let pkOutgoing: CardSection | undefined = context.card.sections.tryGet(\"PkOutgoing\");\r\n if (pkOutgoing === null) return;\r\n\r\n if (pkOutgoing!.fields !== null)\r\n pkOutgoing!.fields.set(\"TemplateText\", null);\r\n }\r\n });\r\n }\r\n\r\n /** Логика кнопки Сохранить документ и обновить файл */\r\n private static async ActionFileTemplate(file, pkOutgoing) {\r\n let context: IUIContext = UIContext.current;\r\n let editor: ICardEditorModel | null = context.cardEditor;\r\n if (!editor) return;\r\n\r\n // var editedText = context.card.sections[\"PkOutgoing\"].Fields[\"TemplateText\"];\r\n if (pkOutgoing === null) return;\r\n\r\n var editedText = pkOutgoing!.fields.get(\"TemplateText\");\r\n\r\n var blobFile = file.lastVersion.content as Blob;\r\n var reader = new FileReader();\r\n reader.readAsArrayBuffer(blobFile);\r\n reader.onload = async readerEvent => {\r\n\r\n var content = (readerEvent as any).target.result;\r\n var data = new Uint8Array(content);\r\n\r\n let base64string = btoa(\r\n data.reduce(function (data, byte) {\r\n return data + String.fromCharCode(byte);\r\n }, '')\r\n );\r\n \r\n const storeInfo: IStorage = {\r\n \"FileContent\": base64string,\r\n \"EditedText\": createTypedField(editedText, DotNetType.String)\r\n };\r\n if (editor !== null)\r\n await editor.saveCard(context, storeInfo);\r\n }\r\n }\r\n\r\n public static HideDocumentSigned(context: ICardUIExtensionContext, pkRejectApprovalOnly: boolean = false) {\r\n if (context == null && !pkRejectApprovalOnly) return;\r\n\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks == null || tasks.length < 1) return;\r\n for (let task of tasks) {\r\n // при инциализации формы\r\n ChUIHelper.RemoveDocSigned(task, pkRejectApprovalOnly);\r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(e => ChUIHelper.RemoveDocSigned(e.task, pkRejectApprovalOnly));\r\n }\r\n }\r\n\r\n private static RemoveDocSigned(task: TaskViewModel, pkRejectApprovalOnly: boolean) {\r\n if (!((task.taskModel.cardType.id === ChTaskTypes.PkPerformerTaskTypeID && !pkRejectApprovalOnly) ||\r\n (task.taskModel.cardType.id === ChTaskTypes.PkRejectApprovalTypeID) ||\r\n (task.taskModel.cardType.id === ChTaskTypes.PkStartAgreementProcessTypeID && !pkRejectApprovalOnly))) {\r\n return;\r\n }\r\n const actionIndexToRemove = task.taskWorkspace.actions\r\n .findIndex(x => x.completionOption !== null && x.completionOption.id === ChProcessHelper.DocumentIsSigned);\r\n if (actionIndexToRemove >= 0) {\r\n task.taskWorkspace.actions.splice(actionIndexToRemove, 1);\r\n }\r\n else {\r\n const additionalActionIndexToRemove = task.taskWorkspace.additionalActions\r\n .findIndex(x => x.completionOption !== null && x.completionOption.id === ChProcessHelper.DocumentIsSigned);\r\n if (additionalActionIndexToRemove >= 0) {\r\n task.taskWorkspace.additionalActions.splice(additionalActionIndexToRemove, 1);\r\n }\r\n }\r\n }\r\n\r\n public static HideShowUDORegistrationFlag(context: ICardUIExtensionContext) {\r\n if (context == null) return;\r\n\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks == null || tasks.length < 1) return;\r\n for (let task of tasks) {\r\n // при инциализации формы\r\n ChUIHelper.HideRegistrationUdoFlag(task, context.model.card.typeId);\r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(e => ChUIHelper.HideRegistrationUdoFlag(e.task, context.model.card.typeId));\r\n }\r\n }\r\n\r\n private static HideRegistrationUdoFlag(task: TaskViewModel, cardTypeID: string) {\r\n if (task.taskModel.cardType.id !== ChTaskTypes.PkRdndUdoTaskTypeID) {\r\n return;\r\n }\r\n const flagControl = task.taskModel.controls.get('UDORegistration');\r\n if (flagControl) {\r\n if (cardTypeID === PkCardTypes.RdndTypeID) {\r\n flagControl.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n flagControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n\r\n public static FillRegionCityAndProject(context: ICardUIExtensionContext) {\r\n let pkrpSection = context.model.card.sections.tryGet('PkRdProperties');\r\n if (pkrpSection == null) return;\r\n pkrpSection.fields.fieldChanged.add(async e => {\r\n if (pkrpSection == null) return;\r\n if (e.fieldName === \"ObjectID\") {\r\n if (!e.fieldValue) {\r\n pkrpSection.fields.set(\"RegionID\", null);\r\n pkrpSection.fields.set(\"RegionName\", null);\r\n pkrpSection.fields.set(\"CityID\", null);\r\n pkrpSection.fields.set(\"CityName\", null);\r\n pkrpSection.fields.set(\"ProjectID\", null);\r\n pkrpSection.fields.set(\"ProjectName\", null);\r\n pkrpSection.fields.set(\"ObjectName\", null);\r\n return;\r\n }\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRdDivisionRoleProperties;\r\n request.info[\"FieldID\"] = createTypedField(e.fieldValue, DotNetType.Guid);\r\n request.info[\"FieldRoleType\"] = createTypedField(0, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n pkrpSection.fields.set(\"RegionID\", null);\r\n pkrpSection.fields.set(\"RegionName\", null);\r\n pkrpSection.fields.set(\"CityID\", null);\r\n pkrpSection.fields.set(\"CityName\", null);\r\n pkrpSection.fields.set(\"ProjectID\", null);\r\n pkrpSection.fields.set(\"ProjectName\", null);\r\n pkrpSection.fields.set(\"ObjectID\", null);\r\n pkrpSection.fields.set(\"ObjectName\", null);\r\n return;\r\n }\r\n\r\n CdCommonHelper.SetFieldToSection(pkrpSection, \"RegionID\", response.info.RegionID);\r\n CdCommonHelper.SetFieldToSection(pkrpSection, \"RegionName\", response.info.RegionName);\r\n CdCommonHelper.SetFieldToSection(pkrpSection, \"CityID\", response.info.CityID);\r\n CdCommonHelper.SetFieldToSection(pkrpSection, \"CityName\", response.info.CityName);\r\n CdCommonHelper.SetFieldToSection(pkrpSection, \"ProjectID\", response.info.ProjectID);\r\n CdCommonHelper.SetFieldToSection(pkrpSection, \"ProjectName\", response.info.ProjectName);\r\n }\r\n });\r\n }\r\n\r\n public static SetContractReadOnly(context: ICardUIExtensionContext) {\r\n let contractControl = context.model.controls.get('LetterContractControl');\r\n if (contractControl == null) return;\r\n\r\n let pklciSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pklciSection == null) return;\r\n\r\n // Получим названия организации отправителя и плательщика\r\n let kCKName = pklciSection.fields.get(\"PartnerKCKName\");\r\n let payerName = pklciSection.fields.get(\"PayerName\");\r\n let pkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n \r\n if(pkDocumentCommonInfo!=null)\r\n {\r\n let stateId = pkDocumentCommonInfo.fields.get(\"StateID\");\r\n \r\n if (PkCommonHelper.IsNullOrWhitespace(kCKName) || PkCommonHelper.IsNullOrWhitespace(payerName) || (stateId!=null && (stateId == CdDocStates.RegisteredLC.id || stateId == CdDocStates.UploadedToTUS.id))) {\r\n contractControl.isReadOnly = true;\r\n }\r\n else {\r\n contractControl.isReadOnly = false;\r\n }\r\n }\r\n }\r\n\r\n public static EditContractForPkLetterCredit(context: ICardUIExtensionContext) {\r\n let pklciSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pklciSection == null) return;\r\n pklciSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"ContractID\") {\r\n\r\n ArUIHelper.FillArticlesIDP(context, e.fieldValue, true); \r\n let kindID = pklciSection?.fields.get(\"KindID\");\r\n if (kindID != null && kindID == PkLetterCreditKinds.PaymentForServicesID) {\r\n ArHelper.FillArticlesOHR(context, e.fieldValue);\r\n }\r\n\r\n if (kindID != null && kindID == PkLetterCreditKinds.ReturnToBuyerID) {\r\n ChUIHelper.InserObjectByCustomerAsync(context, e.fieldName, e.fieldValue);\r\n }\r\n\r\n \r\n }\r\n });\r\n }\r\n\r\n public static ClearFieldsWhenSomeOtherFieldsChanged(context: ICardUIExtensionContext) {\r\n let pklciSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pklciSection == null) return;\r\n pklciSection.fields.fieldChanged.add(e => {\r\n if (pklciSection == null) return;\r\n if (e.fieldName === \"PayerName\" || e.fieldName === \"PartnerKCKName\") {\r\n pklciSection.fields.set(\"ContractID\", null);\r\n pklciSection.fields.set(\"ContractName\", null);\r\n\r\n let contractControl = context.model.controls.get('LetterContractControl');\r\n if (contractControl == null) return;\r\n let value = e.fieldValue;\r\n let value2;\r\n if (e.fieldName === \"PayerName\") {\r\n value2 = pklciSection.fields.get(\"PartnerKCKName\");\r\n }\r\n else {\r\n value2 = pklciSection.fields.get(\"PayerName\");\r\n }\r\n\r\n if (PkCommonHelper.IsNullOrWhitespace(value) || PkCommonHelper.IsNullOrWhitespace(value2)) {\r\n contractControl.isReadOnly = true;\r\n }\r\n else {\r\n contractControl.isReadOnly = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static ChangesInUIWhenKindChanging(context: ICardUIExtensionContext,tabs: IFormViewModel[]) {\r\n let pklciSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pklciSection == null) return;\r\n pklciSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"KindID\") {\r\n if (e.fieldValue != PkLetterCreditKinds.PaymentForServicesID) {\r\n // Очищаем поля (статьи ИДП)\r\n let articlesVirtSection = context.model.card.sections.tryGet('ArArticleOHRListVirtual');\r\n if (articlesVirtSection != null) {\r\n for (let i = articlesVirtSection.rows.length - 1; i >= 0; i--) {\r\n if (articlesVirtSection.rows[i].state === CardRowState.None) {\r\n articlesVirtSection.rows[i].state = CardRowState.Deleted;\r\n }\r\n else if (articlesVirtSection.rows[i].state === CardRowState.Inserted) {\r\n articlesVirtSection.rows.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n // Если вид документа \"Возврат покупателю\"\r\n if (e.fieldValue === PkLetterCreditKinds.ReturnToBuyerID) {\r\n // Очищаем поля (статьи ИДП)\r\n let articlesVirtSection = context.model.card.sections.tryGet('ArArticleIDPListVirtual');\r\n if (articlesVirtSection != null) {\r\n for (let i = articlesVirtSection.rows.length - 1; i >= 0; i--) {\r\n if (articlesVirtSection.rows[i].state === CardRowState.None) {\r\n articlesVirtSection.rows[i].state = CardRowState.Deleted;\r\n }\r\n else if (articlesVirtSection.rows[i].state === CardRowState.Inserted) {\r\n articlesVirtSection.rows.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n let articlesSection = context.model.card.sections.tryGet('ArArticleIDPList');\r\n if (articlesSection != null) {\r\n for (let i = articlesSection.rows.length - 1; i >= 0; i--) {\r\n if (articlesSection.rows[i].state === CardRowState.None) {\r\n articlesSection.rows[i].state = CardRowState.Deleted;\r\n }\r\n else if (articlesSection.rows[i].state === CardRowState.Inserted) {\r\n articlesSection.rows.splice(i, 1);\r\n }\r\n }\r\n }\r\n let pkLetterCreditInfo = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pkLetterCreditInfo != null)\r\n {\r\n pkLetterCreditInfo.fields.set(\"Prepayment\",createTypedField(false,DotNetType.Boolean));\r\n pkLetterCreditInfo.fields.set(\"PaymentTypeID\", null);\r\n pkLetterCreditInfo.fields.set(\"PaymentTypeName\", null);\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.PkGetExecutionDateByDocKind;\r\n request.info[\"IsPlannedPaymentDateForRefund\"] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build()); \r\n if (response.validationResult.isSuccessful && response.info != null && response.info.PlannedPaymentDate && !PkCommonHelper.IsNullOrWhitespace(response.info.PlannedPaymentDate.$value)) { \r\n if (pkLetterCreditInfo != null) \r\n pkLetterCreditInfo.fields.set('PlannedPaymentDate', response.info.PlannedPaymentDate.$value, DotNetType.DateTime);\r\n } \r\n }\r\n else {\r\n let pkLetterCreditInfo = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pkLetterCreditInfo != null)\r\n {\r\n pkLetterCreditInfo.fields.set(\"Prepayment\",createTypedField(true,DotNetType.Boolean));\r\n }\r\n }\r\n\r\n // Скрытие/отображение полей в зависимости от вида\r\n ChUIHelper.ChangingFieldsByLetterCreditKind(context, e.fieldValue, tabs);\r\n }\r\n });\r\n }\r\n\r\n private static ChangingFieldsByLetterCreditKind(context: ICardUIExtensionContext, kindID, tabs: IFormViewModel[]) {\r\n // Если вид документа \"Возврат покупателю\"\r\n if (kindID === PkLetterCreditKinds.ReturnToBuyerID) {\r\n // \"Аванс по договору подряда\"\r\n let prepaymentControl = context.model.controls.get('Prepayment');\r\n if (prepaymentControl != null) prepaymentControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Период поставки с\"\r\n let deliveryPeriodFromControl = context.model.controls.get('DeliveryPeriodFrom');\r\n if (deliveryPeriodFromControl != null) deliveryPeriodFromControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"По\"\r\n let deliveryPeriodToControl = context.model.controls.get('DeliveryPeriodTo');\r\n if (deliveryPeriodToControl != null) deliveryPeriodToControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Тип оплаты поставщику\"\r\n let paymentTypeControl = context.model.controls.get('PaymentType');\r\n if (paymentTypeControl != null) paymentTypeControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Номенклатурная группа\"\r\n let nomenclatureControl = context.model.controls.get('Nomenclature');\r\n if (nomenclatureControl != null) nomenclatureControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Иные платежи в бюджет\"\r\n let otherPaymentsControl = context.model.controls.get('OtherPayments');\r\n if (otherPaymentsControl != null) otherPaymentsControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Требуется финансирование\"\r\n let isFundingRequiredControl = context.model.controls.get('IsFundingRequired');\r\n if (isFundingRequiredControl != null) isFundingRequiredControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Срок авансирования\"\r\n let prepaymentTermControl = context.model.controls.get('PrepaymentTerm');\r\n if (prepaymentTermControl != null) prepaymentTermControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // Блок \"Статьи ИДП\"\r\n let articlesIDPBlock = context.model.blocks.get('ArticlesIDP');\r\n if (articlesIDPBlock != null) articlesIDPBlock.blockVisibility = Visibility.Collapsed;\r\n\r\n let ArticlesIDPControl = context.model.controls.get('ArticlesIDP');\r\n if (ArticlesIDPControl != null) ArticlesIDPControl.controlVisibility = Visibility.Collapsed;\r\n\r\n let ArticlesIDVirtualPControl = context.model.controls.get('ArticlesIDPVirtual');\r\n if (ArticlesIDVirtualPControl != null) ArticlesIDVirtualPControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Организация отправителя письма\"\r\n let contractorKCKControl = context.model.controls.get('ContractorKCKControl');\r\n if (contractorKCKControl != null) contractorKCKControl.caption = \"Основной покупатель\";\r\n\r\n // \"Плательщик\"\r\n let payerControl = context.model.controls.get('Payer');\r\n if (payerControl != null) payerControl.caption = \"Организация отправителя письма\";\r\n\r\n // \"Вид возврата\"\r\n let refundType = context.model.controls.get('RefundType');\r\n if (refundType != null) refundType.controlVisibility = Visibility.Visible;\r\n }\r\n else\r\n {\r\n // \"Вид возврата\"\r\n let refundType = context.model.controls.get('RefundType');\r\n if (refundType != null) refundType.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n if (kindID === PkLetterCreditKinds.PaymentForServicesID)\r\n {\r\n let tabscontrol = CdUIHelper.GetUIControl(context, \"ArticlesTabs\") as TabControlViewModel;\r\n (tabscontrol.tabs as IFormViewModel[]).splice(0,2); \r\n (tabscontrol.tabs as IFormViewModel[]).push(tabs[0]); \r\n (tabscontrol.tabs as IFormViewModel[]).push(tabs[1]); \r\n tabscontrol.selectedTab = tabs[1];\r\n }\r\n if (kindID == null || kindID === PkLetterCreditKinds.PaymentToTheSupplierID)\r\n {\r\n let tabscontrol = CdUIHelper.GetUIControl(context, \"ArticlesTabs\") as TabControlViewModel;\r\n (tabscontrol.tabs as IFormViewModel[]).splice(0,2); \r\n (tabscontrol.tabs as IFormViewModel[]).push(tabs[0]); \r\n tabscontrol.selectedTab = tabs[0];\r\n }\r\n // Если вид документа \"Оплата поставщику\"\r\n if (kindID === PkLetterCreditKinds.PaymentToTheSupplierID || kindID === PkLetterCreditKinds.PaymentForServicesID) {\r\n // Скрытие/добавление полей\r\n\r\n // \"Аванс по договору подряда\"\r\n let prepaymentControl = context.model.controls.get('Prepayment');\r\n if (prepaymentControl != null) \r\n {\r\n prepaymentControl.controlVisibility = Visibility.Visible;\r\n if(kindID === PkLetterCreditKinds.PaymentForServicesID)\r\n {\r\n prepaymentControl.caption=\"Аванс по договору\";\r\n }else\r\n {\r\n prepaymentControl.caption=\"Аванс по договору подряда\";\r\n }\r\n }\r\n\r\n // \"Период поставки с\"\r\n let deliveryPeriodFromControl = context.model.controls.get('DeliveryPeriodFrom');\r\n if (deliveryPeriodFromControl != null) deliveryPeriodFromControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"По\"\r\n let deliveryPeriodToControl = context.model.controls.get('DeliveryPeriodTo');\r\n if (deliveryPeriodToControl != null) deliveryPeriodToControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Тип оплаты поставщику\"\r\n let paymentTypeControl = context.model.controls.get('PaymentType');\r\n if (paymentTypeControl != null) paymentTypeControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Номенклатурная группа\"\r\n let nomenclatureControl = context.model.controls.get('Nomenclature');\r\n if (nomenclatureControl != null) nomenclatureControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Иные платежи в бюджет\"\r\n let otherPaymentsControl = context.model.controls.get('OtherPayments');\r\n if (otherPaymentsControl != null) otherPaymentsControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Требуется финансирование\"\r\n let isFundingRequiredControl = context.model.controls.get('IsFundingRequired');\r\n if (isFundingRequiredControl != null) isFundingRequiredControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Срок авансирования\"\r\n let prepaymentTermControl = context.model.controls.get('PrepaymentTerm');\r\n if (prepaymentTermControl != null) prepaymentTermControl.controlVisibility = Visibility.Visible;\r\n\r\n // Блок \"Статьи ИДП\"\r\n let articlesIDPBlock = context.model.blocks.get('ArticlesIDP');\r\n if (articlesIDPBlock != null) articlesIDPBlock.blockVisibility = Visibility.Visible;\r\n\r\n let articlesIDPControl = context.model.controls.get('ArticlesIDP');\r\n if (articlesIDPControl != null) articlesIDPControl.controlVisibility = Visibility.Collapsed;\r\n\r\n let articlesIDVirtualPControl = context.model.controls.get('ArticlesIDPVirtual');\r\n if (articlesIDVirtualPControl != null) articlesIDVirtualPControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Организация отправителя письма\"\r\n let contractorKCKControl = context.model.controls.get('ContractorKCKControl');\r\n if (contractorKCKControl != null) contractorKCKControl.caption = \"Организация отправителя письма\";\r\n\r\n // \"Плательщик\"\r\n let payerControl = context.model.controls.get('Payer');\r\n if (payerControl != null) payerControl.caption = \"Плательщик\";\r\n }\r\n }\r\n /// \r\n /// Изменение значений полей от вида входящего документа\r\n /// \r\n private static async ChangingFieldsValuesByIncomingDocumentKind(context: ICardUIExtensionContext, kindID) {\r\n // Если вид документа \"Возврат денежных средств\"\r\n if (kindID != null\r\n && kindID.toLowerCase() === PkIncomingKinds.RefundID.toLowerCase()) {\r\n\r\n // Заполнение номер исходящего для возвратов\r\n let pklciSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pklciSection != null) \r\n pklciSection.fields.set('IncomingNumber', createTypedField(\"б/н\",DotNetType.String));\r\n\r\n // При выборе вида документа \"Возврат денежных средств\" проставлять флаг \"Обращение клиента/контрагента\"\r\n let pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pkiiSection != null)\r\n pkiiSection.fields.set('CustomerRequest', createTypedField(true, DotNetType.Boolean));\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.PkGetExecutionDateByDocKind;\r\n request.info[\"IsPlannedPaymentDateForRefund\"] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build()); \r\n if (response.validationResult.isSuccessful && response.info != null && response.info.PlannedPaymentDate && !PkCommonHelper.IsNullOrWhitespace(response.info.PlannedPaymentDate.$value)) { \r\n if (pkiiSection != null) \r\n pkiiSection.fields.set('PlannedPaymentDate', response.info.PlannedPaymentDate.$value, DotNetType.DateTime);\r\n } \r\n }\r\n if (kindID != null\r\n && kindID.toLowerCase() === PkIncomingKinds.TerminationOfDDUID.toLowerCase()) {\r\n let pklciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (pklciSection != null) \r\n pklciSection.fields.set('Subject', createTypedField(\"Одностороннее расторжение ДДУ\",DotNetType.String));\r\n \r\n let pkdciSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n \r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.PkGetExecutionDateByDocKind;\r\n request.info[\"IsDateForDDY\"] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build()); \r\n if (response.validationResult.isSuccessful && response.info != null && response.info.DateForExecution && !PkCommonHelper.IsNullOrWhitespace(response.info.DateForExecution.$value)) { \r\n if (pkdciSection != null) \r\n pkdciSection.fields.set('ExecutionDate', response.info.DateForExecution.$value, DotNetType.String);\r\n }\r\n \r\n let pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pkiiSection != null)\r\n {\r\n pkiiSection.fields.set('TerminationInitiativeID', createTypedField(0, DotNetType.Int32));\r\n pkiiSection.fields.set('TerminationInitiativeName', createTypedField(\"Со стороны клиента\", DotNetType.String));\r\n }\r\n \r\n }\r\n if (kindID != null\r\n && kindID.toLowerCase() === PkIncomingKinds.TerminationOfPDKPID.toLowerCase()) {\r\n let pklciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (pklciSection != null) \r\n pklciSection.fields.set('Subject', createTypedField(\"Одностороннее расторжение ПДКП\",DotNetType.String));\r\n \r\n let pkdciSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n \r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.PkGetExecutionDateByDocKind;\r\n request.info[\"IsDateForPDKP\"] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build()); \r\n if (response.validationResult.isSuccessful && response.info != null && response.info.DateForExecution && !PkCommonHelper.IsNullOrWhitespace(response.info.DateForExecution.$value)) { \r\n if (pkdciSection != null) \r\n pkdciSection.fields.set('ExecutionDate', response.info.DateForExecution.$value, DotNetType.String);\r\n }\r\n \r\n let pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pkiiSection != null)\r\n {\r\n pkiiSection.fields.set('TerminationInitiativeID', createTypedField(0, DotNetType.Int32));\r\n pkiiSection.fields.set('TerminationInitiativeName', createTypedField(\"Со стороны клиента\", DotNetType.String));\r\n }\r\n \r\n }\r\n if (kindID != null\r\n && kindID == PkIncomingKinds.WarrantyServiceID.toLocaleLowerCase()){\r\n let pkadbblSection = context.model.card.sections.tryGet('PkAddresseesByBelonging');\r\n if (!pkadbblSection) return;\r\n if (pkadbblSection.rows.some(x => x.state != CardRowState.Deleted))\r\n {\r\n if (!pkadbblSection.rows.some(x => x.state != CardRowState.Deleted \r\n && x.tryGet(\"AddresseeByBelongingID\") == ChStaticRoles.PkCoordinatorOGO ))\r\n {\r\n const dialogResult = await showConfirm(\"Для данного вида документа адресатом по принадлежности должен быть \\\"Координатор_ОГО\\\". Заменить адресата по принадлежности?\");\r\n if (!dialogResult){\r\n return;\r\n }\r\n }else{\r\n return;\r\n }\r\n }\r\n \r\n\r\n const clear = (name: string) => {\r\n const rows = context.model.card.sections.get(name)!.rows;\r\n const removeRows = rows.filter(x => x.state === CardRowState.Inserted);\r\n for (let row of removeRows) {\r\n rows.remove(row);\r\n }\r\n for (let row of rows) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n };\r\n \r\n clear('PkAddresseesByBelonging');\r\n\r\n let row = context.model.card.sections.tryGet('PkAddresseesByBelonging')?.rows.add();\r\n if(!row) return;\r\n row.rowId = Guid.newGuid();\r\n row.set(\"AddresseeByBelongingID\", createTypedField(ChStaticRoles.PkCoordinatorOGO, DotNetType.Guid));\r\n row.set(\"AddresseeByBelongingName\", createTypedField(ChStaticRoles.PkCoordinatorOGOName, DotNetType.String));\r\n row.set(\"Order\", createTypedField(0, DotNetType.Int32)); \r\n\r\n row.state = CardRowState.Inserted;\r\n }\r\n }\r\n /// \r\n /// Скрытие/отображение полей в зависимости от вида входящего документа\r\n /// \r\n private static ChangingFieldsByIncomingDocumentKind(context: ICardUIExtensionContext, kindID) {\r\n // Если вид документа \"Возврат денежных средств\"\r\n if (kindID != null\r\n && kindID.toLowerCase() === PkIncomingKinds.RefundID.toLowerCase()) {\r\n // \"Адресат по принадлежности\"\r\n let addreseeByBelongingControl = context.model.controls.get('AddreseeByBelongingControl');\r\n if (addreseeByBelongingControl != null) addreseeByBelongingControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Срок исполнения\"\r\n let executionDate = context.model.controls.get('ExecutionDate');\r\n if (executionDate != null) executionDate.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Дело\"\r\n let caseNewControl = context.model.controls.get('CaseNewControl');\r\n if (caseNewControl != null) caseNewControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Дело верхнего уровня\"\r\n let сaseOfTheTopLevel = context.model.controls.get('CaseOfTheTopLevel');\r\n if (сaseOfTheTopLevel != null) сaseOfTheTopLevel.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Адресат\"\r\n let addreseeControl = context.model.controls.get('AddreseeControl');\r\n if (addreseeControl != null) addreseeControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Способ получения\"\r\n let receibingMethodControl = context.model.controls.get('ReceibingMethod');\r\n if (receibingMethodControl != null) receibingMethodControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"В приложении\"\r\n let applicationControl = context.model.controls.get('Application');\r\n if (applicationControl != null) applicationControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"В приложении\"\r\n let descriptionControl = context.model.controls.get('Description');\r\n if (descriptionControl != null) descriptionControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // Блок \"Информация об оплате\"\r\n let paymentInformation = context.model.blocks.get('PaymentInformation');\r\n if (paymentInformation != null) paymentInformation.blockVisibility = Visibility.Visible; \r\n \r\n // \"Вид возврата\"\r\n let refundTypeControl = context.model.controls.get('RefundType');\r\n if (refundTypeControl != null) refundTypeControl.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n // \"Адресат по принадлежности\"\r\n let addreseeByBelongingControl = context.model.controls.get('AddreseeByBelongingControl');\r\n if (addreseeByBelongingControl != null) addreseeByBelongingControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Срок исполнения\"\r\n let executionDate = context.model.controls.get('ExecutionDate');\r\n if (executionDate != null) executionDate.controlVisibility = Visibility.Visible;\r\n\r\n // \"Дело\"\r\n let caseNewControl = context.model.controls.get('CaseNewControl');\r\n if (caseNewControl != null) caseNewControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Дело верхнего уровня\"\r\n let сaseOfTheTopLevel = context.model.controls.get('CaseOfTheTopLevel');\r\n if (сaseOfTheTopLevel != null) сaseOfTheTopLevel.controlVisibility = Visibility.Visible;\r\n\r\n // \"Адресат\"\r\n let addreseeControl = context.model.controls.get('AddreseeControl');\r\n if (addreseeControl != null) addreseeControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Способ получения\"\r\n let receibingMethodControl = context.model.controls.get('ReceibingMethod');\r\n if (receibingMethodControl != null) receibingMethodControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"В приложении\"\r\n let applicationControl = context.model.controls.get('Application');\r\n if (applicationControl != null) applicationControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"В приложении\"\r\n let descriptionControl = context.model.controls.get('Description');\r\n if (descriptionControl != null) descriptionControl.controlVisibility = Visibility.Visible;\r\n\r\n // Блок \"Информация об оплате\"\r\n let paymentInformation = context.model.blocks.get('PaymentInformation');\r\n if (paymentInformation != null) paymentInformation.blockVisibility = Visibility.Collapsed;\r\n \r\n // \"Подтип\"\r\n let refundTypeControl = context.model.controls.get('RefundType');\r\n if (refundTypeControl != null) refundTypeControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n if (kindID != null\r\n && (Guid.equals(kindID, PkIncomingKinds.RecalculationID) || Guid.equals(kindID, PkIncomingKinds.FinishingBuilderID) || Guid.equals(kindID, PkIncomingKinds.PropertyID) || Guid.equals(kindID, PkIncomingKinds.RepairPaymentID) || Guid.equals(kindID, PkIncomingKinds.ViolationOfTheTermID))) {\r\n \r\n let CulpritIdentified = context.model.controls.get('CulpritIdentified');\r\n if (CulpritIdentified != null) CulpritIdentified.controlVisibility = Visibility.Visible;\r\n \r\n let AmountIsKnown = context.model.controls.get('AmountIsKnown');\r\n if (AmountIsKnown != null) AmountIsKnown.controlVisibility = Visibility.Visible; \r\n \r\n let IsAmountAgreed = context.model.controls.get('IsAmountAgreed');\r\n if (IsAmountAgreed != null) IsAmountAgreed.controlVisibility = Visibility.Visible;\r\n \r\n let AgreedAmount = context.model.controls.get('AgreedAmount');\r\n if (AgreedAmount != null) AgreedAmount.controlVisibility = Visibility.Visible;\r\n\r\n let AgreedAmountOGO = context.model.controls.get('AgreedAmountOGO');\r\n if (AgreedAmountOGO != null) AgreedAmountOGO.controlVisibility = Visibility.Visible;\r\n \r\n }\r\n else {\r\n let CulpritIdentified = context.model.controls.get('CulpritIdentified');\r\n if (CulpritIdentified != null) CulpritIdentified.controlVisibility = Visibility.Collapsed;\r\n \r\n let AmountIsKnown = context.model.controls.get('AmountIsKnown');\r\n if (AmountIsKnown != null) AmountIsKnown.controlVisibility = Visibility.Collapsed; \r\n \r\n let IsAmountAgreed = context.model.controls.get('IsAmountAgreed');\r\n if (IsAmountAgreed != null) IsAmountAgreed.controlVisibility = Visibility.Collapsed;\r\n \r\n let AgreedAmount = context.model.controls.get('AgreedAmount');\r\n if (AgreedAmount != null) AgreedAmount.controlVisibility = Visibility.Collapsed;\r\n\r\n let AgreedAmountOGO = context.model.controls.get('AgreedAmountOGO');\r\n if (AgreedAmountOGO != null) AgreedAmountOGO.controlVisibility = Visibility.Collapsed;\r\n }\r\n if (kindID != null\r\n && Guid.equals(kindID, PkIncomingKinds.RequireID)) {\r\n // \"Претензия: финансовая\"\r\n let isFinancialControl = context.model.controls.get('IsFinancial');\r\n if (isFinancialControl != null) {\r\n isFinancialControl.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n else {\r\n // \"Претензия: финансовая\"\r\n let isFinancialControl = context.model.controls.get('IsFinancial');\r\n if (isFinancialControl != null) {\r\n isFinancialControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n if (kindID != null\r\n && (kindID.toLowerCase() === PkIncomingKinds.TerminationOfDDUID.toLowerCase() || kindID.toLowerCase() === PkIncomingKinds.TerminationOfPDKPID.toLowerCase()))\r\n {\r\n let TerminationBlock = context.model.blocks.get('TerminationBlock');\r\n if (TerminationBlock != null) TerminationBlock.blockVisibility = Visibility.Visible;\r\n\r\n // \"Адресат\"\r\n let addreseeControl = context.model.controls.get('AddreseeControl');\r\n if (addreseeControl != null) addreseeControl.controlVisibility = Visibility.Collapsed; \r\n \r\n // \"Адресат по принадлежности\"\r\n let addreseeByBelongingControl = context.model.controls.get('AddreseeByBelongingControl');\r\n if (addreseeByBelongingControl != null) addreseeByBelongingControl.controlVisibility = Visibility.Collapsed;\r\n\r\n if(kindID.toLowerCase() === PkIncomingKinds.TerminationOfPDKPID.toLowerCase())\r\n {\r\n let ComentOSS = context.model.controls.get('ComentOSS');\r\n if (ComentOSS != null) ComentOSS.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n else\r\n { \r\n let TerminationBlock = context.model.blocks.get('TerminationBlock');\r\n if (TerminationBlock != null) TerminationBlock.blockVisibility = Visibility.Collapsed;\r\n } \r\n }\r\n\r\n /// \r\n /// Скрытие/отображение полей в зависимости от Обращения контрагента/клиента\r\n /// \r\n private static ChangingFieldsByIncomingDocumentCustomerRequest(context: ICardUIExtensionContext, customerRequest) {\r\n // Если Обращение контрагента/клиента\r\n if (customerRequest != null\r\n && customerRequest === true) {\r\n // \"Отправитель\"\r\n let sender = context.model.controls.get('Sender');\r\n if (sender != null) sender.controlVisibility = Visibility.Visible;\r\n\r\n // \"Организация\"\r\n let organization = context.model.controls.get('Organization');\r\n if (organization != null) organization.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Застройщик\"\r\n let incomingPayer = context.model.controls.get('IncomingPayer');\r\n if (incomingPayer != null) incomingPayer.controlVisibility = Visibility.Visible;\r\n\r\n // \"Сделка\"\r\n let deal = context.model.controls.get('Deal');\r\n if (deal != null) deal.controlVisibility = Visibility.Visible;\r\n\r\n // \"Договор\"\r\n let incomingContractControl = context.model.controls.get('IncomingContractControl');\r\n if (incomingContractControl != null) incomingContractControl.controlVisibility = Visibility.Visible;\r\n\r\n // \"Организация\"\r\n let canAddPartnersControl = context.model.controls.get('CanAddPartnersControl');\r\n if (canAddPartnersControl != null) canAddPartnersControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n else {\r\n // \"Отправитель\"\r\n let sender = context.model.controls.get('Sender');\r\n if (sender != null) sender.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Организация\"\r\n let organization = context.model.controls.get('Organization');\r\n if (organization != null) organization.controlVisibility = Visibility.Visible;\r\n\r\n // \"Застройщик\"\r\n let incomingPayer = context.model.controls.get('IncomingPayer');\r\n if (incomingPayer != null) incomingPayer.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Сделка\"\r\n let deal = context.model.controls.get('Deal');\r\n if (deal != null) deal.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Договор\"\r\n let incomingContractControl = context.model.controls.get('IncomingContractControl');\r\n if (incomingContractControl != null) incomingContractControl.controlVisibility = Visibility.Collapsed;\r\n\r\n // \"Организация\"\r\n let canAddPartnersControl = context.model.controls.get('CanAddPartnersControl');\r\n if (canAddPartnersControl != null) canAddPartnersControl.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n\r\n /// \r\n /// Скрытие/отображение полей в зависимости от Обращения контрагента/клиента\r\n /// \r\n private static ChangingFieldsByOutgoingDocumentCustomerRequest(context: ICardUIExtensionContext, customerRequest, typeID) { \r\n // Если Обращение контрагента/клиента\r\n if (customerRequest != null\r\n && customerRequest === true) {\r\n // \"Получатель\"\r\n let receiverKCKControl = context.model.controls.get('ReceiverKCKControl');\r\n if (receiverKCKControl != null && typeID !== PkOutgoingKinds.ClaimId) receiverKCKControl.controlVisibility = Visibility.Visible;\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null && typeID == PkOutgoingKinds.ClaimId) \r\n {\r\n partnerCulpritControl.caption = \"Получатель-виновник\";\r\n partnerCulpritControl.controlVisibility = Visibility.Visible;\r\n }\r\n // \"Email Получателя\"\r\n /* let emailReceiverControl = context.model.controls.get('EmailReceiver');\r\n if (emailReceiverControl != null) emailReceiverControl.controlVisibility = Visibility.Visible; */\r\n // \"Получатель\" - copy\r\n let receiverKCKCopyControl = context.model.controls.get('ReceiverKCKCopyControl');\r\n if (receiverKCKCopyControl != null) receiverKCKCopyControl.controlVisibility = Visibility.Visible;\r\n // \"Email Получателя\" - copy\r\n /* let emailReceiverCopyControl = context.model.controls.get('EmailReceiverCopy');\r\n if (emailReceiverCopyControl != null) emailReceiverCopyControl.controlVisibility = Visibility.Visible; */\r\n\r\n let canAddPartnersControl = context.model.controls.get('CanAddPartnersControl');\r\n if (canAddPartnersControl != null) canAddPartnersControl.controlVisibility = Visibility.Collapsed;\r\n let canAddPartnersCopyControl = context.model.controls.get('CanAddPartnersCopyControl');\r\n if (canAddPartnersCopyControl != null) canAddPartnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnersControl = context.model.controls.get('PartnersControl');\r\n if (partnersControl != null) partnersControl.controlVisibility = Visibility.Collapsed;\r\n let partnersCopyControl = context.model.controls.get('PartnersCopyControl');\r\n if (partnersCopyControl != null) partnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnersKCKControl = context.model.controls.get('PartnersKCKControl');\r\n if (partnersKCKControl != null) partnersKCKControl.controlVisibility = Visibility.Collapsed;\r\n let partnersKCKCopyControl = context.model.controls.get('PartnersKCKCopyControl');\r\n if (partnersKCKCopyControl != null) partnersKCKCopyControl.controlVisibility = Visibility.Collapsed;\r\n /*let emailPartnersCopyControl = context.model.controls.get('EmailPartnersCopy');\r\n if (emailPartnersCopyControl != null) emailPartnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let emailPartnersControl = context.model.controls.get('EmailPartners');\r\n if (emailPartnersControl != null) emailPartnersControl.controlVisibility = Visibility.Collapsed; */\r\n }\r\n else {\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null) \r\n {\r\n partnerCulpritControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n // \"Получатель\"\r\n let receiverKCKControl = context.model.controls.get('ReceiverKCKControl');\r\n if (receiverKCKControl != null) receiverKCKControl.controlVisibility = Visibility.Collapsed;\r\n // \"Получатель\" - copy\r\n let receiverKCKCopyControl = context.model.controls.get('ReceiverKCKCopyControl');\r\n if (receiverKCKCopyControl != null) receiverKCKCopyControl.controlVisibility = Visibility.Collapsed;\r\n /* let emailReceiverControl = context.model.controls.get('EmailReceiver');\r\n if (emailReceiverControl != null) emailReceiverControl.controlVisibility = Visibility.Collapsed;\r\n let emailReceiverCopyControl = context.model.controls.get('EmailReceiverCopy');\r\n if (emailReceiverCopyControl != null) emailReceiverCopyControl.controlVisibility = Visibility.Collapsed; */\r\n // Видимость полей\r\n switch (typeID) {\r\n // Уведомление о результатах тендера\r\n case PkOutgoingKinds.NotificationOfTenderResultsId:\r\n {\r\n let canAddPartnersControl = context.model.controls.get('CanAddPartnersControl');\r\n if (canAddPartnersControl != null) canAddPartnersControl.controlVisibility = Visibility.Collapsed;\r\n let canAddPartnersCopyControl = context.model.controls.get('CanAddPartnersCopyControl');\r\n if (canAddPartnersCopyControl != null) canAddPartnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnersControl = context.model.controls.get('PartnersControl');\r\n if (partnersControl != null) partnersControl.controlVisibility = Visibility.Collapsed;\r\n let partnersCopyControl = context.model.controls.get('PartnersCopyControl');\r\n if (partnersCopyControl != null) partnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n\r\n let partnersKCKControl = context.model.controls.get('PartnersKCKControl');\r\n if (partnersKCKControl != null) partnersKCKControl.controlVisibility = Visibility.Visible;\r\n let partnersKCKCopyControl = context.model.controls.get('PartnersKCKCopyControl');\r\n if (partnersKCKCopyControl != null) partnersKCKCopyControl.controlVisibility = Visibility.Visible;\r\n \r\n }\r\n case PkOutgoingKinds.ClaimId: \r\n {\r\n let pkoSection = context.card.sections.tryGet(\"PkOutgoing\");\r\n let claimSubTypeControl = context.model.controls.get('ClaimSubTypeControl');\r\n \r\n if (pkoSection != null && claimSubTypeControl!= null)\r\n {\r\n let сlaimTypeID = pkoSection.fields.tryGet('ClaimTypeID');\r\n if (сlaimTypeID == PkOutgoinClaimType.FinesFromTheQualityDepartment)\r\n {\r\n claimSubTypeControl.controlVisibility = Visibility.Visible ;\r\n }\r\n else \r\n {\r\n claimSubTypeControl.controlVisibility = Visibility.Collapsed ;\r\n }\r\n }\r\n\r\n let canAddPartnersControl = context.model.controls.get('CanAddPartnersControl');\r\n if (canAddPartnersControl != null) canAddPartnersControl.controlVisibility = Visibility.Collapsed;\r\n let canAddPartnersCopyControl = context.model.controls.get('CanAddPartnersCopyControl');\r\n if (canAddPartnersCopyControl != null) canAddPartnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnersControl = context.model.controls.get('PartnersControl');\r\n if (partnersControl != null) partnersControl.controlVisibility = Visibility.Collapsed;\r\n let partnersCopyControl = context.model.controls.get('PartnersCopyControl');\r\n if (partnersCopyControl != null) partnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null) \r\n {\r\n partnerCulpritControl.caption = \"Организация-виновник\";\r\n partnerCulpritControl.controlVisibility = Visibility.Visible;\r\n }\r\n let partnersKCKControl = context.model.controls.get('PartnersKCKControl');\r\n if (partnersKCKControl != null) partnersKCKControl.controlVisibility = Visibility.Collapsed;\r\n let partnersKCKCopyControl = context.model.controls.get('PartnersKCKCopyControl');\r\n if (partnersKCKCopyControl != null) partnersKCKCopyControl.controlVisibility = Visibility.Visible;\r\n }\r\n break;\r\n // Ответ на обращение физ. лица или пусто\r\n default:\r\n {\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null) \r\n {\r\n partnerCulpritControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n let claimSubTypeControl = context.model.controls.get('ClaimSubTypeControl');\r\n if (claimSubTypeControl!= null)\r\n {\r\n claimSubTypeControl.controlVisibility = Visibility.Collapsed ;\r\n }\r\n ChUIHelper.CanAddPartnerPermission(context);\r\n let partnersKCKControl = context.model.controls.get('PartnersKCKControl');\r\n if (partnersKCKControl != null) partnersKCKControl.controlVisibility = Visibility.Collapsed;\r\n let partnersKCKCopyControl = context.model.controls.get('PartnersKCKCopyControl');\r\n if (partnersKCKCopyControl != null) partnersKCKCopyControl.controlVisibility = Visibility.Collapsed;\r\n /*let emailPartnersCopyControl = context.model.controls.get('EmailPartnersCopy');\r\n if (emailPartnersCopyControl != null) emailPartnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let emailPartnersControl = context.model.controls.get('EmailPartners');\r\n if (emailPartnersControl != null) emailPartnersControl.controlVisibility = Visibility.Collapsed; */\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n public static async InsertADealByAContract(context: ICardUIExtensionContext, fieldValue) {\r\n \r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.GetCrmDeal;\r\n request.info[\"Key\"] = \"contract\";\r\n request.info[\"ContractID\"] = fieldValue;\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info != null && response.info.MdsDealID != null) {\r\n let pkIncomingInfoSection = context.card.sections.tryGet('PkIncomingInfo');\r\n if (pkIncomingInfoSection != null){ \r\n pkIncomingInfoSection.fields.set(\"DealID\", response.info.MdsDealID.$value, DotNetType.Guid); \r\n pkIncomingInfoSection.fields.set(\"DealNumber\", response.info.MdsDealNumber); \r\n pkIncomingInfoSection.fields.set(\"DealGuid1C\", response.info.MdsDealGuid1c);\r\n }\r\n\r\n let pkClientDocumentInfoSection = context.model.card.sections.tryGet(\"PkClientDocumentInfo\");\r\n if (pkClientDocumentInfoSection != null){\r\n pkClientDocumentInfoSection.fields.set(\"DealID\", response.info.MdsDealID.$value, DotNetType.Guid); \r\n pkClientDocumentInfoSection.fields.set(\"DealNumber\", response.info.MdsDealNumber); \r\n pkClientDocumentInfoSection.fields.set(\"DealGuid1C\", response.info.MdsDealGuid1c);\r\n }\r\n }\r\n }\r\n\r\n\r\n private static ClearSenderFields(context: ICardUIExtensionContext) {\r\n let pkIncomingInfoSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n let pkDocumentCommonInfoSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pkIncomingInfoSection != null) {\r\n if (pkIncomingInfoSection.fields.tryGet('PartnerKCKExternalID') != null)\r\n pkIncomingInfoSection.fields.set(\"PartnerKCKExternalID\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('PartnerKCKGuidCRM') != null)\r\n pkIncomingInfoSection.fields.set(\"PartnerKCKGuidCRM\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('PartnerKCKID') != null)\r\n pkIncomingInfoSection.fields.set(\"PartnerKCKID\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('PartnerKCKName') != null)\r\n pkIncomingInfoSection.fields.set(\"PartnerKCKName\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('DealID') != null)\r\n pkIncomingInfoSection.fields.set(\"DealID\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('DealNumber') != null)\r\n pkIncomingInfoSection.fields.set(\"DealNumber\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('DealGuid1C') != null)\r\n pkIncomingInfoSection.fields.set(\"DealGuid1C\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('ContractID') != null)\r\n pkIncomingInfoSection.fields.set(\"ContractID\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('ContractNumberVirtual') != null)\r\n pkIncomingInfoSection.fields.set(\"ContractNumberVirtual\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('PayerID') != null)\r\n pkIncomingInfoSection.fields.set(\"PayerID\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('PayerExternalID') != null)\r\n pkIncomingInfoSection.fields.set(\"PayerExternalID\", null);\r\n if (pkIncomingInfoSection.fields.tryGet('PayerName') != null)\r\n pkIncomingInfoSection.fields.set(\"PayerName\", null);\r\n }\r\n if (pkDocumentCommonInfoSection != null) {\r\n if (pkDocumentCommonInfoSection.fields.tryGet('PartnersContacts') != null)\r\n pkDocumentCommonInfoSection.fields.set(\"PartnersContacts\", null);\r\n if (pkDocumentCommonInfoSection.fields.tryGet('CirculationOfIndividuals') != null)\r\n pkDocumentCommonInfoSection.fields.set(\"CirculationOfIndividuals\", null);\r\n }\r\n }\r\n\r\n /*private static ClearOutgoingFields(context: ICardUIExtensionContext) {\r\n let pkChanceryPartnersSection: CardSection | undefined = context.model.card.sections.tryGet('PkChanceryPartners');\r\n if (pkChanceryPartnersSection) {\r\n for (let r = 0; r < pkChanceryPartnersSection.rows.length; r++) {\r\n let row = pkChanceryPartnersSection.rows[r];\r\n if (row.state === CardRowState.Inserted)\r\n pkChanceryPartnersSection!.rows.remove(row);\r\n else\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n let pkChanceryPartnersCopySection: CardSection | undefined = context.model.card.sections.tryGet('PkChanceryPartnersCopy');\r\n if (pkChanceryPartnersCopySection) {\r\n for (let r = 0; r < pkChanceryPartnersCopySection.rows.length; r++) {\r\n let row = pkChanceryPartnersCopySection.rows[r];\r\n if (row.state === CardRowState.Inserted)\r\n pkChanceryPartnersCopySection.rows.remove(row);\r\n else\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n let pkOutgoingPartnersKCKSection: CardSection | undefined = context.model.card.sections.tryGet('PkOutgoingPartnersKCK');\r\n if (pkOutgoingPartnersKCKSection) {\r\n for (let r = 0; r < pkOutgoingPartnersKCKSection.rows.length; r++) {\r\n let row = pkOutgoingPartnersKCKSection.rows[r];\r\n if (row.state === CardRowState.Inserted)\r\n pkOutgoingPartnersKCKSection.rows.remove(row);\r\n else\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n let pkOutgoingPartnersCopyKCKSection: CardSection | undefined = context.model.card.sections.tryGet('PkOutgoingPartnersCopyKCK');\r\n if (pkOutgoingPartnersCopyKCKSection) {\r\n for (let r = 0; r < pkOutgoingPartnersCopyKCKSection.rows.length; r++) {\r\n let row = pkOutgoingPartnersCopyKCKSection.rows[r];\r\n if (row.state === CardRowState.Inserted)\r\n pkOutgoingPartnersCopyKCKSection.rows.remove(row);\r\n else\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n let pkOutgoingReceiverKCKSection: CardSection | undefined = context.model.card.sections.tryGet('PkOutgoingReceiverKCK');\r\n if (pkOutgoingReceiverKCKSection) {\r\n for (let r = 0; r < pkOutgoingReceiverKCKSection.rows.length; r++) {\r\n let row = pkOutgoingReceiverKCKSection.rows[r];\r\n if (row.state === CardRowState.Inserted)\r\n pkOutgoingReceiverKCKSection.rows.remove(row);\r\n else\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n let pkOutgoingReceiverCopyKCKSection: CardSection | undefined = context.model.card.sections.tryGet('PkOutgoingReceiverCopyKCK');\r\n if (pkOutgoingReceiverCopyKCKSection) {\r\n for (let r = 0; r < pkOutgoingReceiverCopyKCKSection.rows.length; r++) {\r\n let row = pkOutgoingReceiverCopyKCKSection.rows[r];\r\n if (row.state === CardRowState.Inserted)\r\n pkOutgoingReceiverCopyKCKSection.rows.remove(row);\r\n else\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n let pkoSection = context.model.card.sections.tryGet(\"PkOutgoing\");\r\n if (pkoSection != null)\r\n {\r\n pkoSection!.fields.set(\"PartnerKCKEmail\", null);\r\n pkoSection!.fields.set(\"PartnerKCKEmailAddress\", null);\r\n pkoSection!.fields.set(\"PartnerKCKGuidCRM\", null);\r\n pkoSection!.fields.set(\"PartnerKCKExternalID\", null);\r\n pkoSection!.fields.set(\"PartnerKCKID\", null);\r\n pkoSection!.fields.set(\"PartnerKCKName\", null);\r\n } \r\n }*/\r\n\r\n /// \r\n /// Отправляем запрос на сервер на получение сделки и заполняем поле в карточке\r\n /// \r\n public static async SendingRequestForDeal(context: ICardUIExtensionContext, field) {\r\n\r\n const request = new CardRequest();\r\n\r\n request.requestType = ChRequestTypes.GetCrmDeal;\r\n request.info[\"Key\"] = createTypedField(\"deal\", DotNetType.String);\r\n request.info[\"PartnerKCKGuidCRM\"] = createTypedField(field, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n if (!response.validationResult.isSuccessful) return;\r\n let mdsDealDict = response.info!.MdsDealDict;\r\n if (mdsDealDict == null) return;\r\n\r\n if (mdsDealDict != null\r\n && context.model.card.sections[\"PkIncomingInfo\"].Fields.ContainsKey(\"DealID\")\r\n && context.model.card.sections[\"PkIncomingInfo\"].Fields.ContainsKey(\"DealNumber\")\r\n && context.model.card.sections[\"PkIncomingInfo\"].Fields.ContainsKey(\"DealGuid1C\")) {\r\n context.model.card.sections[\"PkIncomingInfo\"].Fields[\"DealID\"] = mdsDealDict.Keys.FirstOrDefault();\r\n context.model.card.sections[\"PkIncomingInfo\"].Fields[\"DealNumber\"] = mdsDealDict.Values.FirstOrDefault();\r\n context.model.card.sections[\"PkIncomingInfo\"].Fields[\"DealGuid1C\"] = field.FieldValue;\r\n }\r\n }\r\n\r\n /// \r\n /// Отправляем запрос на сервер на получение объекта и заполняем поле в карточке\r\n /// \r\n public static async SendingRequestForObject(context: ICardUIExtensionContext, field) {\r\n\r\n const request = new CardRequest();\r\n\r\n request.requestType = ChRequestTypes.GetCrmDeal;\r\n request.info[\"Key\"] = createTypedField(\"object\", DotNetType.String);\r\n request.info[\"PartnerKCKGuidCRM\"] = createTypedField(field, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n if (!response.validationResult.isSuccessful) return;\r\n let mdsObjectDict = response.info!.MdsObjectDict;\r\n if (mdsObjectDict == null) return;\r\n\r\n if (mdsObjectDict != null\r\n && context.model.card.sections[\"PkObjectList\"].sields.ContainsKey(\"ObjectID\")\r\n && context.model.card.sections[\"PkObjectList\"].sields.ContainsKey(\"ObjectName\")) {\r\n context.model.card.sections[\"PkObjectList\"].sields[\"ObjectID\"] = mdsObjectDict.Keys.FirstOrDefault();\r\n context.model.card.sections[\"PkObjectList\"].sields[\"ObjectName\"] = mdsObjectDict.Values.FirstOrDefault();\r\n }\r\n }\r\n\r\n // Изменения в интерфейсе при изменении \"Аванса по договору подряда\"\r\n public static ChangesInUIWhenPrepaymentChanging(context: ICardUIExtensionContext) {\r\n let pklciSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pklciSection == null) {\r\n showMessage('pklciSection is null');\r\n return;\r\n }\r\n else {\r\n let prepaymentTermControl = context.model.controls.get('PrepaymentTerm');\r\n\r\n pklciSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"Prepayment\") {\r\n if (prepaymentTermControl != null) {\r\n // Если установлен флаг \"Аванс по договору подряда\"\r\n if (e.fieldValue != null\r\n && e.fieldValue === true) {\r\n prepaymentTermControl.isReadOnly = false;\r\n }\r\n else {\r\n // Очищаем поле \"Аванс по договору подряда\"\r\n pklciSection!.fields.set(\"PrepaymentTerm\", null);\r\n prepaymentTermControl.isReadOnly = true;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n public static ControlInitialization(context: ICardUIExtensionContext,tabs: IFormViewModel[]) {\r\n let pklciSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pklciSection == null) return;\r\n let kindID = pklciSection.fields.get(\"KindID\");\r\n if (kindID == null) {\r\n kindID = PkLetterCreditKinds.PaymentToTheSupplierID;\r\n }\r\n\r\n // Скрытие/отображение полей в зависимости от вида\r\n ChUIHelper.ChangingFieldsByLetterCreditKind(context, kindID,tabs);\r\n\r\n let prepayment = pklciSection.fields.get(\"Prepayment\");\r\n\r\n let prepaymentControl = context.model.controls.get('PrepaymentTerm');\r\n if (prepaymentControl == null) return;\r\n\r\n let pkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n \r\n if(pkDocumentCommonInfo!=null)\r\n {\r\n let stateId = pkDocumentCommonInfo.fields.get(\"StateID\");\r\n \r\n if (prepayment === null || prepayment === false || (stateId!=null && (stateId == CdDocStates.RegisteredLC.id || stateId == CdDocStates.UploadedToTUS.id))) {\r\n prepaymentControl.isReadOnly = true;\r\n }\r\n else {\r\n prepaymentControl.isReadOnly = false;\r\n }\r\n }\r\n }\r\n\r\n public static async SendNotification(context: ICardUIExtensionContext) {\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.GetInstructionUrl;\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n let comment = tryGetFromInfo(context.model.card.info, \"NotificationComment\", null);\r\n if (comment != null) {\r\n let status = \"\";\r\n let commentString = comment as string;\r\n let fComment = commentString;\r\n\r\n // Получаем статус\r\n let offset = (comment as string).indexOf(\";\");\r\n if (offset >= 0)\r\n status = commentString.substring(8, offset - 8);\r\n\r\n // Получаем обрезанный коммент\r\n let pos = commentString.lastIndexOf(';') + 2;\r\n if (pos >= 0)\r\n fComment = (comment as string).substring(pos);\r\n\r\n let resultComment = fComment + \"\\n\" + \"Состояние заявки в ЕФС: \" + status + \"\\n\" + \"Открыть инструкцию?\";\r\n const result = await showConfirm(resultComment, \"Ошибка при создании заявки на оплату\");\r\n if (!result) {\r\n return;\r\n }\r\n window.open(response.info.InstructionUrl);\r\n }\r\n }\r\n\r\n public static ClearClaimFieldsByType(context: ICardUIExtensionContext) {\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n let pkObjects = context.model.card.sections.tryGet('PkObjectList');\r\n if (pkoSection == null) return;\r\n let controls = context.model.controls;\r\n let blocks = context.model.blocks;\r\n let sections: string[] = [];\r\n let typeID = pkoSection.fields.tryGet('TypeID');\r\n if (typeID == PkOutgoingKinds.ClaimId && pkObjects && pkObjects?.rows.length != 1)\r\n {\r\n sections.push(\"PkObjectList\");\r\n pkoSection.fields.set(\"ContractExtID\",null);\r\n pkoSection.fields.set(\"ContractID\",null);\r\n pkoSection.fields.set(\"ContractNumberVirtual\",null);\r\n }\r\n\r\n let claimSubTypeControl = controls.get('ClaimSubTypeControl');\r\n if (claimSubTypeControl!.controlVisibility == Visibility.Collapsed)\r\n {\r\n pkoSection.fields.set(\"ClaimSubTypeID\",null);\r\n pkoSection.fields.set(\"ClaimSubTypeName\",null);\r\n }\r\n\r\n let contractInfoBlock = blocks.get('ContractInfo');\r\n let claimContractControl = controls.get('ClaimContractControl');\r\n if (claimContractControl!.controlVisibility == Visibility.Collapsed || contractInfoBlock?.blockVisibility == Visibility.Collapsed)\r\n {\r\n pkoSection.fields.set(\"ContractExtID\",null);\r\n pkoSection.fields.set(\"ContractID\",null);\r\n pkoSection.fields.set(\"ContractNumberVirtual\",null);\r\n }\r\n\r\n let claimAmountControl = controls.get('ClaimAmountControl');\r\n if (claimAmountControl!.controlVisibility == Visibility.Collapsed || contractInfoBlock?.blockVisibility == Visibility.Collapsed)\r\n {\r\n pkoSection.fields.set(\"ClaimAmount\",null);\r\n }\r\n\r\n let arfoBlock = blocks.get('ARFO');\r\n let arfoTable = controls.get('ARFOTable');\r\n if (arfoTable!.controlVisibility == Visibility.Collapsed || arfoBlock!.blockVisibility == Visibility.Collapsed)\r\n {\r\n sections.push(\"PkOutgoingARFO\");\r\n sections.push(\"PkOutgoingARFOCulprit\");\r\n }\r\n\r\n let claimPerformersBlock = blocks.get('ClaimPerformers');\r\n let claimPerformersTable = controls.get('ClaimPerformersTable');\r\n if (claimPerformersTable!.controlVisibility == Visibility.Collapsed || claimPerformersBlock!.blockVisibility == Visibility.Collapsed)\r\n {\r\n sections.push(\"PkOutgoingClaimPerformers\");\r\n }\r\n \r\n if (context.model.card.storeMode === CardStoreMode.Update) {\r\n for (let section of sections) {\r\n for (let row of context.model.card.sections.tryGet(section)!.rows) {\r\n if (row.state == CardRowState.Inserted)\r\n {\r\n context.model.card.sections.tryGet(section)!.rows.remove(row);\r\n }\r\n else\r\n {\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n }\r\n else if (context.model.card.storeMode === CardStoreMode.Insert) {\r\n for (let section of sections) {\r\n context.model.card.sections.tryGet(section)!.rows.clear();\r\n }\r\n }\r\n }\r\n\r\n /*public static ClearizationFieldsByType(context: ICardUIExtensionContext) {\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n if (pkoSection == null) return;\r\n \r\n let customerRequest = pkoSection.fields.tryGet('CustomerRequest');\r\n\r\n if (customerRequest === null\r\n || (customerRequest === false)) {\r\n // Очистка полей\r\n let isValid = //pkoSection.hasChanges() &&\r\n context.model.card.sections.tryGet(\"PkChanceryPartners\") &&\r\n context.model.card.sections.tryGet(\"PkChanceryPartnersCopy\") &&\r\n context.model.card.sections.tryGet(\"PkOutgoingPartnersKCK\") &&\r\n context.model.card.sections.tryGet(\"PkOutgoingPartnersKCKCopy\");\r\n\r\n let sections: string[] = [];\r\n let canAddPartnersControl = context.model.controls.get('CanAddPartnersControl');\r\n let partnersControl = context.model.controls.get('PartnersControl');\r\n if (canAddPartnersControl!.controlVisibility == Visibility.Collapsed\r\n && partnersControl!.controlVisibility == Visibility.Collapsed) \r\n {\r\n sections.push(\"PkChanceryPartners\");\r\n }\r\n\r\n let canAddPartnersCopyControl = context.model.controls.get('CanAddPartnersCopyControl');\r\n let partnersCopyControl = context.model.controls.get('PartnersCopyControl');\r\n if (canAddPartnersCopyControl!.controlVisibility == Visibility.Collapsed\r\n && partnersCopyControl!.controlVisibility == Visibility.Collapsed) \r\n {\r\n sections.push(\"PkChanceryPartnersCopy\");\r\n }\r\n\r\n let partnersKCKControl = context.model.controls.get('PartnersKCKControl');\r\n if (partnersKCKControl!.controlVisibility == Visibility.Collapsed) \r\n {\r\n sections.push(\"PkOutgoingPartnersKCK\");\r\n }\r\n\r\n let partnersKCKCopyControl = context.model.controls.get('PartnersKCKCopyControl');\r\n if (partnersKCKCopyControl!.controlVisibility == Visibility.Collapsed) \r\n {\r\n sections.push(\"PkOutgoingPartnersKCKCopy\");\r\n }\r\n \r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null && partnerCulpritControl.controlVisibility == Visibility.Collapsed && pkoSection != null) \r\n {\r\n pkoSection.fields.set(\"PartnerKCKEmail\",null); \r\n pkoSection.fields.set(\"PartnerKCKEmailAddress\",null); \r\n pkoSection.fields.set(\"PartnerKCKExternalID\",null); \r\n pkoSection.fields.set(\"PartnerKCKID\",null); \r\n pkoSection.fields.set(\"PartnerKCKName\",null); \r\n }\r\n \r\n if (context.model.card.storeMode === CardStoreMode.Update && isValid) {\r\n for (let section of sections) {\r\n for (let row of context.model.card.sections.tryGet(section)!.rows) {\r\n if (row.state == CardRowState.Inserted)\r\n {\r\n context.model.card.sections.tryGet(section)!.rows.remove(row);\r\n }\r\n else\r\n {\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n }\r\n else if (context.model.card.storeMode === CardStoreMode.Insert && isValid) {\r\n for (let section of sections) {\r\n context.model.card.sections.tryGet(section)!.rows.clear();\r\n }\r\n } \r\n }\r\n if (pkoSection == null) return;\r\n let typeID = pkoSection.fields.tryGet('TypeID');\r\n if(typeID!=PkOutgoingKinds.ResponseToIndRequestId)\r\n pkoSection.fields.set(\"Where\",null); \r\n }*/\r\n\r\n //Изменение доступности для редактирования поля \"Сумма к удержанию\".\r\n public static async SetReadOnlyStatusForClaimHoldingAmountAsync(context: ICardUIExtensionContext)\r\n {\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n if (pkoSection == null) return;\r\n\r\n let typeId = pkoSection.fields.tryGet('TypeID');\r\n\r\n if(Guid.equals(typeId, PkOutgoingKinds.ClaimId) && pkoSection.fields.get('ClaimTypeID') != PkOutgoinClaimType.RVR)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkOutgoingGetInfoForClaimHoldingAmountRequest;\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n \r\n if (response.validationResult.build().isSuccessful == true)\r\n {\r\n let result = response.info.Result;\r\n let rework = response.info.Rework;\r\n\r\n let claimHoldingAmount = context.model.controls.get('ClaimHoldingAmount');\r\n let culpritResponse = context.model.controls.get('CulpritResponse');\r\n\r\n if (result.$value == true && claimHoldingAmount != null)\r\n {\r\n claimHoldingAmount.isReadOnly = false;\r\n }\r\n\r\n if (rework.$value == true && culpritResponse != null)\r\n {\r\n culpritResponse.isReadOnly = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static async HideOrganizationFieldsByType(context: ICardUIExtensionContext) {\r\n let card = context.card;\r\n let model = context.model;\r\n\r\n if (card == null || model == null)\r\n {\r\n return\r\n }\r\n\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n if (pkoSection == null) return;\r\n let typeID = pkoSection.fields.tryGet('TypeID');\r\n let сlaimTypeID = pkoSection.fields.tryGet('ClaimTypeID');\r\n if (typeID == PkOutgoingKinds.ClaimId)\r\n {\r\n let claimTypeControl = context.model.controls.get('ClaimTypeControl');\r\n if (claimTypeControl != null) claimTypeControl.controlVisibility = Visibility.Visible ;\r\n let contractInfoBlock = context.model.blocks.get('ContractInfo');\r\n if (contractInfoBlock != null) contractInfoBlock.blockVisibility = Visibility.Visible ;\r\n let powerOfAttorneyBlock = context.model.blocks.get('PowerOfAttorneyBlock');\r\n if (powerOfAttorneyBlock != null) powerOfAttorneyBlock.blockVisibility = Visibility.Collapsed;\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null) \r\n partnerCulpritControl.controlVisibility = Visibility.Visible;\r\n if (сlaimTypeID == PkOutgoinClaimType.RVR)\r\n {\r\n let arfoBlock = context.model.blocks.get('ARFO');\r\n if (arfoBlock != null) arfoBlock.blockVisibility = Visibility.Visible;\r\n let claimPerformers = context.model.blocks.get('ClaimPerformers');\r\n if (claimPerformers != null) claimPerformers.blockVisibility = Visibility.Visible;\r\n let claimSubTypeControl = context.model.controls.get('ClaimSubTypeControl');\r\n if (claimSubTypeControl != null) claimSubTypeControl.controlVisibility = Visibility.Collapsed ;\r\n }\r\n else if (сlaimTypeID == PkOutgoinClaimType.FinesFromTheQualityDepartment)\r\n {\r\n let claimSubTypeControl = context.model.controls.get('ClaimSubTypeControl');\r\n if (claimSubTypeControl != null) claimSubTypeControl.controlVisibility = Visibility.Visible ;\r\n let arfoBlock = context.model.blocks.get('ARFO');\r\n if (arfoBlock != null) arfoBlock.blockVisibility = Visibility.Collapsed;\r\n let claimPerformers = context.model.blocks.get('ClaimPerformers');\r\n if (claimPerformers != null) claimPerformers.blockVisibility = Visibility.Collapsed;\r\n }\r\n else\r\n {\r\n let arfoBlock = context.model.blocks.get('ARFO');\r\n if (arfoBlock != null) arfoBlock.blockVisibility = Visibility.Collapsed;\r\n let claimPerformers = context.model.blocks.get('ClaimPerformers');\r\n if (claimPerformers != null) claimPerformers.blockVisibility = Visibility.Collapsed;\r\n let claimSubTypeControl = context.model.controls.get('ClaimSubTypeControl');\r\n if (claimSubTypeControl != null) claimSubTypeControl.controlVisibility = Visibility.Collapsed ;\r\n }\r\n }\r\n else if (Guid.equals(typeID, PkOutgoingKinds.PowerOfAttorneyRevocationId))\r\n {\r\n let isSignResponseReqControl = context.model.controls.get('IsSignResponseReqControl'); \r\n const pkDocumentCommonInfo = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n\r\n let receivingMethodID = pkDocumentCommonInfo!.fields.tryGetField(\"ReceivingMethodID\");\r\n\r\n if (receivingMethodID != null && receivingMethodID.$value == PkOutgoingReceivingMethods.ЭДО)\r\n {\r\n isSignResponseReqControl!.isReadOnly = false;\r\n }\r\n else\r\n {\r\n isSignResponseReqControl!.isReadOnly = true;\r\n }\r\n\r\n pkDocumentCommonInfo!.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"ReceivingMethodID\") \r\n {\r\n if (e.fieldValue == PkOutgoingReceivingMethods.ЭДО)\r\n {\r\n isSignResponseReqControl!.isReadOnly = false;\r\n }\r\n else\r\n {\r\n pkDocumentCommonInfo!.fields.set(\"IsSignResponseRequired\",null);\r\n isSignResponseReqControl!.isReadOnly = true;\r\n }\r\n }\r\n });\r\n\r\n let receiverOrigin = context.model.blocks.get('ReceiverOrigin');\r\n if(receiverOrigin)\r\n {\r\n receiverOrigin.blockVisibility = Visibility.Visible;\r\n }\r\n }\r\n else\r\n {\r\n let claimTypeControl = context.model.controls.get('ClaimTypeControl');\r\n if (claimTypeControl != null) claimTypeControl.controlVisibility = Visibility.Collapsed ;\r\n let contractInfoBlock = context.model.blocks.get('ContractInfo');\r\n if (contractInfoBlock != null) contractInfoBlock.blockVisibility = Visibility.Collapsed ;\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null) \r\n partnerCulpritControl.controlVisibility = Visibility.Collapsed;\r\n let arfoBlock = context.model.blocks.get('ARFO');\r\n if (arfoBlock != null) arfoBlock.blockVisibility = Visibility.Collapsed;\r\n let claimPerformers = context.model.blocks.get('ClaimPerformers');\r\n if (claimPerformers != null) claimPerformers.blockVisibility = Visibility.Collapsed;\r\n let claimSubTypeControl = context.model.controls.get('ClaimSubTypeControl');\r\n if (claimSubTypeControl != null) claimSubTypeControl.controlVisibility = Visibility.Collapsed ;\r\n }\r\n \r\n\r\n //Видимость контрола Куда\r\n switch (typeID) {\r\n case PkOutgoingKinds.ResponseToIndRequestId:\r\n {\r\n let Where = context.model.controls.get('Where');\r\n if (Where != null) Where.controlVisibility = Visibility.Visible;\r\n\r\n let responseFieldsVisibility = Guid.equals(typeID, PkOutgoingKinds.ClaimId) \r\n && (context.card.taskHistory.some(x => Guid.equals(x.typeId, CdFdTaskTypes.PkProcessIncomingResponseTypeID))) \r\n || (context.card.tasks.some(x => Guid.equals(x.typeId, CdFdTaskTypes.PkProcessIncomingResponseTypeID))) \r\n ? Visibility.Visible : Visibility.Collapsed;\r\n\r\n let culpritResponse = context.model.controls.get('CulpritResponse');\r\n if (culpritResponse != null) culpritResponse.controlVisibility = responseFieldsVisibility;\r\n\r\n let claimHoldingAmount = context.model.controls.get('ClaimHoldingAmount');\r\n if (claimHoldingAmount != null) claimHoldingAmount.controlVisibility = responseFieldsVisibility;\r\n }\r\n break;\r\n default:\r\n { \r\n let Where = context.model.controls.get('Where');\r\n if (Where != null) Where.controlVisibility = Visibility.Collapsed;\r\n\r\n let culpritResponse = context.model.controls.get('CulpritResponse');\r\n if (culpritResponse != null) culpritResponse.controlVisibility = Visibility.Collapsed;\r\n\r\n let claimHoldingAmount = context.model.controls.get('ClaimHoldingAmount');\r\n if (claimHoldingAmount != null) claimHoldingAmount.controlVisibility = Visibility.Collapsed;\r\n }\r\n break;\r\n }\r\n let customerRequest = pkoSection.fields.tryGet('CustomerRequest');\r\n if (customerRequest === null\r\n || (customerRequest === false)) { \r\n // Видимость полей\r\n switch (typeID) {\r\n // Уведомление о результатах тендера\r\n case PkOutgoingKinds.NotificationOfTenderResultsId:\r\n {\r\n const pkcpSection = card.sections.tryGet(\"PkChanceryPartners\");\r\n const pkoSection = card.sections.tryGet(\"PkOutgoingPartnersKCK\");\r\n\r\n // проверяем и получаем секции\r\n if (pkcpSection &&\r\n pkoSection) {\r\n const firstOrganization = pkcpSection.rows.length > 0 ? pkcpSection.rows[0] : null;\r\n const targetOrganization = pkoSection.rows.length > 0 ? pkoSection.rows[0] : null;\r\n\r\n if (firstOrganization!=null)\r\n {\r\n if (targetOrganization == null)\r\n {\r\n var newRow = new CardRow();\r\n\r\n newRow.rowId = Guid.newGuid();\r\n\r\n newRow.set(\"PartnerID\" ,createTypedField(firstOrganization?.tryGet(\"PartnerID\"),DotNetType.Guid));\r\n newRow.set(\"PartnerExternalID\",createTypedField(firstOrganization?.tryGet(\"PartnerExternalID\"),DotNetType.Int64));\r\n newRow.set(\"PartnerName\",createTypedField(firstOrganization?.tryGet(\"PartnerName\"),DotNetType.String));\r\n newRow.set(\"PartnerEmail\",createTypedField(firstOrganization?.tryGet(\"PartnerEmail\"),DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n\r\n pkoSection.rows.push(newRow);\r\n }\r\n else\r\n {\r\n targetOrganization.set(\"PartnerID\",createTypedField(firstOrganization?.tryGet(\"PartnerID\"),DotNetType.Guid));\r\n targetOrganization.set(\"PartnerExternalID\",createTypedField(firstOrganization?.tryGet(\"PartnerExternalID\"),DotNetType.Int64));\r\n targetOrganization.set(\"PartnerName\",createTypedField(firstOrganization?.tryGet(\"PartnerName\"),DotNetType.String));\r\n targetOrganization.set(\"RowID\",createTypedField(firstOrganization?.tryGet(\"RowID\"),DotNetType.Guid));\r\n }\r\n }\r\n }\r\n\r\n let canAddPartnersControl = context.model.controls.get('CanAddPartnersControl');\r\n if (canAddPartnersControl != null) canAddPartnersControl.controlVisibility = Visibility.Collapsed;\r\n let canAddPartnersCopyControl = context.model.controls.get('CanAddPartnersCopyControl');\r\n if (canAddPartnersCopyControl != null) canAddPartnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnersControl = context.model.controls.get('PartnersControl');\r\n if (partnersControl != null) partnersControl.controlVisibility = Visibility.Collapsed;\r\n let partnersCopyControl = context.model.controls.get('PartnersCopyControl');\r\n if (partnersCopyControl != null) partnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null) \r\n {\r\n partnerCulpritControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n let partnersKCKControl = context.model.controls.get('PartnersKCKControl');\r\n if (partnersKCKControl != null) partnersKCKControl.controlVisibility = Visibility.Visible;\r\n let partnersKCKCopyControl = context.model.controls.get('PartnersKCKCopyControl');\r\n if (partnersKCKCopyControl != null) partnersKCKCopyControl.controlVisibility = Visibility.Visible;\r\n /* let emailPartnersCopyControl = context.model.controls.get('EmailPartnersCopy');\r\n if (emailPartnersCopyControl != null) emailPartnersCopyControl.controlVisibility = Visibility.Visible;\r\n let emailPartnersControl = context.model.controls.get('EmailPartners');\r\n if (emailPartnersControl != null) emailPartnersControl.controlVisibility = Visibility.Visible; */\r\n }\r\n break;\r\n case PkOutgoingKinds.ClaimId:\r\n {\r\n const pkcpSection = card.sections.tryGet(\"PkChanceryPartners\");\r\n const pkoSection = card.sections.tryGet(\"PkOutgoing\");\r\n\r\n // проверяем и получаем секции\r\n if (pkcpSection &&\r\n pkoSection) {\r\n\r\n const firstOrganization = pkcpSection.rows.length > 0 ? pkcpSection.rows[0] : null;\r\n\r\n if (firstOrganization!=null)\r\n {\r\n pkoSection.fields.set(\"PartnerKCKID\",createTypedField(firstOrganization?.tryGet(\"PartnerID\"),DotNetType.Guid));\r\n pkoSection.fields.set(\"PartnerKCKExternalID\",createTypedField(firstOrganization?.tryGet(\"PartnerExternalID\"),DotNetType.Int64));\r\n pkoSection.fields.set(\"PartnerKCKName\",createTypedField(firstOrganization?.tryGet(\"PartnerName\"),DotNetType.String));\r\n pkoSection.fields.set(\"RowID\",createTypedField(firstOrganization?.tryGet(\"RowID\"),DotNetType.Guid));\r\n }\r\n }\r\n\r\n let canAddPartnersControl = context.model.controls.get('CanAddPartnersControl');\r\n if (canAddPartnersControl != null) canAddPartnersControl.controlVisibility = Visibility.Collapsed;\r\n let canAddPartnersCopyControl = context.model.controls.get('CanAddPartnersCopyControl');\r\n if (canAddPartnersCopyControl != null) canAddPartnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnersControl = context.model.controls.get('PartnersControl');\r\n if (partnersControl != null) partnersControl.controlVisibility = Visibility.Collapsed;\r\n let partnersCopyControl = context.model.controls.get('PartnersCopyControl');\r\n if (partnersCopyControl != null) partnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null) \r\n {\r\n partnerCulpritControl.caption = \"Организация-виновник\";\r\n partnerCulpritControl.controlVisibility = Visibility.Visible;\r\n }\r\n let partnersKCKControl = context.model.controls.get('PartnersKCKControl');\r\n if (partnersKCKControl != null) partnersKCKControl.controlVisibility = Visibility.Collapsed;\r\n let partnersKCKCopyControl = context.model.controls.get('PartnersKCKCopyControl');\r\n if (partnersKCKCopyControl != null) partnersKCKCopyControl.controlVisibility = Visibility.Visible;\r\n }\r\n break;\r\n // Ответ на обращение физ. лица или пусто\r\n default:\r\n {\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null) \r\n {\r\n partnerCulpritControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n ChUIHelper.CanAddPartnerPermission(context);\r\n let partnersKCKControl = context.model.controls.get('PartnersKCKControl');\r\n if (partnersKCKControl != null) partnersKCKControl.controlVisibility = Visibility.Collapsed;\r\n let partnersKCKCopyControl = context.model.controls.get('PartnersKCKCopyControl');\r\n if (partnersKCKCopyControl != null) partnersKCKCopyControl.controlVisibility = Visibility.Collapsed;\r\n /* let emailPartnersCopyControl = context.model.controls.get('EmailPartnersCopy');\r\n if (emailPartnersCopyControl != null) emailPartnersCopyControl.controlVisibility = Visibility.Collapsed;\r\n let emailPartnersControl = context.model.controls.get('EmailPartners');\r\n if (emailPartnersControl != null) emailPartnersControl.controlVisibility = Visibility.Collapsed; */\r\n }\r\n break;\r\n }\r\n\r\n \r\n }\r\n }\r\n\r\n public static FillingUpAssignmentTable(context: ICardUIExtensionContext) { \r\n if (context == null) return;\r\n let ppiSection = context.model.card.sections.tryGet('PkProtocolInfo'); \r\n if (ppiSection != null) {\r\n ppiSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"DocumentKindID\") {\r\n let documentKindID = e.fieldValue;\r\n let objectID: guid | null = null;\r\n let pkObjectListSection = context.model.card.sections.tryGet('PkObjectList');\r\n if (pkObjectListSection == null || pkObjectListSection.rows.length == 0) return;\r\n objectID = pkObjectListSection.rows[0].tryGet(\"ObjectID\");\r\n this.FillAssignmentAndApprovementTable(context,documentKindID,objectID); \r\n }\r\n });\r\n }\r\n const objects = context.model.controls.get('Objects') as GridViewModel;\r\n if (!objects) return;\r\n let objSection: CardSection | undefined = context.model.card.sections.tryGet('PkObjectList');\r\n if (!objSection) return;\r\n objects.rowInitializing.add(async e => {\r\n e.row.fieldChanged.add(e2 => {\r\n if (e2.fieldName !== \"ObjectID\") return;\r\n if (!e || !objSection) return;\r\n { \r\n let ppiSection = context.model.card.sections.tryGet('PkProtocolInfo'); \r\n let documentKindID: guid | null = null; \r\n if (ppiSection != null) documentKindID = ppiSection.fields.tryGet(\"DocumentKindID\");\r\n this.FillAssignmentAndApprovementTable(context,documentKindID, e2.fieldValue); \r\n }\r\n });\r\n }); \r\n \r\n }\r\n\r\n\r\n private static async FillAssignmentAndApprovementTable(context: ICardUIExtensionContext, documentKindID: guid|null, objectID:guid|null)\r\n {\r\n let ppdSection = context.model.card.sections.tryGet('PkProtocolDecisions');\r\n if (ppdSection != null && ppdSection.rows!.length > 0) {\r\n for (let i = ppdSection.rows.length - 1; i >= 0; i--) {\r\n if (ppdSection.rows[i].state === CardRowState.None) {\r\n ppdSection.rows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n ppdSection.rows.splice(i, 1);\r\n }\r\n }\r\n }\r\n let patSection = context.model.card.sections.tryGet('PkApprovalTable');\r\n if (patSection != null && patSection.rows!.length > 0) {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, patSection);\r\n }\r\n\r\n let membersCollection = context.model.controls.get('MembersCollection');\r\n if (membersCollection != null) membersCollection.controlVisibility = Visibility.Visible;\r\n let approvalTable = context.model.controls.get('ApprovalTable');\r\n if (approvalTable != null) approvalTable.controlVisibility = Visibility.Collapsed;\r\n \r\n if (documentKindID != null){\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.PkProtocolAssignmentTable;\r\n request.info[\"DocumentKindID\"] = createTypedField(documentKindID, DotNetType.Guid);\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n request.info[\"CardTypeID\"] = createTypedField(context.model.card.typeId, DotNetType.Guid);\r\n request.info[\"ObjectID\"] = createTypedField(objectID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info.AssignmentDict) {\r\n let assignments = response.info.AssignmentDict;\r\n let ppdSection = context.model.card.sections.tryGet('PkProtocolDecisions');\r\n let i = 0;\r\n if (ppdSection) {\r\n for (let member of assignments) {\r\n let rowsAT = ppdSection.rows;\r\n\r\n let currentRowAT = new CardRow();\r\n\r\n currentRowAT.rowId = Guid.newGuid();\r\n\r\n currentRowAT.set(\"Decision\", member.Decision);\r\n currentRowAT.set(\"Availability\", member.Availability);\r\n\r\n currentRowAT.set(\"Order\", createTypedField(i++, DotNetType.Int32));\r\n\r\n currentRowAT.state = CardRowState.Inserted;\r\n rowsAT.push(currentRowAT);\r\n }\r\n }\r\n } \r\n\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (dciSection != null) {\r\n if (response.info.ApproverID && response.info.ApproverName) {\r\n let approverID = response.info.ApproverID;\r\n let approverName = response.info.ApproverName;\r\n\r\n if (approverID != null && approverID !== Guid.empty) {\r\n dciSection.fields.set(\"SignedByID\", approverID);\r\n dciSection.fields.set(\"SignedByName\", approverName);\r\n }\r\n }\r\n else {\r\n dciSection.fields.set(\"SignedByID\", null);\r\n dciSection.fields.set(\"SignedByName\", null);\r\n }\r\n }\r\n\r\n // Видимость/заполнение таблицы/контрола \"Участники\"/\"Согласование\"\r\n if (response.info.MembersDict) {\r\n let membersDict = response.info.MembersDict;\r\n // Удаление существующих записей в таблице Согласования\r\n let patSection = context.model.card.sections.tryGet('PkApprovalTable');\r\n if (patSection != null && patSection.rows!.length > 0) {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, patSection);ArHelper.ClearCollectionSection(context.model.card.storeMode, patSection);\r\n }\r\n\r\n let membersCollection = context.model.controls.get('MembersCollection');\r\n if (membersCollection != null) membersCollection.controlVisibility = Visibility.Collapsed;\r\n let approvalTable = context.model.controls.get('ApprovalTable');\r\n if (approvalTable != null) approvalTable.controlVisibility = Visibility.Visible;\r\n\r\n let i = 0;\r\n if (patSection) {\r\n for (let member of membersDict) {\r\n let rowsAT = patSection.rows;\r\n\r\n let currentRowAT = new CardRow();\r\n\r\n currentRowAT.rowId = Guid.newGuid();\r\n\r\n currentRowAT.set(\"RoleID\", member.RoleID);\r\n currentRowAT.set(\"RoleName\", member.RoleName);\r\n currentRowAT.set(\"StageID\", member.StageID);\r\n currentRowAT.set(\"UserID\", member.UserID);\r\n currentRowAT.set(\"UserName\", member.UserName);\r\n // if (member.UserID && member.UserID !== null && member.UserID !== undefined)\r\n // currentRowAT.set(\"UserID\", member.UserID);\r\n // if (member.UserName && member.UserName !== null && member.UserName !== undefined)\r\n // currentRowAT.set(\"UserName\", member.UserName);\r\n\r\n currentRowAT.set(\"Order\", createTypedField(i++, DotNetType.Int32));\r\n\r\n currentRowAT.state = CardRowState.Inserted;\r\n rowsAT.push(currentRowAT);\r\n }\r\n }\r\n }\r\n else {\r\n // Удаление существующих записей в таблице Согласования\r\n let patSection = context.model.card.sections.tryGet('PkApprovalTable');\r\n if (patSection != null && patSection.rows!.length > 0) {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, patSection);\r\n }\r\n let membersCollection = context.model.controls.get('MembersCollection');\r\n if (membersCollection != null) membersCollection.controlVisibility = Visibility.Visible;\r\n let approvalTable = context.model.controls.get('ApprovalTable');\r\n if (approvalTable != null) approvalTable.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n\r\n public static ThemeCreation(context: ICardUIExtensionContext, disposer: Function | null = null) {\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (dciSection == null) return;\r\n let ppiSection = context.model.card.sections.tryGet('PkProtocolInfo');\r\n if (ppiSection == null) return;\r\n\r\n // Если изменился вид протокола\r\n ppiSection.fields.fieldChanged.add(e => {\r\n if (dciSection == null) return;\r\n let polSection = context.model.card.sections.tryGet('PkObjectList');\r\n if (polSection == null) return;\r\n if (e.fieldName === \"DocumentKindDocumentKind\") {\r\n let docKind = e.fieldValue;\r\n if (PkCommonHelper.IsNullOrWhitespace(docKind)) {\r\n dciSection.fields.set(\"Subject\", null);\r\n return;\r\n }\r\n\r\n if (polSection.rows.length > 0) {\r\n let objectNames = \"\";\r\n for (let row of polSection.rows) {\r\n if (PkCommonHelper.IsNullOrWhitespace(row.tryGet(\"ObjectFullName\"))) {\r\n objectNames += \" \" + row.tryGet(\"ObjectName\") + \";\";\r\n }\r\n else {\r\n objectNames += \" \" + row.tryGet(\"ObjectFullName\") + \";\";\r\n }\r\n }\r\n dciSection.fields.set(\"Subject\", createTypedField(docKind + \" - \" + objectNames, DotNetType.String));\r\n }\r\n }\r\n });\r\n\r\n // Если изменился объект\r\n if (disposer == null) {\r\n let objectsControl = context.model.controls.get('Objects') as AutoCompleteTableViewModel;\r\n if (objectsControl) {\r\n disposer = reaction(() => objectsControl.items, () => {\r\n let polSection = context.model.card.sections.tryGet('PkObjectList');\r\n if (polSection == null) return;\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (dciSection == null) return;\r\n let docKind = dciSection.fields.get(\"DocumentKindDocumentKind\");\r\n if (PkCommonHelper.IsNullOrWhitespace(docKind)) {\r\n dciSection.fields.set(\"Subject\", null);\r\n return;\r\n }\r\n\r\n if (polSection.rows.length > 0) {\r\n let objectNames = \"\";\r\n for (let row of polSection.rows) {\r\n if (PkCommonHelper.IsNullOrWhitespace(row.tryGet(\"ObjectFullName\"))) {\r\n objectNames += \" \" + row.tryGet(\"ObjectName\") + \";\";\r\n }\r\n else {\r\n objectNames += \" \" + row.tryGet(\"ObjectFullName\") + \";\";\r\n }\r\n }\r\n dciSection.fields.set(\"Subject\", createTypedField(docKind + \" - \" + objectNames, DotNetType.String));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n public static BundleCaseNomenclature(context: ICardUIExtensionContext) {\r\n let pcnSection = context.model.card.sections.tryGet('PkCaseNomenclature');\r\n if (pcnSection == null) return;\r\n pcnSection.fields.fieldChanged.add(async e => {\r\n if (pcnSection == null) return;\r\n if (e.fieldName === \"ParentID\") {\r\n let caseNewId = e.fieldValue;\r\n if (caseNewId == null) {\r\n pcnSection.fields.set(\"CaseOfTheTopLevelID\", null);\r\n pcnSection.fields.set(\"CaseOfTheTopLevelName\", null);\r\n }\r\n else {\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.GetCaseOfTheTopLevel;\r\n request.info[\"CaseNewId\"] = createTypedField(caseNewId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info != null && response.info.CaseOfTheTopLevelId && !PkCommonHelper.IsNullOrWhitespace(response.info.CaseOfTheTopLevelName.$value)) {\r\n CdCommonHelper.SetFieldToSection(pcnSection, \"CaseOfTheTopLevelID\", response.info.CaseOfTheTopLevelId);\r\n CdCommonHelper.SetFieldToSection(pcnSection, \"CaseOfTheTopLevelName\", response.info.CaseOfTheTopLevelName);\r\n }\r\n else {\r\n pcnSection.fields.set(\"CaseOfTheTopLevelID\", null);\r\n pcnSection.fields.set(\"CaseOfTheTopLevelName\", null);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /// \r\n /// Изменения в интерфейсе входящего документа\r\n /// \r\n public static ChangesInUIWhenKindChangingIncomingDoc(context: ICardUIExtensionContext) {\r\n let pklciSection = context.model.card.sections.tryGet('PkIncomingInfo'); \r\n let pkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\"); \r\n if (pklciSection == null) return;\r\n pklciSection.fields.fieldChanged.add( async e => {\r\n if (e.fieldValue != null) {\r\n if (e.fieldName === \"KindID\")\r\n {\r\n // Скрытие/отображение полей в зависимости от вида\r\n ChUIHelper.ChangingFieldsByIncomingDocumentKind(context, e.fieldValue);\r\n\r\n ChUIHelper.ChangingFieldsValuesByIncomingDocumentKind(context, e.fieldValue);\r\n }\r\n // Изменился флаг Обращение контрагента/клиента\r\n if (e.fieldName === \"CustomerRequest\") {\r\n // Очищаем поля из блока Отправитель\r\n ChUIHelper.ClearSenderFields(context);\r\n\r\n if (pklciSection != null) \r\n {\r\n let IsDAiAP = pklciSection.fields.tryGet(\"KindIsDAiAP\");\r\n ChUIHelper.CheckLogicCourtBlock(context, IsDAiAP, e.fieldValue,true);\r\n }\r\n \r\n ChUIHelper.ChangingFieldsByIncomingDocumentCustomerRequest(context, e.fieldValue);\r\n\r\n if (e.fieldValue == true) {\r\n await ChUIHelper.ChangeNotSavedDataCourt(context);\r\n }\r\n }\r\n }\r\n\r\n if(e.fieldName === \"KindIsDAiAP\"){\r\n ChUIHelper.CheckCourtBlock(context, e.fieldValue);\r\n let CustomerRequest = pklciSection?.fields.tryGet('CustomerRequest');\r\n ChUIHelper.CheckLogicCourtBlock(context, e.fieldValue, CustomerRequest, true);\r\n }\r\n\r\n // Изменился Вид документа\r\n if (e.fieldName === \"KindID\") {\r\n ChUIHelper.ChangingFieldsByIncomingDocumentKind(context, e.fieldValue); \r\n }\r\n\r\n // Изменяется ли PartnerKCKGuidCRM\r\n if (e.fieldName === \"PartnerKCKGuidCRM\") {\r\n if (pkDocumentCommonInfo!=null\r\n && pkDocumentCommonInfo!.fields.has('CirculationOfIndividuals')\r\n && pklciSection!.fields.has('CustomerRequest') \r\n && pklciSection!.fields.get(\"CustomerRequest\") === true) {\r\n if (e.fieldValue != null \r\n && e.fieldValue !== '') {\r\n // Проставляем флаг Обращение контрагента/клиента\r\n pkDocumentCommonInfo.fields.set(\"CirculationOfIndividuals\",true,DotNetType.Boolean);\r\n }\r\n else {\r\n // Снимаем флаг Обращение контрагента/клиента\r\n pkDocumentCommonInfo.fields.set(\"CirculationOfIndividuals\",false,DotNetType.Boolean);\r\n }\r\n }\r\n\r\n // Подставляем первую попавшуюся сделку\r\n //ChUIHelper.SendingRequestForDeal(context, e.fieldValue);\r\n // Подставляем первый попавшийся объект\r\n //ChUIHelper.SendingRequestForObject(context, e.fieldValue);\r\n }\r\n });\r\n }\r\n public static CheckSubjectConrol(context: ICardUIExtensionContext) {\r\n ChUIHelper.ControllerCustomSubject(context);\r\n let pkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\"); \r\n if (pkDocumentCommonInfo == null) return;\r\n pkDocumentCommonInfo.fields.fieldChanged.add(e => { \r\n if (e.fieldName === \"CirculationOfIndividuals\")\r\n {\r\n let pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pkiiSection != null)\r\n {\r\n pkiiSection.fields.set('HideCustomSubject', null); \r\n pkiiSection.fields.set('TopicOfAppealRowID', null); \r\n pkiiSection.fields.set('TopicOfAppealName', null); \r\n } \r\n ChUIHelper.ControllerCustomSubject(context);\r\n }\r\n \r\n });\r\n let pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pkiiSection == null) return;\r\n pkiiSection.fields.fieldChanged.add(async e => { \r\n if (e.fieldName === \"HideCustomSubject\")\r\n { \r\n if (pkiiSection != null)\r\n {\r\n pkiiSection.fields.set('TopicOfAppealRowID', null); \r\n pkiiSection.fields.set('TopicOfAppealName', null); \r\n } \r\n ChUIHelper.ControllerCustomSubject(context);\r\n }\r\n if (e.fieldName === \"KindID\")\r\n { \r\n if (pkiiSection != null)\r\n {\r\n pkiiSection.fields.set('HideCustomSubject', null);\r\n pkiiSection.fields.set('TopicOfAppealRowID', null); \r\n pkiiSection.fields.set('TopicOfAppealName', null); \r\n }\r\n if(e.fieldValue !=null)\r\n {\r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.PkCheckCustomSubject;\r\n request.info[\"KindID\"] = e.fieldValue; \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n if(response.info!=null && response.info.SupportsCustomSubject!=null) \r\n { \r\n if (context.model.card.info.SupportsCustomSubject!=null)\r\n context.model.card.info.SupportsCustomSubject = response.info.SupportsCustomSubject;\r\n else\r\n context.model.card.info[\"SupportsCustomSubject\"] = response.info.SupportsCustomSubject; \r\n } else\r\n {\r\n if (context.model.card.info.SupportsCustomSubject!=null)\r\n context.model.card.info.SupportsCustomSubject = createTypedField(false, DotNetType.Boolean);\r\n else\r\n context.model.card.info[\"SupportsCustomSubject\"] = createTypedField(false, DotNetType.Boolean); \r\n } \r\n } \r\n } \r\n else \r\n if (context.model.card.info.SupportsCustomSubject!=null)\r\n context.model.card.info.SupportsCustomSubject = createTypedField(false, DotNetType.Boolean);\r\n else\r\n context.model.card.info[\"SupportsCustomSubject\"]=createTypedField(false, DotNetType.Boolean); \r\n ChUIHelper.ControllerCustomSubject(context);\r\n }\r\n if (e.fieldName === \"TopicOfAppealName\" && e.fieldValue!=null)\r\n {\r\n let pklciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (pklciSection != null) \r\n pklciSection.fields.set('Subject', e.fieldValue, DotNetType.String);\r\n }\r\n });\r\n }\r\n public static ShowCustomSubject(context: ICardUIExtensionContext, Visible: boolean) {\r\n \r\n if(Visible)\r\n {\r\n let PkSubject = context.model.controls.get('PkSubject');\r\n if (PkSubject != null) PkSubject.controlVisibility = Visibility.Collapsed;\r\n let PkSubjectCustom = context.model.controls.get('PkSubjectCustom');\r\n if (PkSubjectCustom != null) PkSubjectCustom.controlVisibility = Visibility.Visible;\r\n context.model.card.info[\"ShowCustomSubject\"] = createTypedField(true,DotNetType.Boolean);\r\n } \r\n else\r\n {\r\n let PkSubject = context.model.controls.get('PkSubject');\r\n if (PkSubject != null) PkSubject.controlVisibility = Visibility.Visible;\r\n let PkSubjectCustom = context.model.controls.get('PkSubjectCustom');\r\n if (PkSubjectCustom != null) PkSubjectCustom.controlVisibility = Visibility.Collapsed;\r\n context.model.card.info[\"ShowCustomSubject\"] = createTypedField(false,DotNetType.Boolean);\r\n }\r\n }\r\n public static ShowCheckBoxCustomSubject(context: ICardUIExtensionContext, Visible: boolean) {\r\n if(Visible)\r\n {\r\n let PkHideCustomTheme = context.model.controls.get('PkHideCustomTheme');\r\n if (PkHideCustomTheme != null) PkHideCustomTheme.controlVisibility = Visibility.Visible;\r\n } \r\n else\r\n {\r\n let PkHideCustomTheme = context.model.controls.get('PkHideCustomTheme');\r\n if (PkHideCustomTheme != null) PkHideCustomTheme.controlVisibility = Visibility.Collapsed;\r\n }\r\n let pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if(pkiiSection!=null)\r\n return pkiiSection.fields.get('HideCustomSubject')==true\r\n }\r\n public static ControllerCustomSubject(context: ICardUIExtensionContext) {\r\n if (context.model.card.info.SupportsCustomSubject==null) return;\r\n let IsKindSupported = context.model.card.info.SupportsCustomSubject;\r\n if (IsKindSupported.$value == true)\r\n {\r\n let flag = ChUIHelper.ShowCheckBoxCustomSubject(context, true)==false;\r\n ChUIHelper.ShowCustomSubject(context, flag);\r\n } else\r\n {\r\n ChUIHelper.ShowCheckBoxCustomSubject(context, false);\r\n ChUIHelper.ShowCustomSubject(context, false);\r\n }\r\n }\r\n /// \r\n /// Скрытие отображение полей Виновник,Сумма\r\n /// \r\n public static ChangingFlagsCulpritInIncomingDoc(context: ICardUIExtensionContext)\r\n {\r\n let pklciSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pklciSection == null) return; \r\n let CulpritTypeID = pklciSection.fields.tryGet(\"CulpritTypeID\");\r\n let AmountTypeID = pklciSection.fields.tryGet(\"AmountTypeID\");\r\n \r\n if(CulpritTypeID!=null && CulpritTypeID==0)\r\n {\r\n let Culprit = context.model.controls.get('Culprit');\r\n if (Culprit != null) Culprit.controlVisibility = Visibility.Visible;\r\n }\r\n if(AmountTypeID!=null && AmountTypeID == 0)\r\n {\r\n let CulpritAmount = context.model.controls.get('CulpritAmount');\r\n if (CulpritAmount != null) CulpritAmount.controlVisibility = Visibility.Visible;\r\n }\r\n \r\n pklciSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"CulpritTypeID\")\r\n {\r\n if (e.fieldValue != null && e.fieldValue==0)\r\n {\r\n let Culprit = context.model.controls.get('Culprit');\r\n if (Culprit != null) Culprit.controlVisibility = Visibility.Visible;\r\n } else\r\n {\r\n let Culprit = context.model.controls.get('Culprit');\r\n if (Culprit != null) Culprit.controlVisibility = Visibility.Collapsed;\r\n if (pklciSection != null) {\r\n pklciSection.fields.set(\"СulpritExternalID\", null);\r\n pklciSection.fields.set(\"СulpritGuidCRM\", null);\r\n pklciSection.fields.set(\"СulpritID\", null);\r\n pklciSection.fields.set(\"СulpritName\", null);\r\n }\r\n }\r\n }\r\n if (e.fieldName === \"AmountTypeID\")\r\n {\r\n if (e.fieldValue != null && e.fieldValue==0)\r\n {\r\n let CulpritAmount = context.model.controls.get('CulpritAmount');\r\n if (CulpritAmount != null) CulpritAmount.controlVisibility = Visibility.Visible;\r\n } else\r\n {\r\n let CulpritAmount = context.model.controls.get('CulpritAmount');\r\n if (CulpritAmount != null) CulpritAmount.controlVisibility = Visibility.Collapsed;\r\n if (pklciSection != null) pklciSection.fields.set(\"CulpritAmount\", null); \r\n }\r\n } \r\n if (e.fieldValue != null && e.fieldName === \"KindID\")\r\n {\r\n if (!(Guid.equals(e.fieldValue, PkIncomingKinds.RecalculationID) || Guid.equals(e.fieldValue, PkIncomingKinds.FinishingBuilderID) || Guid.equals(e.fieldValue, PkIncomingKinds.PropertyID) || Guid.equals(e.fieldValue, PkIncomingKinds.RepairPaymentID) || Guid.equals(e.fieldValue, PkIncomingKinds.ViolationOfTheTermID))) { \r\n if (pklciSection != null) {\r\n pklciSection.fields.set(\"AmountTypeID\", null);\r\n pklciSection.fields.set(\"AmountTypeName\", null);\r\n pklciSection.fields.set(\"CulpritTypeID\", null);\r\n pklciSection.fields.set(\"CulpritTypeName\", null);\r\n pklciSection.fields.set(\"IsAmountAgreedID\", null);\r\n pklciSection.fields.set(\"IsAmountAgreedName\", null);\r\n } \r\n }\r\n }\r\n });\r\n }\r\n\r\n /// \r\n /// Изменения в интерфейсе входящего документа при изменении сделки или договора\r\n /// \r\n public static ChangesInUIWhenContractIsChanging (context: ICardUIExtensionContext)\r\n {\r\n let cardSection = context.model.card.sections.tryGet(\"PkIncomingInfo\");\r\n if (cardSection == null)\r\n cardSection = context.model.card.sections.tryGet(\"PkClientDocumentInfo\");\r\n\r\n cardSection!.fields.fieldChanged.add(e => {\r\n // Изменился флаг Обращение контрагента/клиента\r\n if (e.fieldName === \"ContractID\"){\r\n ChUIHelper.ClearDealField(cardSection);\r\n if (e.fieldValue != null)\r\n ChUIHelper.InsertADealByAContract(context, e.fieldValue)\r\n }\r\n });\r\n }\r\n \r\n /// \r\n /// Изменения в интерфейсе служебной записи при изменении типа СЗ\r\n /// \r\n public static ChangesInUIWhenMemoTypeIsChanging(context: ICardUIExtensionContext)\r\n {\r\n let pkMemoInfo = context.model.card.sections.tryGet(\"PkMemoInfo\");\r\n if (isNullOrUndefined(pkMemoInfo))\r\n {\r\n return;\r\n }\r\n\r\n if (pkMemoInfo != null) {\r\n pkMemoInfo.fields.fieldChanged.add(e => {\r\n // Изменился флаг Обращение контрагента/клиента\r\n if (e.fieldName === \"KindID\"){\r\n ChUIHelper.CleaningInAMemo(context);\r\n // Должен отрабатывать между этими двумя методами\r\n ChUIHelper.LockTemplateControls(context.model, e.fieldValue);\r\n ChUIHelper.GetAndSetInfoFromSettingsCard(context, e.fieldName, e.fieldValue); \r\n ChUIHelper.SetControlsVisibility(context, e.fieldValue);\r\n }\r\n });\r\n }\r\n\r\n let kindId = pkMemoInfo.fields.tryGet(\"KindID\");\r\n // Поле вид обязательно поэтому делаем блокировку при создании карточки,\r\n // в остальных случаях есть обработчик при изменении kindID\r\n if (context.card.storeMode == CardStoreMode.Insert)\r\n {\r\n \r\n ChUIHelper.LockTemplateControls(context.model, kindId);\r\n }\r\n\r\n ChUIHelper.SetControlsVisibility(context, kindId);\r\n }\r\n\r\n /// \r\n /// Изменения в интерфейсе входящего документа при изменении сделки или договора\r\n /// \r\n public static ChangesInUIWhenDealOrContractIsChanging(context: ICardUIExtensionContext)\r\n {\r\n let pkIncomingSection = context.model.card.sections.tryGet(\"PkIncomingInfo\");\r\n let IncomingPayer = CdUIHelper.GetUIControlFromModel(context.model!, \"IncomingPayer\");\r\n if (pkIncomingSection != null) {\r\n pkIncomingSection.fields.fieldChanged.add(async e => { \r\n if (e.fieldName === \"ContractID\"){\r\n ChUIHelper.ClearObjectTable(context);\r\n ChUIHelper.GetObjectAndRealEstate(context, e.fieldName, e.fieldValue)\r\n }\r\n if(e.fieldName === \"ContractID\" && e.fieldValue!=null){\r\n this.SetDateOfConclusion(context,e.fieldValue); \r\n }\r\n if(e.fieldName === \"ContractExtID\" && e.fieldValue!=null){ \r\n if(IncomingPayer!=null && pkIncomingSection!=null)\r\n await this.InsertAPayerByAContract(e.fieldValue,pkIncomingSection); \r\n }\r\n if(e.fieldName === \"ContractExtID\" && e.fieldValue==null && pkIncomingSection!=null){\r\n pkIncomingSection.fields.set(\"PayerID\",null);\r\n pkIncomingSection.fields.set(\"PayerExternalID\",null);\r\n pkIncomingSection.fields.set(\"PayerName\",null);\r\n pkIncomingSection.fields.set(\"PartnerKCKID\",null);\r\n pkIncomingSection.fields.set(\"PartnerKCKExternalID\",null);\r\n pkIncomingSection.fields.set(\"PartnerKCKName\",null);\r\n pkIncomingSection.fields.set(\"PartnerKCKGuidCRM\",null); \r\n }\r\n });\r\n }\r\n }\r\n\r\n public static async InsertAPayerByAContract(fieldValue, pkIncomingInfoSection: CardSection) {\r\n \r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.GetPayerByContract; \r\n request.info[\"ContractExtID\"] = fieldValue;\r\n request.info[\"PartnerKCKExternalID\"] = pkIncomingInfoSection.fields.get('PartnerKCKExternalID');\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info != null && response.info.PayerID != null) { \r\n if (pkIncomingInfoSection != null){ \r\n pkIncomingInfoSection.fields.set(\"PayerID\", response.info.PayerID); \r\n pkIncomingInfoSection.fields.set(\"PayerExternalID\", response.info.PayerExternalID); \r\n pkIncomingInfoSection.fields.set(\"PayerName\", response.info.PayerName);\r\n } \r\n }\r\n }\r\n\r\n /// \r\n ///Заполнение поля \"дата заключения\"\r\n /// \r\n public static async SetDateOfConclusion(context: ICardUIExtensionContext, ContractID)\r\n { \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetContractDate;\r\n request.info[\"ContractID\"] = createTypedField(ContractID, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n \r\n let pkIncomingSection = context.model.card.sections.tryGet(\"PkIncomingInfo\");\r\n if (pkIncomingSection != null) {\r\n CdCommonHelper.SetFieldToSection(pkIncomingSection,\"DateOfConclusion\",response!.info!.ContractDate)\r\n } \r\n \r\n }\r\n\r\n /// \r\n /// Изменения в интерфейсе клиентского документа при изменении сделки или договора\r\n /// \r\n public static ChangesInUIWhenDealOrContractIsChangingInClientDocument(context: ICardUIExtensionContext)\r\n {\r\n let pkClientSection = context.model.card.sections.tryGet(\"PkClientDocumentInfo\");\r\n if (pkClientSection != null) {\r\n pkClientSection.fields.fieldChanged.add(e => {\r\n // Изменился флаг Обращение контрагента/клиента\r\n if (e.fieldName === \"ContractID\"){\r\n ChUIHelper.ClearObjectTable(context);\r\n ChUIHelper.GetObjectAndRealEstate(context, e.fieldName, e.fieldValue)\r\n }\r\n });\r\n }\r\n }\r\n\r\n /// \r\n /// Удаление всех записей из таблицы Объекты (PkObjectList)\r\n /// \r\n public static ClearObjectTable(context: ICardUIExtensionContext)\r\n {\r\n // Удаление существующих записей в таблице Объекты\r\n const polSectionRows = context.model.card.sections.tryGet('PkObjectList')!.rows;\r\n if (polSectionRows != null) {\r\n for (let i = polSectionRows.length - 1; i >= 0; i--) {\r\n if (polSectionRows[i].state === CardRowState.None) {\r\n polSectionRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n polSectionRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// \r\n /// Очистка данных в служебной записке\r\n /// \r\n public static CleaningInAMemo(context: ICardUIExtensionContext)\r\n {\r\n let documentCommonInfo = context.model.card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n if (documentCommonInfo != null){\r\n // Юридическое лицо\r\n //documentCommonInfo.fields.set(\"DepartmentID\", null);\r\n //documentCommonInfo.fields.set(\"DepartmentName\", null);\r\n // Тема\r\n documentCommonInfo.fields.set(\"Subject\", null);\r\n }\r\n\r\n let pkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n\r\n if (pkDocumentCommonInfo != null){\r\n // Исполнитель\r\n pkDocumentCommonInfo.fields.set(\"PerformerID\", null);\r\n pkDocumentCommonInfo.fields.set(\"PerformerName\", null);\r\n pkDocumentCommonInfo.fields.set(\"PerformerDepartmentID\", null);\r\n // Содержание\r\n pkDocumentCommonInfo.fields.set(\"Description\", null);\r\n }\r\n\r\n // Кому\r\n const pkAddresseesRows = context.model.card.sections.tryGet(\"PkAddressees\")!.rows;\r\n if (pkAddresseesRows != null) {\r\n for (let i = pkAddresseesRows.length - 1; i >= 0; i--) {\r\n if (pkAddresseesRows[i].state === CardRowState.None) {\r\n pkAddresseesRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n pkAddresseesRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // Копия\r\n const pkAddresseesByBelongingRows = context.model.card.sections.tryGet(\"PkAddresseesByBelonging\")!.rows;\r\n if (pkAddresseesByBelongingRows != null) {\r\n for (let i = pkAddresseesByBelongingRows.length - 1; i >= 0; i--) {\r\n if (pkAddresseesByBelongingRows[i].state === CardRowState.None) {\r\n pkAddresseesByBelongingRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n pkAddresseesByBelongingRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // Подписант\r\n const pkPersonalSignersRows = context.model.card.sections.tryGet(\"PkPersonalSigners\")!.rows;\r\n if (pkPersonalSignersRows != null) {\r\n for (let i = pkPersonalSignersRows.length - 1; i >= 0; i--) {\r\n if (pkPersonalSignersRows[i].state === CardRowState.None) {\r\n pkPersonalSignersRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n pkPersonalSignersRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // Согласующие\r\n const pkApproversRows = context.model.card.sections.tryGet(\"PkApprovers\")!.rows;\r\n if (pkApproversRows != null) {\r\n for (let i = pkApproversRows.length - 1; i >= 0; i--) {\r\n if (pkApproversRows[i].state === CardRowState.None) {\r\n pkApproversRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n pkApproversRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // В этом блоке убираем свойство ReadOnly\r\n \r\n // Кому\r\n let addreseeControl = context.model.controls.get(\"AddreseeControl\");\r\n if (addreseeControl != null)\r\n addreseeControl.isReadOnly = false;\r\n // Юридическое лицо\r\n let departmentControl = context.model.controls.get(\"DepartmentControl\");\r\n if (departmentControl != null)\r\n departmentControl.isReadOnly = false;\r\n // Копия\r\n let addreseeByBelongingControl = context.model.controls.get(\"AddreseeByBelongingControl\");\r\n if (addreseeByBelongingControl != null)\r\n addreseeByBelongingControl.isReadOnly = false;\r\n // Исполнитель\r\n let perfomerControl = context.model.controls.get(\"PerfomerControl\");\r\n if (perfomerControl != null)\r\n perfomerControl.isReadOnly = false;\r\n // Подписант\r\n let signerControl = context.model.controls.get(\"SignerControl\");\r\n if (signerControl != null)\r\n signerControl.isReadOnly = false;\r\n // Тема\r\n let subjectControl = context.model.controls.get(\"Subject\");\r\n if (subjectControl != null)\r\n subjectControl.isReadOnly = false;\r\n // Содержание\r\n let descriptionControl = context.model.controls.get(\"Description\");\r\n if (descriptionControl != null)\r\n descriptionControl.isReadOnly = false;\r\n }\r\n \r\n /// \r\n /// Очистка поля Сделка\r\n /// \r\n public static ClearDealField(cardSection)\r\n {\r\n if (cardSection != null)\r\n {\r\n if (cardSection.fields.tryGet(\"DealID\")!=null)\r\n cardSection.fields.set(\"DealID\",null);\r\n if (cardSection.fields.tryGet(\"DealNumber\")!=null)\r\n cardSection.fields.set(\"DealNumber\",null);\r\n if (cardSection.fields.tryGet(\"DealGuid1C\")!=null)\r\n cardSection.fields.set(\"DealGuid1C\",null);\r\n }\r\n }\r\n\r\n /// \r\n /// Подставляем объект/объект недвижимости, в зависимости от выбранной сделки/договора\r\n /// \r\n public static async GetObjectAndRealEstate(context: ICardUIExtensionContext, fieldName, fieldValue)\r\n {\r\n if (fieldValue != null)\r\n {\r\n if (fieldName == \"DealGuid1C\")\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetObjectAndRealEstate;\r\n request.info[\"DealGuid1C\"] = createTypedField(fieldValue, DotNetType.String);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n \r\n // response.info!.Result\r\n if(response.info!=null && response.info.ObjectID!=null)\r\n {\r\n let objectID = response.info!.ObjectID.$value;\r\n if (objectID != null){\r\n \r\n let pkObjectListSection;\r\n if ((pkObjectListSection = context.model.card.sections.tryGet(\"PkObjectList\")) != null){\r\n let objectRow = new CardRow();\r\n objectRow.rowId = Guid.newGuid();\r\n\r\n if (response.info!.RegionID != null)\r\n objectRow.set(\"RegionID\", createTypedField(response.info!.RegionID.$value, DotNetType.Guid));\r\n if (response.info!.RegionName != null)\r\n objectRow.set(\"RegionName\", createTypedField(response.info!.RegionName.$value, DotNetType.String));\r\n if (response.info!.CityID != null)\r\n objectRow.set(\"CityID\", createTypedField(response.info!.CityID.$value, DotNetType.Guid));\r\n if (response.info!.CityName != null)\r\n objectRow.set(\"CityName\", createTypedField(response.info!.CityName.$value, DotNetType.String));\r\n if (response.info!.ProjectID != null)\r\n objectRow.set(\"ProjectID\", createTypedField(response.info!.ProjectID.$value, DotNetType.Guid));\r\n if (response.info!.ProjectName != null)\r\n objectRow.set(\"ProjectName\", createTypedField(response.info!.ProjectName.$value, DotNetType.String));\r\n if (response.info!.ObjectID != null)\r\n objectRow.set(\"ObjectID\", createTypedField(response.info!.ObjectID.$value, DotNetType.Guid));\r\n if (response.info!.ObjectName != null)\r\n objectRow.set(\"ObjectName\", createTypedField(response.info!.ObjectName.$value, DotNetType.String));\r\n if (response.info!.ObjectFullName != null)\r\n objectRow.set(\"ObjectFullName\", createTypedField(response.info!.ObjectFullName.$value, DotNetType.String));\r\n if (response.info!.LivingComplex != null)\r\n objectRow.set(\"LivingComplex\", createTypedField(response.info!.LivingComplex.$value, DotNetType.String));\r\n if (response.info!.ObjectCode1c != null)\r\n objectRow.set(\"ObjectCode1c\", createTypedField(response.info!.ObjectCode1c.$value, DotNetType.String));\r\n if (response.info!.AddressPost != null)\r\n objectRow.set(\"AddressPost\", createTypedField(response.info!.AddressPost.$value, DotNetType.String));\r\n if (response.info!.ResidentialComplexID != null)\r\n objectRow.set(\"ResidentialComplexID\", createTypedField(response.info!.ResidentialComplexID.$value, DotNetType.Guid));\r\n if (response.info!.ResidentialComplexName != null)\r\n objectRow.set(\"ResidentialComplexName\", createTypedField(response.info!.ResidentialComplexName.$value, DotNetType.String));\r\n if (response.info!.RealEstateID != null)\r\n objectRow.set(\"RealEstateID\", createTypedField(response.info!.RealEstateID.$value, DotNetType.Guid));\r\n if (response.info!.RealEstateName != null)\r\n objectRow.set(\"RealEstateName\", createTypedField(response.info!.RealEstateName.$value, DotNetType.String));\r\n\r\n objectRow.state = CardRowState.Inserted;\r\n pkObjectListSection.rows.push(objectRow);\r\n }\r\n }\r\n } \r\n }\r\n\r\n if (fieldName == \"ContractID\")\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetObjectAndRealEstate;\r\n request.info[\"ContractID\"] = createTypedField(fieldValue, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n if(response.info!=null && response.info.ObjectID!=null)\r\n {\r\n let objectID = response.info!.ObjectID.$value;\r\n if (objectID != null){\r\n let pkObjectListSection;\r\n if ((pkObjectListSection = context.model.card.sections.tryGet(\"PkObjectList\")) != null){\r\n let objectRow = new CardRow();\r\n objectRow.rowId = Guid.newGuid();\r\n\r\n if (response.info!.RegionID != null)\r\n objectRow.set(\"RegionID\", createTypedField(response.info!.RegionID.$value, DotNetType.Guid));\r\n if (response.info!.RegionName != null)\r\n objectRow.set(\"RegionName\", createTypedField(response.info!.RegionName.$value, DotNetType.String));\r\n if (response.info!.CityID != null)\r\n objectRow.set(\"CityID\", createTypedField(response.info!.CityID.$value, DotNetType.Guid));\r\n if (response.info!.CityName != null)\r\n objectRow.set(\"CityName\", createTypedField(response.info!.CityName.$value, DotNetType.String));\r\n if (response.info!.ProjectID != null)\r\n objectRow.set(\"ProjectID\", createTypedField(response.info!.ProjectID.$value, DotNetType.Guid));\r\n if (response.info!.ProjectName != null)\r\n objectRow.set(\"ProjectName\", createTypedField(response.info!.ProjectName.$value, DotNetType.String));\r\n if (response.info!.ObjectID != null)\r\n objectRow.set(\"ObjectID\", createTypedField(response.info!.ObjectID.$value, DotNetType.Guid));\r\n if (response.info!.ObjectName != null)\r\n objectRow.set(\"ObjectName\", createTypedField(response.info!.ObjectName.$value, DotNetType.String));\r\n if (response.info!.ObjectFullName != null)\r\n objectRow.set(\"ObjectFullName\", createTypedField(response.info!.ObjectFullName.$value, DotNetType.String));\r\n if (response.info!.LivingComplex != null)\r\n objectRow.set(\"LivingComplex\", createTypedField(response.info!.LivingComplex.$value, DotNetType.String));\r\n if (response.info!.ObjectCode1c != null)\r\n objectRow.set(\"ObjectCode1c\", createTypedField(response.info!.ObjectCode1c.$value, DotNetType.String));\r\n if (response.info!.AddressPost != null)\r\n objectRow.set(\"AddressPost\", createTypedField(response.info!.AddressPost.$value, DotNetType.String));\r\n if (response.info!.ResidentialComplexID != null)\r\n objectRow.set(\"ResidentialComplexID\", createTypedField(response.info!.ResidentialComplexID.$value, DotNetType.Guid));\r\n if (response.info!.ResidentialComplexName != null)\r\n objectRow.set(\"ResidentialComplexName\", createTypedField(response.info!.ResidentialComplexName.$value, DotNetType.String));\r\n if (response.info!.RealEstateID != null)\r\n objectRow.set(\"RealEstateID\", createTypedField(response.info!.RealEstateID.$value, DotNetType.Guid));\r\n if (response.info!.RealEstateName != null)\r\n objectRow.set(\"RealEstateName\", createTypedField(response.info!.RealEstateName.$value, DotNetType.String));\r\n\r\n objectRow.state = CardRowState.Inserted;\r\n pkObjectListSection.rows.push(objectRow);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// \r\n /// Подставляем объект для процеса, в зависимости от сделки, возвраз покупателю\r\n /// \r\n public static async InserObjectByCustomerAsync(context: ICardUIExtensionContext, fieldName, fieldValue)\r\n {\r\n let pkRdProperties = context.model.card.sections.tryGet(\"PkRdProperties\");\r\n if (pkRdProperties != null) \r\n {\r\n let objectID = pkRdProperties.fields.tryGet(\"ObjectID\");\r\n if (objectID == null && fieldValue != null ) \r\n {\r\n if (fieldName == \"ContractID\")\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetObjectAndRealEstate;\r\n request.info[\"ContractID\"] = createTypedField(fieldValue, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n if(response.info!=null && response.info.ObjectID!=null)\r\n {\r\n let objectID = response.info!.ObjectID.$value;\r\n if (objectID != null)\r\n {\r\n if (pkRdProperties != null)\r\n {\r\n if (response.info!.ObjectID != null)\r\n pkRdProperties.fields.set(\"ObjectID\", createTypedField(response.info!.ObjectID.$value, DotNetType.Guid));\r\n if (response.info!.ObjectName != null)\r\n pkRdProperties.fields.set(\"ObjectName\", createTypedField(response.info!.ObjectName.$value, DotNetType.String));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// \r\n /// Получаем данные из настроечной карточки и заполняем соответствующие поля\r\n /// \r\n public static async GetAndSetInfoFromSettingsCard(context: ICardUIExtensionContext, fieldName, fieldValue)\r\n {\r\n if (fieldValue != null)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetInfoFromMemoSettingsCard;\r\n request.info[\"MemoTypeID\"] = createTypedField(fieldValue, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n \r\n if(response.info != null)\r\n {\r\n let card: Card = context.model.card;\r\n let mainSettingCardList = response.info!.MainSettingCardList!;\r\n let memoSettingsCardAddressees = response.info.MemoSettingsCardAddressees;\r\n let memoSettingsCardAddresseesBB = response.info.MemoSettingsCardAddresseesBB;\r\n let memoSettingsCardApprovers = response.info.MemoSettingsCardApprovers;\r\n let memoSettingsCardSigners = response.info.MemoSettingsCardPersonalSigners;\r\n let memoSettingsCardReadOnly = response.info.MemoSettingsCardReadOnly;\r\n let documentCommonInfo = card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n // Заполняем основную информацию\r\n if (mainSettingCardList != null)\r\n {\r\n if (mainSettingCardList.length !== 1) return;\r\n\r\n let pkDocumentCommonInfo = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n\r\n const values = mainSettingCardList[0];\r\n\r\n if (documentCommonInfo != null){\r\n // Юридическое лицо\r\n /*documentCommonInfo.fields.set(\"DepartmentID\", values.DepartmentID);\r\n documentCommonInfo.fields.set(\"DepartmentName\", values.DepartmentName);*/\r\n // Тема\r\n documentCommonInfo.fields.set(\"Subject\", values.Subject);\r\n }\r\n\r\n if (pkDocumentCommonInfo != null){\r\n // Исполнитель\r\n if ((Guid.equals(fieldValue, PkMemoKinds.BusinessTripId)\r\n || Guid.equals(fieldValue, PkMemoKinds.AdvanceReportId)\r\n || Guid.equals(fieldValue, PkMemoKinds.CancellationWithoutSwitchingToAnotherONTypeID)\r\n || Guid.equals(fieldValue, PkMemoKinds.CancellationByClientInitiativeTypeID)\r\n || Guid.equals(fieldValue, PkMemoKinds.CancellationByBuilderCompanyInitiativeTypeID)\r\n || (values.PerfomerID == null && (Guid.equals(fieldValue, PkMemoKinds.MotivationFinishingTypeID)\r\n || Guid.equals(fieldValue, PkMemoKinds.MotivationVISTypeID))))\r\n && documentCommonInfo != null)\r\n {\r\n pkDocumentCommonInfo.fields.set(\"PerformerID\", createTypedField(documentCommonInfo.fields.tryGet('AuthorID'), DotNetType.Guid));\r\n pkDocumentCommonInfo.fields.set(\"PerformerName\", createTypedField(documentCommonInfo.fields.tryGet('AuthorName'), DotNetType.String));\r\n }\r\n else\r\n {\r\n pkDocumentCommonInfo.fields.set(\"PerformerID\", values.PerfomerID);\r\n pkDocumentCommonInfo.fields.set(\"PerformerName\", values.PerfomerName);\r\n }\r\n // Содержание\r\n pkDocumentCommonInfo.fields.set(\"Description\", values.Description);\r\n }\r\n }\r\n\r\n // Заполняем адресат\r\n if (memoSettingsCardAddressees != null && memoSettingsCardAddressees.length > 0)\r\n {\r\n let values = memoSettingsCardAddressees;\r\n let i = 0;\r\n // Кому\r\n let pkAddresseesSection = card.sections.tryGet(\"PkAddressees\");\r\n if (pkAddresseesSection != null){\r\n memoSettingsCardAddressees.forEach(_ => {\r\n values = memoSettingsCardAddressees[i];\r\n\r\n let addresseeRow = new CardRow();\r\n addresseeRow.rowId = Guid.newGuid();\r\n addresseeRow.set(\"AddresseeID\", values!.AddresseeID);\r\n addresseeRow.set(\"AddresseeName\", values!.AddresseeName);\r\n addresseeRow.set(\"AddresseeDepartmentID\", null);\r\n addresseeRow.set(\"Order\", createTypedField(i, DotNetType.Int32));\r\n addresseeRow.state = CardRowState.Inserted;\r\n pkAddresseesSection!.rows.push(addresseeRow);\r\n i++;\r\n });\r\n }\r\n }\r\n\r\n\r\n // Заполняем адресат (копия)\r\n if (memoSettingsCardAddresseesBB != null)\r\n {\r\n let values = memoSettingsCardAddresseesBB;\r\n let i = 0;\r\n // Копия\r\n let pkAddresseesByBelongingSection = card.sections.tryGet(\"PkAddresseesByBelonging\");\r\n if (pkAddresseesByBelongingSection != null){\r\n memoSettingsCardAddresseesBB.forEach(_ => {\r\n values = memoSettingsCardAddresseesBB[i];\r\n let addresseeBBRow = new CardRow();\r\n addresseeBBRow.rowId = Guid.newGuid();\r\n addresseeBBRow.set(\"AddresseeByBelongingID\", values.AddresseeBBID);\r\n addresseeBBRow.set(\"AddresseeByBelongingName\", values.AddresseeBBName);\r\n addresseeBBRow.state = CardRowState.Inserted;\r\n pkAddresseesByBelongingSection!.rows.push(addresseeBBRow);\r\n i++;\r\n });\r\n }\r\n }\r\n else if (documentCommonInfo != null && (Guid.equals(fieldValue, PkMemoKinds.MotivationFinishingTypeID) || Guid.equals(fieldValue, PkMemoKinds.MotivationVISTypeID))){\r\n let pkAddresseesSection = card.sections.tryGet(\"PkAddressees\");\r\n if (pkAddresseesSection != null)\r\n {\r\n let addresseeRow = new CardRow();\r\n addresseeRow.rowId = Guid.newGuid();\r\n addresseeRow.set(\"AddresseeID\", documentCommonInfo.fields.tryGet('AuthorID'), DotNetType.Guid);\r\n addresseeRow.set(\"AddresseeName\", documentCommonInfo.fields.tryGet('AuthorName'), DotNetType.String);\r\n addresseeRow.set(\"AddresseeDepartmentID\", null);\r\n addresseeRow.set(\"Order\", createTypedField(0, DotNetType.Int32));\r\n addresseeRow.state = CardRowState.Inserted;\r\n pkAddresseesSection!.rows.push(addresseeRow);\r\n }\r\n }\r\n\r\n // Заполняем согласующих\r\n if (memoSettingsCardApprovers != null)\r\n {\r\n let values = memoSettingsCardApprovers;\r\n let i = 0;\r\n\r\n let approversSection = card.sections.tryGet(\"PkApprovers\");\r\n if (approversSection != null){\r\n memoSettingsCardApprovers.forEach(_ => {\r\n values = memoSettingsCardApprovers[i];\r\n let approverRow = new CardRow();\r\n approverRow.rowId = Guid.newGuid();\r\n approverRow.set(\"ApproverID\", values.ApproverID);\r\n approverRow.set(\"ApproverName\", values.ApproverName);\r\n approverRow.state = CardRowState.Inserted;\r\n approversSection!.rows.push(approverRow);\r\n i++;\r\n });\r\n }\r\n }\r\n\r\n // Заполняем подписантов\r\n if (memoSettingsCardSigners != null)\r\n {\r\n let values = memoSettingsCardSigners;\r\n let i = 0;\r\n\r\n let signersSection = card.sections.tryGet(\"PkPersonalSigners\");\r\n if (signersSection != null){\r\n memoSettingsCardSigners.forEach(_ => {\r\n values = memoSettingsCardSigners[i];\r\n let signerRow = new CardRow();\r\n signerRow.rowId = Guid.newGuid();\r\n signerRow.set(\"SignerID\", values.SignerID);\r\n signerRow.set(\"SignerName\", values.SignerName);\r\n signerRow.state = CardRowState.Inserted;\r\n signersSection!.rows.push(signerRow);\r\n i++;\r\n });\r\n }\r\n }\r\n\r\n if (memoSettingsCardReadOnly != null){\r\n let values = memoSettingsCardReadOnly[0];\r\n // В этом блоке убираем свойство ReadOnly\r\n // Кому\r\n let addreseeControl = context.model.controls.get(\"AddreseeControl\") as GridViewModel;\r\n if (values.AddreseeReadOnly.$value == true\r\n && addreseeControl != null)\r\n addreseeControl.isReadOnly = true;\r\n // Юридическое лицо\r\n let departmentControl = context.model.controls.get(\"DepartmentControl\") as GridViewModel;\r\n if (values.DepartmentReadOnly.$value == true\r\n && departmentControl != null)\r\n departmentControl.isReadOnly = true;\r\n // Копия\r\n let addreseeByBelongingControl = context.model.controls.get(\"AddreseeByBelongingControl\") as GridViewModel;\r\n if (values.DepartmentReadOnly.$value == true\r\n && addreseeByBelongingControl != null)\r\n addreseeByBelongingControl.isReadOnly = true;\r\n // Исполнитель\r\n let perfomerControl = context.model.controls.get(\"PerfomerControl\") as GridViewModel;\r\n if (values.PerfomerReadOnly.$value == true\r\n && perfomerControl != null)\r\n perfomerControl.isReadOnly = true;\r\n // Подписант\r\n let signerControl = context.model.controls.get(\"SignerControl\") as GridViewModel;\r\n if (values.SignerReadOnly.$value == true\r\n && signerControl != null)\r\n signerControl.isReadOnly = true;\r\n // Тема\r\n let subjectControl = context.model.controls.get(\"Subject\") as GridViewModel;\r\n if (values.SubjectReadOnly.$value == true\r\n && subjectControl != null)\r\n subjectControl.isReadOnly = true;\r\n // Содержание\r\n let descriptionControl = context.model.controls.get(\"Description\") as GridViewModel;\r\n if (values.DescriptionReadOnly.$value == true\r\n && descriptionControl != null)\r\n descriptionControl.isReadOnly = true;\r\n // Согласующие\r\n let outgoingApprovers = context.model.controls.get(\"OutgoingApprovers\") as GridViewModel;\r\n if (outgoingApprovers != null)\r\n outgoingApprovers.isReadOnly = values.ApproversReadOnly.$value == true;\r\n if (values.ApproversRequired.$value == true\r\n && outgoingApprovers != null)\r\n outgoingApprovers.isRequired = true;\r\n // Объекты\r\n let objects = context.model.controls.get(\"Objects\") as GridViewModel;\r\n if (values.ObjectListRequired.$value == true\r\n && objects != null)\r\n objects.isRequired = true;\r\n }\r\n }\r\n }\r\n\r\n if (fieldName == \"ContractID\")\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetObjectAndRealEstate;\r\n request.info[\"ContractID\"] = createTypedField(fieldValue, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n if(response.info!=null && response.info.ObjectID!=null)\r\n {\r\n let objectID = response.info!.ObjectID.$value;\r\n if (objectID != null){\r\n let pkObjectListSection;\r\n if ((pkObjectListSection = context.model.card.sections.tryGet(\"PkObjectList\")) != null){\r\n let objectRow = new CardRow();\r\n objectRow.rowId = Guid.newGuid();\r\n\r\n if (response.info!.RegionID != null)\r\n objectRow.set(\"RegionID\", createTypedField(response.info!.RegionID.$value, DotNetType.Guid));\r\n if (response.info!.RegionName != null)\r\n objectRow.set(\"RegionName\", createTypedField(response.info!.RegionName.$value, DotNetType.String));\r\n if (response.info!.CityID != null)\r\n objectRow.set(\"CityID\", createTypedField(response.info!.CityID.$value, DotNetType.Guid));\r\n if (response.info!.CityName != null)\r\n objectRow.set(\"CityName\", createTypedField(response.info!.CityName.$value, DotNetType.String));\r\n if (response.info!.ProjectID != null)\r\n objectRow.set(\"ProjectID\", createTypedField(response.info!.ProjectID.$value, DotNetType.Guid));\r\n if (response.info!.ProjectName != null)\r\n objectRow.set(\"ProjectName\", createTypedField(response.info!.ProjectName.$value, DotNetType.String));\r\n if (response.info!.ObjectID != null)\r\n objectRow.set(\"ObjectID\", createTypedField(response.info!.ObjectID.$value, DotNetType.Guid));\r\n if (response.info!.ObjectName != null)\r\n objectRow.set(\"ObjectName\", createTypedField(response.info!.ObjectName.$value, DotNetType.String));\r\n if (response.info!.ObjectFullName != null)\r\n objectRow.set(\"ObjectFullName\", createTypedField(response.info!.ObjectFullName.$value, DotNetType.String));\r\n if (response.info!.LivingComplex != null)\r\n objectRow.set(\"LivingComplex\", createTypedField(response.info!.LivingComplex.$value, DotNetType.String));\r\n if (response.info!.ObjectCode1c != null)\r\n objectRow.set(\"ObjectCode1c\", createTypedField(response.info!.ObjectCode1c.$value, DotNetType.String));\r\n if (response.info!.AddressPost != null)\r\n objectRow.set(\"AddressPost\", createTypedField(response.info!.AddressPost.$value, DotNetType.String));\r\n if (response.info!.ResidentialComplexID != null)\r\n objectRow.set(\"ResidentialComplexID\", createTypedField(response.info!.ResidentialComplexID.$value, DotNetType.Guid));\r\n if (response.info!.ResidentialComplexName != null)\r\n objectRow.set(\"ResidentialComplexName\", createTypedField(response.info!.ResidentialComplexName.$value, DotNetType.String));\r\n if (response.info!.RealEstateID != null)\r\n objectRow.set(\"RealEstateID\", createTypedField(response.info!.RealEstateID.$value, DotNetType.Guid));\r\n if (response.info!.RealEstateName != null)\r\n objectRow.set(\"RealEstateName\", createTypedField(response.info!.RealEstateName.$value, DotNetType.String));\r\n\r\n objectRow.state = CardRowState.Inserted;\r\n pkObjectListSection.rows.push(objectRow);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n /// \r\n /// Изменения в интерфейсе документа.\r\n /// \r\n public static ChangesInUIWhenKindChangingOutgoingDoc(context: ICardUIExtensionContext) {\r\n let pkOutgoingSection = context.model.card.sections.tryGet('PkOutgoing');\r\n if (pkOutgoingSection != null) {\r\n let typeID;\r\n let customerRequest;\r\n pkOutgoingSection.fields.fieldChanged.add(e => {\r\n if (e.fieldValue != null) {\r\n // Изменился флаг Обращение контрагента/клиента\r\n if (e.fieldName === \"CustomerRequest\" || e.fieldName === \"TypeID\") {\r\n if (pkOutgoingSection != null)\r\n {\r\n typeID = pkOutgoingSection.fields.tryGet(\"TypeID\");\r\n customerRequest = pkOutgoingSection.fields.tryGet(\"CustomerRequest\");\r\n\r\n }\r\n ChUIHelper.ChangingFieldsByOutgoingDocumentCustomerRequest(context, customerRequest, typeID);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /// \r\n /// Изменения в интерфейсе документа\r\n /// \r\n public static ChangesInUIWhenReceivingMethodChangingOutgoingDocAsync(context: ICardUIExtensionContext) {\r\n\r\n // пропускаем, если карточка еще не была сохранена\r\n if (context.card.storeMode == CardStoreMode.Insert)\r\n {\r\n return;\r\n }\r\n let pkDocumentCommonInfo = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pkDocumentCommonInfo != null) {\r\n pkDocumentCommonInfo.fields.fieldChanged.add(e => {\r\n if (e.fieldValue != null) {\r\n if (e.fieldName === \"ReceivingMethodID\") {\r\n if (pkDocumentCommonInfo != null)\r\n setTimeout(context.uiContext.cardEditor!.saveCard, 200, context.uiContext);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /// \r\n /// Автозаполнение поля ФИО если клиент основной\r\n /// \r\n public static ChangesFIObyPartner(context: ICardUIExtensionContext) { \r\n let pkIncomingSection = context.model.card.sections.tryGet(\"PkIncomingInfo\");\r\n let pkDocumentCommonInfo = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if (pkIncomingSection != null && pkDocumentCommonInfo!=null) {\r\n pkIncomingSection.fields.fieldChanged.add(e => {\r\n // Изменился флаг Обращение контрагента/клиента\r\n if (e.fieldValue!=null && e.fieldName === \"PartnerTypeID\")\r\n { \r\n if (pkIncomingSection != null && pkDocumentCommonInfo!=null && e.fieldValue==0)\r\n pkDocumentCommonInfo.fields.set(\"PartnersContacts\",pkIncomingSection.fields.get(\"PartnerKCKName\"),DotNetType.String);\r\n if (pkIncomingSection != null && pkDocumentCommonInfo!=null && e.fieldValue==1)\r\n pkDocumentCommonInfo.fields.set(\"PartnersContacts\",null);\r\n }\r\n if (e.fieldValue!=null && e.fieldName === \"PartnerKCKName\")\r\n { \r\n if (pkIncomingSection != null && pkDocumentCommonInfo!=null && pkIncomingSection.fields.get(\"PartnerTypeID\")==0)\r\n pkDocumentCommonInfo.fields.set(\"PartnersContacts\",e.fieldValue,DotNetType.String);\r\n }\r\n if(e.fieldValue==null &&(e.fieldName === \"PartnerKCKName\" || e.fieldName === \"PartnerTypeID\"))\r\n {\r\n if (pkDocumentCommonInfo != null)\r\n pkDocumentCommonInfo.fields.set(\"PartnersContacts\",null);\r\n }\r\n \r\n });\r\n }\r\n\r\n }\r\n /// \r\n /// Копирование поля номер\r\n /// \r\n public static CheckClickOnCopyButton(context: ICardUIExtensionContext) {\r\n const buttonControlModel = context.model.controls.get(\"CopyButton\") as ButtonViewModel;\r\n if (buttonControlModel == null) return;\r\n buttonControlModel.onClick = () => {\r\n const DocumentCommonInfo = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (DocumentCommonInfo === null) return;\r\n let number = DocumentCommonInfo!.fields.get('FullNumber');\r\n if(number!=null)\r\n { \r\n let anyNavigator;\r\n anyNavigator = window.navigator;\r\n anyNavigator.clipboard.writeText(number); \r\n } \r\n };\r\n }\r\n\r\n /// \r\n /// Доступность редактирования полей во входящем для процесса по расдоржению дду\r\n /// \r\n public static AccessibilityOfEditingControlsByTask(context: ICardUIExtensionContext,kindID)\r\n {\r\n if (kindID == null\r\n || (kindID.toLowerCase() != PkIncomingKinds.TerminationOfDDUID.toLowerCase()\r\n && kindID.toLowerCase() != PkIncomingKinds.TerminationOfPDKPID.toLowerCase())) return;\r\n let isCustomerDecision=false;\r\n let isTermination=false;\r\n let isRevaluation=false;\r\n let isNotActiveTask=true;\r\n context.card.tasks.forEach(task => { if(task.typeId.toLowerCase() === ChTaskTypes.PkCheckCustomerDecisionTypeID.toLowerCase()) isCustomerDecision=true;});\r\n context.card.tasks.forEach(task => { if(task.typeId.toLowerCase() === ChTaskTypes.PkApprovalTerminationTypeID.toLowerCase() || task.typeId.toLowerCase() === ChTaskTypes.PkCheckCustomerDecisionTypeID.toLowerCase()) isTermination=true;});\r\n context.card.tasks.forEach(task => { if(task.typeId.toLowerCase() === ChTaskTypes.PkRevaluationTypeID.toLowerCase() || task.typeId.toLowerCase() === ChTaskTypes.PkRevaluationForPDKPTypeID.toLowerCase()) isRevaluation=true;});\r\n context.card.tasks.forEach(task => {if(task.isPerformer) isNotActiveTask=false;}); \r\n if (isTermination && !isRevaluation)\r\n { \r\n let PkRevaluation = context.model.controls.get('PkRevaluation');\r\n if (PkRevaluation != null) PkRevaluation.isReadOnly=true;\r\n\r\n let ComentOSS = context.model.controls.get('ComentOSS');\r\n if (ComentOSS != null) ComentOSS.isReadOnly=true; \r\n \r\n if(!isCustomerDecision)\r\n {\r\n let AmountDecryption = context.model.controls.get('AmountDecryption');\r\n if (AmountDecryption != null) AmountDecryption.isReadOnly=true;\r\n\r\n let RefundedAmount = context.model.controls.get('RefundedAmount');\r\n if (RefundedAmount != null) RefundedAmount.isReadOnly=true; \r\n }\r\n }\r\n\r\n if (isRevaluation && !isTermination)\r\n {\r\n \r\n let TerminationBlock = context.model.blocks.get('TerminationBlock');\r\n if (TerminationBlock != null)\r\n TerminationBlock.controls.forEach(control => { control.isReadOnly = true;});\r\n \r\n let PkRevaluation = context.model.controls.get('PkRevaluation');\r\n if (PkRevaluation != null) PkRevaluation.isReadOnly=false; \r\n }\r\n\r\n if (isTermination && isRevaluation)\r\n {\r\n let ComentOSS = context.model.controls.get('ComentOSS');\r\n if (ComentOSS != null) ComentOSS.isReadOnly=true; \r\n \r\n if(!isCustomerDecision)\r\n {\r\n let AmountDecryption = context.model.controls.get('AmountDecryption');\r\n if (AmountDecryption != null) AmountDecryption.isReadOnly=true;\r\n\r\n let RefundedAmount = context.model.controls.get('RefundedAmount');\r\n if (RefundedAmount != null) RefundedAmount.isReadOnly=true; \r\n }\r\n }\r\n\r\n let pkdci = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (isNotActiveTask\r\n || (pkdci != null\r\n && pkdci.fields.has(\"StateID\")\r\n && (pkdci.fields.get(\"StateID\")==12\r\n || pkdci.fields.get(\"StateID\")==160\r\n || pkdci.fields.get(\"StateID\")==162\r\n || pkdci.fields.get(\"StateID\")==163\r\n )\r\n )\r\n )\r\n {\r\n let TerminationBlock = context.model.blocks.get('TerminationBlock');\r\n if (TerminationBlock != null)\r\n TerminationBlock.controls.forEach(control => { control.isReadOnly = true;});\r\n } \r\n }\r\n \r\n /// \r\n /// Изменение во входящем документе при изменении флага \"Добавить расчетный счет\"\r\n /// \r\n public static ChangesCreateAnBankAccount(context: ICardUIExtensionContext) {\r\n const pkIncomingInfoSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pkIncomingInfoSection === null) return;\r\n \r\n let pkBankAccountToCreateSection = context.model.card.sections.tryGet('PkBankAccountToCreate');\r\n if (pkBankAccountToCreateSection === null) return;\r\n \r\n let bankAccountToCreateBlock = context.model.blocks.get('BankAccountToCreateBlock');\r\n if (bankAccountToCreateBlock === null) return;\r\n \r\n let bankAccountIncomingControl = context.model.controls.get('BankAccountIncoming');\r\n if (bankAccountIncomingControl === null) return;\r\n \r\n let createAnBankAccountField = pkIncomingInfoSection!.fields.get('CreateAnBankAccount'); //pkIncomingInfoSection!.fields.tryGet('CreateAnBankAccount');\r\n \r\n\r\n if (createAnBankAccountField === true){\r\n pkIncomingInfoSection!.fields.set('BankAccountID', null)\r\n pkIncomingInfoSection!.fields.set('BankAccountName', null)\r\n\r\n bankAccountIncomingControl!.isReadOnly = true;\r\n bankAccountToCreateBlock!.blockVisibility = Visibility.Visible;\r\n }\r\n else{\r\n pkBankAccountToCreateSection!.fields.set('BankAccountNumber', null);\r\n pkBankAccountToCreateSection!.fields.set('BankID', null);\r\n pkBankAccountToCreateSection!.fields.set('BankName', null);\r\n pkBankAccountToCreateSection!.fields.set('BankBIK', null);\r\n\r\n bankAccountIncomingControl!.isReadOnly = false;\r\n bankAccountToCreateBlock!.blockVisibility = Visibility.Collapsed;\r\n }\r\n \r\n pkIncomingInfoSection!.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'CreateAnBankAccount'){\r\n if (e.fieldValue != null\r\n && e.fieldValue == true//createTypedField(true, DotNetType.Boolean)\r\n ){\r\n pkIncomingInfoSection!.fields.set('BankAccountID', null)\r\n pkIncomingInfoSection!.fields.set('BankAccountName', null)\r\n\r\n bankAccountIncomingControl!.isReadOnly = true;\r\n bankAccountToCreateBlock!.blockVisibility = Visibility.Visible;\r\n }\r\n else{\r\n pkBankAccountToCreateSection!.fields.set('BankAccountNumber', null);\r\n pkBankAccountToCreateSection!.fields.set('BankID', null);\r\n pkBankAccountToCreateSection!.fields.set('BankName', null);\r\n pkBankAccountToCreateSection!.fields.set('BankBIK', null);\r\n\r\n bankAccountIncomingControl!.isReadOnly = false;\r\n bankAccountToCreateBlock!.blockVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /// \r\n /// Изменение информации во входящем документе в зависимости от выбора Договора и Ставки НДС\r\n /// \r\n public static ChangesInUIWhenContractOrVATRateChangingIncomingDoc(context: ICardUIExtensionContext) {\r\n const pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n pkiiSection!.fields.fieldChanged.add(e => {\r\n if (e.fieldValue != null) {\r\n // Изменился Договор или Ставка НДС\r\n if ((e.fieldName === \"ContractNumberVirtual\" || e.fieldName === \"VATRateCaption\" || e.fieldName === \"RefundTypeID\") && pkiiSection!.fields.get(\"KindID\") != null && Guid.equals(pkiiSection!.fields.get(\"KindID\"), PkIncomingKinds.RefundID)) {\r\n ChUIHelper.ChangingFieldsByIncomingDocumentContractOrVATRate(context);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /// \r\n /// Изменение информации в распределительном письме в зависимости от выбора Договора и Ставки НДС\r\n /// \r\n public static ChangesInUIWhenContractOrVATRateChangingLetterCreditDoc(context: ICardUIExtensionContext) {\r\n const pkiiSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n pkiiSection!.fields.fieldChanged.add(e => {\r\n if (e.fieldValue != null) {\r\n // Изменился Договор или Ставка НДС\r\n if ((e.fieldName === \"ContractNumberVirtual\" || e.fieldName === \"VATRateCaption\" || e.fieldName === \"RefundTypeID\") && pkiiSection!.fields.get(\"KindID\") != null && Guid.equals(pkiiSection!.fields.get(\"KindID\"), PkLetterCreditKinds.ReturnToBuyerID)) {\r\n ChUIHelper.ChangingFieldsByCreditLetterContractOrVATRate(context);\r\n }\r\n }\r\n });\r\n }\r\n /// \r\n /// Кнопка открыть пакет\r\n /// \r\n public static PacketCardLogic(context: ICardUIExtensionContext)\r\n {\r\n let pkcdiSection = context.model.card.sections.tryGet('PkClientDocumentInfo');\r\n let button = context.model.controls.get(\"OpenPacketButton\") as ButtonViewModel;\r\n if (button != null) {\r\n if (context.model.card.storeMode == CardStoreMode.Insert) {\r\n button.controlVisibility = Visibility.Hidden;\r\n }\r\n\r\n button.onClick = async () => await showLoadingOverlay(async () => {\r\n if (pkcdiSection == null) {\r\n return;\r\n }\r\n\r\n let packetID = pkcdiSection.fields.tryGet(\"PacketID\");\r\n\r\n await openCard({\r\n cardId: packetID,\r\n cardTypeId: PkCardTypes.PkClientPacketVirtualTypeID});\r\n\r\n }, \"Открывается карточка пакета\");\r\n }\r\n }\r\n\r\n /// \r\n /// Заполнение поля юр лицо по договору\r\n /// \r\npublic static async GetPayerByContract(context: ICardUIExtensionContext)\r\n{\r\n let pklciSection = context.model.card.sections.tryGet('PkClientDocumentInfo');\r\n if (pklciSection == null) { return;}\r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.GetDealorPayerByPartnerKCK;\r\n request.info[\"PartnerKCKExternalID\"] = pklciSection.fields.tryGet(\"PartnerKCKExternalID\"); \r\n request.info[\"ContractExtID\"] = pklciSection.fields.tryGet(\"ContractExtID\"); \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerID\",response.info.PayerID)\r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerExternalID\",response.info.PayerExternalID)\r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerName\",response.info.PayerName) \r\n }\r\n}\r\n/// \r\n /// Подставляем объект по сделке/договору\r\n /// \r\n public static async CheckAutocompliteDealOrContract(context: ICardUIExtensionContext)\r\n {\r\n let pkObjectListSection; \r\n if(context.model.card.info.ContractforObject!=null && context.model.card.info.ContractforObject.$value!=null)\r\n {\r\n //подтянем объекты \r\n await ChUIHelper.GetObjectAndRealEstate(context, \"ContractID\", context.model.card.info.ContractforObject.$value);\r\n //Подтянем юр лицо по договору\r\n ChUIHelper.GetPayerByContract(context);\r\n }\r\n \r\n if(context.model.card.info.DealforObject!=null && context.model.card.info.DealforObject.$value!=null)\r\n {\r\n //если объекта нет попробуем по сделке \r\n if ((pkObjectListSection = context.model.card.sections.tryGet(\"PkObjectList\")) != null && pkObjectListSection.rows.length==0) \r\n await ChUIHelper.GetObjectAndRealEstate(context, \"DealGuid1C\", context.model.card.info.DealforObject.$value);\r\n }\r\n }\r\n /// \r\n /// Изменения полей клиентского документа\r\n /// \r\n public static ChangesFieldsInClientDocument(context: ICardUIExtensionContext) {\r\n \r\n let pklciSection = context.model.card.sections.tryGet('PkClientDocumentInfo');\r\n if (pklciSection == null) { return;}\r\n pklciSection.fields.fieldChanged.add(async e => {\r\n if(pklciSection==null) {return;} \r\n if (e.fieldName == \"ContractExtID\")\r\n {\r\n if (e.fieldValue != null && pklciSection.fields.tryGet(\"PartnerKCKExternalID\") != null)\r\n {\r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.GetDealorPayerByPartnerKCK;\r\n request.info[\"PartnerKCKExternalID\"] = pklciSection.fields.tryGet(\"PartnerKCKExternalID\"); \r\n request.info[\"ContractExtID\"] = e.fieldValue; \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerID\",response.info.PayerID)\r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerExternalID\",response.info.PayerExternalID)\r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerName\",response.info.PayerName) \r\n }\r\n }\r\n else\r\n {\r\n pklciSection.fields.set(\"PayerID\",null);\r\n pklciSection.fields.set(\"PayerExternalID\",null);\r\n pklciSection.fields.set(\"PayerName\",null);\r\n }\r\n if (e.fieldValue != null)\r\n {\r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.PkGetClientByContract; \r\n request.info[\"ContractExtID\"] = e.fieldValue; \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PartnerKCKID\",response.info.PartnerKCKID)\r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PartnerKCKExternalID\",response.info.PartnerKCKExternalID)\r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PartnerKCKName\",response.info.PartnerKCKName) \r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PartnerKCKGuidCRM\",response.info.PartnerKCKGuidCRM) \r\n }\r\n }\r\n } \r\n if (e.fieldName == \"PartnerKCKExternalID\") { \r\n if (e.fieldValue != null && pklciSection.fields.tryGet(\"ContractExtID\") != null){\r\n \r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.GetDealorPayerByPartnerKCK;\r\n request.info[\"PartnerKCKExternalID\"] = e.fieldValue; \r\n request.info[\"ContractExtID\"] = pklciSection.fields.tryGet(\"ContractExtID\"); \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerID\",response.info.PayerID)\r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerExternalID\",response.info.PayerExternalID)\r\n CdCommonHelper.SetFieldToSection(pklciSection,\"PayerName\",response.info.PayerName) \r\n }\r\n }\r\n else\r\n {\r\n pklciSection.fields.set(\"PayerID\",null);\r\n pklciSection.fields.set(\"PayerExternalID\",null);\r\n pklciSection.fields.set(\"PayerName\",null);\r\n } \r\n } \r\n\r\n \r\n });\r\n }\r\n\r\n\r\n public static InitializeExpenses(context: ICardUIExtensionContext)\r\n {\r\n const TableName = \"PkExpenseReports\";\r\n ChUIHelper.InitializeOrdering(context, TableName, \"NomStr\");\r\n ChUIHelper.InitializeNomenclatures(context);\r\n var card = context.model.card;\r\n this.InitializeVisiabilityOfExpenses(context, TableName, card, PkMemoKinds.AdvanceReportId, PkMemoKinds.BusinessTripId);\r\n this.InitializeVisiabilityOfExpenses(context, \"PkBusinessTripsVirtual\", card, PkMemoKinds.BusinessTripId);\r\n }\r\n\r\n /** Заполнить номер колонки при вставке в грид, начиная с единицы */\r\n /// \r\n /// Таблица\r\n /// Колонка, содержащая порядковый номер\r\n /// \r\n /// При задании в карточке значения по умолчанию все -равно заполняется с нуля\r\n /// При использовании колонки для сортировки в TessaAdmin номерация все-равно начинается с нуля\r\n /// При использовании значения по умолчанию = 1 в схеме, нумерация все-равно начинается с нуля\r\n /// \r\n public static InitializeOrdering(context: ICardUIExtensionContext, tableForOrdering: string, columnForOrdering: string)\r\n {\r\n let table = CdUIHelper.GetUIControl(context, tableForOrdering);\r\n if (isNullOrUndefined(table)) return;\r\n table.rowInitializing.add( async(e) =>\r\n {\r\n if (e.action != GridRowAction.Inserted) return;\r\n let currentValue = e.row.tryGet(columnForOrdering);\r\n if (currentValue != null && ((e.row.getField(columnForOrdering)!.$value as number) == 0 \r\n || table!.rows.map(x => x.row.getField(columnForOrdering)).some(x => (x!.$value as number) === (e.row.getField(columnForOrdering)!.$value as number))))\r\n {\r\n let maxOrder = Math.max.apply(null, table!.rows.map(x => x.row.getField(columnForOrdering)!.$value));\r\n CdCommonHelper.SetFieldToRow(e.row, columnForOrdering, createTypedField(maxOrder + 1, DotNetType.Int32));\r\n }\r\n });\r\n }\r\n\r\n /** Изменение номенклатуры в авансовом отчете. */\r\n public static InitializeNomenclatures(context: ICardUIExtensionContext)\r\n { \r\n let table = CdUIHelper.GetUIControl(context, 'PkExpenseReports');\r\n if (table == null) {\r\n return;\r\n }\r\n\r\n let pkAddresseesByBelongingSection = context.card.sections.tryGet(\"PkAddresseesByBelonging\")!;\r\n let pkExpenseReportsSection = context.card.sections.get('PkExpenseReports')!;\r\n let pkAddresseesSection = context.card.sections.get('PkAddressees')!;\r\n let pkMemoInfoSection = context.card.sections.get('PkMemoInfo')!;\r\n let pkPersonalSignersSection = context.card.sections.get('PkPersonalSigners')!;\r\n let addreseeControl = context.model.controls.get('AddreseeControl')!;\r\n if (pkExpenseReportsSection == null\r\n || pkAddresseesByBelongingSection == null\r\n || pkAddresseesSection == null\r\n || pkMemoInfoSection == null\r\n || pkPersonalSignersSection == null\r\n || addreseeControl == null) {\r\n return;\r\n }\r\n\r\n table.rowValidating.add(async e =>\r\n {\r\n if (pkMemoInfoSection.fields.get('KindID') == PkMemoKinds.AdvanceReportId.toLowerCase()) {\r\n let nomenclatureRefID = e.row.tryGet('NomenclatureRefID');\r\n let nomenclatureRefName = e.row.tryGet('NomenclatureRefName');\r\n pkExpenseReportsSection?.rows.forEach(async (row) => {\r\n row.set('NomenclatureRefID', createTypedField(nomenclatureRefID, DotNetType.Guid));\r\n row.set('NomenclatureRefName', createTypedField(nomenclatureRefName, DotNetType.String));\r\n });\r\n\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, pkAddresseesSection);\r\n\r\n if (nomenclatureRefID == PkMemoNomenclatureKinds.NotaryServicesID.toLowerCase()) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set('AddresseeID', createTypedField('bf8f116b-0217-440f-bcfc-9fac4a6e0bcf', DotNetType.Guid));\r\n row.set('AddresseeName', createTypedField('Петрова О. Ю.', DotNetType.String));\r\n row.set('AddresseeDepartmentID', null);\r\n row.set('Order', createTypedField(0, DotNetType.Int32));\r\n row.state = CardRowState.Inserted;\r\n pkAddresseesSection.rows.push(row);\r\n }\r\n\r\n if (nomenclatureRefID == PkMemoNomenclatureKinds.PostageID.toLowerCase()) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set('AddresseeID', createTypedField('393d6c44-a121-4d20-9e24-e28254de0ca1', DotNetType.Guid));\r\n row.set('AddresseeName', createTypedField('Павловская И. М.', DotNetType.String));\r\n row.set('AddresseeDepartmentID', null);\r\n row.set('Order', createTypedField(0, DotNetType.Int32));\r\n row.state = CardRowState.Inserted;\r\n pkAddresseesSection.rows.push(row);\r\n }\r\n\r\n if (nomenclatureRefID != PkMemoNomenclatureKinds.NotaryServicesID.toLowerCase()\r\n && nomenclatureRefID != PkMemoNomenclatureKinds.PostageID.toLowerCase()\r\n && pkPersonalSignersSection.rows.length != 0) {\r\n let signerRow = pkPersonalSignersSection.rows.get(0);\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set('AddresseeID', signerRow?.tryGetField('SignerID')!);\r\n row.set('AddresseeName', signerRow?.tryGetField('SignerName')!);\r\n row.set('AddresseeDepartmentID', null);\r\n row.set('Order', createTypedField(0, DotNetType.Int32));\r\n row.state = CardRowState.Inserted;\r\n pkAddresseesSection.rows.push(row);\r\n }\r\n \r\n if (nomenclatureRefID == PkMemoNomenclatureKinds.EconomicExpensesID.toLowerCase()\r\n || nomenclatureRefID == PkMemoNomenclatureKinds.OtherExpensesID.toLowerCase()) {\r\n addreseeControl.isReadOnly = false;\r\n }\r\n else {\r\n addreseeControl.isReadOnly = true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static HideReaders(context: ICardUIExtensionContext)\r\n {\r\n var readers = CdUIHelper.GetUIControl(context, \"Readers\");\r\n if (readers == null)\r\n {\r\n return;\r\n }\r\n\r\n if (!userSession.isAdmin)\r\n {\r\n readers.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n public static InitializeTableInstructionHistory(context: ICardUIExtensionContext)\r\n {\r\n var instructionHistoryTable = CdUIHelper.GetUIControl(context, \"InstructionHistory\");\r\n if (instructionHistoryTable == null)\r\n {\r\n return;\r\n }\r\n\r\n instructionHistoryTable.rowInitializing.add( e =>\r\n {\r\n if (e.action == GridRowAction.Inserted)\r\n {\r\n CdCommonHelper.SetFieldToRow(e.row, \"Date\", createTypedField(PkCommonHelper.GetDateTimeNow(null), DotNetType.DateTime));\r\n }\r\n });\r\n }\r\n\r\n /// \r\n /// Изменение информации во входящем документе в зависимости от выбора Договора и Ставки НДС\r\n /// \r\n public static ChangingFieldsByIncomingDocumentContractOrVATRate(context: ICardUIExtensionContext) {\r\n const pkiiSection = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (pkiiSection!.fields.get(\"ContractNumberVirtual\") != null && pkiiSection!.fields.get(\"VATRateCaption\") != null && pkiiSection!.fields.get(\"RefundTypeID\") != null)\r\n // @ts-ignore\r\n {\r\n let refundTypeID = pkiiSection!.fields.get(\"RefundTypeID\");\r\n let paymentPurpose = ChUIHelper.GetPaymentPurposeByRefundType(pkiiSection!.fields.get(\"ContractNumberVirtual\"), refundTypeID);\r\n pkiiSection!.fields.set(\"PaymentPurpose\", paymentPurpose, DotNetType.String);\r\n }\r\n }\r\n \r\n /// \r\n /// Изменение информации в распределительном письме в зависимости от выбора Договора и Ставки НДС\r\n /// \r\n public static ChangingFieldsByCreditLetterContractOrVATRate(context: ICardUIExtensionContext) {\r\n const pkiiSection = context.model.card.sections.tryGet('PkLetterCreditInfo');\r\n if (pkiiSection!.fields.get(\"ContractNumberVirtual\") != null && pkiiSection!.fields.get(\"VATRateCaption\") != null && pkiiSection!.fields.get(\"RefundTypeID\") != null)\r\n // @ts-ignore\r\n {\r\n let refundTypeID = pkiiSection!.fields.get(\"RefundTypeID\");\r\n let paymentPurpose = ChUIHelper.GetPaymentPurposeByRefundType(pkiiSection!.fields.get(\"ContractNumberVirtual\"), refundTypeID);\r\n pkiiSection!.fields.set(\"PaymentPurpose\", paymentPurpose, DotNetType.String);\r\n }\r\n }\r\n\r\n public static GetPaymentPurposeByRefundType(contractNumber: string, refundTypeID: any)\r\n {\r\n let paymentPurpose = \"Возврат д/с по Договору \" + contractNumber;\r\n switch (refundTypeID) {\r\n case PkIncomingRefundTypesEnum.RefundCashBTI:\r\n paymentPurpose += \" - в связи с уменьшением общей площади объекта по результатам обмеров БТИ.\";\r\n break;\r\n case PkIncomingRefundTypesEnum.RefundRepeatedMeasurementBTI:\r\n paymentPurpose += \" - в связи с уменьшением общей площади объекта по результатам обмеров БТИ.\";\r\n break;\r\n case PkIncomingRefundTypesEnum.RefundCashOverpay:\r\n paymentPurpose += \"- в связи с переплатой.\";\r\n break;\r\n case PkIncomingRefundTypesEnum.RefundCashByTermination:\r\n paymentPurpose += \"- в связи с расторжением.\";\r\n break;\r\n default:\r\n break;\r\n }\r\n return paymentPurpose;\r\n }\r\n \r\n /** Отображать авансовый отчет только в СЗ на открытие периода */\r\n private static InitializeVisiabilityOfExpenses(context: ICardUIExtensionContext, tableName: string, card: Card, ...params: string[]) {\r\n\r\n const memoInfo = card.sections.get(\"PkMemoInfo\");\r\n if (isNullOrUndefined(memoInfo)) {\r\n return;\r\n }\r\n\r\n const table = CdUIHelper.GetUIControl(context, tableName);\r\n if (isNullOrUndefined(table)) return;\r\n\r\n const KindId = \"KindID\";\r\n\r\n const setTableVisiability = type => {\r\n table!.controlVisibility = table!.captionVisibility =\r\n params.some(x => Guid.equals(type, x)) \r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n };\r\n\r\n let memoTypeId: string = memoInfo.fields.tryGet(KindId);\r\n setTableVisiability(memoTypeId);\r\n\r\n memoInfo.fields.fieldChanged.add((e) => {\r\n if (e.fieldName == KindId) {\r\n setTableVisiability(e.fieldValue);\r\n }\r\n });\r\n }\r\n\r\n \r\n /** Инициализируем таблицу для авансового отчета */\r\n public static InitializeExpensesTable(context: ICardUIExtensionContext)\r\n {\r\n ChUIHelper.InitVatCalculation(context);\r\n ChUIHelper.InitExpenseCopying(context);\r\n }\r\n\r\n /** Расчет суммы НДС */\r\n private static InitVatCalculation(context: ICardUIExtensionContext)\r\n {\r\n const expenseReports = context.card.sections.get(\"PkExpenseReports\");\r\n if (isNullOrUndefined(expenseReports))\r\n {\r\n return;\r\n }\r\n\r\n const a = (args: CardFieldChangedEventArgs) =>\r\n {\r\n if (args == null)\r\n {\r\n return;\r\n }\r\n\r\n const row = args.storage;\r\n\r\n if (args.fieldName != \"VATRateCaption\" && args.fieldName != \"RubReportedAmount\")\r\n {\r\n return;\r\n }\r\n\r\n const vatCaption = row.tryGet(\"VATRateCaption\");\r\n const sum = row.tryGet(\"RubReportedAmount\");\r\n const vatValue = PkClientHelper.GetVatValue(vatCaption);\r\n const amount = PkCommonHelper.financial(vatValue * sum / 100);\r\n row.set(\"AmountVAT\", amount.toString().replace(',', '.'), DotNetType.Decimal);\r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(expenseReports, a);\r\n }\r\n\r\n \r\n /** Дублируем сумму по отчету в сумму к возмещению */\r\n private static InitExpenseCopying(context: ICardUIExtensionContext)\r\n {\r\n const expenseReports = context.card.sections.get(\"PkExpenseReports\");\r\n if (isNullOrUndefined(expenseReports))\r\n {\r\n return;\r\n }\r\n\r\n const a = (args: CardFieldChangedEventArgs) =>\r\n {\r\n if (args == null)\r\n {\r\n return;\r\n }\r\n\r\n const row = args.storage;\r\n\r\n if (args.fieldName != \"RubReportedAmount\")\r\n {\r\n return;\r\n }\r\n\r\n const sum = row.tryGet(\"RubReportedAmount\");\r\n row.set(\"RubAcceptedAmount\", sum.toString(), DotNetType.Decimal);\r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(expenseReports, a);\r\n }\r\n\r\n /** Заменяем подписанта на бухгалтера, если авансовый отчет */\r\n public static SetControlsVisibility(context: ICardUIExtensionContext, kindId: string)\r\n {\r\n const additionalExpenseControl = CdUIHelper.GetUIControl(context, \"AdditionalExpenseControl\");\r\n \r\n const signerControl = CdUIHelper.GetUIControl(context, \"SignerControl\");\r\n\r\n if (signerControl == null)\r\n {\r\n return;\r\n }\r\n\r\n signerControl.caption = Guid.equals(kindId, PkMemoKinds.AdvanceReportId) ? \"Бухгалтер\" : \"Подписант\";\r\n \r\n if (additionalExpenseControl == null)\r\n {\r\n return;\r\n }\r\n\r\n additionalExpenseControl.controlVisibility = kindId == PkMemoKinds.BusinessTripId ? Visibility.Visible : Visibility.Collapsed; \r\n }\r\n\r\n /** Установка логики для таблички с командировками. */\r\n public static SetBusinessTripsTableLocic(\r\n cardModel: ICardModel) {\r\n // получаем необходимые секции\r\n const pkdciSection = cardModel.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n const pkbtSection = cardModel.card.sections.tryGet(\"PkBusinessTrips\");\r\n const pkbtvSection = cardModel.card.sections.tryGet(\"PkBusinessTripsVirtual\");\r\n\r\n // проверяем\r\n if (pkdciSection == null ||\r\n pkbtSection == null ||\r\n pkbtvSection == null) {\r\n return;\r\n }\r\n\r\n // получаем необходимый контрол\r\n const pkbtGridView = CdUIHelper.GetUIControlFromModel(cardModel, \"PkBusinessTripsVirtual\");\r\n\r\n // проверяем его наличие\r\n if (pkbtGridView == null) {\r\n return;\r\n }\r\n\r\n // переопределяем команду для кнопки \"Добавить\" в табличке\r\n pkbtGridView.addButton.onClick = async () => {\r\n // получаем данные по сотруднику (для дальнейшей установки параметра)\r\n const employeeID = pkdciSection.fields.tryGet(\"PerformerID\");\r\n const employeeName = pkdciSection.fields.tryGet(\"PerformerName\");\r\n\r\n // проверяем наличие данных по сотруднику\r\n if (employeeID == null) {\r\n await showMessage(\"Необходимо указать исполнителя перед добавлением информации по приказу.\");\r\n return;\r\n }\r\n\r\n // получаем список параметров для представления\r\n const parameters = this.GetPkBusinessTripsViewParameters(pkbtvSection, employeeID, employeeName);\r\n\r\n // показываем пользователю окно для выбора и получаем выбранное значение\r\n await showViewsDialog(\r\n \"PkBusinessTrips\",\r\n async (selectedValue) => {\r\n // добавлям выбранную строку в виртуальную табличку\r\n this.AddPkBusinessTripsVirualRows(pkbtvSection, Array.of(selectedValue));\r\n },\r\n parameters,\r\n async (context) =>\r\n {\r\n // добавлям выбранные строки в виртуальную табличку\r\n this.AddPkBusinessTripsVirualRows(pkbtvSection, context.selected);\r\n }\r\n );\r\n };\r\n\r\n // подписываемся на изменение строки в виртуальной табличке\r\n pkbtvSection.rows.collectionChanged.add((e) =>\r\n {\r\n for (const addedRow of e.added) {\r\n // добавляем реальную строку в обычную табличку\r\n const newRow = pkbtSection.rows.add();\r\n newRow.rowId = addedRow.rowId;\r\n for (const kek of addedRow.entries()) {\r\n console.info(kek[0] + \": \" + kek[1]);\r\n }\r\n // console.info(\"BusinessTripID: \" + addedRow.values.tryGet(\"BusinessTripID\"));\r\n newRow.set(\"BusinessTripID\", createTypedField(addedRow.tryGet(\"BusinessTripID\"), DotNetType.Guid));\r\n newRow.state = CardRowState.Inserted;\r\n }\r\n });\r\n\r\n // подписываемся на изменение строки в виртуальной табличке\r\n pkbtGridView.rowInvoked.add(async (e) => {\r\n switch (e.action) {\r\n // если строка удаляется\r\n case GridRowAction.Deleting:\r\n\r\n // ищем и удаляем реальную строку из обычной таблички\r\n const existingRow = pkbtSection.rows.find(x => x.rowId == e.row.rowId)!;\r\n\r\n // если строка добавлялась перед сохранением\r\n if (existingRow.state == CardRowState.Inserted) {\r\n // удаляем строку из таблички\r\n pkbtSection.rows.remove(existingRow);\r\n }\r\n\r\n // иначе если строка уже была в табличке\r\n else {\r\n // меняем состояние\r\n existingRow.state = CardRowState.Deleted;\r\n }\r\n\r\n break;\r\n\r\n // если строка открывается\r\n case GridRowAction.Opening:\r\n\r\n // отменяем открытие строки\r\n e.cancel = true;\r\n\r\n // получаем ID карточки\r\n const cardID = e.row.tryGet(\"BusinessTripID\");\r\n\r\n // проверяем\r\n if (cardID == null) {\r\n return;\r\n }\r\n\r\n // открываем карточку\r\n await openCard({\r\n cardId: cardID\r\n });\r\n\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /** Добавление строк в виртуальную табличку командировок по выбранным значениям. */\r\n public static AddPkBusinessTripsVirualRows(\r\n pkbtvSection: CardSection,\r\n selectedValues: SelectedValue[]) {\r\n // проверяем наличие выбранных значений\r\n if (selectedValues == null) {\r\n return;\r\n }\r\n\r\n // пробегаемся по выбранным значениям\r\n for (const selectedValue of selectedValues) {\r\n // получаем выбранную строку\r\n const selectedRow = selectedValue.selectedRow;\r\n\r\n // добавляем новую строку в виртуальную табличку\r\n const newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"BusinessTripID\", createTypedField(selectedRow?.get(\"BusinessTripID\"), DotNetType.Guid));\r\n newRow.set(\"EmployeeID\", createTypedField(selectedRow?.get(\"EmployeeID\"), DotNetType.Guid));\r\n newRow.set(\"EmployeeName\", createTypedField(selectedRow?.get(\"EmployeeName\"), DotNetType.String));\r\n newRow.set(\"CompanyID\", createTypedField(selectedRow?.get(\"CompanyID\"), DotNetType.Guid));\r\n newRow.set(\"CompanyName\", createTypedField(selectedRow?.get(\"CompanyName\"), DotNetType.String));\r\n newRow.set(\"CompanyExternalID\", createTypedField(selectedRow?.get(\"CompanyExternalID\"), DotNetType.Int64));\r\n newRow.set(\"CompanyGuid1C\", createTypedField(selectedRow?.get(\"CompanyGuid1C\"), DotNetType.String));\r\n newRow.set(\"StartDate\", createTypedField(selectedRow?.get(\"StartDate\"), DotNetType.DateTime));\r\n newRow.set(\"EndDate\", createTypedField(selectedRow?.get(\"EndDate\"), DotNetType.DateTime));\r\n newRow.set(\"Country\", createTypedField(selectedRow?.get(\"Country\"), DotNetType.String));\r\n newRow.set(\"City\", createTypedField(selectedRow?.get(\"City\"), DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n pkbtvSection.rows.add(newRow);\r\n }\r\n }\r\n\r\n /** Получение списка параметров для представления \"Командировки\". */\r\n public static GetPkBusinessTripsViewParameters(\r\n pkbtvSection: CardSection,\r\n employeeID: string,\r\n employeeName: string) {\r\n // определеяем список параметров\r\n const parameters = new Array();\r\n\r\n // определяем метаданные параметра по сотруднику\r\n const employeeParamMetadata = new ViewParameterMetadata();\r\n employeeParamMetadata.alias = \"EmployeeID\";\r\n employeeParamMetadata.caption = \"Сотрудник\";\r\n employeeParamMetadata.hidden = false;\r\n employeeParamMetadata.dataType = DbType.Guid;\r\n employeeParamMetadata.multiple = false;\r\n\r\n // определяем метаданные параметра указания в СЗ\r\n const isSpecifiedInPkMemoParamMetadata = new ViewParameterMetadata();\r\n isSpecifiedInPkMemoParamMetadata.alias = \"IsSpecifiedInPkMemo\";\r\n isSpecifiedInPkMemoParamMetadata.caption = \"Указана в служебной записке\";\r\n isSpecifiedInPkMemoParamMetadata.hidden = true;\r\n isSpecifiedInPkMemoParamMetadata.dataType = DbType.Boolean;\r\n isSpecifiedInPkMemoParamMetadata.multiple = false;\r\n\r\n // определяем метаданные параметра AddedIDs\r\n const addedIDsParamMetadata = new ViewParameterMetadata();\r\n addedIDsParamMetadata.alias = \"AddedIDs\";\r\n addedIDsParamMetadata.caption = \"AddedIDs\";\r\n addedIDsParamMetadata.hidden = true;\r\n addedIDsParamMetadata.dataType = DbType.String;\r\n addedIDsParamMetadata.multiple = false;\r\n\r\n // определяем метаданные параметра DeletedIDs\r\n const deletedIDsParamMetadata = new ViewParameterMetadata();\r\n deletedIDsParamMetadata.alias = \"DeletedIDs\";\r\n deletedIDsParamMetadata.caption = \"DeletedIDs\";\r\n deletedIDsParamMetadata.hidden = true;\r\n deletedIDsParamMetadata.dataType = DbType.String;\r\n deletedIDsParamMetadata.multiple = false;\r\n\r\n // определяем параметр по сотруднику\r\n const employeeParam = new RequestParameterBuilder()\r\n .withMetadata(employeeParamMetadata)\r\n .addCriteria(equalsCriteriaOperator(), employeeName, employeeID)\r\n .asRequestParameter();\r\n\r\n // добавляем параметр в список\r\n parameters.push(employeeParam);\r\n\r\n // определяем параметр указания в СЗ\r\n const isSpecifiedInPkMemoParam = new RequestParameterBuilder()\r\n .withMetadata(isSpecifiedInPkMemoParamMetadata)\r\n .addCriteria(isFalseCriteriaOperator())\r\n .asRequestParameter();\r\n\r\n // добавляем параметр в список\r\n parameters.push(isSpecifiedInPkMemoParam);\r\n\r\n // получаем ID командировок из добавленных строк\r\n const addedIDs = pkbtvSection.rows\r\n .filter(x => x.state != CardRowState.Deleted)\r\n .map(x => x.tryGet(\"BusinessTripID\"));\r\n\r\n // если добавленные строки есть\r\n if (addedIDs.length > 0) {\r\n // преобразуем список в строку\r\n const addedIDsString = addedIDs.join(',');\r\n\r\n // определяем параметр AddedIDs\r\n const addedIDsParam = new RequestParameterBuilder()\r\n .withMetadata(addedIDsParamMetadata)\r\n .addCriteria(equalsCriteriaOperator(), addedIDsString, addedIDsString)\r\n .asRequestParameter();\r\n\r\n // добавляем параметр в список\r\n parameters.push(addedIDsParam);\r\n }\r\n\r\n // получаем ID командировок из удаленных строк\r\n const deletedIDs = pkbtvSection.rows\r\n .filter(x => x.state == CardRowState.Deleted)\r\n .map(x => x.tryGet(\"BusinessTripID\"));\r\n\r\n // если удаленные строки есть\r\n if (deletedIDs.length > 0) {\r\n // преобразуем список в строку\r\n const deletedIDsString = deletedIDs.join(',');\r\n\r\n // определяем параметр DeletedIDs\r\n const deletedIDsParam = new RequestParameterBuilder()\r\n .withMetadata(deletedIDsParamMetadata)\r\n .addCriteria(equalsCriteriaOperator(), deletedIDsString, deletedIDsString)\r\n .asRequestParameter();\r\n\r\n // добавляем параметр в список\r\n parameters.push(deletedIDsParam);\r\n }\r\n\r\n // устанавливаем флаг доступности\r\n parameters.forEach(x => x.readOnly = true);\r\n\r\n // возвращаем список параметров\r\n return parameters;\r\n }\r\n\r\n /** Если в содержании или теме СЗ есть тег \"командировк\",\r\n выдавать предупреждение, блокирующее сохранение карточки. */\r\n public static async ValidateBusinessTrip(context: ICardUIExtensionContext) {\r\n\r\n let card = context.card;\r\n const documentCommonInfo = card.sections.tryGet(\"DocumentCommonInfo\");\r\n const pkMemoInfo = card.sections.tryGet(\"PkMemoInfo\");\r\n if (!documentCommonInfo\r\n || !pkMemoInfo) {\r\n return;\r\n }\r\n\r\n if (pkMemoInfo.fields.get('KindID') == PkMemoKinds.BusinessTripId.toLowerCase()) {\r\n return;\r\n }\r\n\r\n let subject: string = documentCommonInfo.fields.get(\"Subject\") || \"\";\r\n\r\n const pkDocumentCommonInfo = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if (!pkDocumentCommonInfo) {\r\n return;\r\n }\r\n\r\n let description: string = pkDocumentCommonInfo.fields.get(\"Description\") || \"\";\r\n\r\n //Не учли, что в описании по командировочным всегда упоминают командировку, их не проверяем\r\n let doNotCheck: string = \"командировочн\";\r\n let exit: boolean = description.toUpperCase()\r\n .includes(doNotCheck.toUpperCase()) \r\n || subject.toUpperCase()\r\n .includes(doNotCheck.toUpperCase()) || false;\r\n if (exit){\r\n return;\r\n }\r\n\r\n\r\n let toSearch: string = \"командировк\";\r\n let includes = description.toUpperCase()\r\n .includes(toSearch.toUpperCase()) \r\n || subject.toUpperCase()\r\n .includes(toSearch.toUpperCase()) || false;\r\n\r\n if (includes) {\r\n\r\n context.cancel = true;\r\n\r\n // Показываем окно\r\n let result = await showConfirm(\"Внимание! Командировки оформляются только через портал.\\nПерейти на портал?\", \"Ошибка\");\r\n // Открываем ссылку в номом окне\r\n if (result) {\r\n window.open(\"https://service.pik.ru/?new=errand\");\r\n }\r\n }\r\n }\r\n /// \r\n /// Автозаполнение ТЧ Судебного дела исходя из поля Договор.\r\n /// \r\n public static async FillCourtContractPartner(context: ICardUIExtensionContext) {\r\n //let card = context.card;\r\n const PkIncomingInfo = context.model.card.sections.tryGet('PkIncomingInfo');\r\n if (PkIncomingInfo != null) {\r\n PkIncomingInfo.fields.fieldChanged.add(async e => {\r\n if (e.fieldName == \"ContractCourtID\" && e.fieldValue != null) {\r\n let PkParticipantsCourt = context.model.card.sections.tryGet(\"PkParticipantsCourt\");\r\n if (PkParticipantsCourt != null && PkParticipantsCourt.rows.some(x => x.state != CardRowState.Deleted)) {\r\n const dialogResult = await showConfirm(\"Связанные с договором данные будут перезаполнены в документе. Продолжить?\");\r\n if (dialogResult) {\r\n\r\n const polSectionRows = context.model.card.sections.tryGet('PkParticipantsCourt')!.rows;\r\n if (polSectionRows != null) {\r\n for (let i = polSectionRows.length - 1; i >= 0; i--) {\r\n if (polSectionRows[i].state === CardRowState.None || polSectionRows[i].state === CardRowState.Modified) {\r\n polSectionRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n polSectionRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n else{\r\n return;\r\n }\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetCourtContractPartners;\r\n request.info[\"contractID\"] = createTypedField(e.fieldValue, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info!.CourtPartners!) {\r\n for (let CourtPart of response.info.CourtPartners) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n\r\n let role = CourtPart.RoleID?.$value === 1 ? PkCourtRoles.Ответчик : PkCourtRoles.Истец; // продавец - ответчик, покупатель - истец\r\n row.set('Info', null);\r\n row.set('RoleID', createTypedField(role, DotNetType.Int32));\r\n row.set('RoleName', createTypedField(PkCourtRoles[role], DotNetType.String));\r\n\r\n row.set('PartnerID', CourtPart.PartnerID);\r\n row.set('PartnerExternalID', CourtPart.PartnerExternalID);\r\n row.set('PartnerName', CourtPart.PartnerName);\r\n row.state = CardRowState.Inserted;\r\n if (PkParticipantsCourt != null) \r\n {\r\n PkParticipantsCourt.rows.push(row);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /// \r\n /// Автозаполнение Адресата по принадлежности в зависимости от вида судебного дела\r\n /// \r\n public static async FillCourtDefaultFields(context: ICardUIExtensionContext) {\r\n const PkIncomingInfo = context.model.card.sections.tryGet('PkIncomingInfo');\r\n const addresseesByBelonging = context.model.card.sections.tryGet('PkAddresseesByBelonging');\r\n if (PkIncomingInfo != null) {\r\n PkIncomingInfo.fields.fieldChanged.add(async e => {\r\n if (e.fieldName == \"CourtTypeID\" && e.fieldValue != null) {\r\n if (e.fieldValue === PkCourtTypes.Civilian || e.fieldValue === PkCourtTypes.Arbitration) { \r\n PkClientHelper.ClearSection(addresseesByBelonging!);\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid(); \r\n row.set(\"AddresseeByBelongingID\", createTypedField(e.fieldValue === PkCourtTypes.Arbitration \r\n ? ChStaticRoles.ArbitraryCourtsID\r\n : ChStaticRoles.CivilianCourtsMOID, \r\n DotNetType.Guid));\r\n row.set(\"AddresseeByBelongingName\", createTypedField(e.fieldValue === PkCourtTypes.Arbitration\r\n ? ChStaticRoles.ArbitraryCourtsName\r\n : ChStaticRoles.CivilianCourtsMOName, \r\n DotNetType.String));\r\n row.state = CardRowState.Inserted;\r\n addresseesByBelonging?.rows.push(row);\r\n }\r\n else {\r\n PkClientHelper.ClearSection(addresseesByBelonging!);\r\n }\r\n }\r\n }\r\n );}\r\n }\r\n}","export class ArTaskTypes {\r\n\r\n static ArReViewProcessTypeID = \"c67514f1-06e8-4da0-b320-0bb45d0cfd94\";\r\n static PkActConsiderationTypeID = \"3042636d-4209-4624-ad30-6ed0c8a61209\";\r\n static PkActSignerDiadocTypeID = \"69e3b149-39ec-4add-9b2a-7603a928807b\";\r\n static PkActApproversAgreementTypeID = \"b561b2d8-968b-45e0-9141-c0488b3766fe\";\r\n static PkActStartAgreementProcessTypeID = \"1170f734-806b-4fbe-863c-696e58388e4e\";\r\n static PkActAcceptanceAccountingTypeID = \"c0b5ae86-baac-4bd4-9f0c-a4f45aea6d38\";\r\n static PkActAgreementOnPaperTypeID = \"80227105-ab8f-4ae9-a6ec-64e075d6bf96\";\r\n static PkActInitializingApprovalProcessTypeID = \"87e64e1e-b7e6-4b16-8318-54c77a01274c\";\r\n static PkActOnAccountantAgreementTypeID = \"385405ae-6427-4ef6-a0c1-f43663996feb\";\r\n static PkPrimaryDocsDiadocTaskTypeID = \"6aa71132-3687-470a-a072-009594559f96\";\r\n static PkEDocumentProcessingTypeID = \"fc708fd2-e014-401c-9981-9121664a4f30\";\r\n static PkEDocumentSendToEsudTypeID = \"6f476a98-cc1f-44a9-8317-9fd7b4b150bf\";\r\n static PkEDocumentAttachDocumentTypeID = \"93AD89A9-6A2A-4A3C-AF21-106AEF0902B5\";\r\n static PkEDocumentConfirmCreateKSDTypeID = \"1E1AE15A-6212-4CB8-8081-1154335B0D1C\";\r\n static PkArticleStickerSendToEsudTypeID = \"B1E4802E-02F1-4BE4-A95B-E3BFCC963D5C\";\r\n static PkEDocumentDocumentTypeTypeID = \"F1AC5725-C48F-4C33-9E86-209A27EDF38C\";\r\n static ArCreateAgreementEDOTypeID = \"6A8BCB04-0662-43C4-8C59-4530DE1D3FA8\";\r\n static ArStartAgreementEDOTypeID = \"56C327C9-FEEE-488C-A4F6-EDCB1CF6FE3A\";\r\n static ArCancelCreateAgreementEDOTypeID = \"36964186-3572-41FC-94D2-707C51549927\";\r\n static PkEDocumentKSDExceptionTypeID = \"DECE9163-C5F2-4B0C-A6C4-4D10D67F20AC\";\r\n static PkEDocumentKSDAwaitTypeID = \"DFC46EF2-1064-40A3-9562-599CF3E07E73\";\r\n static PkEDocumentKSDAccountTypeID = \"4CC1CA56-2F61-4065-9893-6F4918C2ECC8\";\r\n}","import { CardSection, CardRowState } from 'tessa/cards';\r\nimport { GridViewModel, GridRowEventArgs, GridRowViewModel } from 'tessa/ui/cards/controls';\r\nimport { Guid } from 'tessa/platform';\r\nimport { IControlViewModel } from 'tessa/ui/cards';\r\n\r\nexport class PkUIHelper {\r\n\r\n /** Установка курсора в контрол с полным выделением текста в нем. */\r\n public static async SetFocusInControlAndSelectText(control: IControlViewModel) {\r\n control.focus();\r\n }\r\n\r\n /** Клик по кнопке \"Следующая строка\". */\r\n public static async NextRowButtonClickAsync(e: GridRowEventArgs, sectionSticker: CardSection | undefined, stickerTableControl: GridViewModel) \r\n : Promise\r\n {\r\n if (e == null || sectionSticker == null || stickerTableControl == null)\r\n {\r\n return undefined;\r\n }\r\n\r\n let arArticleStickersRows = sectionSticker.rows.filter(x => x.state !== CardRowState.Deleted && Guid.equals(x.parentRowId, e.row.parentRowId));\r\n arArticleStickersRows = arArticleStickersRows.sort((n1, n2) => n1.tryGetField('Order')?.$value - n2.tryGetField('Order')?.$value);\r\n let isOpenNext = false;\r\n let count = 1;\r\n let openRow: GridRowViewModel | undefined;\r\n for(let row of arArticleStickersRows) {\r\n if (isOpenNext) {\r\n openRow = stickerTableControl.rows.find(x => Guid.equals(x.rowId, row.rowId));\r\n if (openRow != null) {\r\n e.rowModel?.close(true);\r\n return openRow;\r\n }\r\n }\r\n\r\n if (Guid.equals(row.rowId, e.row.rowId) && count != arArticleStickersRows.length) {\r\n isOpenNext = true;\r\n }\r\n\r\n count++;\r\n }\r\n\r\n if (!isOpenNext) {\r\n e.rowModel?.close(true);\r\n return undefined;\r\n }\r\n\r\n return undefined;\r\n }\r\n}","/** Тип процедуры договорного документа. */\r\nexport class ArTypeProcedure {\r\n /** Без тендера (монополист). */\r\n static WithoutTenderMonopolist = \"087D0D8D-7318-40BA-9DBC-06FED3180776\";\r\n\r\n static WithoutTenderMonopolistName = \"Без тендера (монополист)\";\r\n\r\n /** Единичные расценки. */\r\n static UnitPrices = \"8C98682F-82F7-4781-B08B-14D29C93EF80\";\r\n\r\n static UnitPricesName = \"Единичные расценки\";\r\n\r\n /** Без тендера (госструктура). */\r\n static WithoutTenderGovernmentStructure = \"145BD8D7-9ABF-49C8-839B-363C90AEEA0C\";\r\n\r\n static WithoutTenderGovernmentStructureName = \"Без тендера (госструктура)\";\r\n\r\n /** Без тендера (менее 1 млн.). */\r\n static WithoutTenderLessThanOneMillion = \"590719E6-4AC7-499F-9BC3-45F5867BCD2F\";\r\n\r\n static WithoutTenderLessThanOneMillionName = \"Без тендера (менее 1 млн.)\";\r\n\r\n /** Без тендера (внутригрупповой) */\r\n static WithoutTenderInGroup = \"F14855AC-A283-4D1D-8D7D-60AA657BB7EC\";\r\n\r\n static WithoutTenderInGroupName = \"Без тендера (внутригрупповой)\";\r\n\r\n /** Без тендера (доходный) */\r\n static WithoutTenderProfitable = \"03DE02EC-9703-4531-8C33-6C81039C3EB3\";\r\n\r\n static WithoutTenderProfitableName = \"Без тендера (доходный)\";\r\n\r\n /** Исторический договор Мортон/ДЗО Мортон */\r\n static HistoricTreatyOfMorton = \"12BAD0C1-2135-4BE6-8FF9-7DDB1A751A26\";\r\n\r\n static HistoricTreatyOfMortonName = \"Исторический договор Мортон/ДЗО Мортон\";\r\n\r\n /** Без тендера (прочие) */\r\n static WithoutTenderOther = \"BBB80719-DBBA-4419-8CEC-8AA689F72B88\";\r\n\r\n static WithoutTenderOtherName = \"Без тендера (прочие)\";\r\n\r\n /** АНПТ */\r\n static ANTP = \"EF1824A1-6039-4808-9D16-A89D82D6AC4A\";\r\n\r\n static ANTPName = \"АНПТ\";\r\n\r\n /** Без тендера (партнер) */\r\n static WithoutTenderPartner = \"E83B206E-AB24-44A7-BB2F-AA2B1F505202\";\r\n\r\n static WithoutTenderPartnerName = \"Без тендера (партнер)\";\r\n\r\n /** АНПТ (электронный) */\r\n static ANTPElectronic = \"FEF7E2A1-4DCA-4D95-AE46-B17A9CB8905F\";\r\n\r\n static ANTPElectronicName = \"АНПТ (электронный)\";\r\n\r\n /** Тендер */\r\n static Tender = \"239B8D01-CA87-416E-9347-EC64C483D1E8\";\r\n\r\n static TenderName = \"Тендер\";\r\n\r\n /** Без тендера */\r\n static WithoutTender = \"1000F53D-8332-4530-9046-5D9D1447148F\";\r\n\r\n static WithoutTenderName = \"Без тендера\";\r\n}","/** Категории договора. */\r\nexport class ArContractCategory {\r\n /** Соглашение о документообороте. */\r\n static DocumentManagementAgreement = \"BF8CD26E-3B5B-4281-9139-A5A98FACCE0C\";\r\n\r\n /** Соглашения о конфиденциальности. */\r\n static ConfidentialityAgreements = \"3F19BC61-7C86-4317-ADC8-397C320B2314\";\r\n\r\n /** ДМС. */\r\n static DMS = \"1D635034-004B-4640-8D8E-E32F666A07ED\";\r\n}","function ArEDocumentFdState(id, caption) {\r\n this.id = id;\r\n this.caption = caption;\r\n}\r\n \r\nexport class ArEDocumentFdStates {\r\n \r\n /// \r\n /// Выполнено\r\n /// \r\n static DoneStateID = new ArEDocumentFdState(\"45c37a23-091d-416e-94fb-cdb66b232e5d\", \"Выполнено\");\r\n}","export class PkLinkHelper {\r\n public static ClipboardCopyLink(href: string, text: string) {\r\n const e = href,\r\n t = document.createElement(\"a\"),\r\n range = document.createRange();\r\n t.removeAttribute('style');\r\n t.innerText = text;\r\n t.setAttribute('href', e);\r\n t.style.color = 'blue';\r\n t.style.textDecoration = 'underline';\r\n t.style.fontFamily = 'Calibri';\r\n document.body.appendChild(t);\r\n range.selectNode(t);\r\n const selection = window.getSelection();\r\n selection?.removeAllRanges();\r\n selection?.addRange(range);\r\n try {\r\n const successful = document.execCommand('copy');\r\n if (successful) {\r\n console.log('Copied to clipboard');\r\n } else {\r\n console.error('Failed to copy to clipboard');\r\n }\r\n return successful;\r\n } catch (err) {\r\n console.error('Error copying to clipboard:', err);\r\n return false;\r\n } finally {\r\n document.body.removeChild(t);\r\n }\r\n }\r\n\r\n public static async CopyTextToClipboardAsync(text: string) {\r\n try {\r\n await navigator.clipboard.writeText(text)\r\n }\r\n catch (error) {\r\n console.error('Failed to copy text:', error)\r\n }\r\n }\r\n}","import { Visibility, createTypedField, DotNetType, Guid, hasFlag, DbType, getTypedFieldValue, TypedField } from 'tessa/platform';\r\nimport { ICardUIExtensionContext, ICardModel, IFormViewModel } from 'tessa/ui/cards';\r\nimport { CardRequest, CardService, CardStoreRequest, CardGetFileContentRequest, CardGetRequest, CardNewRequest } from 'tessa/cards/service';\r\nimport { showNotEmpty, UIButton, IUIContext, showConfirmWithCancel, tryGetFromInfo, showConfirm, showLoadingOverlay, createCardFileSourceForCard, createCardFileContainer, LoadingOverlay} from 'tessa/ui';\r\nimport { CardPermissionFlags, CardRowState, CardRow, Card, CardSection, CardStoreMode, CardFieldChangedEventArgs, ICAdESProvider, CardFile, CardGetMode} from 'tessa/cards';\r\nimport { ChRequestTypes } from '../Helpers/ChRequestTypes';\r\nimport { PkClientHelper } from '../Helpers/PkClientHelper';\r\nimport { CardFilesInfo, PkCardHelper } from '../Helpers/PkCardHelper';\r\nimport { GridViewModel, ButtonViewModel, GridRowViewModel, GridRowAction, GridRowEventArgs, DecimalBoxViewModel,\r\n AutoCompleteTableViewModel, RowAutoCompleteItem, TabControlViewModel, TextBoxViewModel, AutoCompleteEntryViewModel, setSign } from 'tessa/ui/cards/controls';\r\nimport { PkCommonHelper } from '../Helpers/PkCommonHelper';\r\nimport { createCard, openCard, showViewsDialog } from 'tessa/ui/uiHost';\r\nimport { RequestParameterBuilder } from 'tessa/views';\r\nimport { ViewParameterMetadata, equalsCriteriaOperator, RequestParameter } from 'tessa/views/metadata';\r\nimport { ArrayStorage, IStorage } from 'tessa/platform/storage';\r\nimport { CdCommonHelper } from 'src/cdScripts/Helpers/CdCommonHelper';\r\nimport { TessaActKinds, TessaArContractKinds, TessaEDocumentKinds } from '../Helpers/PkPrimaryDocsHelper';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { CdUIHelper } from '../../cdScripts/UI/CdUIHelper';\r\nimport { ArDiadocDocumentKindsEnum } from '../Helpers/ArDiadocDocumentKindsEnum';\r\nimport { ChUIHelper } from '../UI/ChUIHelper';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { reaction } from 'mobx';\r\nimport { userSession } from 'common/utility';\r\nimport { TaskActionViewModel, TaskActionType, TaskGroupingType, TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { ArHelper } from '../helpers/ArHelper';\r\nimport { ArCompleteOptions } from '../Helpers/ArCompleteOptions';\r\nimport { ArTaskTypes } from '../Helpers/ArTaskTypes';\r\nimport { PkRoleCalculationType } from '../Helpers/PkRoleCalculationType';\r\nimport { ValidationResult, ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { CertData, readFileContentAsBase64 } from 'tessa/files';\r\nimport { CdEDSHelper } from 'src/cdScripts/Helpers/CdEDSHelper';\r\nimport { ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\nimport { ChProcessHelper } from '../Helpers/ChProcessHelper';\r\nimport { CdDssCspType } from 'src/cdScripts/Helpers/CdDssCspType';\r\nimport { CdDSSHelper } from 'src/cdScripts/Helpers/CdDSSHelper';\r\nimport { PkUIHelper } from '../UI/PkUIHelper';\r\nimport { PkIncomingKinds } from '../Helpers/PkIncomingKinds';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { CdFdProcessHelper } from 'src/cdScripts/Helpers/CdFdProcessHelper';\r\nimport { ArTypeProcedure } from '../Helpers/ArTypeProcedure';\r\nimport { ArContractCategory } from '../Helpers/ArContractCategory';\r\nimport { DownloadType } from '../Helpers/PkEnums';\r\nimport { PkFileTypes } from '../Helpers/PkFileTypes';\r\nimport { PkTaskTypes } from '../Helpers/PkTaskTypes';\r\nimport { ArEDocumentFdStates } from 'src/cdScripts/Helpers/ArEDocumentFdStates';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { PkLinkHelper } from '../Helpers/PkLinkHelper';\r\n\r\nexport class ArUIHelper {\r\n\r\n public static SetPropertiesForAllControlsInTab(tab: IFormViewModel, isReadOnly: boolean | null = null, isRequired: boolean | null = null, isVisible: boolean | null = null)\r\n {\r\n tab.blocks.forEach(block => {\r\n block.controls.forEach(control => {\r\n if (isReadOnly != null)\r\n {\r\n control.isReadOnly = isReadOnly;\r\n }\r\n\r\n if (isRequired != null)\r\n {\r\n control.isRequired = isRequired;\r\n }\r\n\r\n if (isVisible != null)\r\n {\r\n control.controlVisibility = isVisible ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n });\r\n });\r\n }\r\n\r\n /** Сохранияет комбинированные файлы. */\r\n public static async SaveCombinedFilesAsync(\r\n model: ICardModel,\r\n files: CardFile[],\r\n fileName: string | null = null) {\r\n const totalFilesSize = files.reduce((sum, file) => sum + file.size, 0);\r\n const totalFilesCount = files.length;\r\n\r\n const returnArchive =\r\n totalFilesSize > 100000000 ||\r\n totalFilesCount > 10;\r\n\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = PkFileTypes.GetFilesFromCardType;\r\n getFileContentRequest.cardId = model.card.id;\r\n getFileContentRequest.versionRowId = Guid.empty;\r\n getFileContentRequest.fileId = Guid.empty;\r\n getFileContentRequest.fileName = PkFileTypes.GetFilesFromCardType;\r\n getFileContentRequest.info[\"DownloadType\"] = DownloadType.Cobine;\r\n getFileContentRequest.info[\"ReturnArchive\"] = createTypedField(returnArchive, DotNetType.Boolean);\r\n getFileContentRequest.info[\"Files\"] = files.map(x => x.getStorage());\r\n\r\n const getFileContentResponse = await showLoadingOverlay(async () => {\r\n return await CardService.instance.getFileContent(getFileContentRequest);\r\n }, \"Выполняется выгрузка файла...\");\r\n\r\n await showNotEmpty(getFileContentResponse.validationResult.build());\r\n\r\n if (getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n return;\r\n }\r\n\r\n const dlgFileName = fileName ?? `Файлы карточки «${model!.digest}»`;\r\n const dlgDefaultExt = returnArchive ? \".zip\" : \".pdf\";\r\n\r\n PkCommonHelper.SaveFileContent(dlgFileName + dlgDefaultExt, getFileContentResponse.content);\r\n }\r\n\r\n /**Сохранияет комбинированные файлы.**/\r\n public static async SaveArchivedFilesAsync(\r\n model: ICardModel,\r\n fileName: string | null = null) {\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = PkFileTypes.GetFilesFromCardType;\r\n getFileContentRequest.cardId = model!.card.id!,\r\n getFileContentRequest.versionRowId = Guid.empty;\r\n getFileContentRequest.fileId = Guid.empty;\r\n getFileContentRequest.fileName = PkFileTypes.GetFilesFromCardType;\r\n getFileContentRequest.info[\"DownloadType\"] = DownloadType.Archive;\r\n getFileContentRequest.info[\"Files\"] = model.card.files.getStorage();\r\n\r\n const getFileContentResponse = await showLoadingOverlay(async () => {\r\n return await CardService.instance.getFileContent(getFileContentRequest);\r\n }, \"Выполняется выгрузка файла...\");\r\n\r\n await showNotEmpty(getFileContentResponse.validationResult.build());\r\n\r\n if (getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n return;\r\n }\r\n\r\n const dlgFileName = fileName ?? `Файлы карточки «${model!.digest}»`;\r\n const dlgDefaultExt = \".zip\";\r\n\r\n PkCommonHelper.SaveFileContent(dlgFileName + dlgDefaultExt, getFileContentResponse.content);\r\n }\r\n\r\n /** Логика изменения поля \"Исполнитель\" */\r\n public static EditSenderHandle(context: ICardUIExtensionContext) {\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) return;\r\n\r\n aaSection!.fields.fieldChanged.add(async (e) => {\r\n if (e.fieldName === \"SenderKCKExternalID\")\r\n await PkCardHelper.FillPassportInfo(context.model.card);\r\n\r\n if (e.fieldName === \"SenderKCKExternalID\"\r\n || e.fieldName === \"ReceiverKCKExternalID\") {\r\n let senderKCKForEnterprisesGroup = aaSection.fields.tryGet(\"SenderKCKExternalID\");\r\n let receiverKCKForEnterprisesGroup = aaSection.fields.tryGet(\"ReceiverKCKExternalID\");\r\n let getSingleBankAccountRequest = new CardRequest();\r\n getSingleBankAccountRequest.requestType = PkRequestTypes.BankAccountInfo;\r\n getSingleBankAccountRequest.info[\"SenderKCKForEnterprisesGroup\"] =\r\n createTypedField(senderKCKForEnterprisesGroup, DotNetType.Int64);\r\n getSingleBankAccountRequest.info[\"ReceiverKCKForEnterprisesGroup\"] =\r\n createTypedField(receiverKCKForEnterprisesGroup, DotNetType.Int64);\r\n\r\n const getSingleBankAccountsResponse = await CardService.instance.request(getSingleBankAccountRequest);\r\n await showNotEmpty(getSingleBankAccountsResponse.validationResult.build());\r\n if (!getSingleBankAccountsResponse.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n if (getSingleBankAccountsResponse.info\r\n && getSingleBankAccountsResponse.info.BankAccountID) {\r\n aaSection.fields.set(\"BankAccountID\",\r\n createTypedField(getSingleBankAccountsResponse.info.BankAccountID.$value, DotNetType.Guid));\r\n aaSection.fields.set(\"BankAccountName\",\r\n createTypedField(getSingleBankAccountsResponse.info.BankAccountName.$value, DotNetType.String));\r\n }\r\n else {\r\n aaSection.fields.set(\"BankAccountID\", null);\r\n aaSection.fields.set(\"BankAccountName\", null);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Логика изменения поля \"Заказчик\" */\r\n public static EditReceiverHandle(context: ICardUIExtensionContext) {\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) return;\r\n\r\n aaSection!.fields.fieldChanged.add(async (e) => {\r\n if (e.fieldName !== \"ReceiverKCKExternalID\") return;\r\n\r\n await PkCardHelper.FillPassportInfo(context.model.card);\r\n });\r\n }\r\n\r\n /** Логика изменения поля \"Договор\" */\r\n public static EditContractHandle(context: ICardUIExtensionContext) {\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) return;\r\n\r\n aaSection.fields.fieldChanged.add(async (e) => {\r\n if (e.fieldName !== \"ContractID\") return;\r\n\r\n const contractID = e.fieldValue;\r\n\r\n if (context.card.typeId == PkCardTypes.ArActTypeID) {\r\n // для отключения функционала только стикерный учет FillAnalyticsStickersAsync был закоментирован\r\n await ArUIHelper.FillAnalyticsStickersAsync(context, contractID);\r\n await ArUIHelper.ArticleButtonLogic(context);\r\n }\r\n\r\n await ArUIHelper.FillArticlesIDP(context, contractID, false);\r\n await ArHelper.FillArticlesOHR(context, contractID);\r\n\r\n await PkCardHelper.FillPassportInfo(context.model.card);\r\n });\r\n }\r\n\r\n /** Логика изменения коллекции \"Договоры\" */\r\n public static EditContractsHandle(context: ICardUIExtensionContext) {\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) return;\r\n\r\n const contracts = context.model.controls.get(\"Contracts\") as GridViewModel;\r\n const rows = context.model.card.sections.get(\"ArContracts\")!.rows;\r\n\r\n for (const row of rows) {\r\n ArUIHelper.EditContractsRowFieldsHandle(context, row, aaSection);\r\n }\r\n\r\n contracts.rowInitializing.add((e) => {\r\n if (e.action !== GridRowAction.Inserted)\r\n return;\r\n\r\n ArUIHelper.EditContractsRowFieldsHandle(context, e.row, aaSection);\r\n });\r\n\r\n rows.collectionChanged.add((e) => {\r\n if (e.removed.length === 0)\r\n return;\r\n\r\n PkCardHelper.FillPassportInfo(context.model.card);\r\n });\r\n\r\n contracts.rowEditorClosed.add((e) => {\r\n if (!e.row.isChanged(\"ViewID\"))\r\n return;\r\n\r\n PkCardHelper.FillPassportInfo(context.model.card);\r\n });\r\n }\r\n\r\n /** Логика изменения полей строки из коллекции \"Договоры\" */\r\n private static EditContractsRowFieldsHandle(context: ICardUIExtensionContext,\r\n row: CardRow, aaSection: CardSection) {\r\n\r\n row.fieldChanged.add(async (e1) => {\r\n if (e1.fieldName !== \"ViewID\") return;\r\n\r\n const contractID = row.tryGet(\"ViewID\");\r\n\r\n if (aaSection.fields.tryGet(\"ContractID\") != null\r\n && aaSection.fields.tryGet(\"ContractNameVirtual\") != null) {\r\n aaSection.fields.set(\"ContractID\", null);\r\n aaSection.fields.set(\"ContractNameVirtual\", null);\r\n }\r\n\r\n const contractRequest = new CardRequest();\r\n contractRequest.requestType = PkRequestTypes.ContractInfo;\r\n contractRequest.info[\"ContractId\"] = contractID != null ? createTypedField(contractID, DotNetType.Guid) : null;\r\n const contractResponse = await CardService.instance.request(contractRequest);\r\n\r\n await showNotEmpty(contractResponse.validationResult.build());\r\n\r\n if (contractResponse.validationResult.isSuccessful) {\r\n row.set(\"Code\", createTypedField(contractResponse.info.arActRequestDirectumCode, DotNetType.String).$value);\r\n row.set(\"Number\", createTypedField(contractResponse.info.arActRequestNumber, DotNetType.String).$value);\r\n row.set(\"Date\", createTypedField(contractResponse.info.arActRequestContractDate, DotNetType.DateTime).$value);\r\n }\r\n\r\n this.FillObjects(context, contractID);\r\n ArUIHelper.ClearArticlesIDP(context);\r\n ArHelper.ClearArticlesOHR(context);\r\n });\r\n }\r\n\r\n /** Логика изменения поля \"Вид документа\" */\r\n public static EditDocumentKindHandle(context: ICardUIExtensionContext) {\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) return;\r\n\r\n aaSection.fields.fieldChanged.add((e) => {\r\n if (e.fieldName !== \"DocumentKindID\" || e.fieldValue == null)\r\n return;\r\n\r\n ArUIHelper.SetContractControlsVisibilityByDocumentKind(context, e.fieldValue);\r\n });\r\n }\r\n\r\n /** Установка отображения контролов по виду документа */\r\n public static SetContractControlsVisibilityByDocumentKind(context: ICardUIExtensionContext,\r\n documentKindID?: any, getDocumentKindFromCard?: Boolean) {\r\n\r\n if (getDocumentKindFromCard === true) {\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) return;\r\n\r\n documentKindID = aaSection.fields.tryGet(\"DocumentKindID\");\r\n }\r\n\r\n if (documentKindID === TessaActKinds.ReconciliationActTessa) {\r\n context.model.controls.get(\"Contracts\")!.controlVisibility = Visibility.Visible;\r\n context.model.controls.get(\"Contract\")!.controlVisibility = Visibility.Collapsed;\r\n context.model.controls.get(\"ArticlesIDPVirtual\")!.controlVisibility = Visibility.Collapsed;\r\n context.model.controls.get(\"ArticlesOHRVirtual\")!.controlVisibility = Visibility.Collapsed;\r\n }\r\n else {\r\n context.model.controls.get(\"Contracts\")!.controlVisibility = Visibility.Collapsed;\r\n context.model.controls.get(\"Contract\")!.controlVisibility = Visibility.Visible;\r\n context.model.controls.get(\"ArticlesIDPVirtual\")!.controlVisibility = Visibility.Visible;\r\n context.model.controls.get(\"ArticlesOHRVirtual\")!.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n\r\n public static DocumentsIDPPartnersLogic(context: ICardUIExtensionContext) {\r\n try {\r\n const partnersControlModel = context.model.controls.get('DocumentsIDPPartners');\r\n if (!partnersControlModel) return;\r\n const section = context.model.card.sections.tryGet('ArchiveAct');\r\n if (section == null) return;\r\n const flag_multiple_partners = section.fields.tryGet('Flag_multiple_partners');\r\n if (flag_multiple_partners != null && flag_multiple_partners === true) {\r\n partnersControlModel.controlVisibility = Visibility.Visible;\r\n ArUIHelper.FillPartners(context);\r\n }\r\n else {\r\n partnersControlModel.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n catch (ex) {\r\n }\r\n }\r\n\r\n // процедура для заполнения старых карточек актов, где больше 2х контрагентов (там автоматически становится видимым блок контрагентов)\r\n public static async FillPartners(context: ICardUIExtensionContext) {\r\n const section = context.model.card.sections.tryGet('ArActPartnersVirtual');\r\n if (section == null) return;\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.ArActContractPartnersForFlag;\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info!.PartnerInfo!) {\r\n for (let partner of response.info.PartnerInfo) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set('PartnerFullName', partner.FullName);\r\n row.set('PartnerINNVirtual', partner.INN);\r\n row.set('PartnerCategoryVirtual', partner.Category);\r\n row.set('PartnerExternalID', partner.ExtID);\r\n row.state = CardRowState.None;\r\n section.rows.push(row);\r\n }\r\n }\r\n }\r\n\r\n public static ContractSenderReceiverLogic(context: ICardUIExtensionContext) {\r\n PkClientHelper.SetReadonlyContractWhileFieldIsNull(\r\n context.model,\r\n context.model.card,\r\n \"ArchiveAct\",\r\n \"Contract\",\r\n \"SenderKCKExternalID\",\r\n \"ReceiverKCKExternalID\",\r\n null,\r\n null,\r\n \"Contract\");\r\n }\r\n\r\n public static async ClearArticlesIDP(context: ICardUIExtensionContext)\r\n {\r\n if (context.model.card.sections.get(\"ArArticleIDPList\") != null &&\r\n context.model.card.sections.get(\"ArArticleIDPListVirtual\") != null)\r\n {\r\n const arArticleIdpList = context.model.card.sections.get(\"ArArticleIDPList\");\r\n const arArticleIdpListVirtual = context.model.card.sections.get(\"ArArticleIDPListVirtual\");\r\n if (arArticleIdpList!.rows.length > 0) {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, arArticleIdpList!);\r\n }\r\n if (arArticleIdpListVirtual!.rows.length > 0) {\r\n arArticleIdpListVirtual!.rows.clear();\r\n }\r\n }\r\n }\r\n\r\n public static CheckOtherPayments(context: ICardStoreExtensionContext)\r\n {\r\n let card = context.request.card;\r\n let section = card.sections.tryGet(\"ArchiveAct\");\r\n\r\n if (section !== undefined)\r\n { \r\n let otherPayments = section.fields.tryGet(\"OtherPayments\");\r\n if (otherPayments)\r\n {\r\n var codeOKTMO = section.fields.tryGet(\"CodeOKTMO\");\r\n var codeBC = section.fields.tryGet(\"CodeBC\");\r\n if (!codeOKTMO)\r\n context.validationResult.add(ValidationResultType.Error,\r\n \"Поле 'ОКТМО' обязательно для заполнения.\");\r\n if (!codeBC)\r\n context.validationResult.add(ValidationResultType.Error,\r\n \"Поле 'КБК' обязательно для заполнения.\");\r\n }\r\n }\r\n }\r\n\r\n \r\n public static SetOtherPaymentsControlsEnable(context: ICardUIExtensionContext)\r\n {\r\n let aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (!aaSection)\r\n return;\r\n\r\n ArUIHelper.SetOtherPaymentsControlsReadOnly(context, aaSection);\r\n aaSection.fields.fieldChanged.add ((e) =>\r\n {\r\n if (e.fieldName !== \"OtherPayments\") return;\r\n ArUIHelper.SetOtherPaymentsControlsReadOnly(context, aaSection);\r\n });\r\n }\r\n\r\n private static SetOtherPaymentsControlsReadOnly(context: ICardUIExtensionContext,\r\n aaSection: CardSection | undefined)\r\n { \r\n if (!aaSection)\r\n return;\r\n let otherPayments = aaSection.fields.tryGet(\"OtherPayments\");\r\n let codeOKTMO = context.model.controls.get(\"CodeOKTMO\");\r\n let codeBC = context.model.controls.get(\"CodeBC\");\r\n\r\n if (otherPayments)\r\n {\r\n if (codeOKTMO)\r\n codeOKTMO.isReadOnly = false;\r\n if (codeBC)\r\n codeBC.isReadOnly = false;\r\n }\r\n else\r\n {\r\n if (codeOKTMO)\r\n codeOKTMO.isReadOnly = true;\r\n if (codeBC)\r\n codeBC.isReadOnly = true;\r\n }\r\n }\r\n\r\n // Логика скрытия полей для настроечной карточки контрагентов-исключений.\r\n public static SetPartnerExceptionListControlsEnable(context: ICardUIExtensionContext)\r\n {\r\n if (!context.model.card.sections.has('ArchiveAct')\r\n || !context.model.card.sections.has('DocumentCommonInfo')\r\n || !context.model.card.sections.has('PkResponsibleBookkeepers'))\r\n {\r\n return;\r\n }\r\n\r\n let archiveActPermissions = context.model.card.permissions.sections.tryGet('ArchiveAct');\r\n if (archiveActPermissions) {\r\n let vatAmountPermission = archiveActPermissions.fieldPermissions.tryGet('VATAmount')?.$value;\r\n if (vatAmountPermission && vatAmountPermission == CardPermissionFlags.AllowModify) {\r\n let vatAmountControl = context.model.controls.get('VATAmount');\r\n if (vatAmountControl) {\r\n vatAmountControl.isReadOnly = false;\r\n\r\n }\r\n }\r\n\r\n let vatRateIDPermission = archiveActPermissions.fieldPermissions.tryGet('VATRateID')?.$value;\r\n let vatRateCaptionPermission = archiveActPermissions.fieldPermissions.tryGet('VATRateCaption')?.$value;\r\n if (vatRateIDPermission\r\n && vatRateIDPermission == CardPermissionFlags.AllowModify\r\n && vatRateCaptionPermission\r\n && vatRateCaptionPermission == CardPermissionFlags.AllowModify) {\r\n let vatRateControl = context.model.controls.get('VATRate');\r\n if (vatRateControl) {\r\n vatRateControl.isReadOnly = false;\r\n }\r\n }\r\n }\r\n\r\n let documentCommonInfoPermissions = context.model.card.permissions.sections.tryGet('DocumentCommonInfo');\r\n if (documentCommonInfoPermissions) {\r\n let amountPermission = documentCommonInfoPermissions.fieldPermissions.tryGet('Amount')?.$value;\r\n if (amountPermission && amountPermission == CardPermissionFlags.AllowModify) {\r\n let amountControl = context.model.controls.get('AmountWithVAR');\r\n if (amountControl) {\r\n amountControl.isReadOnly = false;\r\n }\r\n }\r\n }\r\n\r\n let pkResponsibleBookkepersPermissions = context.model.card.permissions.sections.tryGet('PkResponsibleBookkeepers');\r\n if (pkResponsibleBookkepersPermissions\r\n && pkResponsibleBookkepersPermissions.sectionPermissions == (CardPermissionFlags.AllowInsertRow |\r\n CardPermissionFlags.AllowDeleteRow |\r\n CardPermissionFlags.AllowModify)) {\r\n let responsibleBookkeepersControl = context.model.controls.get('ResponsibleBookkeepersControl');\r\n if (responsibleBookkeepersControl) {\r\n responsibleBookkeepersControl.isReadOnly = false;\r\n }\r\n }\r\n }\r\n \r\n /** Считаем Сумму по сатьям ИДП*/\r\n private static NeedDetailedArticlesIDP(context: ICardUIExtensionContext)\r\n {\r\n var receiverKCKControl = CdUIHelper.GetUIControl(context, \"ReceiverKCKControl\");\r\n let detailed = receiverKCKControl != null && receiverKCKControl.item && receiverKCKControl.item!.columnValues.find(x => x === ArHelper.KCKPartnerGPMFSExtID)!=null;\r\n return detailed;\r\n }\r\n\r\n /** Изменение атрибута \"Только стикерный учет\"*/\r\n private static async FillAnalyticsStickersAsync(context: ICardUIExtensionContext, contractID: string)\r\n {\r\n let isAnalyticsStickers: boolean |null = null; \r\n const archiveActSection = context.model.card.sections.tryGet('ArchiveAct');\r\n if (!archiveActSection) return;\r\n\r\n // Если документ получен из ЦГП, то значение атрибута true\r\n // Иначе наследуем значение от договора\r\n if (contractID && contractID != null) {\r\n var request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetFieldValue;\r\n request.info[\"TableName\"] = createTypedField(\"ArContractsUser\", DotNetType.String);\r\n request.info[\"FieldName\"] = createTypedField(\"AnalyticsStickers\", DotNetType.String);\r\n request.info[\"ID\"] = createTypedField(contractID, DotNetType.Guid); \r\n\r\n let response = await CardService.instance.request(request);\r\n \r\n if (response.validationResult.isSuccessful)\r\n {\r\n isAnalyticsStickers = tryGetFromInfo(response.info, \"Value\");\r\n } \r\n }\r\n else {\r\n isAnalyticsStickers = null;\r\n }\r\n archiveActSection.fields.set(\"AnalyticsStickers\", isAnalyticsStickers, DotNetType.Boolean);\r\n }\r\n\r\n /** Логика доступности кнопок таблицы статей в зависимости от атрибута \"Только стикерный учет\"*/\r\n public static async ArticleButtonLogic(context: ICardUIExtensionContext)\r\n {\r\n const archiveActSection = context.model.card.sections.tryGet('ArchiveAct');\r\n if (!archiveActSection) return;\r\n\r\n let isAnalyticsStickers = archiveActSection.fields.tryGet('AnalyticsStickers');\r\n\r\n const articlesIdpVirtual = context.model.controls.get(\"ArticlesIDPVirtual\") as GridViewModel;\r\n if (!articlesIdpVirtual) return;\r\n\r\n if (isAnalyticsStickers === true) {\r\n articlesIdpVirtual.addButton.setVisibility(Visibility.Collapsed);\r\n articlesIdpVirtual.removeButton.setVisibility(Visibility.Collapsed);\r\n } \r\n else {\r\n articlesIdpVirtual.addButton.setVisibility(Visibility.Visible);\r\n articlesIdpVirtual.removeButton.setVisibility(Visibility.Visible);\r\n }\r\n }\r\n\r\n public static async FillArticlesIDP(context: ICardUIExtensionContext, contractID: string, withObject: boolean) {\r\n const arArticleIdpList = context.model.card.sections.tryGet('ArArticleIDPList');\r\n const arArticleIdpListVirtual = context.model.card.sections.tryGet('ArArticleIDPListVirtual');\r\n const arActArticleStickers = context.model.card.sections.tryGet('ArActArticleStickers');\r\n if (arArticleIdpList == null || arArticleIdpListVirtual == null) return;\r\n\r\n // Удаление существующих виртуальных записей в таблице Статьи затрат ИДП\r\n ArUIHelper.ClearArticlesIDP(context);\r\n\r\n // очистка секции со стикерами\r\n if (arActArticleStickers != null)\r\n {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, arActArticleStickers!);\r\n if (arActArticleStickers!.rows.length > 0) {\r\n arActArticleStickers!.rows.clear();\r\n }\r\n }\r\n\r\n if (withObject) {\r\n const pkRdProperties = context.model.card.sections.tryGet('PkRdProperties');\r\n if (pkRdProperties != null) {\r\n pkRdProperties.fields.set(\"ObjectID\", null);\r\n pkRdProperties.fields.set(\"ObjectName\", null);\r\n }\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.ArActContractArticleIdp;\r\n request.cardId = context.card.id;\r\n request.info[\"Detailed\"] = createTypedField(this.NeedDetailedArticlesIDP(context), DotNetType.Boolean);\r\n request.info[\"ContractID\"] = contractID != null ? createTypedField(contractID, DotNetType.Guid) : null;\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n\r\n let objectID = null;\r\n let objectName = null;\r\n let amount = 0;\r\n if (response.info!.ArticleIdpInfo!) {\r\n for (let article of response.info.ArticleIdpInfo) {\r\n let row = new CardRow();\r\n let rowVirtual = new CardRow();\r\n rowVirtual.rowId = row.rowId = Guid.newGuid();\r\n rowVirtual.set('ArticleID', article.ArticleID);\r\n row.set('ArticleID', article.ArticleID);\r\n rowVirtual.set('ArticleName', article.ArticleName);\r\n row.set('ArticleName', article.ArticleName);\r\n rowVirtual.set('ObjectID', article.IDPObjectID);\r\n row.set('ObjectID', article.IDPObjectID);\r\n rowVirtual.set('ObjectCode1c', article.IDPObjectCode1c);\r\n row.set('ObjectCode1c', article.IDPObjectCode1c);\r\n rowVirtual.set('ObjectAddressPost', article.ObjectAddress);\r\n row.set('ObjectAddressPost', article.ObjectAddress);\r\n rowVirtual.set('ObjectName', article.ObjectName);\r\n row.set('ObjectName', article.ObjectName);\r\n rowVirtual.set('Amount', createTypedField(amount?.toString() ?? null, DotNetType.Decimal));\r\n row.set('Amount', createTypedField(amount?.toString() ?? null, DotNetType.Decimal));\r\n rowVirtual.set('AmountAdvance', createTypedField(\"0\", DotNetType.Decimal));\r\n row.set('AmountAdvance', createTypedField(\"0\", DotNetType.Decimal));\r\n rowVirtual.set('AmountGuarantee', createTypedField(\"0\", DotNetType.Decimal));\r\n row.set('AmountGuarantee', createTypedField(\"0\", DotNetType.Decimal));\r\n rowVirtual.set('ActivityKindID', null);\r\n row.set('ActivityKindID', null);\r\n rowVirtual.set('ActivityKindName', null);\r\n row.set('ActivityKindName', null);\r\n rowVirtual.set('VAT', article.VAT);\r\n row.set('VAT', article.VAT);\r\n row.set('ExtID', article.ExtContractArticleIdpID);\r\n rowVirtual.set('HierarchicalCode', article.IDPHierarchicleCode);\r\n rowVirtual.set('ProjectID', article.IDPProjectID);\r\n rowVirtual.set('ProjectName', article.IDPProjectName);\r\n rowVirtual.set('CityID', article.IDPCityID);\r\n rowVirtual.set('CityName', article.IDPCityName);\r\n rowVirtual.set('RegionID', article.IDPRegionID);\r\n rowVirtual.set('RegionName', article.IDPRegionName);\r\n rowVirtual.set('ObjectLivingComplex', article.ObjectLivingComplex);\r\n rowVirtual.set('ObjectFullName', article.ObjectFullName);\r\n rowVirtual.set('PercentGuarantee', createTypedField(\"0\", DotNetType.Decimal));\r\n row.set('PercentGuarantee', createTypedField(\"0\", DotNetType.Decimal));\r\n rowVirtual.set('AmountVAT', createTypedField(\"0\", DotNetType.Decimal));\r\n row.set('AmountVAT', createTypedField(0, DotNetType.Decimal));\r\n\t\t\t\trowVirtual.set('AmountWithoutVAT', createTypedField(parseFloat('0').toFixed(2).toString(), DotNetType.Decimal));\r\n row.set('AmountWithoutVAT', createTypedField(parseFloat('0').toFixed(2).toString(), DotNetType.Decimal));\r\n rowVirtual.set('LivingComplexID', article.IDPLivingComplexID);\r\n rowVirtual.set('LivingComplexName', article.IDPLivingComplexName);\r\n row.state = CardRowState.Inserted;\r\n arArticleIdpList.rows.push(row);\r\n rowVirtual.state = CardRowState.Inserted;\r\n arArticleIdpListVirtual.rows.push(rowVirtual);\r\n // запоминаем первый объект в листах идп.\r\n if (objectID == null) {\r\n objectID = article.IDPObjectID;\r\n objectName = article.ObjectName;\r\n }\r\n\r\n // параллельно заполняем стикерные статьи\r\n await this.SetArticleStickerInActAsync(context, article.RowID!.$value, row.rowId);\r\n }\r\n\r\n if (withObject) {\r\n // ставим объект в поле объекта, потом регион, город и др должны проставиться автоматически.\r\n const pkRdProperties = context.model.card.sections.tryGet('PkRdProperties');\r\n if (pkRdProperties != null) {\r\n CdCommonHelper.SetFieldToSection(pkRdProperties, \"ObjectID\", objectID as any);\r\n CdCommonHelper.SetFieldToSection(pkRdProperties, \"ObjectName\", objectName as any);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n public static async FillArticlesOHR(context: ICardUIExtensionContext, contractID: string) {\r\n const arArticleOhrListVirtual = context.model.card.sections.tryGet('ArArticleOHRListVirtual');\r\n if (arArticleOhrListVirtual == null) return;\r\n\r\n // Удаление существующих виртуальных записей в таблице Статьи затрат ИДП\r\n ArHelper.ClearArticlesOHR(context);\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.ArActContractArticleOhr;\r\n request.info[\"ContractID\"] = contractID != null ? createTypedField(contractID, DotNetType.Guid) : null;\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n let amount = 0;\r\n if (response.info!.ArticleOhrInfo!) {\r\n for (let article of response.info.ArticleOhrInfo) {\r\n let row = new CardRow();\r\n let rowVirtual = new CardRow();\r\n rowVirtual.rowId = row.rowId = Guid.newGuid();\r\n rowVirtual.set('ArticleID', article.ArticleID);\r\n rowVirtual.set('ArticleName', article.ArticleName);\r\n rowVirtual.set('HierarchicalCode', article.IDPHierarchicleCode);\r\n rowVirtual.set('Amount', createTypedField(amount.toString(), DotNetType.Decimal));\r\n rowVirtual.set('VAT', null);\r\n rowVirtual.set('VATRateID', null);\r\n rowVirtual.set('VATRateCaption', null);\r\n rowVirtual.set('ActivityKindID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterExtID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterName', null);\r\n rowVirtual.set('ObjectOtherID', null);\r\n rowVirtual.set('ObjectOtherExtID', null);\r\n rowVirtual.set('ObjectOtherName', null);\r\n rowVirtual.set('ActivityKindName', null);\r\n rowVirtual.state = CardRowState.Inserted;\r\n arArticleOhrListVirtual.rows.push(rowVirtual);\r\n }\r\n }\r\n }\r\n\r\n public static async FillObjects(context: ICardUIExtensionContext, contractID: any) {\r\n const objectsList = context.model.card.sections.tryGet('PkObjectList');\r\n if (objectsList == null) return;\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.ArActContractArticleIdp;\r\n request.cardId = context.card.id;\r\n request.info[\"Detailed\"] = createTypedField(this.NeedDetailedArticlesIDP(context), DotNetType.Boolean);\r\n if (contractID == null) request.info[\"ContractID\"] = null;\r\n else request.info[\"ContractID\"] = createTypedField(contractID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n if (response.info!.ArticleIdpInfo!) {\r\n const rows = objectsList!.rows;\r\n for (let article of response.info.ArticleIdpInfo) {\r\n let isSame;\r\n rows.forEach(objRow => {\r\n if (article.IDPObjectID.$value === objRow.tryGet(\"ObjectID\")) {\r\n isSame = true;\r\n }\r\n });\r\n if (isSame === true) {\r\n continue;\r\n }\r\n if (article.IDPObjectID != null) {\r\n const objectRequest = new CardRequest();\r\n objectRequest.requestType = PkRequestTypes.ObjectInfo;\r\n objectRequest.info[\"ObjectID\"] = article.IDPObjectID;\r\n\r\n const objectResponse = await CardService.instance.request(objectRequest);\r\n await showNotEmpty(objectResponse.validationResult.build());\r\n if (!objectResponse.validationResult.isSuccessful) return;\r\n\r\n let row = new CardRow();\r\n row.set(\"AddressPost\", createTypedField(objectResponse.info!.AddressPost, DotNetType.String).$value);\r\n row.set(\"CityID\", createTypedField(objectResponse.info!.CityID, DotNetType.Guid).$value);\r\n row.set(\"CityName\", createTypedField(objectResponse.info!.CityName, DotNetType.String).$value);\r\n row.set(\"Guid1C\", createTypedField(objectResponse.info!.Guid1C, DotNetType.String).$value);\r\n row.set(\"LivingComplex\", createTypedField(objectResponse.info!.LivingComplex, DotNetType.String).$value);\r\n row.set(\"ObjectFullName\", createTypedField(objectResponse.info!.ObjectFullName, DotNetType.String).$value);\r\n row.set(\"ObjectID\", createTypedField(article.IDPObjectID, DotNetType.Guid).$value);\r\n row.set(\"ObjectName\", createTypedField(objectResponse.info!.ObjectName, DotNetType.String).$value);\r\n row.set(\"ProjectID\", createTypedField(objectResponse.info!.ProjectID, DotNetType.Guid).$value);\r\n row.set(\"ProjectName\", createTypedField(objectResponse.info!.ProjectName, DotNetType.String).$value);\r\n row.set(\"RegionID\", createTypedField(objectResponse.info!.RegionID, DotNetType.Guid).$value);\r\n row.set(\"RegionName\", createTypedField(objectResponse.info!.RegionName, DotNetType.String).$value);\r\n row.set(\"ResidentialComplexID\", createTypedField(objectResponse.info!.ResidentialComplexID, DotNetType.Guid).$value);\r\n row.set(\"ResidentialComplexName\", createTypedField(objectResponse.info!.ResidentialComplexName, DotNetType.String).$value);\r\n row.set(\"RealEstateID\", null);\r\n row.set(\"RealEstateName\", null);\r\n row.set(\"IsVirtual\", null);\r\n row.set(\"SectionID\", null);\r\n row.set(\"SectionNumber\", null);\r\n row.set(\"FloorID\", null);\r\n row.set(\"FloorNumber\", null);\r\n row.set(\"RowID\", createTypedField(Guid.newGuid(), DotNetType.Guid));\r\n row.state = CardRowState.Inserted;\r\n objectsList.rows.push(row);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Логика изменения таблички \"Статьи ИДП\" */\r\n public static EditTableArticlesIdpHandle(context: ICardUIExtensionContext) {\r\n const articlesIdpVirtual = context.model.controls.get(\"ArticlesIDPVirtual\") as GridViewModel;\r\n const articlesIdp = context.model.controls.get(\"ArticlesIDP\") as GridViewModel;\r\n\r\n if (articlesIdpVirtual == null) return;\r\n if (articlesIdp == null) return;\r\n\r\n articlesIdpVirtual.rowInitializing.add(er => {\r\n er.row.fieldChanged.add(ef => {\r\n ArUIHelper.SetRowFieldValue(\r\n er.row.rowId,\r\n ef.fieldName,\r\n ef.fieldTypedValue,\r\n articlesIdp.rows.map(x => x.row));\r\n });\r\n\r\n // Скрытие таблицы со стикерными статьями в актах если записей в ней нет.\r\n this.HideArticleStickerTableInAct(context, er);\r\n\r\n // Подписка на изменение таблицы со статьями стикера.\r\n this.ArticleStickerTableOnEdit(context, er);\r\n });\r\n\r\n articlesIdpVirtual.rowEditorClosed.add(async (e) => {\r\n if (!e.row.isChanged(\"Amount\"))\r\n return;\r\n\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) return;\r\n\r\n await PkCardHelper.FillPassportInfo(context.model.card, true);\r\n });\r\n }\r\n\r\n /** Логика изменения таблички \"Статьи ОХР\" */\r\n public static EditTableArticlesOHRHandle(context: ICardUIExtensionContext) {\r\n const articlesOHRVirtual = context.model.controls.get(\"ArticlesOHRVirtual\") as GridViewModel;\r\n\r\n if (articlesOHRVirtual == null) return;\r\n\r\n let aaSection = context.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) {\r\n return;\r\n }\r\n\r\n let contractID: guid | null = null;\r\n\r\n articlesOHRVirtual.rowEditorClosed.add(async () => {\r\n contractID = aaSection?.fields.tryGet(\"ContractID\");\r\n\r\n await PkCardHelper.FillPassportInfo(context.model.card, undefined, true, contractID);\r\n });\r\n\r\n articlesOHRVirtual.rowInvoked.add(async (e) => {\r\n if (e.action == GridRowAction.Deleting) {\r\n await PkCardHelper.FillPassportInfo(context.model.card, undefined, true, contractID);\r\n }\r\n });\r\n }\r\n\r\n /** Установка поля в физическую табличку */\r\n private static SetRowFieldValue(rowID: string, fieldName: string, fieldValue: any, rows: CardRow[]) {\r\n const cardRowViewModel = rows.find(x => x.rowId === rowID); \r\n if (cardRowViewModel == null || !cardRowViewModel.has(fieldName)) return;\r\n let stateInserted = cardRowViewModel.state === CardRowState.Inserted; \r\n cardRowViewModel.set(fieldName, fieldValue);\r\n if (stateInserted) cardRowViewModel.state = CardRowState.Inserted;\r\n \r\n }\r\n\r\n public static UpdateInvoiceDateAndNumber(context: ICardUIExtensionContext) {\r\n const aaSection = context.model.card.sections.tryGet('ArchiveAct');\r\n const dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n\r\n if (aaSection == null) return;\r\n if (dciSection == null) return;\r\n\r\n aaSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName !== \"DocumentKindID\" ||\r\n e.fieldValue !== TessaActKinds.UPDSetTessa) return;\r\n\r\n const documentDate = dciSection.fields.tryGet('ActDate');\r\n const documentNumber = dciSection.fields.tryGet('FullNumber');\r\n\r\n aaSection.fields.set(\"InvoiceDate\", documentDate);\r\n aaSection.fields.set(\"InvoiceNumber\", documentNumber);\r\n });\r\n } \r\n\r\n public static DiadocDeleteLogic(context: ICardUIExtensionContext) {\r\n const diadocSection = context.model.card.sections.tryGet('PkDiadocCommonInfo');\r\n if (diadocSection == null) return;\r\n let isDeleted = diadocSection.fields.tryGet(\"IsDeleted\", false);\r\n if (isDeleted === true) {\r\n const deleteMessageControl = context.model.controls.get(\"IsDeletedControl\");\r\n if (deleteMessageControl == null) return;\r\n\r\n deleteMessageControl.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n\r\n public static DiadocButtonLogic(context: ICardUIExtensionContext) {\r\n let url = \"\";\r\n const diadocSection = context.model.card.sections.tryGet('PkDiadocCommonInfo');\r\n if (diadocSection != null) {\r\n url = diadocSection.fields.tryGet(\"URL\");\r\n }\r\n const pkdSection = context.model.card.sections.tryGet('PkDiadocInfo');\r\n if (pkdSection != null && pkdSection.rows != null && pkdSection.rows.length > 0) {\r\n url = pkdSection.rows[0].tryGet(\"URL\");\r\n }\r\n if (!PkCommonHelper.IsNullOrWhitespace(url)) {\r\n ArUIHelper.BindLinkButton(context, url);\r\n }\r\n else {\r\n const buttonControlModel = context.model.controls.get(\"LinkToDiadoc\");\r\n if (buttonControlModel == null) return;\r\n\r\n buttonControlModel.controlVisibility = Visibility.Hidden;\r\n }\r\n }\r\n\r\n public static DocumentShipmentsReadonlySetting(context: ICardUIExtensionContext) {\r\n let url = \"\";\r\n const diadocSection = context.model.card.sections.tryGet('PkDiadocCommonInfo');\r\n if (diadocSection != null) {\r\n url = diadocSection.fields.tryGet(\"URL\");\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(url)) {\r\n const docShipmentsTableModel = context.model.controls.get(\"DocumentShipments\");\r\n if (docShipmentsTableModel == null) {\r\n return;\r\n }\r\n\r\n docShipmentsTableModel.isReadOnly = true;\r\n }\r\n }\r\n\r\n public static async DiadocButtonLogicWithPkDiadocInfo(context: ICardUIExtensionContext) {\r\n const pkdSection = context.model.card.sections.tryGet('PkDiadocInfo');\r\n if (pkdSection != null && pkdSection.rows != null && pkdSection.rows.length > 0) {\r\n let tooltip = pkdSection.rows[0].tryGet(\"URL\");\r\n ArUIHelper.BindMultipleLinkButton(context.model, tooltip);\r\n await ArUIHelper.BindMultipleCopyButton(context.model, tooltip);\r\n }\r\n else{\r\n ArUIHelper.SetButtonVisibility(context, Visibility.Collapsed, \"LinkToDiadocMultiple\", \"LinkToDiadoc\", \"CopyToDiadocMultiple\");\r\n }\r\n }\r\n\r\n private static BindMultipleLinkButton(model: ICardModel, toolTip: string) {\r\n let buttonControlModel = model.controls.get(\"LinkToDiadocMultiple\") as ButtonViewModel;\r\n \r\n if (buttonControlModel == null) {\r\n buttonControlModel = model.controls.get(\"LinkToDiadoc\") as ButtonViewModel;\r\n }\r\n\r\n if (buttonControlModel == null) {\r\n return;\r\n }\r\n\r\n buttonControlModel!.controlVisibility = Visibility.Visible;\r\n buttonControlModel.tooltip = toolTip;\r\n\r\n buttonControlModel.onClick = () => {\r\n if (Guid.equals(model.card.typeId, CdCardTypes.ArContractTypeID)) {\r\n let url = model.card.sections.tryGet(\"PkDiadocCommonInfo\")!.fields.get(\"URL\");\r\n if (url) {\r\n window.open(url);\r\n }\r\n }\r\n else {\r\n let urls = model.card.sections.tryGet(\"PkDiadocInfo\")!.rows.map(x => x.tryGet(\"URL\"));\r\n urls = [...new Set(urls)]; // distinct\r\n urls.forEach(element => {\r\n if (element) {\r\n window.open(element);\r\n }\r\n }); \r\n } \r\n };\r\n }\r\n\r\n private static async BindMultipleCopyButton(model: ICardModel, toolTip: string) {\r\n \r\n let buttonControlModel = model.controls.get(\"CopyToDiadocMultiple\") as ButtonViewModel;\r\n if (buttonControlModel == null) {\r\n return;\r\n }\r\n\r\n buttonControlModel!.controlVisibility = Visibility.Visible;\r\n buttonControlModel.tooltip = toolTip;\r\n\r\n \r\n \r\n buttonControlModel.onClick = async() => {\r\n let url : string = \"\";\r\n if (Guid.equals(model.card.typeId, CdCardTypes.ArContractTypeID)) {\r\n url = model.card.sections.tryGet(\"PkDiadocCommonInfo\")!.fields.get(\"URL\");\r\n }\r\n else\r\n {\r\n let urls = model.card.sections.tryGet(\"PkDiadocInfo\")!.rows.map(x => x.tryGet(\"URL\"));\r\n urls = [...new Set(urls)]; // distinct\r\n urls.forEach(element => {\r\n if (element) {\r\n url = url + element + '\\r\\n'\r\n }\r\n }); \r\n }\r\n\r\n if (url) {\r\n await PkLinkHelper.CopyTextToClipboardAsync(url);\r\n } \r\n };\r\n };\r\n\r\n private static SetButtonVisibility(context: ICardUIExtensionContext, visibility: Visibility, ...names: string[])\r\n {\r\n names.forEach(name => {\r\n if (name) {\r\n var button = context.model.controls.get(name);\r\n if (button){\r\n button.controlVisibility = visibility;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private static BindLinkButton(context: ICardUIExtensionContext, url: string) {\r\n const buttonControlModel = context.model.controls.get(\"LinkToDiadoc\") as ButtonViewModel;\r\n if (buttonControlModel == null) return;\r\n buttonControlModel.tooltip = url;\r\n buttonControlModel.onClick = () => {\r\n ArUIHelper.ClickLinkToDiadoc(buttonControlModel);\r\n };\r\n }\r\n\r\n private static ClickLinkToDiadoc(buttonControlModel: ButtonViewModel) {\r\n window.open(buttonControlModel.tooltip);\r\n }\r\n\r\n public static PacketCardLogic(context: ICardUIExtensionContext) {\r\n const packetControlControlModel = context.model.controls.get(\"PacketControl\") as GridViewModel;\r\n const ppcvSection = context.model.card.sections.tryGet('PkPacketCompositionVirtual');\r\n\r\n if (ppcvSection == null || ppcvSection.rows.length < 1) {\r\n const button = context.model.controls.get(\"CreatePacketButton\") as ButtonViewModel;\r\n\r\n if (button == null) {\r\n return;\r\n }\r\n\r\n const packetRefControlControlModel = context.model.controls.get(\"PacketRefControl\");\r\n\r\n if (packetRefControlControlModel == null) {\r\n return;\r\n }\r\n\r\n button.onClick = async () => {\r\n await ArUIHelper.AddButtonLogic(context, context.model.card.id);\r\n };\r\n\r\n button.controlVisibility = Visibility.Visible;\r\n packetRefControlControlModel.controlVisibility = Visibility.Collapsed;\r\n packetControlControlModel.controlVisibility = Visibility.Collapsed;\r\n\r\n return;\r\n }\r\n\r\n const pdpivSection = context.model.card.sections.tryGet('PkDocPacketInfoVirtual');\r\n if (pdpivSection != null &&\r\n pdpivSection.fields.has(\"PacketID\")) {\r\n const packetID = pdpivSection.fields.tryGet(\"PacketID\");\r\n\r\n let openPacketButton = new UIButton(\r\n \"Открыть пакет\",\r\n async () => await showLoadingOverlay(async () => {\r\n await openCard({\r\n cardId: packetID!,\r\n });\r\n }, \"Открывается карточка пакета\"));\r\n\r\n packetControlControlModel.rightButtons.push(openPacketButton);\r\n }\r\n\r\n packetControlControlModel.moveDownButton.setVisibility(Visibility.Collapsed);\r\n packetControlControlModel.moveUpButton.setVisibility(Visibility.Collapsed);\r\n packetControlControlModel.addButton.setVisibility(Visibility.Collapsed);\r\n packetControlControlModel.removeButton.setVisibility(Visibility.Collapsed);\r\n\r\n ArUIHelper.PacketControlLogic(context);\r\n }\r\n\r\n public static PersonnelPacketCardLogic(context: ICardUIExtensionContext) {\r\n const packetControlControlModel = context.model.controls.get(\"PacketControl\") as GridViewModel;\r\n const pkppcvSection = context.model.card.sections.tryGet('PkPersonnelPacketCompositionVirtual');\r\n\r\n if (pkppcvSection == null || pkppcvSection.rows.length < 1) {\r\n packetControlControlModel.controlVisibility = Visibility.Collapsed;\r\n packetControlControlModel.block.blockVisibility = Visibility.Collapsed;\r\n packetControlControlModel.block.captionVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n\r\n const pdpivSection = context.model.card.sections.tryGet('PkDocPacketInfoVirtual');\r\n if (pdpivSection != null &&\r\n pdpivSection.fields.has(\"PacketID\")) {\r\n const packetID = pdpivSection.fields.tryGet(\"PacketID\");\r\n\r\n let openPacketButton = new UIButton(\r\n \"Открыть пакет\",\r\n async () => await showLoadingOverlay(async () => {\r\n await openCard({\r\n cardId: packetID!,\r\n });\r\n }, \"Открывается карточка пакета\"));\r\n\r\n packetControlControlModel.rightButtons.push(openPacketButton);\r\n }\r\n\r\n packetControlControlModel.moveDownButton.setVisibility(Visibility.Collapsed);\r\n packetControlControlModel.moveUpButton.setVisibility(Visibility.Collapsed);\r\n packetControlControlModel.addButton.setVisibility(Visibility.Collapsed);\r\n packetControlControlModel.removeButton.setVisibility(Visibility.Collapsed);\r\n\r\n ArUIHelper.PacketControlLogic(context);\r\n }\r\n\r\n public static PacketControlLogic(context: ICardUIExtensionContext) {\r\n const refsTable = context.model.controls.get(\"PacketControl\") as GridViewModel;\r\n\r\n // обработка открытия строки\r\n if (refsTable != null) {\r\n refsTable.rowInitializing.add(async e => {\r\n let cardId = e.row.get(\"DocID\");\r\n await openCard({\r\n cardId: cardId,\r\n });\r\n e.cancel = true;\r\n });\r\n }\r\n\r\n // установка фона строк\r\n refsTable.rows.forEach(rowViewModel => {\r\n // получаем ID карточки\r\n const rowDocID = rowViewModel.row.get(\"DocID\");\r\n\r\n if (rowDocID == null) {\r\n return;\r\n }\r\n\r\n let isExistSimpleTask = false;\r\n let isExistMainTask = false;\r\n\r\n // пробегаемся по таскам, находим те, в которых указан ID карточки\r\n context.model.card.tasks.forEach(task => {\r\n const taskDocIDs = (tryGetFromInfo(task!.info, \"DocID\") as TypedField[]);\r\n\r\n if (taskDocIDs == null) {\r\n return;\r\n }\r\n\r\n const taskDocIDsMap = taskDocIDs.map(x => x.$value);\r\n\r\n if (taskDocIDsMap.indexOf(rowDocID) < 0) {\r\n return;\r\n }\r\n\r\n if (taskDocIDsMap.length === 1) {\r\n isExistSimpleTask = true;\r\n return;\r\n }\r\n\r\n if (taskDocIDsMap.length > 1) {\r\n isExistMainTask = true;\r\n return;\r\n }\r\n });\r\n\r\n // устанавливаем фон строки\r\n if (isExistMainTask && isExistSimpleTask) {\r\n rowViewModel.style.backgroundColor = \"rgb(200, 206, 120)\";\r\n return;\r\n }\r\n\r\n if (isExistSimpleTask) {\r\n rowViewModel.style.backgroundColor = \"rgb(252, 222, 111)\";\r\n return;\r\n }\r\n\r\n if (isExistMainTask) {\r\n rowViewModel.style.backgroundColor = \"rgb(147, 189, 129)\";\r\n return;\r\n }\r\n });\r\n }\r\n\r\n public static PacketApprovementControlLogic(model: ICardModel) {\r\n const refsTable = model.controls.get(\"PacketApprovementControl\") as GridViewModel;\r\n\r\n if (refsTable == null) {\r\n return;\r\n }\r\n\r\n // установка фона строк\r\n refsTable.rows.forEach(rowViewModel => {\r\n // получаем значение результата завершения\r\n const optionID = rowViewModel.row.get(\"OptionID\");\r\n\r\n // устанавливаем фон строки\r\n if (optionID != null) {\r\n rowViewModel.style.backgroundColor = \"lightgray\";\r\n }\r\n });\r\n }\r\n\r\n // Получение параметров для представления\r\n public static GetParametersForAddButtonLogic(context: ICardUIExtensionContext,\r\n cardIDForPacket: string | null) {\r\n const parameters = Array();\r\n let paramAlias = \"PacketID\";\r\n let paramCaption = \"Ид пакета для выбора подходящего дока\";\r\n\r\n if (cardIDForPacket != null) {\r\n paramAlias = \"CardIDForPacket\";\r\n paramCaption = \"Ид документа для выбора подходящего дока из диадок\";\r\n }\r\n\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = paramAlias;\r\n parameterMetadata.caption = paramCaption;\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n const requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', context.model.card.id)\r\n .asRequestParameter();\r\n\r\n parameters.push(requestParameter);\r\n\r\n // TODO в вебе почему-то все параметры ридонли, в отличие от толстого\r\n // хотя все свойства с названием \"readonly\" установлены в \"false\"\r\n // const dciSection = context.model.card.sections.tryGet(\"DocumentCommonInfo\");\r\n // if (dciSection != null) {\r\n // const amount = dciSection.fields.tryGet(\"Amount\");\r\n // if (amount != null) {\r\n // const parameterAmountMetadata = new ViewParameterMetadata();\r\n // parameterAmountMetadata.alias = \"Amount\";\r\n // parameterAmountMetadata.caption = \"Сумма с НДС\";\r\n // parameterAmountMetadata.hidden = false;\r\n // parameterAmountMetadata.dataType = DbType.Decimal;\r\n // parameterAmountMetadata.multiple = false;\r\n\r\n // const amountRequestParameter = new RequestParameterBuilder()\r\n // .withMetadata(parameterAmountMetadata)\r\n // .addCriteria(equalsCriteriaOperator(), amount, amount)\r\n // .asRequestParameter();\r\n\r\n // parameters.push(amountRequestParameter);\r\n // }\r\n // }\r\n\r\n //передаем систему-источник и вид документа в параметры\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n const psmiSection = context.model.card.sections.tryGet(\"PkServiceMessageInfo\");\r\n if (aaSection != null && psmiSection != null) {\r\n let systemID = psmiSection.fields.tryGet(\"SystemID\");\r\n if(systemID == null){\r\n systemID = Guid.empty; \r\n }\r\n const parameterITSystemOfRequestMetadata = new ViewParameterMetadata();\r\n parameterITSystemOfRequestMetadata.alias = \"ITSystemOfRequest\";\r\n parameterITSystemOfRequestMetadata.caption = \"Система-первоисточник запроса\";\r\n parameterITSystemOfRequestMetadata.hidden = true;\r\n parameterITSystemOfRequestMetadata.dataType = DbType.Guid;\r\n parameterITSystemOfRequestMetadata.multiple = false;\r\n\r\n const ITSystemOfRequestRequestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterITSystemOfRequestMetadata)\r\n .addCriteria(equalsCriteriaOperator(), systemID, systemID)\r\n .asRequestParameter();\r\n \r\n parameters.push(ITSystemOfRequestRequestParameter);\r\n\r\n let documentKindID = aaSection.fields.tryGet(\"DocumentKindID\");\r\n if(documentKindID == null){\r\n documentKindID = Guid.empty; \r\n }\r\n const parameterDocTypeOfRequestMetadata = new ViewParameterMetadata();\r\n parameterDocTypeOfRequestMetadata.alias = \"DocTypeOfRequest\";\r\n parameterDocTypeOfRequestMetadata.caption = \"Вид документа запроса\";\r\n parameterDocTypeOfRequestMetadata.hidden = true;\r\n parameterDocTypeOfRequestMetadata.dataType = DbType.Guid;\r\n parameterDocTypeOfRequestMetadata.multiple = false;\r\n\r\n const DocTypeOfRequestRequestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterDocTypeOfRequestMetadata)\r\n .addCriteria(equalsCriteriaOperator(), documentKindID, documentKindID)\r\n .asRequestParameter();\r\n \r\n parameters.push(DocTypeOfRequestRequestParameter);\r\n }\r\n\r\n return parameters;\r\n }\r\n\r\n // Логика кнопки добавления документов к пакету\r\n public static async AddButtonLogic(context: ICardUIExtensionContext, cardIDForPacket: string | null) {\r\n const refSection = \"ArAct_For_Packet_Actions\";\r\n const packetID: string | null = cardIDForPacket != null ? null : context.model.card.id;\r\n const parameters = this.GetParametersForAddButtonLogic(context, cardIDForPacket);\r\n const uiContext = context.uiContext;\r\n\r\n await showViewsDialog(\r\n refSection,\r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n let selectedItem = value;\r\n\r\n // TODO доделать множественный выбор\r\n\r\n if (selectedItem != null && selectedItem.selectedRow != null) {\r\n const addDocID = selectedItem.selectedRow.get(\"ActID\");\r\n let isConcatPackets = await this.IsConcatPackets(addDocID);\r\n if (isConcatPackets == null) return;\r\n ArUIHelper.AddDoc(uiContext, packetID, cardIDForPacket, addDocID, null, isConcatPackets);\r\n }\r\n },\r\n parameters\r\n );\r\n\r\n\r\n }\r\n\r\n // Проверка и подтверждение объединения пакетов\r\n private static async IsConcatPackets(cardIDs: any[]) {\r\n const request = new CardRequest();\r\n\r\n request.requestType = ChRequestTypes.GetPacketDocsInfo;\r\n request.info[\"CardIDs\"] = cardIDs;\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n await showNotEmpty(response.validationResult.build());\r\n return null;\r\n }\r\n\r\n const docsInfoFromPackets = getTypedFieldValue(response.info!.DocsInfoFromPackets);\r\n\r\n if (docsInfoFromPackets == null) return false;\r\n\r\n const isConcatPackets = await showConfirmWithCancel(\r\n \"Выбранные документы уже добавлены в другие пакеты.\\n\\n\" +\r\n docsInfoFromPackets +\r\n \"\\n\\nХотите объединить пакеты?\" +\r\n \"\\n\\\"Да\\\" - объединить пакеты\" +\r\n \"\\n\\\"Нет\\\" - добавить только выбранные документы\" +\r\n \"\\n\\\"Отменить\\\" - отменить действие\",\r\n \"Добавление документа из другого пакета\");\r\n\r\n return isConcatPackets;\r\n }\r\n\r\n private static AddDoc(uiContext: IUIContext, packetID, cardIDForPacket, addDocID?, cardIDList?: any[] | null, isConcatPackets?) {\r\n if (uiContext == null) return;\r\n let editor = uiContext.cardEditor;\r\n if (editor == null) return;\r\n const storeInfo: IStorage = {\r\n 'AddToPacet': createTypedField(true, DotNetType.Boolean)\r\n };\r\n if (packetID == null) storeInfo[\"PacketID\"] = null;\r\n else storeInfo[\"PacketID\"] = createTypedField(packetID, DotNetType.Guid);\r\n if (cardIDForPacket == null) storeInfo[\"CardIDForPacket\"] = null;\r\n else storeInfo[\"CardIDForPacket\"] = createTypedField(cardIDForPacket, DotNetType.Guid);\r\n if (addDocID == null) storeInfo[\"AddDocID\"] = null;\r\n else storeInfo[\"AddDocID\"] = createTypedField(addDocID, DotNetType.Guid);\r\n if (cardIDList == null) storeInfo[\"CardIDList\"] = null;\r\n else storeInfo[\"CardIDList\"] = cardIDList;\r\n if (isConcatPackets == null) storeInfo[\"IsConcatPackets\"] = null;\r\n else storeInfo[\"IsConcatPackets\"] = createTypedField(isConcatPackets, DotNetType.Boolean);\r\n\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n\r\n // Новая логика для ндс согласно 30747, распределение по статьям реализовано в методе UpdateAmount\r\n public static SetReadOnlyAmountAndAmountVAT(context: ICardUIExtensionContext) {\r\n // выходим, если пользователь - админ\r\n if (userSession.isAdmin) return;\r\n\r\n const pemi = context.model.card.sections.tryGet('PkServiceMessageInfo');\r\n const aaSection = context.model.card.sections.tryGet('ArchiveAct');\r\n const dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n\r\n if (pemi == null) return;\r\n if (aaSection == null) return;\r\n if (dciSection == null) return;\r\n\r\n const sysObjectID = pemi.fields.tryGet(\"SysObjectId\");\r\n const sysName = pemi.fields.tryGet(\"SystemName\");\r\n\r\n // если акт пришел из CDw\r\n if (sysObjectID != null || sysName != null) {\r\n context.model.controls.get(\"AmountWithVAR\")!.isReadOnly = true;\r\n context.model.controls.get(\"VATAmount\")!.isReadOnly = true;\r\n return;\r\n }\r\n\r\n // если акт пришел не из CDw\r\n const diadocKindID = aaSection.fields.tryGet(\"DocumentKindDiadocID\");\r\n const vatAmount = aaSection.fields.tryGet(\"VATAmount\");\r\n const amount = dciSection.fields.tryGet(\"Amount\");\r\n\r\n // если акт формализованный или неформализованный и сумма и сумма ндс по акту заполнены\r\n if ((diadocKindID === ArDiadocDocumentKindsEnum.XmlAcceptanceCertificate ||\r\n diadocKindID === ArDiadocDocumentKindsEnum.XmlTorg12) ||\r\n (diadocKindID === ArDiadocDocumentKindsEnum.Nonformalized ||\r\n diadocKindID === ArDiadocDocumentKindsEnum.AcceptanceCertificate ||\r\n diadocKindID === ArDiadocDocumentKindsEnum.Torg12) &&\r\n vatAmount != null && amount != null) {\r\n context.model.controls.get(\"AmountWithVAR\")!.isReadOnly = true;\r\n context.model.controls.get(\"VATAmount\")!.isReadOnly = true;\r\n }\r\n }\r\n\r\n /// \r\n /// Изменения в интерфейсе при изменении договоров\r\n /// \r\n public static ChangesInUIWhenContractsIsChanging(context: ICardUIExtensionContext) {\r\n ArUIHelper.ChangingIfContractExists(context);\r\n let arContractsSection: CardSection | undefined = context.model.card.sections.tryGet('ArContracts');\r\n if (arContractsSection === null) return;\r\n\r\n context.model.card.sections.tryGet(\"ArchiveAct\")!.fields.fieldChanged.add(async e =>\r\n {\r\n if (e.fieldName == \"DocumentKindID\"){\r\n ArUIHelper.ChangingIfContractExists(context);\r\n ArUIHelper.ClearArContractsTable(context);\r\n }\r\n });\r\n\r\n for (let row of arContractsSection!.rows) {\r\n row.stateChanged.add(() => {\r\n ArUIHelper.ChangingIfContractExists(context);\r\n });\r\n }\r\n\r\n arContractsSection!.rows.collectionChanged.add(() => {\r\n ArUIHelper.ChangingIfContractExists(context);\r\n\r\n ChUIHelper.ClearObjectTable(context);\r\n\r\n arContractsSection!.rows.forEach(e1 => {\r\n if (e1.state !== CardRowState.Deleted) {\r\n let viewID = e1.tryGet('ViewID');\r\n\r\n if (viewID !== null) {\r\n this.FillObjects(context, viewID);\r\n }\r\n }\r\n });\r\n });\r\n\r\n const contractsGridViewModel = context.model.controls.get(\"Contracts\") as GridViewModel;\r\n if (contractsGridViewModel !== null) {\r\n contractsGridViewModel.rowEditorClosed.add(async q => {\r\n\r\n // Удаляем пустую строку\r\n if (q.row.tryGet(\"ViewID\") === null)\r\n {\r\n arContractsSection!.rows.remove(q.row);\r\n }\r\n \r\n ArUIHelper.ChangingIfContractExists(context);\r\n\r\n ChUIHelper.ClearObjectTable(context);\r\n\r\n arContractsSection!.rows.forEach(e => {\r\n if (e.state !== CardRowState.Deleted) {\r\n let viewID = e.tryGet(\"ViewID\");\r\n this.FillObjects(context, viewID);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n /// \r\n /// Удаление всех записей из таблицы Объекты (ArContracts)\r\n /// \r\n public static ClearArContractsTable(context: ICardUIExtensionContext)\r\n {\r\n // Удаление существующих записей в таблице Объекты\r\n const acSectionRows = context.model.card.sections.tryGet('ArContracts')!.rows;\r\n if (acSectionRows != null) {\r\n for (let i = acSectionRows.length - 1; i >= 0; i--) {\r\n if (acSectionRows[i].state === CardRowState.None) {\r\n acSectionRows[i].state = CardRowState.Deleted;\r\n }\r\n else {\r\n acSectionRows.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static ChangingIfContractExists(context: ICardUIExtensionContext)\r\n {\r\n let contractsControl = context.model.controls.get('Act_ContractWithTheDeveloper') as GridViewModel;\r\n if (contractsControl === null) return;\r\n\r\n let isReconciliationAct: boolean = context.model.card.sections.tryGet(\"ArchiveAct\")!.fields.tryGet(\"DocumentKindID\") === TessaActKinds.ReconciliationActTessa;\r\n const isFieldProhipit = hasFlag(context.model.card.permissions.resolver\r\n .getFieldPermissions(\"ArchiveAct\", \"ContractID\"), CardPermissionFlags.ProhibitModify);\r\n\r\n if (isReconciliationAct && !ArUIHelper.CheckingIfContractExists(context)) {\r\n contractsControl.isReadOnly = true;\r\n }\r\n else if (!isFieldProhipit) {\r\n contractsControl.isReadOnly = false;\r\n }\r\n }\r\n\r\n /// \r\n /// Проверяем есть ли хотя бы 1 договор в таблице\r\n /// \r\n public static CheckingIfContractExists(context: ICardUIExtensionContext) {\r\n const arContractsSection = context.model.card.sections.tryGet('ArContracts');\r\n if (arContractsSection == null) return;\r\n let exists = false;\r\n\r\n arContractsSection.rows.forEach(e => {\r\n if (e.state !== CardRowState.Deleted) {\r\n exists = true;\r\n }\r\n });\r\n\r\n return exists;\r\n }\r\n\r\n\r\n /** Установить видимость вида работ для ГП - МФС (внешний ид - 49340, ИНН - 7704539433) */\r\n private static SetVisibilityOfWorkTypes(context: ICardUIExtensionContext) {\r\n let worksAndServicesTable = CdUIHelper.GetUIControl(context, \"WorksAndServices\");\r\n if (isNullOrUndefined(worksAndServicesTable)) return;\r\n const gpMfsInn = \"7704539433\";\r\n worksAndServicesTable!.rowInitializing.add(async e => {\r\n switch (e.action) {\r\n case GridRowAction.Opening:\r\n case GridRowAction.Inserted:\r\n let receiverKckInn = context.model.card.sections.tryGet(\"ArchiveAct\")!.fields.tryGet(\"ReceiverKCKINN\") || \"\";\r\n let worksTypeViewModel = e.rowModel!.controls.get(\"WorkType\");\r\n if (worksTypeViewModel != null) {\r\n // Поле доступно только когда заказчик ГП - МФС (7704539433)\r\n worksTypeViewModel.captionVisibility =\r\n worksTypeViewModel.controlVisibility = (receiverKckInn.trim() == gpMfsInn)\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /** При вводе % гарантийного удержания считать сумму гарантийного удержания */\r\n public static InitPercentGaranteeCalculation(aaIdpSection: CardSection)\r\n {\r\n const percentChanged = (e: CardFieldChangedEventArgs) =>\r\n {\r\n if (isNullOrUndefined(e)){\r\n return;\r\n }\r\n\r\n if (e.fieldName != \"PercentGuarantee\")\r\n {\r\n return;\r\n }\r\n\r\n let row = e.storage;\r\n let amount = Number(row.tryGet(\"Amount\") || 0);\r\n let percentGuarantee = Number(row.tryGet(\"PercentGuarantee\") || 0);\r\n let result = percentGuarantee * amount / 100;\r\n result = PkCommonHelper.financial(result);\r\n row.set(\"AmountGuarantee\", result?.toString() ?? null, DotNetType.Decimal);\r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(aaIdpSection, percentChanged);\r\n }\r\n\r\n /** При вводе суммы без НДС рассчитываем сумму */\r\n public static InitAmountWithoutVATCalculation(aaIdpSection: CardSection)\r\n {\r\n const amountWithoutVATChanged = (e: CardFieldChangedEventArgs) =>\r\n {\r\n if (isNullOrUndefined(e)){\r\n return;\r\n }\r\n\r\n if (e.fieldName != \"AmountWithoutVAT\"\r\n )\r\n {\r\n return;\r\n }\r\n\r\n let row = e.storage;\r\n let vAT = row.tryGet(\"VAT\");\r\n \r\n if (PkCommonHelper.IsNullOrWhitespace(vAT)) return;\r\n \r\n let vatValue = Number(PkClientHelper.GetVatValue(vAT));\r\n let amountWithoutVAT = row.tryGet(\"AmountWithoutVAT\") || 0;\r\n let result = amountWithoutVAT * (1 + (vatValue / 100));\r\n result = PkCommonHelper.financial(result);\r\n row.set(\"Amount\", result?.toString() ?? null, DotNetType.Decimal);\r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(aaIdpSection, amountWithoutVATChanged);\r\n }\r\n\r\n /** Cаму сумму до ввода % блокируем, после расчета пользователь может отредактировать */\r\n public static InitPercentGaranteeEditability(context: ICardUIExtensionContext)\r\n {\r\n // Получаем табличку в форме которой будем блокировать контрол\r\n const articlesIdpVirtual = CdUIHelper.GetUIControl(context, \"ArticlesIDPVirtual\");\r\n if (isNullOrUndefined(articlesIdpVirtual)){\r\n return;\r\n }\r\n\r\n // Событие ввода процента\r\n let percentChanged: any;\r\n\r\n articlesIdpVirtual.rowInitializing.add((e) =>\r\n {\r\n const articleAmountGuarantee = e.rowModel!.controls.get(\"ArticleAmountGuaranteeControl\");\r\n if (isNullOrUndefined(articleAmountGuarantee))\r\n {\r\n return;\r\n }\r\n\r\n if (e.action != GridRowAction.Inserted && e.action != GridRowAction.Opening)\r\n {\r\n return;\r\n }\r\n\r\n const setPercentGuranteeEditability = () =>\r\n {\r\n let percentGuarantee: number = Number(e.row!.tryGet(\"PercentGuarantee\") || 0);\r\n articleAmountGuarantee.isReadOnly = percentGuarantee == 0;\r\n };\r\n\r\n // при показе формы инициализируем событие для подписки/отписки\r\n percentChanged = (ep) =>\r\n {\r\n if (isNullOrUndefined(ep))\r\n {\r\n return;\r\n }\r\n\r\n if (ep.fieldName == \"PercentGuarantee\")\r\n {\r\n setPercentGuranteeEditability();\r\n }\r\n };\r\n setPercentGuranteeEditability();\r\n e.row.fieldChanged.add(percentChanged);\r\n });\r\n\r\n // отписываемся от события\r\n articlesIdpVirtual.rowEditorClosed.add((e) => { e.row.fieldChanged.remove(percentChanged); });\r\n }\r\n\r\n public static async InitializeTableWorksAndServices(model: ICardModel, context: ICardUIExtensionContext) {\r\n let worksAndServicesTable = CdUIHelper.GetUIControl(context, \"WorksAndServices\");\r\n\r\n if (worksAndServicesTable == null\r\n || model.card.sections.tryGet(\"ArchiveAct\") == null\r\n || model.card.sections.tryGet(\"ArActWorksAndServicesList\") == null\r\n || model.card.sections.tryGet(\"ArActWorksAndServicesItems\") == null\r\n || model.card.sections.tryGet(\"ArActWorksAndServicesItemsVirtual\") == null)\r\n {\r\n return;\r\n } \r\n\r\n // скопированные работы и услуги скрываются, копирование идет из счет фактур в основной акт\r\n if (context.model.card.info.IsCollapsedWorks!=null && context.model.card.info.IsCollapsedWorks.$value == true)\r\n {\r\n worksAndServicesTable.captionVisibility =\r\n worksAndServicesTable.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n\r\n const worksAndServicesListSection = model.card.sections.tryGet(\"ArActWorksAndServicesList\");\r\n const worksAndServicesItemsSection = model.card.sections.tryGet(\"ArActWorksAndServicesItems\");\r\n const worksAndServicesItemsVirtualSection = model.card.sections.tryGet(\"ArActWorksAndServicesItemsVirtual\");\r\n const documentKindDiadocID = model.card.sections.tryGet(\"ArchiveAct\")!.fields.tryGet(\"DocumentKindDiadocID\");\r\n\r\n const isProhibitModify = hasFlag(context.model.card.permissions.resolver\r\n .getSectionPermissions(\"ArActWorksAndServicesList\"), CardPermissionFlags.ProhibitModify);\r\n\r\n const formalized: boolean =\r\n documentKindDiadocID === ArDiadocDocumentKindsEnum.Invoice ||\r\n documentKindDiadocID === ArDiadocDocumentKindsEnum.XmlTorg12 ||\r\n documentKindDiadocID === ArDiadocDocumentKindsEnum.XmlAcceptanceCertificate ||\r\n documentKindDiadocID === ArDiadocDocumentKindsEnum.UniversalTransferDocument;\r\n\r\n const isReadOnly = formalized || isProhibitModify;\r\n\r\n worksAndServicesTable.isReadOnly = isReadOnly;\r\n\r\n for (let row of worksAndServicesListSection!.rows)\r\n {\r\n row.fieldChanged.add(async e1 =>\r\n {\r\n ArUIHelper.WorksAndServicesRowFieldChanged(model.card.storeMode, worksAndServicesItemsVirtualSection!, row, e1);\r\n });\r\n }\r\n worksAndServicesListSection!.rows.collectionChanged.add(async e =>\r\n {\r\n if (e.added != null && e.added.length > 0)\r\n {\r\n e.added[0].fieldChanged.add(async e1 =>\r\n {\r\n ArUIHelper.WorksAndServicesRowFieldChanged(model.card.storeMode, worksAndServicesItemsVirtualSection!, e.added[0], e1);\r\n }); \r\n }\r\n });\r\n\r\n worksAndServicesItemsVirtualSection!.rows.collectionChanged.add(async e =>\r\n { \r\n if (e.added != null && e.added.length > 0)\r\n {\r\n e.added[0].fieldChanged.add(async e1 =>\r\n {\r\n if (e1.fieldName == \"InventoryNumber\")\r\n {\r\n let realRow = worksAndServicesItemsSection!.rows.find(x => x.rowId == e.added[0].rowId);\r\n if (e1.fieldValue == null || e1.fieldValue == \"\")\r\n {\r\n ArHelper.RemoveRowFromCollectionSection(model.card.storeMode, worksAndServicesItemsSection!, realRow!);\r\n }\r\n else\r\n { \r\n if (realRow != null)\r\n {\r\n CdCommonHelper.SetFieldToRow(realRow, \"InventoryNumber\", createTypedField(e1.fieldValue, DotNetType.String));\r\n if (realRow.state == CardRowState.Deleted)\r\n realRow.state = CardRowState.Modified;\r\n }\r\n else\r\n {\r\n realRow = e.added[0].clone();\r\n realRow.state = CardRowState.Inserted;\r\n worksAndServicesItemsSection!.rows.push(realRow);\r\n }\r\n }\r\n }\r\n });\r\n\r\n e.added[0].stateChanged.add(async e1 =>\r\n {\r\n if (e1.newState == CardRowState.Deleted)\r\n {\r\n let realRow = worksAndServicesItemsSection!.rows.find(x => x.rowId == e.added[0].rowId);\r\n if (realRow != null)\r\n {\r\n ArHelper.RemoveRowFromCollectionSection(model.card.storeMode, worksAndServicesItemsSection!, realRow);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (e.removed != null && e.removed.length > 0)\r\n {\r\n let realRow = worksAndServicesItemsSection!.rows.find(x => x.rowId == e.removed[0].rowId);\r\n if (realRow != null)\r\n {\r\n ArHelper.RemoveRowFromCollectionSection(model.card.storeMode, worksAndServicesItemsSection!, realRow);\r\n }\r\n }\r\n\r\n });\r\n \r\n worksAndServicesTable.rowInitializing.add(async e =>\r\n {\r\n if (e.action == GridRowAction.Opening || e.action == GridRowAction.Inserted)\r\n {\r\n if (e.action == GridRowAction.Inserted)\r\n {\r\n if (e.row.getField(\"NomStr\") != null && ((e.row.getField(\"NomStr\")!.$value as number) == 0 || worksAndServicesTable!.rows.map(x => x.row.getField(\"NomStr\")).some(x => (x!.$value as number) === (e.row.getField(\"NomStr\")!.$value as number))))\r\n {\r\n let maxOrder = Math.max.apply(null, worksAndServicesTable!.rows.map(x => x.row.getField(\"NomStr\")!.$value));\r\n CdCommonHelper.SetFieldToRow(e.row, \"NomStr\", createTypedField(maxOrder + 1, DotNetType.Int32));\r\n }\r\n CdCommonHelper.SetFieldToRow(e.row, \"NalStID\", createTypedField(model.card.sections.tryGet(\"ArchiveAct\")!.fields.tryGet(\"VATRateID\"), DotNetType.Int32));\r\n CdCommonHelper.SetFieldToRow(e.row, \"NalStCaption\", createTypedField(model.card.sections.tryGet(\"ArchiveAct\")!.fields.tryGet(\"VATRateCaption\"), DotNetType.String));\r\n CdCommonHelper.SetFieldToRow(e.row, \"Akciz\", createTypedField(\"без акциза\", DotNetType.String));\r\n }\r\n \r\n if (e.action == GridRowAction.Opening)\r\n { \r\n ArUIHelper.FillItemsForCurrentRow(model.card.storeMode, worksAndServicesItemsVirtualSection!, e.row);\r\n }\r\n\r\n //TODO сделать отписку от события\r\n e.row.fieldChanged.add(async e1 =>\r\n {\r\n if (e1.fieldName == \"OKEICode\")\r\n {\r\n ArUIHelper.WorksAndServicesItemsVirtualTableSetVisibility(e);\r\n }\r\n });\r\n\r\n for (let block of e.rowModel!.mainForm!.blocks)\r\n {\r\n for (let control of block.controls)\r\n {\r\n if (![\"SerialNumber\", \"WorksAndServicesItems\", \r\n \"IDPArticle\", \"SelectIDPArticle\",\r\n \"WorkType\"].some(x => x === control.name))\r\n control.isReadOnly = isReadOnly;\r\n }\r\n }\r\n\r\n ArUIHelper.WorksAndServicesItemsVirtualTableSetVisibility(e);\r\n }\r\n });\r\n\r\n let realRows = worksAndServicesItemsSection!.rows;\r\n for (let realRow of realRows)\r\n {\r\n let virtualRow = realRow.clone();\r\n virtualRow.state = CardRowState.Inserted;\r\n virtualRow.state = CardRowState.None;\r\n worksAndServicesItemsVirtualSection!.rows.push(virtualRow);\r\n }\r\n \r\n ArUIHelper.SetVisibilityOfWorkTypes(context);\r\n // связь - Статьи ИДП\r\n ArUIHelper.InitLinksForWorksAndServices(context);\r\n }\r\n\r\n public static GetItemRows(worksAndServicesItemsVirtualSection: CardSection, row: CardRow) : CardRow[]\r\n { \r\n return worksAndServicesItemsVirtualSection.rows.filter(x => x.tryGetField(\"ParentRowID\") != null && x.tryGetField(\"ParentRowID\")!.$value == row.rowId && x.state != CardRowState.Deleted);\r\n }\r\n \r\n public static async WorksAndServicesItemsVirtualTableSetVisibility(e: GridRowEventArgs)\r\n {\r\n let worksAndServicesItemsVirtualTable = e.rowModel!.mainForm!\r\n .blocks.find(x => x.name == \"WorksAndServicesBlock\")!\r\n .controls.find(x => x.name == \"WorksAndServicesItemsVirtual\");\r\n\r\n worksAndServicesItemsVirtualTable!.controlVisibility = e.row.tryGetField(\"OKEICode\") != null ? e.row.tryGetField(\"OKEICode\")!.$value : null == 796 ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n\r\n public static async WorksAndServicesRowFieldChanged(storeMode: CardStoreMode, worksAndServicesItemsVirtualSection: CardSection, row: CardRow, e: CardFieldChangedEventArgs)\r\n {\r\n let itemRows = ArUIHelper.GetItemRows(worksAndServicesItemsVirtualSection, row);\r\n if (e.fieldName == \"NaimTov\")\r\n {\r\n for (let itemRow of itemRows)\r\n {\r\n CdCommonHelper.SetFieldToRow(itemRow, \"ParentNaimTov\", createTypedField(e.fieldValue, DotNetType.String));\r\n }\r\n }\r\n if (e.fieldName == \"KolTov\" || e.fieldName == \"OKEICode\")\r\n {\r\n ArUIHelper.FillItemsForCurrentRow(storeMode, worksAndServicesItemsVirtualSection, row);\r\n }\r\n if (e.fieldName == \"KolTov\" || e.fieldName == \"CenaTov\")\r\n {\r\n ArUIHelper.FillSumWithNDS(row);\r\n }\r\n if (e.fieldName == \"NalStID\" || e.fieldName == \"StTovUchNal\")\r\n {\r\n ArUIHelper.FillSumNDS(row);\r\n }\r\n if (e.fieldName == \"StTovUchNal\" || e.fieldName == \"SumNal\")\r\n {\r\n ArUIHelper.FillSumWithoutNDS(row);\r\n }\r\n }\r\n\r\n private static async FillItemsForCurrentRow(storeMode: CardStoreMode, worksAndServicesItemsVirtualSection: CardSection, row: CardRow)\r\n {\r\n let OKEICode: number | null = row.tryGetField(\"OKEICode\") != null ? row.tryGetField(\"OKEICode\")!.$value : null;\r\n if (OKEICode == 796)\r\n { \r\n let newCount: number = row.tryGetField(\"KolTov\") != null ? row.tryGetField(\"KolTov\")!.$value : 0;\r\n while (newCount > ArUIHelper.GetItemRows(worksAndServicesItemsVirtualSection, row).length)\r\n {\r\n let newRow = new CardRow();\r\n CdCommonHelper.SetFieldToRow(newRow, \"ParentRowID\", createTypedField(row.rowId, DotNetType.Guid));\r\n CdCommonHelper.SetFieldToRow(newRow, \"ParentNaimTov\", createTypedField(row.tryGetField(\"NaimTov\") != null ? row.tryGetField(\"NaimTov\")!.$value : null, DotNetType.String));\r\n newRow.rowId = Guid.newGuid();\r\n newRow.state = CardRowState.Inserted;\r\n newRow.state = CardRowState.None;\r\n worksAndServicesItemsVirtualSection.rows.push(newRow);\r\n }\r\n while (newCount < ArUIHelper.GetItemRows(worksAndServicesItemsVirtualSection, row).length)\r\n {\r\n ArHelper.RemoveRowFromCollectionSection(storeMode, worksAndServicesItemsVirtualSection, ArUIHelper.GetItemRows(worksAndServicesItemsVirtualSection, row)[ArUIHelper.GetItemRows(worksAndServicesItemsVirtualSection, row).length-1]);\r\n }\r\n }\r\n else\r\n {\r\n for (let itemRow of ArUIHelper.GetItemRows(worksAndServicesItemsVirtualSection, row))\r\n {\r\n ArHelper.RemoveRowFromCollectionSection(storeMode, worksAndServicesItemsVirtualSection, itemRow);\r\n }\r\n }\r\n }\r\n \r\n private static async FillSumWithNDS(row: CardRow)\r\n {\r\n let KolTov: number = row.tryGetField(\"KolTov\") != null ? row.tryGetField(\"KolTov\")!.$value : null;\r\n let CenaTov: number = row.tryGetField(\"CenaTov\") != null ? row.tryGetField(\"CenaTov\")!.$value : null;\r\n if (KolTov != null && CenaTov != null)\r\n {\r\n CdCommonHelper.SetFieldToRow(row, \"StTovUchNal\", createTypedField((KolTov * CenaTov).toString(), DotNetType.Decimal));\r\n }\r\n }\r\n\r\n private static async FillSumNDS(row: CardRow)\r\n {\r\n let NalStID: number = row.tryGetField(\"NalStID\") != null ? row.tryGetField(\"NalStID\")!.$value : null;\r\n let StTovUchNal: number = row.tryGetField(\"StTovUchNal\") != null ? row.tryGetField(\"StTovUchNal\")!.$value : null;\r\n if (NalStID != null && StTovUchNal != null)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CalculateVatAmount;\r\n request.info[\"Amount\"] = createTypedField(StTovUchNal.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(NalStID, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n return;\r\n } \r\n\r\n CdCommonHelper.SetFieldToRow(row, \"SumNal\", response.info.VATAmount);\r\n }\r\n }\r\n\r\n private static async FillSumWithoutNDS(row: CardRow)\r\n {\r\n let StTovUchNal: number = row.tryGetField(\"StTovUchNal\") != null ? row.tryGetField(\"StTovUchNal\")!.$value : null;\r\n let SumNal: number = row.tryGetField(\"SumNal\") != null ? row.tryGetField(\"SumNal\")!.$value : null;\r\n if (StTovUchNal != null && SumNal != null)\r\n {\r\n CdCommonHelper.SetFieldToRow(row, \"StTovBezNDS\", createTypedField((StTovUchNal - SumNal).toString(), DotNetType.Decimal));\r\n }\r\n }\r\n\r\n /** Инициализация логики очистки и заполнения ссылок на статьи ИДП*/\r\n private static InitLinksForWorksAndServices(context: ICardUIExtensionContext)\r\n {\r\n ArUIHelper.InitClearingOfIdpList(context);\r\n }\r\n \r\n\r\n /** Очистка ссылки ИДП при смене контракта*/\r\n private static InitClearingOfIdpList(context: ICardUIExtensionContext)\r\n {\r\n const card = context.model.card;\r\n const arActWorksAndServicesList = card.sections.tryGet(\"ArActWorksAndServicesList\");\r\n const articleIdpList = card.sections.tryGet(\"ArArticleIDPListVirtual\");\r\n if (isNullOrUndefined(arActWorksAndServicesList) || isNullOrUndefined(articleIdpList))\r\n {\r\n return;\r\n }\r\n \r\n // Если изменился список статей, то обрабатываем список ссылок на них\r\n articleIdpList.rows.collectionChanged.add( async () =>\r\n {\r\n arActWorksAndServicesList.rows.forEach( async serv => {\r\n serv.set(\"IdpArticleRowID\", null);\r\n serv.set(\"IdpArticleID\", null);\r\n serv.set(\"IdpArticleName\", null);\r\n serv.set(\"IdpArticleObjectFullName\", null);\r\n });\r\n });\r\n }\r\n\r\n /** Логика для коллекции \"Cогласующие\"*/\r\n public static ApproversHandle(context: ICardUIExtensionContext) {\r\n const tableControl = CdUIHelper.GetUIControl(context, \"ApproversControl\");\r\n if (tableControl == null) {\r\n return;\r\n }\r\n\r\n ArUIHelper.SetRoleCalculationTypeTableHandle(tableControl, \"CalculationType\");\r\n // ArUIHelper.SetControlEnableByRoleCalculationTypeTableHandle(tableControl, \"CalculationType\");\r\n }\r\n\r\n /** Логика для коллекции \"Ответственные\"*/\r\n public static ResponsibleExecutorsHandle(context: ICardUIExtensionContext) {\r\n const tableControl = CdUIHelper.GetUIControl(context, \"ResponsibleExecutorsControl\");\r\n if (tableControl == null) {\r\n return;\r\n }\r\n\r\n ArUIHelper.SetRoleCalculationTypeTableHandle(tableControl, \"CalculationType\");\r\n // ArUIHelper.SetControlEnableByRoleCalculationTypeTableHandle(tableControl, \"CalculationType\");\r\n }\r\n\r\n /** Логика для коллекции \"Бухгалтеры\"*/\r\n public static ResponsibleBookkeepersHandle(context: ICardUIExtensionContext) {\r\n const tableControl = CdUIHelper.GetUIControl(context, \"ResponsibleBookkeepersControl\");\r\n if (tableControl == null) {\r\n return;\r\n }\r\n\r\n ArUIHelper.SetRoleCalculationTypeTableHandle(tableControl, \"CalculationType\");\r\n ArUIHelper.SetControlEnableByRoleCalculationTypeTableHandle(tableControl, \"CalculationType\");\r\n }\r\n\r\n /** Логика для коллекции \"Обязательные согласующие\"*/\r\n public static RequiredApproversHandle(context: ICardUIExtensionContext) {\r\n const tableControl = CdUIHelper.GetUIControl(context, \"RequiredApproversControl\");\r\n if (tableControl == null) {\r\n return;\r\n }\r\n\r\n ArUIHelper.SetIsRequiredApproversContains(context.model, tableControl);\r\n ArUIHelper.SetRoleCalculationTypeTableHandle(tableControl, \"CalculationType\");\r\n // ArUIHelper.SetControlEnableByRoleCalculationTypeTableHandle(tableControl);\r\n }\r\n\r\n /** Логика для коллекции \"Подписант\"*/\r\n public static SignerHandle(context: ICardUIExtensionContext) {\r\n const entryControl = CdUIHelper.GetUIControl(context, \"SignerControl\");\r\n if (entryControl == null) {\r\n return;\r\n }\r\n\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection == null) {\r\n return;\r\n }\r\n\r\n ArUIHelper.SetRoleCalculationTypeEntryHandle(entryControl, aaSection, \"SignerCalculationType\");\r\n // ArUIHelper.SetControlEnableByRoleCalculationTypeEntryHandle(entryControl, aaSection, \"SignerCalculationType\");\r\n // ArUIHelper.SetControlEnableByRoleCalculationTypeTableHandle(tableControl);\r\n }\r\n\r\n /** Установка флага типа расчета роли \"Ручной ввод\" при выборе. */\r\n private static SetRoleCalculationTypeTableHandle(control: AutoCompleteTableViewModel, fieldName: string) {\r\n control.valueSet.add((e) => {\r\n const item = e.item as RowAutoCompleteItem;\r\n item.row.set(fieldName + \"ID\", createTypedField(PkRoleCalculationType.Manual.ID, DotNetType.Int32));\r\n item.row.set(fieldName + \"Name\", createTypedField(PkRoleCalculationType.Manual.Name, DotNetType.String));\r\n item.row.set(fieldName + \"Caption\", createTypedField(PkRoleCalculationType.Manual.Caption, DotNetType.String));\r\n });\r\n }\r\n\r\n /** Установка флага типа расчета роли \"Ручной ввод\" при выборе. */\r\n private static SetRoleCalculationTypeEntryHandle(control: AutoCompleteEntryViewModel, section: CardSection, fieldName: string) {\r\n control.valueSet.add(() => {\r\n section.fields.set(fieldName + \"ID\", createTypedField(PkRoleCalculationType.Manual.ID, DotNetType.Int32));\r\n section.fields.set(fieldName + \"Name\", createTypedField(PkRoleCalculationType.Manual.Name, DotNetType.String));\r\n section.fields.set(fieldName + \"Caption\", createTypedField(PkRoleCalculationType.Manual.Caption, DotNetType.String));\r\n });\r\n }\r\n\r\n /** Установка доступности поля в зависимости от флага типа расчета роли. */\r\n private static SetControlEnableByRoleCalculationTypeTableHandle(tableControl: AutoCompleteTableViewModel, fieldName: string) {\r\n const action = (() => {\r\n for (const row of tableControl.items.map(x => (x as RowAutoCompleteItem).row)) {\r\n if (row.state === CardRowState.Deleted) {\r\n continue;\r\n }\r\n\r\n if (row.tryGet(fieldName + \"ID\") === PkRoleCalculationType.ByDepartment.ID) {\r\n if (!userSession.isAdmin) {\r\n tableControl.isReadOnly = true;\r\n }\r\n \r\n return;\r\n }\r\n }\r\n\r\n for (const row of tableControl.items.map(x => (x as RowAutoCompleteItem).row)) {\r\n if (row.state === CardRowState.Deleted) {\r\n continue;\r\n }\r\n\r\n if (row.tryGet(fieldName + \"ID\") === PkRoleCalculationType.DivisionRoles.ID) {\r\n tableControl.isReadOnly = true;\r\n return;\r\n }\r\n }\r\n });\r\n\r\n action();\r\n\r\n reaction(() => tableControl.items, () => {\r\n action();\r\n });\r\n }\r\n\r\n // /** Установка доступности поля в зависимости от флага типа расчета роли. */\r\n // private static SetControlEnableByRoleCalculationTypeEntryHandle(entryControl: AutoCompleteEntryViewModel, section: CardSection, fieldName: string) {\r\n // reaction(() => entryControl.item, () => {\r\n // const isCalculatedByDivisionRoles = section.fields.tryGet(fieldName + \"ID\") === PkRoleCalculationType.DivisionRoles.ID;\r\n\r\n // entryControl.isReadOnly = isCalculatedByDivisionRoles;\r\n // });\r\n // }\r\n\r\n /** Установка виртуального поля наличия обязательных согласующих*/\r\n private static SetIsRequiredApproversContains(model: ICardModel, tableControl: AutoCompleteTableViewModel) {\r\n const aavSection = model.card.sections.tryGet(\"ArchiveActVirtual\");\r\n if (aavSection == null)\r\n return;\r\n\r\n aavSection.fields.rawSet(\"IsRequiredApproversContains\",\r\n createTypedField(tableControl.items.some(x => (x as RowAutoCompleteItem).row.state !== CardRowState.Deleted), DotNetType.Boolean));\r\n\r\n reaction(() => tableControl.items, () => {\r\n aavSection.fields.rawSet(\"IsRequiredApproversContains\",\r\n createTypedField(tableControl.items.some(x => (x as RowAutoCompleteItem).row.state !== CardRowState.Deleted), DotNetType.Boolean));\r\n });\r\n }\r\n\r\n /** Логика варианта завершения \"Перейти в пакет\" */\r\n public static GoToPacketActionLogic(context: ICardUIExtensionContext) {\r\n\r\n // только для карточек ПД / ЭД\r\n if (context.model.card.typeId !== PkCardTypes.ArActTypeID &&\r\n context.model.card.typeId !== PkCardTypes.ArEDocumentTypeID) return;\r\n\r\n // у которых есть признак комплекта\r\n const pkdciSection = context.model.card.sections.tryGet(\"PkDiadocCommonInfo\");\r\n if (pkdciSection == null) return;\r\n if (pkdciSection.fields.tryGet(\"ComplectID\") == null) return;\r\n\r\n // получаем ID пакета\r\n const packetID = pkdciSection.fields.tryGet(\"PacketId\");\r\n if (packetID == null) return;\r\n\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks == null || tasks.length < 1) return;\r\n\r\n for (let task of tasks) {\r\n // при инциализации формы\r\n ArUIHelper.CreateGoToPacketActionAndHideOther(task, packetID);\r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(e => {\r\n ArUIHelper.CreateGoToPacketActionAndHideOther(e.task, packetID);\r\n });\r\n }\r\n }\r\n\r\n /** Создание кнопки \"Перейти в диадок\" и скрытие всех остальных */\r\n private static CreateGoToPacketActionAndHideOther(task: TaskViewModel, packetID: any) {\r\n // получаем все кнопки\r\n const actions = task.taskWorkspace.actions;\r\n if (actions == null) return;\r\n\r\n // получаем все дополнительные кнопки\r\n const additionalActions = task.taskWorkspace.additionalActions;\r\n if (additionalActions == null) return;\r\n\r\n // удаляем все кнопки\r\n for (let i = actions.length - 1; i >= 0; i--)\r\n actions.pop();\r\n // удаляем все дополнительные кнопки\r\n for (let i = additionalActions.length - 1; i >= 0; i--)\r\n additionalActions.pop();\r\n\r\n // добавляем кнопку \"Перейти в пакет\"\r\n actions.push\r\n (\r\n new TaskActionViewModel\r\n (\r\n \"Перейти в пакет\",\r\n async () => await showLoadingOverlay(async () => {\r\n await openCard({cardId: packetID!});\r\n }, \"Открывается карточка пакета\"),\r\n TaskActionType.Custom,\r\n TaskGroupingType.Default,\r\n null,\r\n task.taskModel\r\n )\r\n );\r\n }\r\n\r\n /** Логика варианта завершения \"Подписать DSS\" */\r\n public static async DssSignActionLogicAsync(context: ICardUIExtensionContext) {\r\n // проверяем секции\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n const pkdciSection = context.model.card.sections.tryGet(\"PkDiadocCommonInfo\");\r\n if (aaSection == null || pkdciSection == null) {\r\n return;\r\n }\r\n\r\n // проверяем данные\r\n const boxID = pkdciSection.fields.tryGet(\"BoxID\");\r\n if (boxID == null) {\r\n return;\r\n }\r\n\r\n const signerID = aaSection.fields.tryGet(\"SignerID\");\r\n if (signerID == null) {\r\n return;\r\n }\r\n\r\n // изменяем задания\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks == null ||\r\n tasks.length < 1 ||\r\n tasks.filter(x => x.taskModel.cardType != null && x.taskModel.cardType.id === ArTaskTypes.PkActSignerDiadocTypeID).length < 1) {\r\n return;\r\n }\r\n\r\n // получаем данные по организации сотрудника\r\n const userCertInfo = await CdDSSHelper.GetUserCertInfoAsync(\r\n signerID,\r\n boxID,\r\n undefined,\r\n undefined,\r\n false,\r\n CdDssCspType.Qualified);\r\n\r\n // устнавливаем варианты завершения, которые нужно спрятать\r\n const removingCompletionOptionID = userCertInfo?.ExternalUserGuid != null || userCertInfo?.EmployeeGuid1C != null\r\n ? ArCompleteOptions.GoDiadoc\r\n : ArCompleteOptions.PkSignDSS;\r\n\r\n for (let task of tasks) {\r\n // при инциализации формы\r\n ArUIHelper.RemoveTaskAction(task, removingCompletionOptionID);\r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(e => {\r\n ArUIHelper.RemoveTaskAction(e.task, removingCompletionOptionID);\r\n });\r\n }\r\n }\r\n\r\n /**Если есть ссылка на диадок, то делаем доступным вариант завершения \"Перейти в Диадок\",\r\n * в противном случае делаем доступным вариант завершения подписать.\r\n */\r\n public static InitVisiabilityOfSigningOptionsAsync(context: ICardUIExtensionContext) {\r\n let url = \"\";\r\n const diadocSection = context.model.card.sections.tryGet('PkDiadocCommonInfo');\r\n if (diadocSection != null) {\r\n url = diadocSection.fields.tryGet(\"URL\");\r\n }\r\n const pkdSection = context.model.card.sections.tryGet('PkDiadocInfo');\r\n if (pkdSection != null && pkdSection.rows != null && pkdSection.rows.length > 0) {\r\n url = pkdSection.rows[0].tryGet(\"URL\");\r\n }\r\n\r\n let removingCompletionOptions: guid[] = [];\r\n if (PkCommonHelper.IsNullOrWhitespace(url)) \r\n {\r\n removingCompletionOptions.push(ArCompleteOptions.GoDiadoc);\r\n }\r\n else {\r\n removingCompletionOptions.push(ArCompleteOptions.PkSign);\r\n removingCompletionOptions.push(ChProcessHelper.SendForRevision);\r\n removingCompletionOptions.push(ChProcessHelper.Reject);\r\n removingCompletionOptions.push(ArCompleteOptions.PkSignDSS);\r\n removingCompletionOptions.push(ChProcessHelper.SignWithEDS);\r\n removingCompletionOptions.push(ChProcessHelper.PkSignInDiadoc);\r\n }\r\n\r\n // изменяем задания\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks == null ||\r\n tasks.length < 1 ||\r\n tasks.filter(\r\n x => x.taskModel.cardType != null \r\n && Guid.equals(x.taskModel.cardType.id, PkTaskTypes.PkSignInDiadocTypeID)).length < 1) {\r\n return;\r\n }\r\n \r\n \r\n for (let task of tasks) {\r\n // при инциализации формы\r\n removingCompletionOptions.forEach(element => {\r\n ArUIHelper.RemoveTaskAction(task, element);\r\n });\r\n \r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(() => {\r\n removingCompletionOptions.forEach(element => {\r\n ArUIHelper.RemoveTaskAction(task, element);\r\n });\r\n });\r\n }\r\n }\r\n\r\n /** Удаление вариантов завершения */\r\n public static RemoveTaskAction(task: TaskViewModel, removingCompletionOptionID: string) {\r\n // получаем все кнопки\r\n const actions = task.taskWorkspace.actions;\r\n if (actions == null) {\r\n return;\r\n }\r\n\r\n // получаем все дополнительные кнопки\r\n const additionalActions = task.taskWorkspace.additionalActions;\r\n if (additionalActions == null) {\r\n return;\r\n }\r\n\r\n // удаляем необходимые кнопки\r\n for (let i = actions.length - 1; i >= 0; i--) {\r\n const action = actions[i];\r\n\r\n if (action.completionOption == null ||\r\n !(Guid.equals(action.completionOption.id, removingCompletionOptionID))) {\r\n continue;\r\n }\r\n\r\n actions.splice(i, 1);\r\n }\r\n\r\n // удаляем необходимые дополнительные кнопки\r\n for (let i = additionalActions.length - 1; i >= 0; i--) {\r\n const additionalAction = additionalActions[i];\r\n\r\n if (additionalAction.completionOption != null &&\r\n !Guid.equals(additionalAction.completionOption.id, removingCompletionOptionID)) {\r\n continue;\r\n }\r\n\r\n additionalActions.splice(i, 1);\r\n }\r\n }\r\n\r\n /** Установка видимости контролов диадока */\r\n public static SetDiadocControlsVisibility(model: ICardModel) {\r\n const attachmentCommentControl = CdUIHelper.GetUIControlFromModel(model, \"AttachmentCommentControl\");\r\n const rejectionCommentControl = CdUIHelper.GetUIControlFromModel(model, \"RejectionCommentControl\");\r\n\r\n if (attachmentCommentControl == null ||\r\n rejectionCommentControl == null)\r\n return;\r\n\r\n const isAttachmentCommentControlNotEmpty = attachmentCommentControl.text != null && attachmentCommentControl.text !== \"\";\r\n const isRejectionCommentControlNotEmpty = rejectionCommentControl.text != null && rejectionCommentControl.text !== \"\";\r\n\r\n CdUIHelper.SetConrolVisibility(attachmentCommentControl, isAttachmentCommentControlNotEmpty);\r\n CdUIHelper.SetConrolVisibility(rejectionCommentControl, isRejectionCommentControlNotEmpty);\r\n }\r\n\r\n /** Проверка договора на конструктор цен и отказ по документу */\r\n public static async CheckIsDirectual(\r\n context: ICardUIExtensionContext,\r\n showCardsInfo: boolean = false,\r\n cards: Card[]) {\r\n if (cards == null || cards.length < 1)\r\n return;\r\n\r\n const availableCardsIDs = new Array();\r\n const availableCardsInfo = new Array();\r\n\r\n for (const card of cards) {\r\n const aaSection = card.sections.get(\"ArchiveAct\");\r\n const dciSection = card.sections.get(\"DocumentCommonInfo\");\r\n const pkdciSection = card.sections.get(\"PkDocumentCommonInfo\");\r\n const contractID = aaSection!.fields.get(\"ContractID\");\r\n const documentKindID = aaSection!.fields.get(\"DocumentKindID\");\r\n const documentKindName = aaSection!.fields.get(\"DocumentKindDocumentKind\");\r\n const stateID = pkdciSection!.fields.get(\"StateID\");\r\n const secondaryFullNumber = dciSection!.fields.get(\"SecondaryFullNumber\");\r\n\r\n const cardInfo =\r\n \"ID: \\\"\" + secondaryFullNumber + \"\\\"\" +\r\n (!isNullOrUndefined(documentKindName) ? \", Вид: \" + documentKindName : \"\");\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.IsDirectual;\r\n request.info[\"cardId\"] = createTypedField(card.id, DotNetType.Guid);\r\n request.info[\"contractId\"] = contractID != null ? createTypedField(contractID, DotNetType.Guid) : null;\r\n request.info[\"documentKindId\"] = documentKindID != null ? createTypedField(documentKindID, DotNetType.Guid) : null;\r\n request.info[\"stateId\"] = stateID != null ? createTypedField(stateID, DotNetType.Int32) : null;\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n // let answer = response.info!.arActRequestIsDirectualId!.$value;\r\n const responseResult = tryGetFromInfo(response.info, \"arActRequestIsDirectualId\", false);\r\n if (!responseResult)\r\n continue;\r\n\r\n availableCardsIDs.push(card.id);\r\n availableCardsInfo.push(cardInfo);\r\n }\r\n\r\n if (availableCardsIDs.length < 1)\r\n return;\r\n\r\n const cardsInfo = availableCardsInfo.join(\"\\n\");\r\n\r\n const comment =\r\n \"ПДЦ для выбранного договора сформирован через конструктор цен. \" +\r\n \"Подрядчик должен выставить акт, сформированный через конструктор актов.\";\r\n\r\n const confirmComment =\r\n comment +\r\n \"\\nДанный акт направлен подрядчиком некорректно и будет автоматически отклонен.\" +\r\n (showCardsInfo ? \":\\n\" + cardsInfo : \".\") +\r\n \"\\nВы уверены, что хотите сохранить карточку?\";\r\n\r\n const confirmResult = await showConfirm(confirmComment);\r\n if (!confirmResult) {\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n const tessaComment =\r\n comment +\r\n \"\\nДанный акт направлен подрядчиком некорректно и был отклонен сотрудником \" + userSession.UserName;\r\n\r\n const diadocComment =\r\n \"Договор оформлен через конструктор цен. \" +\r\n \"Акт должен быть создан через конструктор актов и загружен в Диадок автоматически. \" +\r\n \"Инструкция: https://disk.yandex.ru/i/RM41glnjaBQUxg\";\r\n\r\n for (const card of cards) {\r\n if (!availableCardsIDs.some(x => x === card.id))\r\n continue;\r\n\r\n card.info[\"IsNeedToRejectDocument\"] = true;\r\n card.info[\"IsNeedToRejectDocumentDiadocComment\"] = diadocComment;\r\n card.info[\"IsNeedToRejectDocumentTessaComment\"] = tessaComment;\r\n }\r\n }\r\n\r\n /** Установка флага игнорирования предупреждений. */\r\n public static SetRejectingIgnorePermissionsWarningFlag(cardStoreRequest: CardStoreRequest) {\r\n if (cardStoreRequest.card.info.confirmResult) {\r\n cardStoreRequest.info['.ignorePermissionsWarning'] = createTypedField(true, DotNetType.Boolean);\r\n }\r\n }\r\n\r\n /** Получение данных по карточкам и файлам. */\r\n public static async GetCardsFilesInfoAsync(\r\n cards: Card[],\r\n checkMainCertificate: boolean = false) {\r\n return await showLoadingOverlay(async () => {\r\n // инициализируем список данных по карточкам и файлам\r\n const cardsFilesInfo = new Array();\r\n\r\n // пробегаемся по карточкам\r\n for (const card of cards) {\r\n // создаем файловый контейнер\r\n const fileSource = createCardFileSourceForCard(card);\r\n const fileContainer = createCardFileContainer(fileSource);\r\n await fileContainer.init();\r\n\r\n // получаем данные по карточке и файлам\r\n const cardFilesInfo = await CardFilesInfo.CreateAsync(\r\n card,\r\n fileContainer,\r\n userSession.UserID,\r\n checkMainCertificate);\r\n\r\n // добавляем в список\r\n cardsFilesInfo.push(cardFilesInfo);\r\n }\r\n\r\n // возвращаем список\r\n return cardsFilesInfo;\r\n }, \"Получение данных по документам и файлам\");\r\n }\r\n\r\n /** Подписание файлов по группам. */\r\n public static async SignFilesByGroupsAsync(\r\n cardsFilesInfo: CardFilesInfo[],\r\n cAdESProvider: ICAdESProvider) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // подписываем файлы через DSS\r\n const signFilesByDssResult = await ArUIHelper.SendFilesToDssSigningAsync(\r\n cardsFilesInfo.filter(x => x.SigningInfo.IsNeedDssSigning));\r\n\r\n // добавляем результат валидации\r\n validationResult.add(signFilesByDssResult);\r\n\r\n // инициализируем список групп\r\n const groups: Array = [];\r\n\r\n // пробегаемся по данным карточек и файлов\r\n for (const cardFilesInfo of cardsFilesInfo.filter(x => x.SigningInfo.IsNeedSigning && !x.SigningInfo.IsNeedDssSigning)) {\r\n // ищем группу в списке\r\n let group = groups.find(x =>\r\n x.CertIssuerName === cardFilesInfo.SigningInfo.CertIssuerName &&\r\n x.CertEnhancedKey === cardFilesInfo.SigningInfo.CertEnhancedKey);\r\n\r\n // если группы нет в списке\r\n if (group == null) {\r\n // создаем новую группу\r\n group = new SigningGroup(\r\n cardFilesInfo.SigningInfo.CertIssuerName,\r\n cardFilesInfo.SigningInfo.CertEnhancedKey\r\n );\r\n\r\n // добавляем группу в список\r\n groups.push(group);\r\n }\r\n\r\n // добавляем данные по карточке и файлам в группу\r\n group.CardsFilesInfo.push(cardFilesInfo);\r\n }\r\n\r\n // пробегаемся по группам\r\n for (const group of groups) {\r\n // получаем данные группы\r\n const certIssuerName = group.CertIssuerName;\r\n const certEnhancedKey = group.CertEnhancedKey;\r\n\r\n // подписываем файлы обычным способом\r\n const signingFilesResult = await ArUIHelper.SignFilesAsync(\r\n group.CardsFilesInfo,\r\n cAdESProvider,\r\n certIssuerName,\r\n certEnhancedKey);\r\n\r\n // добавляем результат валидации\r\n validationResult.add(signingFilesResult);\r\n }\r\n\r\n // возвращаем результат валидации\r\n return validationResult;\r\n }\r\n\r\n /** Подписание файлов. */\r\n public static async SignFilesAsync(\r\n cardsFilesInfo: CardFilesInfo[],\r\n cAdESProvider: ICAdESProvider,\r\n certIssuerName: string | null = null,\r\n certEnhancedKey: string | null = null) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // если данные для подписания не заданы\r\n if (cardsFilesInfo == null || cardsFilesInfo.length === 0) {\r\n // выходим\r\n return validationResult;\r\n }\r\n\r\n await showLoadingOverlay(async () => {\r\n try {\r\n // получаем сертификат\r\n const certResult = await CdEDSHelper.GetCertificateAsync(cAdESProvider, certIssuerName, certEnhancedKey);\r\n\r\n // если сертификат не найден\r\n if (certResult.Certificate == null) {\r\n // получаем наименования компаний, по которым необходим выпуск НЭП-а\r\n let needNepReleaseCompanyNames = cardsFilesInfo\r\n .filter(x =>\r\n x.SigningInfo.IsNeedNepRelease &&\r\n x.SigningInfo.CompanyName != null)\r\n .map(x => x.SigningInfo.CompanyName!);\r\n\r\n // аналог Distinct()\r\n needNepReleaseCompanyNames = [...new Set(needNepReleaseCompanyNames)];\r\n\r\n // если такие компании есть\r\n if (needNepReleaseCompanyNames.length > 0) {\r\n // записываем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"У вас нет электронной подписи для подписания документов по организации: \" + needNepReleaseCompanyNames.join(\", \") + \". \" +\r\n \"Пожалуйста, выпустите НЭП используя личный кабинет на портале home.pik.\");\r\n\r\n // выходим\r\n return;\r\n }\r\n\r\n // пишем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Не удалось найти подходящий сертификат для подписания.\");\r\n\r\n // выходим\r\n return;\r\n }\r\n\r\n // получаем файлы для подписания\r\n const signingFilesInfoResult = await PkCardHelper.GetSigningFilesInfoAsync(cardsFilesInfo);\r\n\r\n // проверяем ошибки\r\n if (!signingFilesInfoResult.validationResult.isSuccessful) {\r\n // пробрасываем исключение\r\n throw new Error(signingFilesInfoResult.validationResult.build().toString());\r\n }\r\n\r\n // пробегаемся по файлам, которые нужно подписать\r\n for (const signingFileInfo of signingFilesInfoResult.signingFilesInfo) {\r\n // генерируем подпись\r\n const signatureData = await setSign(\r\n cAdESProvider,\r\n signingFileInfo.Version,\r\n certResult.Certificate);\r\n\r\n // подписываем файл\r\n await PkCardHelper.SignFileAsync(\r\n signingFileInfo.CardFile,\r\n signingFileInfo.Version,\r\n certResult.Certificate,\r\n signatureData.signature,\r\n signingFileInfo.CompletedTask?.typeId);\r\n\r\n // добавляем файл подписи\r\n await PkCardHelper.AddFileSignatureAsync(\r\n signingFileInfo.FileContainer,\r\n signingFileInfo.Version.file,\r\n userSession.UserName,\r\n signatureData.signature);\r\n }\r\n } catch (e) {\r\n // получаем ID-шники карточек\r\n const cardsIDs = cardsFilesInfo.map(x => \"\\\"\" + x.Card.id + \"\\\"\").join(\", \");\r\n\r\n // пишем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании файлов для карточек: \" + cardsIDs + \".\\n\\n\" +\r\n \"Message:\\n\" + ValidationResult.fromError(e).toString());\r\n }\r\n }, \"Подписание файлов\");\r\n\r\n // возвращаем результат валидации\r\n return validationResult;\r\n }\r\n\r\n /** Подписание файлов с помощью DSS-сервиса. */\r\n public static async SignFilesByDssAsync(\r\n cardsFilesInfo: CardFilesInfo[],\r\n externalUserGuid: string | null,\r\n employeeGuid1C: string | null,\r\n dssCspType: CdDssCspType) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // если данные для подписания не заданы\r\n if (cardsFilesInfo == null || cardsFilesInfo.length === 0) {\r\n // выходим\r\n return validationResult;\r\n }\r\n\r\n await showLoadingOverlay(async () => {\r\n try {\r\n // получаем файлы для подписания\r\n const signingFilesInfoResult = await PkCardHelper.GetSigningFilesInfoAsync(cardsFilesInfo);\r\n\r\n // проверяем ошибки\r\n if (!signingFilesInfoResult.validationResult.isSuccessful) {\r\n // пробрасываем исключение\r\n throw new Error(signingFilesInfoResult.validationResult.build().toString());\r\n }\r\n\r\n // если сертификат не задан и есть файлы для подписи\r\n if (signingFilesInfoResult.signingFilesInfo.length > 0) {\r\n // инициализируем данные для подписания файлов\r\n const dssRequestFilesSigningInfo = new Array();\r\n\r\n // пробегаемся по файлам для подписания\r\n for (const signingFileInfo of signingFilesInfoResult.signingFilesInfo) {\r\n const dssRequestFileSigningInfo = new DssRequestFileSigningInfo(\r\n signingFileInfo.Version.id,\r\n signingFileInfo.Version.name,\r\n await readFileContentAsBase64(signingFileInfo.Version.content!));\r\n\r\n // добавляем в список\r\n dssRequestFilesSigningInfo.push(dssRequestFileSigningInfo);\r\n }\r\n\r\n // инициализируем запрос\r\n const dssSignRequest = new CardRequest();\r\n dssSignRequest.requestType = CdRequestTypes.PkSignFilesByDss;\r\n dssSignRequest.info[\"ExternalUserGuid\"] = externalUserGuid != null ? createTypedField(externalUserGuid, DotNetType.Guid) : null;\r\n dssSignRequest.info[\"EmployeeGuid1C\"] = employeeGuid1C != null ? createTypedField(employeeGuid1C, DotNetType.Guid) : null;\r\n dssSignRequest.info[\"DssCspType\"] = createTypedField(dssCspType.ID, DotNetType.Int32);\r\n dssSignRequest.info[\"DssRequestFilesSigningInfo\"] = createTypedField(JSON.stringify(dssRequestFilesSigningInfo), DotNetType.String);\r\n\r\n // отправляем запрос\r\n const dssSignResponse = await CardService.instance.request(dssSignRequest);\r\n\r\n // проверяем ошибки в ответе\r\n if (!dssSignResponse.validationResult.isSuccessful) {\r\n // пробрасываем исключение\r\n throw new Error(dssSignResponse.validationResult.build().toString());\r\n }\r\n\r\n // получаем данные по подписанию файлов\r\n const dssResponseFilesSigningInfoJson = tryGetFromInfo(\r\n dssSignResponse.info, \"DssResponseFilesSigningInfo\");\r\n\r\n // если данных по подписанию файлов нет\r\n if (dssResponseFilesSigningInfoJson == null) {\r\n // получаем статус операции\r\n const dssOperationStatusName = tryGetFromInfo(\r\n dssSignResponse.info, \"DssOperationStatusName\");\r\n\r\n // пишем ошибку в контекст\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n dssOperationStatusName ?? \"\");\r\n\r\n // выходим\r\n return;\r\n }\r\n\r\n // десериализуем данные\r\n const dssResponseFilesSigningInfo: Array = JSON.parse(dssResponseFilesSigningInfoJson);\r\n\r\n // пробегаемся по файлам, которые нужно подписать\r\n for (const signingFileInfo of signingFilesInfoResult.signingFilesInfo) {\r\n // получаем данные по подписанию файла\r\n const dssResponseFileSigningInfo = dssResponseFilesSigningInfo.find(x =>\r\n x.VersionRowID === signingFileInfo.Version.id);\r\n\r\n // проверяем\r\n if (dssResponseFileSigningInfo == null) {\r\n throw new Error(\"Не удалось получить данные о подписи.\");\r\n }\r\n\r\n // получаем контент подписи\r\n const signatureData = dssResponseFileSigningInfo.SignBase64;\r\n\r\n // инициализируем серт\r\n const certificate: CertData = {\r\n serialNumber: dssResponseFileSigningInfo.SerialNumber,\r\n issuerName: dssResponseFileSigningInfo.IssuerName,\r\n subjectName: dssResponseFileSigningInfo.SubjectName,\r\n company: dssResponseFileSigningInfo.Company,\r\n validFrom: dssResponseFileSigningInfo.ValidFrom,\r\n validTo: dssResponseFileSigningInfo.ValidTo,\r\n certificateStr: signatureData\r\n };\r\n\r\n // подписываем файл\r\n await PkCardHelper.SignFileAsync(\r\n signingFileInfo.CardFile,\r\n signingFileInfo.Version,\r\n certificate,\r\n signatureData,\r\n signingFileInfo.CompletedTask?.typeId);\r\n\r\n // добавляем файл подписи\r\n await PkCardHelper.AddFileSignatureAsync(\r\n signingFileInfo.FileContainer,\r\n signingFileInfo.Version.file,\r\n userSession.UserName,\r\n signatureData);\r\n }\r\n }\r\n } catch (e) {\r\n // получаем ID-шники карточек\r\n const cardsIDs = cardsFilesInfo.map(x => \"\\\"\" + x.Card.id + \"\\\"\").join(\", \");\r\n\r\n // пишем ошибку в контекст\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании файлов через DSS для карточек: \" + cardsIDs + \".\\n\\n\" +\r\n \"Message:\\n\" + ValidationResult.fromError(e).toString());\r\n }\r\n }, \"Подписание файлов через DSS\");\r\n\r\n // возвращаем результат валидации\r\n return validationResult;\r\n }\r\n\r\n /** Отправка файлов на подписание через DSS. */\r\n public static async SendFilesToDssSigningAsync(cardsFilesInfo: CardFilesInfo[]) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // если данные для подписания не заданы\r\n if (cardsFilesInfo == null || cardsFilesInfo.length === 0) {\r\n // выходим\r\n return validationResult;\r\n }\r\n\r\n await showLoadingOverlay(async () => {\r\n try {\r\n // получаем файлы для подписания\r\n const signingFilesInfoResult = await PkCardHelper.GetSigningFilesInfoAsync(cardsFilesInfo, false);\r\n\r\n // проверяем ошибки\r\n if (!signingFilesInfoResult.validationResult.isSuccessful) {\r\n // пробрасываем исключение\r\n throw new Error(signingFilesInfoResult.validationResult.build().toString());\r\n }\r\n\r\n // если файлов для подписания нет\r\n if (signingFilesInfoResult.signingFilesInfo.length === 0) {\r\n // пробегаемся по карточкам\r\n for (const cardFilesInfo of cardsFilesInfo) {\r\n // устанавливаем флаг, что не нашлось файлов для подписания\r\n cardFilesInfo.Card.info[\"NoFilesToSign\"] = true;\r\n }\r\n\r\n // выходим\r\n return;\r\n }\r\n\r\n // задаем ID сообщения (актуально для массового подписания, чтоб везде был 1 MessageID)\r\n const messageID = Guid.newGuid();\r\n\r\n // пробегаемся по данным для подписания файлов\r\n for (const signingFileInfo of signingFilesInfoResult.signingFilesInfo) {\r\n // инициализируем запрос\r\n const insertMessageInfoRequest = new CardRequest();\r\n insertMessageInfoRequest.requestType = CdRequestTypes.InsertSignDssMessageInfo;\r\n insertMessageInfoRequest.info[\"CardID\"] = createTypedField(signingFileInfo.CardID, DotNetType.Guid);\r\n insertMessageInfoRequest.info[\"FileVersionID\"] = createTypedField(signingFileInfo.Version.id, DotNetType.Guid);\r\n insertMessageInfoRequest.info[\"AuthorID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n insertMessageInfoRequest.info[\"ExternalUserGuid\"] = signingFileInfo.ExternalUserGuid != null\r\n ? createTypedField(signingFileInfo.ExternalUserGuid, DotNetType.Guid)\r\n : null;\r\n insertMessageInfoRequest.info[\"EmployeeGuid1C\"] = signingFileInfo.EmployeeGuid1C != null\r\n ? createTypedField(signingFileInfo.EmployeeGuid1C, DotNetType.Guid)\r\n : null;\r\n insertMessageInfoRequest.info[\"DssCspType\"] = signingFileInfo.DssCspType != null\r\n ? createTypedField(signingFileInfo.DssCspType.ID, DotNetType.Int32)\r\n : null;\r\n insertMessageInfoRequest.info[\"TaskID\"] = signingFileInfo.CompletedTask != null\r\n ? createTypedField(signingFileInfo.CompletedTask.rowId, DotNetType.Guid)\r\n : null;\r\n insertMessageInfoRequest.info[\"TaskOptionID\"] = signingFileInfo.CompletedTask?.optionId != null\r\n ? createTypedField(signingFileInfo.CompletedTask.optionId, DotNetType.Guid)\r\n : null;\r\n insertMessageInfoRequest.info[\"TaskResult\"] = signingFileInfo.CompletedTask?.result != null\r\n ? createTypedField(signingFileInfo.CompletedTask.result, DotNetType.String)\r\n : null;\r\n insertMessageInfoRequest.info[\"MessageID\"] = createTypedField(messageID, DotNetType.Guid);\r\n\r\n // отправляем запрос\r\n const insertMessageInfoResponse = await CardService.instance.request(insertMessageInfoRequest);\r\n\r\n // проверяем ошибки в ответе\r\n if (!insertMessageInfoResponse.validationResult.isSuccessful) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n insertMessageInfoResponse.validationResult.build().toString());\r\n }\r\n }\r\n } catch (e) {\r\n // получаем ID-шники карточек\r\n const cardsIDs = cardsFilesInfo.map(x => \"\\\"\" + x.Card.id + \"\\\"\").join(\", \");\r\n\r\n // пишем ошибку в контекст\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании файлов через DSS для карточек: \" + cardsIDs + \".\\n\\n\" +\r\n \"Message:\\n\" + ValidationResult.fromError(e).toString());\r\n }\r\n }, \"Отправка файлов для подписания через DSS\");\r\n\r\n // возвращаем результат валидации\r\n return validationResult;\r\n }\r\n\r\n /** Добавление печатных форм. */\r\n public static async AddPrintFormsAsync(\r\n cardsFilesInfo: CardFilesInfo[],\r\n insertModeID: number = 0,\r\n signedInfo: string | null = null,\r\n showRole: boolean = true,\r\n showSignedDate: boolean = false,\r\n showOrganization: boolean = true) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // если данные для подписания не заданы\r\n if (cardsFilesInfo == null || cardsFilesInfo.length === 0) {\r\n // выходим\r\n return validationResult;\r\n }\r\n\r\n await showLoadingOverlay(async () => {\r\n try {\r\n // пробегаемся по карточкам с информацией по файлам\r\n for (const cardFilesInfo of cardsFilesInfo) {\r\n // смотрим флаг необходимости добавления печатных форм\r\n if (!cardFilesInfo.PrintFormsInfo.IsNeedAddPrintForms) {\r\n continue;\r\n }\r\n\r\n // добавляем файлы печатных форм\r\n const result = await PkCardHelper.AddPrintFormsAsync(\r\n cardFilesInfo.Card.id,\r\n cardFilesInfo.FileContainer,\r\n insertModeID,\r\n signedInfo,\r\n showRole,\r\n showSignedDate,\r\n cardFilesInfo.PrintFormsInfo.IsNeedShowCopyReceivedStamp,\r\n showOrganization,\r\n cardFilesInfo.PrintFormsInfo.FileName,\r\n cardFilesInfo.PrintFormsInfo.FileCategory);\r\n\r\n // добавляем результат\r\n validationResult.add(result);\r\n }\r\n\r\n // проверяем ошибки\r\n if (!validationResult.isSuccessful) {\r\n // прокидываем исключение при наличии ошибок\r\n throw new Error(validationResult.build().toString());\r\n }\r\n } catch (e) {\r\n // получаем ID-шники карточек\r\n const cardsIDs = cardsFilesInfo.map(x => \"\\\"\" + x.Card.id + \"\\\"\").join(\", \");\r\n\r\n // чистим результат валидации\r\n validationResult.clear();\r\n\r\n // пишем ошибку в контекст\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при формировании печатных форм для карточек: \" + cardsIDs + \".\\n\\n\" +\r\n \"Message:\\n\" + ValidationResult.fromError(e).toString());\r\n }\r\n }, \"Формирование печатных форм\");\r\n\r\n // возвращаем результат валидации\r\n return validationResult;\r\n }\r\n\r\n /** Переключатель активной вкладке по статьям в зависимости от заполненности статей*/\r\n public static InitArticlesTabsSwitching(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const tabs: TabControlViewModel = CdUIHelper.GetUIControl(context, \"ArticlesTabs\") as TabControlViewModel;\r\n const idpTab = tabs.tabs.find(t => t.tabCaption == \"Статьи ИДП\")!;\r\n const ohrTab = tabs.tabs.find(t => t.tabCaption == \"Статьи ОХР\")!;\r\n const objTab = tabs.tabs.find(t => t.tabCaption == \"Объекты\")!;\r\n\r\n const arArticleOhrList = card.sections.tryGet(\"ArArticleOHRListVirtual\");\r\n if (isNullOrUndefined(arArticleOhrList))\r\n {\r\n return;\r\n }\r\n\r\n\r\n const arArticleIdpList = card.sections.tryGet(\"ArArticleIDPListVirtual\");\r\n if (isNullOrUndefined(arArticleIdpList))\r\n {\r\n return;\r\n }\r\n\r\n // Делегат переключения вкладок\r\n const switchTab = () =>\r\n {\r\n tabs.selectedTab = objTab;\r\n if (arArticleOhrList.rows.some(r => r.state != CardRowState.Deleted))\r\n {\r\n tabs.selectedTab = ohrTab;\r\n }\r\n\r\n if (arArticleIdpList.rows.some(r => r.state != CardRowState.Deleted))\r\n {\r\n tabs.selectedTab = idpTab;\r\n }\r\n };\r\n\r\n // Сделать инициализацию и подписки\r\n switchTab();\r\n arArticleOhrList.rows.collectionChanged.add(()=>switchTab());\r\n arArticleIdpList.rows.collectionChanged.add(()=>switchTab());\r\n const articlesIdpVirtualGrid: GridViewModel = CdUIHelper.GetUIControl(context, \"ArticlesIDPVirtual\") as GridViewModel;\r\n const articlesOhrVirtualGrid: GridViewModel = CdUIHelper.GetUIControl(context, \"ArticlesOHRVirtual\") as GridViewModel;\r\n const objectsGrid: GridViewModel = CdUIHelper.GetUIControl(context, \"Objects\") as GridViewModel;\r\n\r\n // Инициалищируем видимость вкладок\r\n tabs.controlVisibility = Visibility.Collapsed;\r\n if (articlesOhrVirtualGrid.controlVisibility == Visibility.Visible\r\n || articlesIdpVirtualGrid.controlVisibility == Visibility.Visible\r\n || objectsGrid.controlVisibility == Visibility.Visible)\r\n {\r\n tabs.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n\r\n /** Переключатель активной вкладке по статьям в зависимости от заполненности статей*/\r\n public static InitArticlesTabsSwitchingForLetterCredit(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const tabs: TabControlViewModel = CdUIHelper.GetUIControl(context, \"ArticlesTabs\") as TabControlViewModel;\r\n const arArticleOhrList = card.sections.tryGet(\"ArArticleOHRListVirtual\");\r\n if (isNullOrUndefined(arArticleOhrList))\r\n {\r\n return;\r\n }\r\n \r\n \r\n const arArticleIdpList = card.sections.tryGet(\"ArArticleIDPListVirtual\");\r\n if (isNullOrUndefined(arArticleIdpList))\r\n {\r\n return;\r\n }\r\n \r\n // Делегат переключения вкладок\r\n const switchTab = () =>\r\n { \r\n let idpTab = tabs.tabs.find(t => t.tabCaption == \"Статьи ИДП\")!;\r\n let ohrTab = tabs.tabs.find(t => t.tabCaption == \"Статьи ОХР\")!; \r\n if (ohrTab!=null && arArticleOhrList.rows.some(r => r.state != CardRowState.Deleted))\r\n {\r\n tabs.selectedTab = ohrTab;\r\n }\r\n \r\n if (idpTab!=null && arArticleIdpList.rows.some(r => r.state != CardRowState.Deleted))\r\n {\r\n tabs.selectedTab = idpTab;\r\n }\r\n };\r\n \r\n // Сделать инициализацию и подписки\r\n switchTab();\r\n arArticleOhrList.rows.collectionChanged.add(()=>switchTab());\r\n arArticleIdpList.rows.collectionChanged.add(()=>switchTab()); \r\n //const objectsGrid: GridViewModel = CdUIHelper.GetUIControl(context, \"Objects\") as GridViewModel;\r\n }\r\n\r\n /** При выборе Объекта копировать значение в поле \"Прочие ОИ\" с возможностью редактирования значения*/\r\n public static InitObjectCopying(card: Card)\r\n {\r\n let arArticleOhrListVirtual = card.sections.get(\"ArArticleOHRListVirtual\")!;\r\n let fields = [ \"ID\", \"ExtID\", \"Name\", \"FullName\", \"Code1c\", \"LivingComplex\", \"AddressPost\" ];\r\n\r\n let a = (args: CardFieldChangedEventArgs) =>\r\n {\r\n const Source = \"Object\";\r\n const Target = \"ObjectOther\";\r\n\r\n if (args == null || fields.some(f => Source + f == args.fieldName) == false)\r\n {\r\n return;\r\n }\r\n\r\n let row = args.storage;\r\n if (isNullOrUndefined(row)){\r\n return;\r\n }\r\n\r\n let targetFieldName = args.fieldName.replace(Source, Target);\r\n row.set(targetFieldName, row.getField(args.fieldName)!);\r\n };\r\n PkClientHelper.SubscribeForFieldChanging(arArticleOhrListVirtual, a);\r\n }\r\n\r\n /** Заполнение статей стикера в актах при выборе договора ГК ПИК. */\r\n public static async SetArticleStickerInActAsync(context: ICardUIExtensionContext, articleRowID: string, articleParentRowID: string) \r\n {\r\n let card = context.model.card;\r\n let arActArticleStickers = card.sections.tryGet('ArActArticleStickers');\r\n if (!articleRowID || !arActArticleStickers)\r\n {\r\n return;\r\n }\r\n\r\n // получим статьи стикера\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetArticleStickersFromContacrtByParent;\r\n request.info[\"ArticleRowID\"] = createTypedField(articleRowID, DotNetType.Guid);\r\n\r\n // проверка ответа\r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n if (response.info!.stickersList!) {\r\n for (let stick of response.info.stickersList) {\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set('CostItemID', stick.ArticleID);\r\n newRow.set('CostItemMdsID', stick.ExtContractArticleIdpID);\r\n newRow.set('CostItemName', stick.ArticleName);\r\n newRow.set('Amount', createTypedField(\"0\", DotNetType.Decimal));\r\n newRow.parentRowId = articleParentRowID;\r\n newRow.set('ParentRowID', createTypedField(articleParentRowID, DotNetType.Guid));\r\n newRow.set('RowIDFromContract', stick.RowID);\r\n newRow.state = CardRowState.Inserted;\r\n arActArticleStickers.rows.push(newRow);\r\n }\r\n }\r\n }\r\n\r\n /** Скрытие таблицы со стикерными статьями в актах если записей в ней нет. */\r\n private static HideArticleStickerTableInAct(context: ICardUIExtensionContext, e: GridRowEventArgs)\r\n {\r\n let card = context.model.card;\r\n let arActArticleStickers = card.sections.tryGet('ArActArticleStickers');\r\n if (e.rowModel == null || !arActArticleStickers)\r\n {\r\n return;\r\n }\r\n\r\n let articleStickersBlock = e.rowModel.blocksBag.find(x => x.name == \"ArticleStickersBlock\");\r\n let isHide = arActArticleStickers.rows.filter(x => x.parentRowId == e.row.rowId).length > 0 ? false : true;\r\n articleStickersBlock!.blockVisibility = isHide ? Visibility.Collapsed : Visibility.Visible;\r\n\r\n // если есть статьи стикера - то поле Сумма Всего заблокируем для редактирования\r\n // получим контрол Сумма всего\r\n let articleAmountControl = e.rowModel.controlsBag.find(x => x.name == \"ArticleAmountControl\");\r\n articleAmountControl!.isReadOnly = !isHide;\r\n }\r\n\r\n /** Подписка на изменение таблицы со статьями стикера. */\r\n private static ArticleStickerTableOnEdit(context: ICardUIExtensionContext, e: GridRowEventArgs)\r\n {\r\n let card = context.model.card;\r\n let arActArticleStickers = card.sections.tryGet('ArActArticleStickers');\r\n if (e.rowModel == null || !arActArticleStickers)\r\n {\r\n return;\r\n }\r\n\r\n let arArticleStickersTableControl = e.rowModel.controlsBag.find(x => x.name == \"ArArticleStickersTableControl\") as GridViewModel;\r\n\r\n if (!arArticleStickersTableControl)\r\n {\r\n return;\r\n }\r\n\r\n let nextOpenRow: GridRowViewModel | undefined;\r\n\t\t\tlet nextOpenRowBool = false;\r\n\r\n // подписка на закрытие\r\n arArticleStickersTableControl.rowEditorClosed.add(async e2 => { \r\n if (e2.action != GridRowAction.Deleting) {\r\n if (arActArticleStickers) { \r\n let filterStickRows = arActArticleStickers.rows.filter(x => x.state !== CardRowState.Deleted && Guid.equals(x.tryGetField('ParentRowID')?.$value, e2.row.parentRowId));\r\n // сумма всего\r\n let amount = this.SumAmount(filterStickRows);\r\n let arArticleIDPListVirtual = card.sections.tryGet('ArArticleIDPListVirtual');\r\n if (arArticleIDPListVirtual) {\r\n arArticleIDPListVirtual.rows.forEach(row =>\r\n {\r\n if (row.rowId == e2.row.parentRowId) {\r\n row.set(\"Amount\", amount.toString().replace(',','.'), DotNetType.Decimal);\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (nextOpenRow && nextOpenRowBool) {\r\n\t\t\t\t\t\tnextOpenRowBool = false;\r\n await arArticleStickersTableControl.editRow(nextOpenRow);\r\n }\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tnextOpenRowBool = false;\r\n\t\t\t\t\t\tnextOpenRow = undefined;\r\n\t\t\t\t\t}\r\n }\r\n });\r\n\r\n // подписка на изменение данных в статьях стикера\r\n arArticleStickersTableControl.rowInitialized.add(e2 => {\r\n if (e2.action != GridRowAction.Deleting) {\r\n if (e2.rowModel != null) {\r\n // установка курсора в поле Сумма изменения\r\n let stickerAmountControl = e2.rowModel.controlsBag.find(x => x.name == \"StickerAmountControl\") as DecimalBoxViewModel;\r\n if (stickerAmountControl) {\r\n PkUIHelper.SetFocusInControlAndSelectText(stickerAmountControl);\r\n // подписка на нажаие клавишы Enter для поля Сумма изменения для открытия следующей строки\r\n stickerAmountControl.keyDown.add(async ee => {\r\n if (ee.event.key === 'Enter') {\r\n\t\t\t\t\t\t\t\t\tnextOpenRowBool = true;\r\n ee.control.isFocused = false;\r\n nextOpenRow = await PkUIHelper.NextRowButtonClickAsync(e2, arActArticleStickers, arArticleStickersTableControl);\r\n }\r\n });\r\n }\r\n\r\n // подписка на кнопку Следующая строка\r\n let nextRowButton = e2.rowModel.controlsBag.find(x => x.name == \"NextRowButton\") as ButtonViewModel;\r\n if (nextRowButton != null && arActArticleStickers) {\r\n nextRowButton.onClick = async () => {\r\n\t\t\t\t\t\t\t\tnextOpenRowBool = true;\r\n nextOpenRow = await PkUIHelper.NextRowButtonClickAsync(e2, arActArticleStickers, arArticleStickersTableControl);\r\n }\r\n }\r\n }\r\n } \r\n });\r\n }\r\n\r\n /** Подсчет суммы. */\r\n private static SumAmount(filterStickerRows: CardRow[] | ArrayStorage) {\r\n let outsum: number = 0.0;\r\n for (let stickerArticle of filterStickerRows) {\r\n let amount = stickerArticle.getField('Amount')?.$value;\r\n if (amount != null) {\r\n outsum += parseFloat(amount);\r\n }\r\n }\r\n return outsum;\r\n }\r\n\r\n /** Создание карточки Входящий документ на основании карточки Электронный документ. */\r\n public static ArEDocumentConvertID(context: ICardUIExtensionContext)\r\n {\r\n if(!Guid.equals(context.card.typeId, PkCardTypes.ArEDocumentTypeID)){\r\n return;\r\n }\r\n \r\n let archiveAct = context.card.sections.tryGet(\"ArchiveAct\");\r\n let documentCommonInfo = context.card.sections.tryGet(\"DocumentCommonInfo\");\r\n let pkDocumentCommonInfo = context.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n let convertIDButton = context.model.controls.get('ConvertID') as ButtonViewModel; \r\n \r\n if (!archiveAct || !documentCommonInfo || !pkDocumentCommonInfo || !convertIDButton)\r\n {\r\n return;\r\n }\r\n \r\n let documentKind = {\r\n DocumentID: archiveAct.fields.get('DocumentKindID'),\r\n DocumentKind: archiveAct.fields.get('DocumentKindDocumentKind') \r\n };\r\n\r\n let stateID = pkDocumentCommonInfo.fields.get('StateID');\r\n \r\n if ((documentKind.DocumentID == TessaEDocumentKinds.NotificationTessa \r\n || documentKind.DocumentID == TessaEDocumentKinds.LetterTessa)\r\n && stateID != CdDocStates.Registered.id) \r\n {\r\n convertIDButton.controlVisibility = Visibility.Visible;\r\n }\r\n \r\n archiveAct.fields.fieldChanged.add(e => {\r\n \r\n if(e.fieldName === \"DocumentKindID\"){ \r\n if((e.fieldValue === TessaEDocumentKinds.NotificationTessa \r\n || e.fieldValue === TessaEDocumentKinds.LetterTessa)\r\n && stateID != CdDocStates.Registered.id) \r\n {\r\n convertIDButton.controlVisibility = Visibility.Visible;\r\n } \r\n else\r\n {\r\n convertIDButton.controlVisibility = Visibility.Collapsed;\r\n } \r\n } else {\r\n return; \r\n }\r\n }); \r\n \r\n convertIDButton.onClick = async () => {\r\n \r\n let newCard;\r\n \r\n const info = {\r\n ReceiverKCKExternalID: archiveAct!.fields.get('ReceiverKCKExternalID'),\r\n ReceiverKCKName: archiveAct!.fields.get('ReceiverKCKName'), \r\n SenderKCKID: archiveAct!.fields.get('SenderKCKID'), \r\n SenderKCKExternalID: archiveAct!.fields.get('SenderKCKExternalID'), \r\n SenderKCKName: archiveAct!.fields.get('SenderKCKName'),\r\n ActDate: archiveAct!.fields.get('ActDate'),\r\n FullNumber: documentCommonInfo!.fields.get('FullNumber'),\r\n ArEDocumentCardID: createTypedField(context.card.id, DotNetType.Guid)\r\n };\r\n \r\n await createCard({\r\n cardTypeId: '0ca52091-fd54-4e72-bfba-b31ca18de901',\r\n cardTypeName: 'PkIncoming',\r\n info,\r\n openToTheRightOfSelectedTab: true,\r\n cardModifierAction : async ctx =>\r\n {\r\n \r\n newCard = ctx.card;\r\n \r\n // перенос получателя\r\n if(info.ReceiverKCKExternalID != null)\r\n {\r\n let responceReceiverKCKExternalID = await this.GetReceiverKCKExternalID(context, info.ReceiverKCKExternalID);\r\n \r\n if (!responceReceiverKCKExternalID.validationResult.isSuccessful)\r\n {\r\n return;\r\n }\r\n \r\n if (responceReceiverKCKExternalID.info![\"ReceiverID\"] != null && responceReceiverKCKExternalID.info![\"ReceiverID\"].$value != null)\r\n {\r\n let sectionDocumentCommonInfo = newCard.sections.get('DocumentCommonInfo');\r\n if (!sectionDocumentCommonInfo)\r\n {\r\n return;\r\n }\r\n let rowDocumentCommonInfo = sectionDocumentCommonInfo.fields;\r\n rowDocumentCommonInfo.set('DepartmentID', createTypedField(responceReceiverKCKExternalID.info![\"ReceiverID\"].$value, DotNetType.Guid));\r\n rowDocumentCommonInfo.set('DepartmentName', createTypedField(info.ReceiverKCKName, DotNetType.String));\r\n }\r\n }\r\n \r\n // перенос отправителя \r\n let sectionPkIncomingInfo = newCard.sections.get('PkIncomingInfo');\r\n if (!sectionPkIncomingInfo)\r\n {\r\n return;\r\n }\r\n let rowPkIncomingInfo = sectionPkIncomingInfo.fields;\r\n if (info.SenderKCKExternalID != null)\r\n {\r\n rowPkIncomingInfo.set('PartnerKCKID', createTypedField(info.SenderKCKID, DotNetType.Guid));\r\n rowPkIncomingInfo.set('PartnerKCKExternalID', createTypedField(info.SenderKCKExternalID, DotNetType.Int32));\r\n rowPkIncomingInfo.set('PartnerKCKName', createTypedField(info.SenderKCKName, DotNetType.String)); \r\n } \r\n \r\n // перенос вида документа \r\n let responceDocKind = await this.GetDocumentKind(archiveAct!.fields.get('DocumentKindID'));\r\n rowPkIncomingInfo.set('KindID', createTypedField(responceDocKind.ID, DotNetType.Guid)); \r\n rowPkIncomingInfo.set('KindDocumentKind', createTypedField(responceDocKind.Name, DotNetType.String)); \r\n \r\n // перенос номера, даты\r\n if(info.FullNumber != '' || info.ActDate != null)\r\n {\r\n let sectionPkDocumentCommonInfo = newCard.sections.get('PkDocumentCommonInfo');\r\n if (!sectionPkDocumentCommonInfo)\r\n {\r\n return;\r\n }\r\n let rowPkDocumentCommonInfo = sectionPkDocumentCommonInfo.fields;\r\n rowPkDocumentCommonInfo.set('IncomingNumber', createTypedField(info.FullNumber, DotNetType.String));\r\n rowPkDocumentCommonInfo.set('IncomingDate', createTypedField(info.ActDate, DotNetType.DateTimeOffset));\r\n }\r\n }\r\n }); \r\n this.IncomingDocumentLink(context, newCard);\r\n } \r\n }\r\n \r\n\t\t/** Создание карточки Договорной документ на основании карточки Электронный документ. */\r\n public static async ArEDocumentAndArActConvertKSD(context: ICardUIExtensionContext)\r\n {\r\n if(!(Guid.equals(context.card.typeId, PkCardTypes.ArEDocumentTypeID) ||\r\n Guid.equals(context.card.typeId, PkCardTypes.ArActTypeID)))\r\n {\r\n return;\r\n }\r\n\r\n let PkEDocumentKSDTypeIDCheck = false;\r\n let archiveAct = context.card.sections.tryGet(\"ArchiveAct\");\r\n if (!archiveAct) return;\r\n let documentKindIDValue = archiveAct.fields.tryGet('DocumentKindID');\r\n if (!documentKindIDValue) return;\r\n\r\n\r\n if (context.card.tasks.some(x => Guid.equals(x.typeId, ArTaskTypes.PkEDocumentConfirmCreateKSDTypeID) &&\r\n Guid.equals(x.optionId, CdFdProcessHelper.Complete)))\r\n {\r\n let pkReferencesVirtual = context.card.sections.tryGet(\"PkReferencesVirtual\")\r\n const states = [\r\n \"На согласовании\",\r\n \"Доработка\",\r\n \"Подготовка документа к подписанию\",\r\n \"Проверка учета замечаний перед отправкой\",\r\n \"На подписании (внутри компании)\",\r\n \"На подписании в Диадок (внутри компании)\",\r\n \"На подписании (у контрагента)\",\r\n \"На подписании в Диадок (у контрагента)\",\r\n \"Доработка после подписания в Диадок\",\r\n \"Подтверждение корректности подписания\",\r\n \"Подтверждение передачи документов\",\r\n \"Действующий\",\r\n \"Устранение замечаний\"\r\n ];\r\n\r\n if(pkReferencesVirtual)\r\n {\r\n let errorMessage;\r\n\r\n if (!Guid.equals(documentKindIDValue, TessaEDocumentKinds.InvitationToEdoTessa))\r\n {\r\n errorMessage = \"Карточка документа не создана или не сохранена.\"\r\n }\r\n else\r\n {\r\n errorMessage = \"Карточка документа не сохранена или не отправлена на согласование.\";\r\n }\r\n \r\n if (pkReferencesVirtual.rows.length == 0)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, errorMessage);\r\n return;\r\n } \r\n\r\n if(Guid.equals(documentKindIDValue, TessaEDocumentKinds.InvitationToEdoTessa))\r\n {\r\n if(pkReferencesVirtual.rows.some(x => states.some(y => y == x.getField(\"StateName\")?.$value) == false))\r\n {\r\n context.validationResult.add(ValidationResultType.Error, errorMessage);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (context.card.tasks.some(x => Guid.equals(x.typeId, ArTaskTypes.PkEDocumentConfirmCreateKSDTypeID) &&\r\n Guid.equals(x.optionId, CdFdProcessHelper.Cancel)))\r\n {\r\n let pkReferencesVirtual = context.card.sections.tryGet(\"PkReferencesVirtual\")\r\n\r\n if(pkReferencesVirtual)\r\n {\r\n if (pkReferencesVirtual.rows.length > 0)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, 'Документ в Tessa уже существует.');\r\n return;\r\n } \r\n }\r\n }\r\n\r\n if (context.card.tasks.some(x => Guid.equals(x.typeId, ArTaskTypes.PkEDocumentSendToEsudTypeID) &&\r\n Guid.equals(x.optionId, ArCompleteOptions.CreateKSD)))\r\n { \r\n // Договор, ДС, СОР, ЭДО, NDA\r\n if(Guid.equals(documentKindIDValue, TessaEDocumentKinds.ContractTessa) \r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.SupplementaryAgreementTessa)\r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.ContractCancellationTessa)\r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.InvitationToEdoTessa)\r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.ConfidentialityAgreementNDA)\r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.AccountWithoutContractTessa))\r\n {\r\n PkEDocumentKSDTypeIDCheck = true;\r\n }\r\n }\r\n\r\n if(PkEDocumentKSDTypeIDCheck)\r\n {\r\n let newCard;\r\n let documentCommonInfo = context.card.sections.tryGet(\"DocumentCommonInfo\"); \r\n \r\n if (!documentCommonInfo) return;\r\n \r\n const info = {\r\n DocumentKindDocumentKindValue: archiveAct!.fields.get('DocumentKindDocumentKind'),\r\n FullNumberValue: documentCommonInfo!.fields.get('FullNumber'),\r\n ActDateValue: archiveAct!.fields.get('ActDate'),\r\n NameValue: archiveAct!.fields.get('Name'),\r\n AmountValue: documentCommonInfo!.fields.get('Amount'),\r\n SenderKCKExtIDValue: archiveAct!.fields.get('SenderKCKExternalID'),\r\n ReceiverKCKExtIDValue: archiveAct!.fields.get('ReceiverKCKExternalID'),\r\n ArEDocumentCardID: createTypedField(context.card.id, DotNetType.Guid),\r\n ParentContractID: archiveAct!.fields.get('ContractID'),\r\n ParentContractName: archiveAct!.fields.get('ContractNameVirtual')\r\n };\r\n\r\n if (info.ParentContractID == null)\r\n {\r\n if (Guid.equals(documentKindIDValue, TessaEDocumentKinds.SupplementaryAgreementTessa)\r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.ContractCancellationTessa))\r\n {\r\n context.validationResult.add(ValidationResultType.Error, 'Отсутствует родительский договор.');\r\n return;\r\n }\r\n }\r\n \r\n await createCard({\r\n cardTypeId: PkCardTypes.ArContractTypeID,\r\n cardTypeName: 'ArContract',\r\n info,\r\n openToTheRightOfSelectedTab: true,\r\n cardModifierAction : async ctx =>\r\n {\r\n newCard = ctx.card;\r\n\r\n newCard.info[\"IsFromEDTask\"] = true;\r\n newCard.info[\"AmountValueFromEDTask\"] = info.AmountValue;\r\n\r\n let ArContractsUser = newCard.sections.tryGet('ArContractsUser');\r\n let ArContractPartners = newCard.sections.tryGet('ArContractPartners');\r\n \r\n if (!ArContractsUser) return;\r\n\r\n if (documentKindIDValue != null)\r\n {\r\n ArUIHelper.SetDocumentKind(ArContractsUser, documentKindIDValue);\r\n }\r\n\r\n if (info.ParentContractID != null)\r\n {\r\n ArContractsUser.fields.set('ParentCardID', createTypedField(info.ParentContractID, DotNetType.Guid));\r\n ArContractsUser.fields.set('ParentCardName', createTypedField(info.ParentContractName, DotNetType.String));\r\n\r\n let getRequest = new CardGetRequest();\r\n getRequest.cardId = info.ParentContractID;\r\n getRequest.getMode = CardGetMode.ReadOnly;\r\n\r\n let response = await CardService.instance.get(getRequest);\r\n\r\n if (response)\r\n {\r\n if (response.card)\r\n {\r\n let parentArContractPartners = response.card.sections.tryGet(\"ArContractPartners\");\r\n let parentArContractsUser = response.card.sections.tryGet(\"ArContractsUser\");\r\n\r\n if (parentArContractPartners)\r\n {\r\n let firstPartnerField = false;\r\n\r\n for (let row of parentArContractPartners.rows)\r\n {\r\n let newRow = new CardRow();\r\n newRow = row.clone();\r\n\r\n newRow.state = CardRowState.Inserted;\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"Modified\", createTypedField(PkCommonHelper.GetDateTimeNow(null), DotNetType.String));\r\n\r\n if (ArContractPartners)\r\n {\r\n ArContractPartners.rows.push(newRow);\r\n }\r\n\r\n let roleID = row.tryGetField(\"RoleID\");\r\n let partnerAutomated = row.tryGetField(\"PartnerAutomated\");\r\n\r\n if (roleID && partnerAutomated)\r\n {\r\n let partnerExternalID = row.tryGetField(\"PartnerExternalID\");\r\n let partnerID = row.tryGetField(\"PartnerID\");\r\n let partnerName = row.tryGetField(\"PartnerName\");\r\n\r\n if(partnerAutomated.$value == true && (roleID.$value == 0 || roleID.$value == 1))\r\n {\r\n if (firstPartnerField == false)\r\n {\r\n ArContractsUser.fields.set('FirstPartnerExternalID', createTypedField(partnerExternalID?.$value, DotNetType.Int64));\r\n ArContractsUser.fields.set('FirstPartnerID', createTypedField(partnerID?.$value, DotNetType.Guid));\r\n ArContractsUser.fields.set('FirstPartnerName', createTypedField(partnerName?.$value, DotNetType.String));\r\n\r\n firstPartnerField = true;\r\n }\r\n else\r\n {\r\n ArContractsUser.fields.set('SecondPartnerExternalID', createTypedField(partnerExternalID?.$value, DotNetType.Int64));\r\n ArContractsUser.fields.set('SecondPartnerID', createTypedField(partnerID?.$value, DotNetType.Guid));\r\n ArContractsUser.fields.set('SecondPartnerName', createTypedField(partnerName?.$value, DotNetType.String));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parentArContractsUser)\r\n {\r\n let parentContractTypeID = parentArContractsUser.fields.get(\"ContractTypeID\");\r\n let parentContractTypeName = parentArContractsUser.fields.get(\"ContractTypeName\");\r\n\r\n if (parentContractTypeID != null && parentContractTypeName)\r\n {\r\n ArContractsUser.fields.set('ContractTypeID', createTypedField(parentContractTypeID, DotNetType.Int32));\r\n ArContractsUser.fields.set('ContractTypeName', createTypedField(parentContractTypeName, DotNetType.String));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (info.FullNumberValue != null)\r\n {\r\n ArContractsUser.fields.set('DocNumber', info.FullNumberValue, DotNetType.String); \r\n }\r\n\r\n if (info.ActDateValue != null)\r\n {\r\n ArContractsUser.fields.set('DocDate', createTypedField(info.ActDateValue, DotNetType.DateTimeOffset)); \r\n }\r\n\r\n if (info.NameValue != null)\r\n {\r\n ArContractsUser.fields.set('DocComment', createTypedField(info.NameValue, DotNetType.String)); \r\n }\r\n\r\n if (info.AmountValue != null)\r\n {\r\n ArContractsUser.fields.set('AmountBeginning', createTypedField((info.AmountValue).toString(), DotNetType.Decimal)); \r\n } \r\n \r\n if (info.SenderKCKExtIDValue != null && info.ReceiverKCKExtIDValue != null)\r\n {\r\n let responceINN = await this.GetINNbyExtIDPartners(info.SenderKCKExtIDValue, info.ReceiverKCKExtIDValue);\r\n \r\n if (!responceINN.validationResult.isSuccessful) return;\r\n\r\n if (responceINN.info![\"ResultString\"] != null && responceINN.info![\"ResultString\"].$value != null)\r\n {\r\n ArContractsUser.fields.set('INNParticipantsForKSD', createTypedField(responceINN.info![\"ResultString\"].$value, DotNetType.String)); \r\n } \r\n }\r\n\r\n if(Guid.equals(documentKindIDValue, TessaEDocumentKinds.InvitationToEdoTessa))\r\n {\r\n ArContractsUser.fields.set('CategoryGuidDirectumForKSD', createTypedField(269, DotNetType.Int32)); \r\n }\r\n\r\n if(Guid.equals(documentKindIDValue, TessaEDocumentKinds.ConfidentialityAgreementNDA))\r\n {\r\n ArContractsUser.fields.set('CategoryGuidDirectumForKSD', createTypedField(71, DotNetType.Int32)); \r\n }\r\n }\r\n });\r\n this.IncomingDocumentLink(context, newCard);\r\n }\r\n }\r\n \r\n public static async ArCreateAgreementEDOAsync(context: ICardUIExtensionContext)\r\n {\r\n if (context.card.tasks.some(x => Guid.equals(x.typeId, ArTaskTypes.ArCreateAgreementEDOTypeID) &&\r\n Guid.equals(x.optionId, CdFdProcessHelper.CreateAgreementEDO))) {\r\n\r\n // добавляем проверку на наличие СОД на этапе \"согласование\" (или действующего).\r\n let stateID = await this.ArGetLastAgreementEDOAsync(context);\r\n if (stateID) {\r\n const completeEDOAgreementStatesList = [\r\n CdDocStates.OnAgreement.id as Number,\r\n CdDocStates.Modification.id as Number,\r\n CdDocStates.PreparationDocumentForSigning.id as Number,\r\n CdDocStates.CheckingCommentsBeforeSending.id as Number,\r\n CdDocStates.OnSigningInCompany.id as Number,\r\n CdDocStates.OnSigningInDiadocInCompany.id as Number,\r\n CdDocStates.OnSigningAtPartner.id as Number,\r\n CdDocStates.OnSigningInDiadocWithPartner.id as Number,\r\n CdDocStates.ModificationAfterSigningInDiadoc.id as Number,\r\n CdDocStates.CheckSigningInDiadoc.id as Number,\r\n CdDocStates.ConfirmTransferDocument.id as Number,\r\n CdDocStates.Active.id as Number,\r\n CdDocStates.FixingProblems.id as Number\r\n ];\r\n\r\n if (completeEDOAgreementStatesList.some(x => x==stateID)) {\r\n // не создаем карточку - создание СОД, т.к. оно уже есть (как минимум, на этапе - согласования)\r\n return;\r\n }\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n let request = new CardNewRequest();\r\n request.cardTypeId = PkCardTypes.ArContractTypeID;\r\n\r\n let response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n\r\n let card = context.card;\r\n let newCard = response.card;\r\n\r\n let oldArContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n let arContractsUser = newCard.sections.tryGet(\"ArContractsUser\");\r\n\r\n if (oldArContractsUser && arContractsUser)\r\n {\r\n let arContractsUserFields = arContractsUser.fields;\r\n\r\n let authorDepartmentGuid1C = oldArContractsUser.fields.tryGet(\"AuthorDepartmentGuid1C\")\r\n let authorDepartmentID = oldArContractsUser.fields.tryGet(\"AuthorDepartmentID\")\r\n let authorDepartmentName = oldArContractsUser.fields.tryGet(\"AuthorDepartmentName\")\r\n let authorGuid1C = oldArContractsUser.fields.tryGet(\"AuthorGuid1C\")\r\n let authorID = oldArContractsUser.fields.tryGet(\"AuthorID\")\r\n let authorName = oldArContractsUser.fields.tryGet(\"AuthorName\")\r\n\r\n arContractsUserFields.set('ContractKindID', createTypedField(TessaArContractKinds.ContractKindTessaID, DotNetType.Guid));\r\n arContractsUserFields.set('ContractKindDocumentKind', createTypedField(\"Договор\", DotNetType.String));\r\n arContractsUserFields.set('ContractTypeID', createTypedField(0, DotNetType.Int32));\r\n arContractsUserFields.set('ContractTypeName', createTypedField(\"Основной\", DotNetType.String));\r\n arContractsUserFields.set('DateValidityPeriodFrom', createTypedField(PkCommonHelper.GetDateTimeNow(null), DotNetType.DateTime));\r\n arContractsUserFields.set('DocDate', createTypedField(PkCommonHelper.GetDateTimeNow(null), DotNetType.DateTime));\r\n arContractsUserFields.set('AmountBeginning', createTypedField(\"0.00\", DotNetType.Decimal));\r\n arContractsUserFields.set('AmountTotal', createTypedField(\"0.00\", DotNetType.Decimal));\r\n arContractsUserFields.set('Rate', createTypedField(\"1.0000\", DotNetType.Decimal));\r\n arContractsUserFields.set('TypeProcedureID', createTypedField(ArTypeProcedure.WithoutTender, DotNetType.Guid));\r\n arContractsUserFields.set('TypeProcedureName', createTypedField(\"Без тендера\", DotNetType.String));\r\n arContractsUserFields.set('IsSigningInDiadoc', createTypedField(true, DotNetType.Boolean));\r\n arContractsUserFields.set('ReasonsWithoutPDCID', createTypedField(\"7ABE2E3E-5D74-435F-8FBC-AC4DCAD7285C\", DotNetType.Guid));\r\n arContractsUserFields.set('ReasonsWithoutPDCName', createTypedField(\"Нет раздела в КЦ\", DotNetType.String));\r\n\r\n arContractsUserFields.set('AuthorDepartmentGuid1C', createTypedField(authorDepartmentGuid1C, DotNetType.String));\r\n arContractsUserFields.set('AuthorDepartmentID', createTypedField(authorDepartmentID, DotNetType.Guid));\r\n arContractsUserFields.set('AuthorDepartmentName', createTypedField(authorDepartmentName, DotNetType.String));\r\n arContractsUserFields.set('AuthorGuid1C', createTypedField(authorGuid1C, DotNetType.String));\r\n arContractsUserFields.set('AuthorID', createTypedField(authorID, DotNetType.Guid));\r\n arContractsUserFields.set('AuthorName', createTypedField(authorName, DotNetType.String));\r\n\r\n let firstPartnerField = false;\r\n let parentArContractPartners = card.sections.tryGet(\"ArContractPartners\");\r\n let arContractPartners = newCard.sections.get('ArContractPartners');\r\n\r\n if (parentArContractPartners)\r\n {\r\n let arPrtnersInPerimeterLength = parentArContractPartners.rows.filter(x => \r\n x.tryGetField(\"PartnerInPerimetr\")?.$value == true \r\n && (x.tryGetField(\"RoleID\")?.$value == 1 || x.tryGetField(\"RoleID\")?.$value == 0)).length;\r\n\r\n let arPrtnersNotInPerimeterLength = parentArContractPartners.rows.filter(x => \r\n (x.tryGetField(\"PartnerInPerimetr\")?.$value == null || x.tryGetField(\"PartnerInPerimetr\")?.$value == false)\r\n && (x.tryGetField(\"RoleID\")?.$value == 1 || x.tryGetField(\"RoleID\")?.$value == 0)).length;\r\n\r\n for (let row of parentArContractPartners.rows)\r\n {\r\n let newRow = row.clone();\r\n\r\n newRow.state = CardRowState.Inserted;\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"Modified\", createTypedField(PkCommonHelper.GetDateTimeNow(null), DotNetType.String));\r\n\r\n let newRoleID = row.tryGetField(\"RoleID\");\r\n let newPartnerInPerimetr = row.tryGetField(\"PartnerInPerimetr\");\r\n\r\n if (newRoleID)\r\n {\r\n if (arPrtnersInPerimeterLength == 1 && arPrtnersNotInPerimeterLength == 1)\r\n {\r\n if (newPartnerInPerimetr && newPartnerInPerimetr.$value == true && newRoleID.$value == 1)\r\n {\r\n newRow.set(\"RoleID\", createTypedField(0, DotNetType.Int32));\r\n newRow.set(\"RoleName\", createTypedField(\"Покупатель\", DotNetType.String));\r\n }\r\n\r\n if ((newPartnerInPerimetr == null || newPartnerInPerimetr.$value == false) && newRoleID.$value == 0)\r\n {\r\n newRow.set(\"RoleID\", createTypedField(1, DotNetType.Int32));\r\n newRow.set(\"RoleName\", createTypedField(\"Продавец\", DotNetType.String));\r\n }\r\n }\r\n\r\n if (newRoleID.$value == 0)\r\n {\r\n newRow.set(\"ContractCategoryExtID\", createTypedField(269, DotNetType.Int64));\r\n newRow.set(\"ContractCategoryGuidDirectum\", createTypedField(\"17271339\", DotNetType.String));\r\n newRow.set(\"ContractCategoryID\", createTypedField(ArContractCategory.DocumentManagementAgreement, DotNetType.Guid));\r\n newRow.set(\"ContractCategoryIsHopeless\", createTypedField(true, DotNetType.Boolean));\r\n newRow.set(\"ContractCategoryIsOIDP\", createTypedField(false, DotNetType.Boolean));\r\n newRow.set(\"ContractCategoryIsTechnical\", createTypedField(false, DotNetType.Boolean));\r\n newRow.set(\"ContractCategoryName\", createTypedField(\"Соглашение о документообороте\", DotNetType.String));\r\n }\r\n }\r\n\r\n if (arContractPartners)\r\n {\r\n arContractPartners.rows.push(newRow);\r\n }\r\n\r\n let roleID = row.tryGetField(\"RoleID\");\r\n let partnerAutomated = row.tryGetField(\"PartnerAutomated\");\r\n\r\n if (roleID && partnerAutomated)\r\n {\r\n let partnerExternalID = row.tryGetField(\"PartnerExternalID\");\r\n let partnerID = row.tryGetField(\"PartnerID\");\r\n let partnerName = row.tryGetField(\"PartnerName\");\r\n\r\n if(partnerAutomated.$value == true && (roleID.$value == 0 || roleID.$value == 1))\r\n {\r\n if (firstPartnerField == false)\r\n {\r\n arContractsUserFields.set('FirstPartnerExternalID', createTypedField(partnerExternalID?.$value, DotNetType.Int64));\r\n arContractsUserFields.set('FirstPartnerID', createTypedField(partnerID?.$value, DotNetType.Guid));\r\n arContractsUserFields.set('FirstPartnerName', createTypedField(partnerName?.$value, DotNetType.String));\r\n\r\n firstPartnerField = true;\r\n }\r\n else\r\n {\r\n arContractsUserFields.set('SecondPartnerExternalID', createTypedField(partnerExternalID?.$value, DotNetType.Int64));\r\n arContractsUserFields.set('SecondPartnerID', createTypedField(partnerID?.$value, DotNetType.Guid));\r\n arContractsUserFields.set('SecondPartnerName', createTypedField(partnerName?.$value, DotNetType.String));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = newCard;\r\n let cardStoreResponse = await CardService.instance.store(storeRequest);\r\n\r\n if (cardStoreResponse.validationResult.isSuccessful == true)\r\n {\r\n await openCard({\r\n cardId: newCard.id,\r\n cardTypeId: PkCardTypes.ArContractTypeID\r\n });\r\n }\r\n else if (cardStoreResponse.validationResult.items.some(\r\n x => x.message == \"Соглашение об ЭДО между данными контрагентами уже заключено.\"))\r\n {\r\n context.validationResult.add(ValidationResultType.Warning, \"Соглашение об ЭДО между данными контрагентами уже заключено.\");\r\n }\r\n else \r\n {\r\n cardStoreResponse.validationResult.items.forEach(x => {\r\n context.validationResult.add(ValidationResultType.Error, x.message);\r\n });\r\n return;\r\n }\r\n } \r\n });\r\n }\r\n }\r\n\r\n /** Вложение\\Приложение документов к Договорному документу на основании карточки Электронный документ. */\r\n public static async ArEDocumentAttachDocumentAsync(context: ICardUIExtensionContext)\r\n {\r\n let PkEDocumentKSDTypeIDCheck = false;\r\n let archiveAct = context.card.sections.tryGet(\"ArchiveAct\");\r\n if (!archiveAct) return;\r\n let documentKindIDValue = archiveAct.fields.tryGet('DocumentKindID');\r\n if (!documentKindIDValue) return;\r\n\r\n if (context.card.tasks.some(x => Guid.equals(x.typeId, ArTaskTypes.PkEDocumentAttachDocumentTypeID) &&\r\n Guid.equals(x.optionId, ArCompleteOptions.AttachDocument)))\r\n { \r\n // Приложение или вложение\r\n if(Guid.equals(documentKindIDValue, TessaEDocumentKinds.ContractAttachmentTessa) \r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.ContractSupplementTessa))\r\n {\r\n PkEDocumentKSDTypeIDCheck = true;\r\n }\r\n }\r\n\r\n if(PkEDocumentKSDTypeIDCheck)\r\n { \r\n let parentContractID = archiveAct!.fields.get('ContractID');\r\n\r\n if (parentContractID == null)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, 'Отсутствует родительский договор.');\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArAttachDocumentsFromEDRequestID;\r\n request.info[\"CardGuid\"] = createTypedField(parentContractID, DotNetType.Guid);\r\n request.info[\"ArEDocumentCardID\"] = createTypedField(context.card.id, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n context.validationResult.add(response.validationResult.build())\r\n\r\n if (response.validationResult.isSuccessful == true)\r\n {\r\n let subjectLink = response.info.subjectLink;\r\n let documentCommonInfo = context.card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n if(documentCommonInfo && subjectLink)\r\n {\r\n documentCommonInfo.fields.set('Subject', createTypedField(subjectLink, DotNetType.String));\r\n }\r\n\r\n const sectionPkDocumentCommonInfo = context.card.sections.get(\"PkDocumentCommonInfo\");\r\n if (sectionPkDocumentCommonInfo)\r\n {\r\n sectionPkDocumentCommonInfo.fields.set(\"StateID\", CdDocStates.Done.id, DotNetType.Int32);\r\n sectionPkDocumentCommonInfo.fields.set(\"StateName\", CdDocStates.Done.caption, DotNetType.String);\r\n }\r\n\r\n const sectionFdSatelliteCommonInfoVirtual = context.card.sections.get(\"FdSatelliteCommonInfoVirtual\");\r\n if (sectionFdSatelliteCommonInfoVirtual)\r\n {\r\n sectionFdSatelliteCommonInfoVirtual.fields.set(\"StateID\", ArEDocumentFdStates.DoneStateID.id, DotNetType.Guid);\r\n sectionFdSatelliteCommonInfoVirtual.fields.set(\"StateName\", ArEDocumentFdStates.DoneStateID.caption, DotNetType.String);\r\n }\r\n \r\n await openCard({\r\n cardId: parentContractID\r\n });\r\n }\r\n }\r\n }\r\n\r\n public static async ArCheckAgreementEDOAsync(context: ICardUIExtensionContext)\r\n {\r\n if (context.card.tasks.some(x => Guid.equals(x.typeId, ArTaskTypes.ArStartAgreementEDOTypeID) &&\r\n Guid.equals(x.optionId, CdFdProcessHelper.Complete))) {\r\n\r\n let stateID = await this.ArGetLastAgreementEDOAsync(context, true);\r\n if (stateID) {\r\n const completeEDOAgreementStatesList = [\r\n CdDocStates.OnAgreement.id as Number,\r\n CdDocStates.Modification.id as Number,\r\n CdDocStates.PreparationDocumentForSigning.id as Number,\r\n CdDocStates.CheckingCommentsBeforeSending.id as Number,\r\n CdDocStates.OnSigningInCompany.id as Number,\r\n CdDocStates.OnSigningInDiadocInCompany.id as Number,\r\n CdDocStates.OnSigningAtPartner.id as Number,\r\n CdDocStates.OnSigningInDiadocWithPartner.id as Number,\r\n CdDocStates.ModificationAfterSigningInDiadoc.id as Number,\r\n CdDocStates.CheckSigningInDiadoc.id as Number,\r\n CdDocStates.ConfirmTransferDocument.id as Number,\r\n CdDocStates.Active.id as Number,\r\n CdDocStates.FixingProblems.id as Number\r\n ];\r\n\r\n if (!completeEDOAgreementStatesList.some(x => x==stateID))\r\n {\r\n context.validationResult.add(ValidationResultType.Error, \"Созданное соглашение о документообороте не было отправлено на согласование.\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static async ArGetLastAgreementEDOAsync(context: ICardUIExtensionContext, updateContext: boolean = false) : Promise{\r\n let card = context.card;\r\n let parentArContractPartners = card.sections.tryGet(\"ArContractPartners\");\r\n\r\n let partner1ExtID;\r\n let partner2ExtID;\r\n\r\n if (parentArContractPartners)\r\n {\r\n parentArContractPartners.rows.forEach(x => {\r\n let roleID = x.tryGetField(\"RoleID\");\r\n let partnerExternalID = x.tryGetField(\"PartnerExternalID\");\r\n\r\n if (roleID && partnerExternalID)\r\n {\r\n if (roleID.$value == 1)\r\n {\r\n partner1ExtID = partnerExternalID\r\n }\r\n else if (roleID.$value == 0)\r\n {\r\n partner2ExtID = partnerExternalID\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (partner1ExtID && partner2ExtID)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArGetAgreementEDORequestID;\r\n request.info[\"partner1ExtID\"] = createTypedField(partner1ExtID.$value, DotNetType.Int64);\r\n request.info[\"partner2ExtID\"] = createTypedField(partner2ExtID.$value, DotNetType.Int64);\r\n request.info[\"rejectAgreementEDO\"] = createTypedField(false, DotNetType.Boolean);\r\n\r\n const response = await CardService.instance.request(request);\r\n \r\n if (updateContext){\r\n context.validationResult.add(response.validationResult.build())\r\n }\r\n\r\n if (response.validationResult.isSuccessful == true)\r\n {\r\n return response.info.StateID.value;\r\n }\r\n } \r\n return null;\r\n }\r\n\r\n public static async ArCorfirmRejectEDOAsync(context: ICardUIExtensionContext)\r\n {\r\n if (context.card.tasks.some(x => Guid.equals(x.typeId, ArTaskTypes.ArStartAgreementEDOTypeID) &&\r\n Guid.equals(x.optionId, CdFdProcessHelper.Cancel))) {\r\n if (!await showConfirm(\"Созданное соглашение о документообороте будет переведено в статус “Отклонен”. \" +\r\n \"В связи с этим подписание документов между контрагентами в Диадок будет заблокировано. Продолжить?\"))\r\n {\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n public static async ArApproveCancelEDOAsync(context: ICardUIExtensionContext)\r\n {\r\n let task = context.card.tasks.find(x => Guid.equals(x.typeId, ArTaskTypes.ArCancelCreateAgreementEDOTypeID) &&\r\n Guid.equals(x.optionId, CdFdProcessHelper.Confirm));\r\n\r\n if (task) {\r\n let fdTask = task.card.sections.tryGet(\"FdTask\");\r\n let comment = fdTask?.fields.tryGetField(\"Comment\");\r\n\r\n if(!comment)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, \"Заполните поле \\\"Комментарий\\\".\");\r\n return;\r\n }\r\n\r\n let card = context.card;\r\n let parentArContractPartners = card.sections.tryGet(\"ArContractPartners\");\r\n\r\n let partner1ExtID;\r\n let partner2ExtID;\r\n\r\n if (parentArContractPartners)\r\n {\r\n parentArContractPartners.rows.forEach(x => {\r\n let roleID = x.tryGetField(\"RoleID\");\r\n let partnerExternalID = x.tryGetField(\"PartnerExternalID\");\r\n\r\n if (roleID && partnerExternalID)\r\n {\r\n if (roleID.$value == 1)\r\n {\r\n partner1ExtID = partnerExternalID\r\n }\r\n else if (roleID.$value == 0)\r\n {\r\n partner2ExtID = partnerExternalID\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (partner1ExtID && partner2ExtID)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArGetSetCancelEDORequestID;\r\n request.info[\"AuthorGuid1C\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"Partner1ExtID\"] = createTypedField(partner1ExtID.$value, DotNetType.Int64);\r\n request.info[\"Partner2ExtID\"] = createTypedField(partner2ExtID.$value, DotNetType.Int64);\r\n request.info[\"Comment\"] = createTypedField(comment.$value, DotNetType.String);\r\n\r\n const response = await CardService.instance.request(request);\r\n context.validationResult.add(response.validationResult.build())\r\n } \r\n }\r\n }\r\n\r\n private static async SetDocumentKind (arContractsUser: CardSection, documentKindIDValue: string)\r\n {\r\n if (Guid.equals(documentKindIDValue, TessaEDocumentKinds.ContractTessa)\r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.InvitationToEdoTessa)\r\n || Guid.equals(documentKindIDValue, TessaEDocumentKinds.ConfidentialityAgreementNDA))\r\n { \r\n arContractsUser.fields.set('ContractKindID', createTypedField(TessaArContractKinds.ContractKindTessaID, DotNetType.Guid));\r\n arContractsUser.fields.set('ContractKindDocumentKind', createTypedField(\"Договор\", DotNetType.String));\r\n }\r\n else if (Guid.equals(documentKindIDValue, TessaEDocumentKinds.AccountWithoutContractTessa))\r\n {\r\n arContractsUser.fields.set('ContractKindID', createTypedField(TessaArContractKinds.AccountWithoutContractKindTessaID, DotNetType.Guid));\r\n arContractsUser.fields.set('ContractKindDocumentKind', createTypedField(\"Счет без договора\", DotNetType.String));\r\n }\r\n else if (Guid.equals(documentKindIDValue, TessaEDocumentKinds.ContractCancellationTessa))\r\n {\r\n arContractsUser.fields.set('ContractKindID', createTypedField(TessaArContractKinds.CancellationAgreementKindTessaID, DotNetType.Guid));\r\n arContractsUser.fields.set('ContractKindDocumentKind', createTypedField(\"Соглашение о расторжении\", DotNetType.String));\r\n }\r\n else if (Guid.equals(documentKindIDValue, TessaEDocumentKinds.SupplementaryAgreementTessa))\r\n {\r\n arContractsUser.fields.set('ContractKindID', createTypedField(TessaArContractKinds.AdditionalAgreementKindTessaID, DotNetType.Guid));\r\n arContractsUser.fields.set('ContractKindDocumentKind', createTypedField(\"Дополнительное соглашение\", DotNetType.String));\r\n }\r\n }\r\n\r\n private static async GetReceiverKCKExternalID (context: ICardUIExtensionContext, receiverKCKExternalID)\r\n {\r\n let request = new CardRequest();\r\n request.requestType = '700141F3-2951-4670-9F04-0FBCCC417BCA';\r\n request.info[\"CardID\"] = createTypedField(context.card.id, DotNetType.Guid);\r\n request.info[\"ReceiverKCKExternalID\"] = createTypedField(receiverKCKExternalID, DotNetType.Int64);\r\n \r\n let responce = await CardService.instance.request(request);\r\n await showNotEmpty(responce.validationResult.build());\r\n \r\n return responce;\r\n }\r\n \r\n private static async GetINNbyExtIDPartners (SenderKCKExtIDValue, ReceiverKCKExtIDValue)\r\n {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetINNbyExtIDPartnersRequest;\r\n request.info[\"SenderKCKExtID\"] = createTypedField(SenderKCKExtIDValue, DotNetType.Int64);\r\n request.info[\"ReceiverKCKExtID\"] = createTypedField(ReceiverKCKExtIDValue, DotNetType.Int64);\r\n\r\n let responce = await CardService.instance.request(request);\r\n await showNotEmpty(responce.validationResult.build());\r\n \r\n return responce;\r\n }\r\n \r\n private static GetDocumentKind (documentKindID)\r\n {\r\n let responceID;\r\n let responceName;\r\n \r\n if (documentKindID === TessaEDocumentKinds.NotificationTessa)\r\n {\r\n responceID = PkIncomingKinds.NotificationsRequestsID;\r\n responceName = PkIncomingKinds.NotificationsRequestsName;\r\n }\r\n else if (documentKindID === TessaEDocumentKinds.LetterTessa)\r\n {\r\n responceID = PkIncomingKinds.TransmittalLetterID;\r\n responceName = PkIncomingKinds.TransmittalLetterName;\r\n }\r\n let responce = {\r\n ID: responceID,\r\n Name: responceName\r\n }\r\n \r\n return responce;\r\n }\r\n \r\n private static IncomingDocumentLink (context: ICardUIExtensionContext, newCard)\r\n {\r\n let pkReferencesVirtual = newCard.sections.tryGet(\"PkReferencesVirtual\");\r\n let outgoingRefDocs = newCard.sections.tryGet(\"OutgoingRefDocs\");\r\n \r\n if (!pkReferencesVirtual || !outgoingRefDocs)\r\n {\r\n return;\r\n } \r\n \r\n let rowLink = pkReferencesVirtual.rows.add(); \r\n let rowLinkRef = outgoingRefDocs.rows.add(); \r\n rowLink.state = CardRowState.Inserted;\r\n rowLinkRef.state = CardRowState.Inserted;\r\n let constGuid = Guid.newGuid();\r\n rowLink.rowId = constGuid;\r\n rowLinkRef.rowId = constGuid; \r\n \r\n let sectionDocumentCommonInfo = context.card.sections.get('DocumentCommonInfo');\r\n let archiveAct = context.card.sections.get('ArchiveAct');\r\n let sectionPkDocumentCommonInfo = context.card.sections.get('PkDocumentCommonInfo'); \r\n \r\n if (!sectionDocumentCommonInfo || !sectionPkDocumentCommonInfo || !archiveAct)\r\n {\r\n return;\r\n }\r\n\r\n let actDate = archiveAct.fields.tryGet(\"ActDate\");\r\n let date;\r\n\r\n if(actDate)\r\n {\r\n date = actDate.substring(0,10);\r\n }\r\n \r\n\r\n rowLink.set('CardTypeName', createTypedField(context.card.typeCaption, DotNetType.String));\r\n rowLink.set('ContractDivision', createTypedField(\"\", DotNetType.String));\r\n rowLink.set('Description', createTypedField(\"Электронный документ №\" \r\n + sectionDocumentCommonInfo.fields.tryGet('FullNumber')\r\n + \" от \" + (date ?? \" - \")\r\n + \" \" + archiveAct.fields.tryGet(\"ReceiverKCKName\")\r\n + \" с \" + archiveAct.fields.tryGet(\"SenderKCKName\"), DotNetType.String)); \r\n rowLink.set('DivisionSet', createTypedField(\"\", DotNetType.String));\r\n rowLink.set('DocDate', createTypedField(sectionDocumentCommonInfo.fields.tryGet('CreationDate'), DotNetType.DateTime));\r\n rowLink.set('DocDescription', createTypedField(sectionDocumentCommonInfo.fields.tryGet('FullNumber'), DotNetType.String));\r\n rowLink.set('DocID', createTypedField(context.card.id, DotNetType.Guid));\r\n rowLink.set('Number', createTypedField(sectionDocumentCommonInfo.fields.tryGet('FullNumber'), DotNetType.String));\r\n rowLink.set('NumberID', createTypedField(sectionDocumentCommonInfo.fields.tryGet('SecondaryFullNumber'), DotNetType.String));\r\n rowLink.set('Order', createTypedField(0, DotNetType.Int32));\r\n rowLink.set('RefTypeID', createTypedField(\"663c7e30-3977-4790-b6cc-14612342da24\", DotNetType.Guid));\r\n rowLink.set('RefTypeName', createTypedField(\"Ссылка\", DotNetType.String));\r\n rowLink.set('StateName', createTypedField(sectionPkDocumentCommonInfo.fields.tryGet('StateName'), DotNetType.String)); \r\n \r\n rowLinkRef.set('DocDescription', createTypedField(sectionDocumentCommonInfo.fields.tryGet('FullNumber'), DotNetType.String));\r\n rowLinkRef.set('DocID', createTypedField(context.card.id, DotNetType.Guid));\r\n rowLinkRef.set('Order', createTypedField(0, DotNetType.Int32));\r\n\r\n let documentCommonInfo = context.card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n if(documentCommonInfo)\r\n {\r\n documentCommonInfo.fields.set('Subject', createTypedField(\"Электронный документ №\" \r\n + sectionDocumentCommonInfo.fields.tryGet('FullNumber') \r\n + \" от \" + (date ?? \" - \")\r\n + \" \" + archiveAct.fields.tryGet(\"ReceiverKCKName\")\r\n + \" с \" + archiveAct.fields.tryGet(\"SenderKCKName\"), DotNetType.String));\r\n }\r\n }\r\n }\r\n\r\n /** Группа для подписания. */\r\n export class SigningGroup {\r\n public CertIssuerName: string | null;\r\n public CertEnhancedKey: string | null;\r\n public CardsFilesInfo: CardFilesInfo[];\r\n\r\n public constructor(\r\n certIssuerName: string | null,\r\n certEnhancedKey: string | null) {\r\n this.CertIssuerName = certIssuerName;\r\n this.CertEnhancedKey = certEnhancedKey;\r\n this.CardsFilesInfo = [];\r\n }\r\n }\r\n\r\n export class DssRequestFileSigningInfo {\r\n public VersionRowID: string;\r\n public FileName: string;\r\n public ContentBase64: string | null;\r\n\r\n public constructor(\r\n versionRowID: string,\r\n fileName: string,\r\n contentBase64: string | null) {\r\n this.VersionRowID = versionRowID;\r\n this.FileName = fileName;\r\n this.ContentBase64 = contentBase64;\r\n }\r\n }\r\n\r\n export class DssResponseFileSigningInfo {\r\n public VersionRowID: string;\r\n public SignBase64: string;\r\n public SubjectName: string;\r\n public SerialNumber: string;\r\n public IssuerName: string;\r\n public Company: string;\r\n public ValidFrom: string;\r\n public ValidTo: string;\r\n }\r\n\r\n /** Статьи ИДП либо ОХР, но есть комбо-расчеты выполняемые сразу по ОХР И ИДП\r\n * Рассчеты по общим суммам и НДС \r\n * Некоторые методы,такие как расчет гарантийного удержания, остались в основном хелпере.\r\n */\r\n export class PkArticle\r\n {\r\n /**Таблица со списком статей*/\r\n private listSectionName: string;\r\n\r\n\r\n private listSectionVirtualName():string { return this.listSectionName + \"Virtual\"};\r\n\r\n /** Распределение суммы по статьям ИДП и ОХР*/\r\n private articlesSections: string[];\r\n\r\n /** Создаем экземпляр для расчетов общих сумм и НДС\r\n * Таблица со списком статей\r\n * Название блока, содержащего статьи\r\n */\r\n public constructor(listSectionName: string, sections:string[])\r\n {\r\n this.listSectionName = listSectionName;\r\n this.articlesSections = sections;\r\n }\r\n\r\n public UpdateAmountArticlesRowHandle(context: ICardUIExtensionContext, row: CardRow) {\r\n row.fieldChanged.add(e => {\r\n switch (e.fieldName) {\r\n case \"Amount\":\r\n {\r\n this.RecalcArticleRowSumToPay(row);\r\n this.RecalcArticleRowVatAmount(row, context.model.card);\r\n this.UpdateAmount(context);\r\n break;\r\n }\r\n case \"VATRateCaption\":\r\n {\r\n this.RecalcArticleRowVatAmount(row, context.model.card);\r\n this.UpdateAmount(context);\r\n break;\r\n } \r\n case \"AmountVAT\":\r\n {\r\n this.UpdateAmount(context);\r\n break;\r\n }\r\n case \"AmountAdvance\":\r\n {\r\n this.RecalcArticleRowSumToPay(row);\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Установка суммы НДС по строке */\r\n public RecalcArticleRowVatAmount(articleRow: CardRow, card: Card) {\r\n // только для ПД\r\n if (card.typeId != PkCardTypes.ArActTypeID && card.typeId != PkCardTypes.PkLetterCreditTypeID) return;\r\n \r\n let vatValue = 0;\r\n const vatRateCaption = articleRow.tryGet(\"VAT\")\r\n || articleRow.tryGet(\"VATRateCaption\");;\r\n\r\n if (PkCommonHelper.IsNullOrWhitespace(vatRateCaption)) return;\r\n\r\n vatValue = Number(PkClientHelper.GetVatValue(vatRateCaption));\r\n\r\n const amount = Number(articleRow.tryGet(\"Amount\") || 0.0);\r\n\r\n // СУММА НДС =((СУММА/(100+СТАВКА НДС))*СТАВКА НДС\r\n const varAmount = amount / (100 + vatValue) * vatValue;\r\n articleRow.set(\"AmountVAT\", (Math.round(varAmount * 100) / 100).toString().replace(',', '.'), DotNetType.Decimal);\r\n }\r\n\r\n /** Установка суммы к оплате по строке */\r\n public RecalcArticleRowSumToPay(articleRow: CardRow) {\r\n if (articleRow.has(\"SumToPay\") != null)\r\n {\r\n const amount = Number(articleRow.tryGet(\"Amount\") || 0.0);\r\n const amountAdvance = Number(articleRow.tryGet(\"AmountAdvance\") || 0.0);\r\n articleRow.set(\"SumToPay\", (amount - amountAdvance).toString().replace(',', '.'), DotNetType.Decimal);\r\n }\r\n }\r\n\r\n /** Не наследуется сумма из акта, если статья одна.*/\r\n public InitSettingAmountIfOneArticle(context: ICardUIExtensionContext, sectionName: string)\r\n {\r\n const card = context.card;\r\n const section = card.sections.tryGet(sectionName);\r\n if (!section)\r\n {\r\n return;\r\n }\r\n\r\n const a = (e) =>\r\n {\r\n if (e == null\r\n || e.FieldName == \".state\")\r\n {\r\n ArHelper.UpdateArticleAmounts(card);\r\n }\r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(section, a);\r\n }\r\n\r\n public UpdateAmount(context: ICardUIExtensionContext, isSetFieldState: boolean = true) {\r\n const aaIdpSection = context.model.card.sections.tryGet(this.listSectionVirtualName());\r\n if (aaIdpSection == null) return;\r\n const dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (dciSection == null) return;\r\n const aaiavSection = context.model.card.sections.tryGet('ArArticleIdpAmountVirtual');\r\n if (aaiavSection == null) return;\r\n const remainsControl = context.model.controls.get(\"Remains\");\r\n if (remainsControl == null) return;\r\n const distributedControl = context.model.controls.get(\"Distributed\");\r\n if (distributedControl == null) return;\r\n\r\n let distributed = 0.0;\r\n this.articlesSections.forEach(s=>{\r\n let section = context.model.card.sections.tryGet(s)!;\r\n for (let row of section.rows) {\r\n let tmp = Number(row.get(\"Amount\") || 0.0);\r\n distributed += tmp;\r\n }\r\n })\r\n\r\n let amount = Number(dciSection.fields.get(\"Amount\") || 0.0);\r\n if (amount != null) {\r\n const remainsValue = createTypedField(parseFloat((Math.round((amount - distributed) * 100) / 100).toFixed(2)).toString(), DotNetType.Decimal);\r\n const distributedValue = createTypedField(parseFloat((Math.round(distributed * 100) / 100).toFixed(2)).toString(), DotNetType.Decimal);\r\n\r\n if (isSetFieldState) {\r\n aaiavSection.fields.set(\"Remains\", remainsValue);\r\n aaiavSection.fields.set(\"Distributed\", distributedValue);\r\n }\r\n else {\r\n aaiavSection.fields.rawSet(\"Remains\", remainsValue);\r\n aaiavSection.fields.rawSet(\"Distributed\", distributedValue);\r\n }\r\n }\r\n\r\n if (amount != null &&\r\n amount !== distributed &&\r\n this.articlesSections.some(x=>context.model.card.sections.tryGet(x)!.rows.length > 0)) {\r\n remainsControl.controlVisibility = Visibility.Visible;\r\n distributedControl.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n remainsControl.controlVisibility = Visibility.Collapsed;\r\n distributedControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n if (context.model.card.typeId === PkCardTypes.ArActTypeID) {\r\n const pemi = context.model.card.sections.tryGet('PkServiceMessageInfo');\r\n if (pemi == null) return;\r\n const aaSection = context.model.card.sections.tryGet('ArchiveAct');\r\n if (aaSection == null) return;\r\n const remainsVATControl = context.model.controls.get(\"RemainsVAT\");\r\n if (remainsVATControl == null) return;\r\n const distributedVATControl = context.model.controls.get(\"DistributedVAT\");\r\n if (distributedVATControl == null) return;\r\n if (pemi.fields.get(\"SysObjectId\") == null && pemi.fields.get(\"SystemName\") == null\r\n && aaSection.fields.get(\"DocumentKindDiadocID\") != null) {\r\n let distributedVAT = 0.0;\r\n this.articlesSections.forEach(s => {\r\n let section = context.model.card.sections.tryGet(s)!;\r\n for (let row of section.rows) {\r\n let tmp = Number(row.get('AmountVAT') || 0.0);\r\n distributedVAT += tmp;\r\n }\r\n });\r\n\r\n let amountVAT = Number(aaSection.fields.get('VATAmount') || 0.0);\r\n if (amountVAT != null) {\r\n const remainsVatValue = createTypedField(parseFloat((Math.round((amountVAT - distributedVAT) * 100) / 100).toFixed(2)).toString().replace(',', '.'), DotNetType.Decimal);\r\n const distributedVatValue = createTypedField(parseFloat((Math.round(distributedVAT * 100) / 100).toFixed(2)).toString(), DotNetType.Decimal);\r\n\r\n if (isSetFieldState) {\r\n aaiavSection.fields.set(\"RemainsVAT\", remainsVatValue);\r\n aaiavSection.fields.set(\"DistributedVAT\", distributedVatValue);\r\n }\r\n else {\r\n aaiavSection.fields.rawSet(\"RemainsVAT\", remainsVatValue);\r\n aaiavSection.fields.rawSet(\"DistributedVAT\", distributedVatValue);\r\n }\r\n }\r\n if (amountVAT != null &&\r\n amountVAT !== distributedVAT &&\r\n this.articlesSections.some(x=>context.model.card.sections.tryGet(x)!.rows.length > 0)) {\r\n remainsVATControl.controlVisibility = Visibility.Visible;\r\n distributedVATControl.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n remainsVATControl.controlVisibility = Visibility.Collapsed;\r\n distributedVATControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n /** Устанавливаем обработчики и подписки*/\r\n public Initialized(context: ICardUIExtensionContext) {\r\n const articleSection = context.model.card.sections.tryGet(this.listSectionVirtualName());\r\n if (articleSection == null) return;\r\n\r\n this.UpdateAmount(context, false);\r\n // Сюда можно будет прокидывать Alias контрола для редактирования и FildName,\r\n // в зависимости откоторого изменяется доступность для редактирования\r\n ArUIHelper.InitPercentGaranteeEditability(context);\r\n ArUIHelper.InitPercentGaranteeCalculation(articleSection);\r\n ArUIHelper.InitAmountWithoutVATCalculation(articleSection);\r\n this.InitSettingAmountIfOneArticle(context, this.listSectionVirtualName());\r\n\r\n const dciSection = context.model.card.sections.tryGet(\"DocumentCommonInfo\");\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n const pklciSection = context.model.card.sections.tryGet(\"PkLetterCreditInfo\");\r\n\r\n if (articleSection.rows != null) {\r\n articleSection.rows.forEach(x => {\r\n this.UpdateAmountArticlesRowHandle(context, x);\r\n });\r\n articleSection.rows.collectionChanged.add(e => {\r\n if (e.added != null && e.added.length === 1)\r\n this.UpdateAmountArticlesRowHandle(context, e.added[0]);\r\n this.UpdateAmount(context);\r\n });\r\n }\r\n\r\n if (dciSection != null) {\r\n dciSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"Amount\") {\r\n ArHelper.UpdateArticleAmounts(context.model.card);\r\n this.UpdateAmount(context);\r\n }\r\n });\r\n }\r\n\r\n if (aaSection != null) {\r\n aaSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"ContractID\") {\r\n ArHelper.UpdateArticleAmounts(context.model.card);\r\n this.UpdateAmount(context);\r\n }\r\n else if (e.fieldName === \"VATAmount\") {\r\n ArHelper.UpdateArticleAmounts(context.model.card);\r\n this.UpdateAmount(context);\r\n }\r\n });\r\n }\r\n\r\n if (pklciSection != null) {\r\n pklciSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"ContractID\") {\r\n ArHelper.UpdateArticleAmounts(context.model.card);\r\n this.UpdateAmount(context);\r\n }\r\n });\r\n }\r\n }\r\n \r\n}\r\n\r\n/* * Кнопка для добавления строк в коллекционной секции*/\r\nexport class ButtonForAddingRows {\r\n \r\n /** Название грида, для которго добавляется кнопка*/\r\n private gridName: string;\r\n\r\n /** Название секции, к которой привязан грид*/\r\n private sectionName: string;\r\n\r\n /** RefSection представления*/\r\n private refSection: string;\r\n\r\n /**\r\n * * @param gridName Название грида для которго добавляется кнопка\r\n * * @param sectionName Название секции, к которой привязан грид\r\n * * @param gridName RefSection представления\r\n */\r\n public constructor(gridName: string, sectionName: string, refSection: string) {\r\n this.gridName = gridName;\r\n this.sectionName = sectionName;\r\n this.refSection = refSection;\r\n }\r\n\r\n public Initialized(context: ICardUIExtensionContext) {\r\n ButtonForAddingRows.Initialized(context, this.gridName, this.sectionName, this.refSection);\r\n }\r\n\r\n /** Инициализировать кнопку для грида\r\n * * @param gridName Название грида, для которго добавляется кнопка\r\n * * @param sectionName Название секции, к которой привязан грид\r\n * * @param refSection RefSection представления\r\n */\r\n public static Initialized(context: ICardUIExtensionContext, refSection: string, gridName: string/*, sectionName: string*/, sortingField?: string) {\r\n const grid = CdUIHelper.GetUIControl(context, gridName);\r\n if (grid == null)\r\n {\r\n return;\r\n }\r\n\r\n const b = new UIButton(\r\n \"Добавить строку\",\r\n async () => {\r\n await ButtonForAddingRows.AddButtonLogicAsync(context, refSection, grid, sortingField);\r\n }\r\n );\r\n \r\n grid.rightButtons.push(b); \r\n }\r\n\r\n /** Логика кнопки Добавить */ \r\n public static async AddButtonLogicAsync(context: ICardUIExtensionContext, refSection: string, grid: GridViewModel, sortingField: string | null = null)\r\n {\r\n let archiveAct : CardSection | undefined;\r\n if (context.card.typeId == PkCardTypes.PkLetterCreditTypeID)\r\n {\r\n archiveAct = context.model.card.sections.tryGet(\"PkLetterCreditInfo\");\r\n }\r\n else\r\n {\r\n archiveAct = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n }\r\n\r\n if (archiveAct == null)\r\n {\r\n return;\r\n }\r\n\r\n let rawVatId = archiveAct.fields.tryGet(\"VATRateID\");\r\n let vatName = archiveAct.fields.tryGet(\"VATRateCaption\");\r\n let parameters = ButtonForAddingRows.GetParametersForView(context);\r\n await showViewsDialog(refSection, \r\n \r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n let selectedItem = value;\r\n // this.selectedRow=selectedItem.selectedRow ;\r\n // TODO доделать множественный выбор\r\n \r\n if (selectedItem != null && selectedItem.selectedRow != null) {\r\n selectedItem.viewContext?.selectedRows?.forEach( selectedRow=>{ \r\n let arArticleOhrListVirtual = context.card.sections.tryGet(\"ArArticleOHRListVirtual\");\r\n if (arArticleOhrListVirtual != null)\r\n {\r\n let rowVirtual = new CardRow(); \r\n rowVirtual.rowId = Guid.newGuid();\r\n \r\n rowVirtual.set('ArticleID', createTypedField(selectedRow.get(\"ArticleID\"), DotNetType.Guid));\r\n rowVirtual.set('ArticleName', createTypedField(selectedRow.get(\"ArticleName\"), DotNetType.String));\r\n rowVirtual.set('HierarchicalCode', createTypedField(selectedRow.get(\"ArticleHierarchicalCode\"), DotNetType.String));\r\n rowVirtual.set('Amount', null);\r\n rowVirtual.set('VAT', null);\r\n rowVirtual.set('VATRateID', rawVatId);\r\n rowVirtual.set('VATRateCaption', vatName);\r\n rowVirtual.set('ActivityKindID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterExtID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterName', null);\r\n rowVirtual.set('ActivityKindName', null);\r\n rowVirtual.set('AmountVAT', null);\r\n\r\n\r\n rowVirtual.set('ObjectOtherID', null);\r\n rowVirtual.set('ObjectOtherExtID', null);\r\n rowVirtual.set('ObjectOtherName', null);\r\n rowVirtual.set('ObjectOtherFullName', null);\r\n rowVirtual.set('ObjectOtherCode1c', null);\r\n rowVirtual.set('ObjectOtherLivingComplex', null);\r\n rowVirtual.set('ObjectOtherAddressPost', null);\r\n\r\n rowVirtual.set('ObjectID', null);\r\n rowVirtual.set('ObjectExtID', null);\r\n rowVirtual.set('ObjectName', null);\r\n rowVirtual.set('ObjectFullName', null);\r\n rowVirtual.set('ObjectCode1c', null);\r\n rowVirtual.set('ObjectLivingComplex', null);\r\n rowVirtual.set('ObjectAddressPost', null);\r\n\r\n rowVirtual.set('AmountAdvance', createTypedField(\"0.00\", DotNetType.Decimal));\r\n rowVirtual.set('SumToPay', createTypedField(\"0.00\", DotNetType.Decimal));\r\n \r\n if (sortingField != null)\r\n {\r\n rowVirtual.set(sortingField ,createTypedField(grid.rows.length, DotNetType.Int32));\r\n }\r\n \r\n rowVirtual.state = CardRowState.Inserted;\r\n arArticleOhrListVirtual.rows.push(rowVirtual);\r\n }\r\n })\r\n }\r\n ArHelper.UpdateArticleAmounts(context.card);\r\n },\r\n parameters);\r\n }\r\n\r\n /** Получение параметров для представления */ \r\n public static GetParametersForView(context: ICardUIExtensionContext)\r\n {\r\n const parameters = new Array();\r\n\r\n const aaSection = context.model.card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection != null)\r\n {\r\n let contractID = aaSection.fields.get(\"ContractID\");\r\n\r\n if (contractID != null)\r\n {\r\n let paramAlias = \"ContractID\";\r\n let parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = paramAlias;\r\n parameterMetadata.caption = \"Договор\";\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n let requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), \"ContractID\", contractID)\r\n .asRequestParameter();\r\n\r\n parameters.push(requestParameter);\r\n }\r\n };\r\n\r\n return parameters;\r\n }\r\n}\r\n","import { TileExtension, ITileGlobalExtensionContext, TileGroups, TileEvaluationEventArgs, Tile } from 'tessa/ui/tiles';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { tryGetFromInfo, UIContext } from 'tessa/ui';\r\nimport { ArUIHelper } from '../UI/ArUIHelper';\r\nimport { isNullOrUndefined } from 'util';\r\n\r\n\r\nexport class PkFileDownloadTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.rightPanel;\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"DownloadAllFilesInCard\",\r\n caption: \"Выгрузить файлы\",\r\n icon: \"ta icon-thin-078\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: this.DownloadAllFilesInCardAsync,\r\n evaluating: this.CanDownloadAllFilesInCard\r\n }));\r\n }\r\n\r\n\r\n private CanDownloadAllFilesInCard(e: TileEvaluationEventArgs) {\r\n let editor = e.currentTile.context.cardEditor;\r\n let visible = false;\r\n if (isNullOrUndefined(editor) ||\r\n isNullOrUndefined(editor.cardModel)) {\r\n visible = false\r\n }else{\r\n visible = editor!.cardModel!.card!.typeId == PkCardTypes.PkPacketVirtualTypeID;\r\n }\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n visible);\r\n }\r\n\r\n private async DownloadAllFilesInCardAsync() {\r\n let uiContext = UIContext.current;\r\n const fileName = tryGetFromInfo(uiContext.cardEditor!.cardModel!.card.info, \"ExportedFileName\");\r\n await ArUIHelper.SaveArchivedFilesAsync(uiContext.cardEditor!.cardModel!, fileName);\r\n }\r\n}","import { ICardUIExtensionContext, IControlViewModel } from 'tessa/ui/cards';\r\nimport { Card, CardRow, CardRowState, CardSection } from 'tessa/cards';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { GridViewModel, ButtonViewModel, GridRowEventArgs, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { Guid, createTypedField, DotNetType, Visibility } from 'tessa/platform';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from './PkRequestTypes';\r\nimport { PkClientHelper } from './PkClientHelper';\r\nimport { PkMethodsEmbroideryOnStickers, PkMethodsEmbroideryOnStickersID } from './PkEnums';\r\nimport { showMessage } from 'tessa/ui';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { TessaArContractKinds } from './PkPrimaryDocsHelper';\r\nimport { PkCardTypes } from './PkCardTypes';\r\n\r\nconst ChangeMethodEmbroideryOnStickers = \"Способ расшифровки сменится на \\\"Вручную\\\": Продолжить?\";\r\n\r\nexport class PkContractUIHelper \r\n{\r\n /** Подписка на кнопку \"Показать разбивку на стикеры для текущих сумм\" по стороне side. */\r\n public static async StickerForCurrentForPartnerButtonClickAsync(context: ICardUIExtensionContext, side: number = 1) \r\n {\r\n const stickerForCurrentForPartner1Button = CdUIHelper.GetUIControl(context, side == 1 ? \"StickerForCurrentForPartner1Button\" : \"StickerForCurrentForPartner2Button\");\r\n if (!stickerForCurrentForPartner1Button) {\r\n return;\r\n }\r\n\r\n stickerForCurrentForPartner1Button.onClick = async() => {\r\n const stickerTable = CdUIHelper.GetUIControl(context, side == 1 ? \"ArContractArticleStickerForCurrentForPartner1Virtual\" : \"ArContractArticleStickerForCurrentForPartner2Virtual\");\r\n if (stickerTable) {\r\n stickerTable.controlVisibility = stickerTable.controlVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;\r\n if (stickerTable.controlVisibility == Visibility.Visible) {\r\n await this.SetStickersInVirtualSectionAsync(\r\n context,\r\n side == 1 ? \"ArContractArticleStickerForCurrentForPartner1Virtual\" : \"ArContractArticleStickerForCurrentForPartner2Virtual\",\r\n \"ArContractArticleStickers\",\r\n side == 1 ? \"ArContractCurrentArticleIdpForPartner1\" : \"ArContractCurrentArticleIdpForPartner2\",\r\n side == 1 ? \"ArContractArticleStickerForCurrentForPartner1Virtual\" : \"ArContractArticleStickerForCurrentForPartner2Virtual\"\r\n );\r\n }\r\n }\r\n };\r\n }\r\n\r\n /** Подписка на кнопку \"Показать разбивку на стикеры для первоначальных сумм\" по стороне side. */\r\n public static async StickerForInitialForPartnerButtonClickAsync(context: ICardUIExtensionContext, side: number = 1) \r\n {\r\n const stickerForInitialForPartner1Button = CdUIHelper.GetUIControl(context, side == 1 ? \"StickerForInitialForPartner1Button\" : \"StickerForInitialForPartner2Button\");\r\n if (!stickerForInitialForPartner1Button) {\r\n return;\r\n }\r\n\r\n stickerForInitialForPartner1Button.onClick = async() => {\r\n const stickerTable = CdUIHelper.GetUIControl(context, side == 1 ? \"ArContractArticleStickerForInitialForPartner1Virtual\" : \"ArContractArticleStickerForInitialForPartner2Virtual\");\r\n if (stickerTable) {\r\n stickerTable.controlVisibility = stickerTable.controlVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;\r\n if (stickerTable.controlVisibility == Visibility.Visible) {\r\n await this.SetStickersInVirtualSectionAsync(\r\n context,\r\n side == 1 ? \"ArContractArticleStickerForInitialForPartner1Virtual\" : \"ArContractArticleStickerForInitialForPartner2Virtual\",\r\n \"ArContractArticleStickersInitial\",\r\n side == 1 ? \"ArContractArticleIdpForPartner1\" : \"ArContractArticleIdpForPartner2\",\r\n side == 1 ? \"ArContractArticleStickerForInitialForPartner1Virtual\" : \"ArContractArticleStickerForInitialForPartner2Virtual\"\r\n );\r\n }\r\n }\r\n };\r\n }\r\n\r\n /** Проверка договора на историчность. */\r\n public static IsContractHistorical(card: Card) : boolean\r\n {\r\n const section = card.sections.tryGet('ArContractsUser');\r\n if (!section){\r\n return false;\r\n }\r\n\r\n let extID = section!.fields.tryGetField('ExtID');\r\n if (extID == null)\r\n {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Заполнение виртуальной таблицы снизу для отображения все статей в карточке с их стикерами. */\r\n private static SetStickersInVirtualSectionAsync(\r\n context: ICardUIExtensionContext, \r\n sectionVirtualName: string,\r\n sectionStickersName: string,\r\n sectionParentArticlesName: string,\r\n tableName: string,\r\n parentRowIDCick: string = \"\") {\r\n let arArticleStickersVirtual = context.model.card.sections.tryGet(sectionVirtualName);\r\n let arArticleStickers = context.model.card.sections.tryGet(sectionStickersName);\r\n let arArticleParentStickers = context.model.card.sections.tryGet(sectionParentArticlesName);\r\n if (!arArticleStickersVirtual || !arArticleStickers || !arArticleParentStickers) {\r\n return;\r\n }\r\n \r\n let removeRows = arArticleStickersVirtual.rows.filter(x => x.state !== CardRowState.Deleted);\r\n for (let parentArticle of removeRows) {\r\n arArticleStickersVirtual.rows.remove(parentArticle);\r\n }\r\n \r\n // отсортируем родительские статьи\r\n let filterArArticleStickers: CardRow[];\r\n if (parentRowIDCick != null && parentRowIDCick != \"\") {\r\n filterArArticleStickers = arArticleParentStickers.rows.filter(x => x.state !== CardRowState.Deleted \r\n && x.rowId == parentRowIDCick);\r\n }\r\n else {\r\n filterArArticleStickers = arArticleParentStickers.rows.filter(x => x.state !== CardRowState.Deleted);\r\n }\r\n \r\n \r\n // начинаем цикл с родительских статей БК и по одной добавляем в коллекцию\r\n // после каждой статьи добавляем статьи-стикеры\r\n for (let parentArticle of filterArArticleStickers) {\r\n let costItemID = parentArticle.getField('CostItemID')?.$value;\r\n if (!costItemID || parentArticle.state == CardRowState.Deleted) {\r\n continue;\r\n }\r\n\r\n // отфильтруем статьи стикеры\r\n const filterStickerRows = arArticleStickers.rows.filter(x => x.state !== CardRowState.Deleted \r\n && Guid.equals(x.tryGetField('ParentRowID')?.$value, parentArticle.rowId));\r\n \r\n let virtualStickRows = arArticleStickersVirtual.rows;\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"CostItemParentID\", createTypedField(parentArticle.getField('CostItemID')?.$value, DotNetType.Guid));\r\n newRow.set(\"CostItemParentName\", createTypedField(parentArticle.getField('CostItemName')?.$value, DotNetType.String));\r\n newRow.set(\"CostItemParentMdsID\", createTypedField(parentArticle.getField('CostItemMdsID')?.$value, DotNetType.Int64));\r\n newRow.set(\"ObjectID\", createTypedField(parentArticle.getField('ObjectID')?.$value, DotNetType.Guid));\r\n newRow.set(\"ObjectName\", createTypedField(parentArticle.getField('ObjectName')?.$value, DotNetType.String));\r\n newRow.set(\"Amount\", createTypedField(parentArticle.getField('Amount')?.$value, DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n virtualStickRows.push(newRow);\r\n\r\n // цикл по стикерам\r\n for (let stickerArticle of filterStickerRows) {\r\n newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"CostItemStickerID\", createTypedField(stickerArticle.getField('CostItemID')?.$value, DotNetType.Guid));\r\n newRow.set(\"CostItemStickerName\", createTypedField(stickerArticle.getField('CostItemName')?.$value, DotNetType.String));\r\n newRow.set(\"CostItemStickerMdsID\", createTypedField(stickerArticle.getField('CostItemMdsID')?.$value, DotNetType.Int64));\r\n newRow.set(\"CostItemCodeIdpItemCode\", createTypedField(stickerArticle.getField('CostItemIdpItemCode')?.$value, DotNetType.String));\r\n newRow.set(\"Amount\", createTypedField(stickerArticle.getField('Amount')?.$value?.toString() ?? null, DotNetType.Decimal));\r\n newRow.state = CardRowState.Inserted;\r\n virtualStickRows.push(newRow);\r\n }\r\n }\r\n \r\n // подркаска строк\r\n this.SetColorForRows(context, tableName, \"CostItemStickerID\");\r\n\r\n // очистка изменений в виртуальных секциях\r\n arArticleStickersVirtual!.removeChanges();\r\n }\r\n\r\n /** Очистка стикеров где указана сумма null или не заполнена статья. */\r\n public static ClearStickersWhenFormClosed(stickerSection: CardSection) \r\n {\r\n for (let stick of stickerSection.rows.filter(x => x.rowId != null)) {\r\n if (stick.tryGetField('Amount')?.$value == null ||\r\n stick.tryGetField('CostItemID')?.$value == null) {\r\n stickerSection.rows.remove(stick);\r\n }\r\n }\r\n }\r\n\r\n /** Проверка пустой суммы в уточняющих стикерах из договора (их нельзя удалять) */\r\n public static CheckClarifyingStickersWhenFormClosed(stickerSection: CardSection) \r\n {\r\n let validationMessage = '';\r\n for (let stick of stickerSection.rows.filter(x => x.rowId != null && x.state != CardRowState.Deleted)) {\r\n if (stick.tryGetField(\"ChangeStickerRowID\")?.$value != null &&\r\n (stick.tryGetField('Amount')?.$value == null ||\r\n stick.tryGetField('CostItemID')?.$value == null)) {\r\n validationMessage += `Сумма по уточняющему стикеру {${stick.tryGetField('CostItemName')?.$value}}, полученному из родительского договора, должна быть равной или больше 0.\\n`;\r\n }\r\n }\r\n if (validationMessage.length>0) {\r\n showMessage(validationMessage);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Заполнение виртуального поля с ID указанных стикеров к текущей выбранной статье для передачи в маппинг представления. */\r\n public static SetVirualArticleStickersFillIDs(card: Card, articleRow: CardRow, parentArticleSectionName: string, articleStickerSectionName: string, withoutRowID?: string) \r\n {\r\n const arContractVirtual = card.sections.tryGet(\"ArContractVirtual\");\r\n const stickSection = card.sections.tryGet(articleStickerSectionName);\r\n const parentArticleSection = card.sections.tryGet(parentArticleSectionName);\r\n\r\n if (!arContractVirtual || !stickSection || !parentArticleSection){\r\n return;\r\n }\r\n\r\n // фильтруем стикеры по ID статьи\\объекту\r\n const objectID = articleRow?.get(\"ObjectID\");\r\n const costItemID = articleRow?.get(\"CostItemID\");\r\n const vatRateID = articleRow?.get(\"VatRateID\");\r\n let parentRow: CardRow | null | undefined = null;\r\n const filteredRows = stickSection.rows.filter(r => r.state != CardRowState.Deleted && \r\n r.rowId!=withoutRowID &&\r\n r.getField(\"CostItemID\") &&\r\n (parentRow = parentArticleSection.rows.find(p => Guid.equals(p.rowId, r.get(\"ParentRowID\")))) &&\r\n Guid.equals(parentRow.get(\"ObjectID\"), objectID) &&\r\n Guid.equals(parentRow.get(\"CostItemID\"), costItemID) &&\r\n parentRow.get(\"VatRateID\") == vatRateID);\r\n\r\n if (filteredRows && !(filteredRows.length == 0)) \r\n {\r\n const costItemIDs: string = filteredRows\r\n .map(r => '\"' + r.getField(\"CostItemID\")?.$value + '\"')\r\n .filter((v, i, a) => a.indexOf(v) == i)\r\n .join(',');\r\n arContractVirtual.fields.set('ArticleStickersFillIDs', (!costItemIDs || costItemIDs.length === 0) ? null : '[' + costItemIDs + ']', DotNetType.String);\r\n arContractVirtual.clearChanges();\r\n } else\r\n {\r\n arContractVirtual.fields.set('ArticleStickersFillIDs', null, DotNetType.String);\r\n arContractVirtual.clearChanges();\r\n }\r\n }\r\n\r\n /** Получим стикерные статьи с сервера. */\r\n public static async GetArticleStickersByParentRequestAsync(context: ICardUIExtensionContext, costItemID, objectExtID, parentRowID, isNeedStickersFromContract) \r\n {\r\n if ((costItemID || objectExtID) && !isNeedStickersFromContract) \r\n {\r\n return null;\r\n }\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetArticleStickersByParent; \r\n if (costItemID) {\r\n request.info[\"StickerParentID\"] = createTypedField(costItemID.toString(), DotNetType.String);\r\n }\r\n if (objectExtID) {\r\n request.info[\"objectExtID\"] = createTypedField(objectExtID.toString(), DotNetType.String);\r\n }\r\n if (parentRowID) {\r\n request.info[\"parentRowID\"] = createTypedField(parentRowID.toString(), DotNetType.String);\r\n }\r\n \r\n // проверка ответа\r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) {\r\n context.validationResult.add(response.validationResult.build());\r\n return null;\r\n } \r\n\r\n if (response.info.stickersList) \r\n {\r\n return response.info.stickersList;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Очистка стикеров в секции по ParentRowID статьи БК. */\r\n public static ClearStickersSectionByParentRowID(stickerSection: CardSection, parentRowID)\r\n {\r\n let removeRows = stickerSection.rows.filter(x => x.state === CardRowState.Inserted && Guid.equals(x.parentRowId, parentRowID));\r\n for (let stickRow of removeRows) {\r\n stickerSection.rows.remove(stickRow);\r\n }\r\n\r\n for (let stickRow of stickerSection.rows)\r\n {\r\n if (stickRow.state != CardRowState.Deleted && Guid.equals(stickRow.parentRowId,parentRowID))\r\n {\r\n stickRow.state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n\r\n /** Расчет суммы по стикерам для статьи при закрытии формы по стикерам. */\r\n public static async CalcAmountFromContractArticleStickersAsync(\r\n card: Card, \r\n parentRowID,\r\n stickerSectionName: string,\r\n articleSectionName: string)\r\n {\r\n const arContractArticleStickers = card.sections.tryGet(stickerSectionName);\r\n if (arContractArticleStickers)\r\n {\r\n const filterStickRows = arContractArticleStickers.rows.filter(x => x.state !== CardRowState.Deleted && Guid.equals(x.parentRowId, parentRowID));\r\n // сумма всего\r\n let amount = PkClientHelper.SumStickerAmount(filterStickRows, 'Amount');\r\n let arContractArticleIdp = card.sections.tryGet(articleSectionName);\r\n if (arContractArticleIdp) {\r\n arContractArticleIdp.rows.forEach(async row =>\r\n {\r\n // обязательно переводим amount в string (в случае если пишем Decimal), иначе 100.00 сохранится как 10000\r\n if (row.rowId == parentRowID) {\r\n row.set(\"Amount\", createTypedField(amount.toFixed(2).replace(',', '.'), DotNetType.Decimal));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n public static FieldChanged(c1: CardRow, c2: CardRow){\r\n // в тс нельзя вернуть значение из цикла, поэтому приходится пользоваться переменной для флага\r\n let flag = false;\r\n c2.forEach((_value, key) => {\r\n if((key != \".state\" && key != \".changed\")&&(c1.tryGet(key) != c2.tryGet(key))){\r\n flag = true;\r\n }\r\n });\r\n return flag;\r\n }\r\n\r\n public static IsIDPArticle(c1: CardRow){\r\n var idpItemCode = c1.tryGet(\"CostItemIdpItemCode\") ?? \"\";\r\n return (idpItemCode > \"\");\r\n }\r\n\r\n /** Подписка на изменение стикерных статей в секции. */\r\n public static ArticleStickersChanged(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const arContractArticleStickersInitial = card.sections.tryGet(\"ArContractArticleStickersInitial\");\r\n const arContractArticleStickers = card.sections.tryGet(\"ArContractArticleStickers\");\r\n const arContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n\r\n if (arContractArticleStickersInitial && arContractArticleStickers && arContractsUser && arContractsUser.fields.has('MethodEmbroideryOnStickersID'))\r\n {\r\n let setMethodEmbroideryOnStickersAndAnalyticsStickers = (function () {\r\n // проставление способа расшифровки стикеров \"Вручную\" при ручном редактировании (возможно только в UI)\r\n if (arContractArticleStickersInitial.rows.some(r => r.state != CardRowState.Deleted)) {\r\n arContractsUser.fields.set(\"MethodEmbroideryOnStickersID\", createTypedField(PkMethodsEmbroideryOnStickersID.Manually, DotNetType.Int32));\r\n arContractsUser.fields.set(\"MethodEmbroideryOnStickersName\", createTypedField(PkMethodsEmbroideryOnStickers.get(PkMethodsEmbroideryOnStickersID.Manually), DotNetType.String));\r\n }\r\n else {\r\n arContractsUser.fields.set(\"MethodEmbroideryOnStickersID\", null);\r\n arContractsUser.fields.set(\"MethodEmbroideryOnStickersName\", null);\r\n }\r\n\r\n // снимаем флаг \"Только стикерный учет\"\r\n if (arContractsUser.fields.get(\"AnalyticsStickers\") == true) {\r\n arContractsUser.fields.set(\"AnalyticsStickers\", createTypedField(false, DotNetType.Boolean));\r\n }\r\n });\r\n\r\n let initArticles = CdUIHelper.GetUIControl(context, \"ContractArticleIdp\");\r\n let curArticles = CdUIHelper.GetUIControl(context, \"ContractArticleIdpVirtualNew\");\r\n\r\n // Начальные суммы\r\n // Записываем состояние при открытии\r\n let initArticleFields;\r\n initArticles?.rowInitializing.add(e=>{\r\n if(e.action == GridRowAction.Opening){\r\n initArticleFields = e.row.clone();\r\n }\r\n });\r\n\r\n // При закрытии проверяем, какие поля изменились\r\n initArticles?.rowEditorClosing.add(e=>{\r\n if((e.action == GridRowAction.Inserted) && PkContractUIHelper.IsIDPArticle(e.row)){\r\n if(!confirm(ChangeMethodEmbroideryOnStickers)){\r\n e.cancel = true;\r\n }\r\n else {\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n setMethodEmbroideryOnStickersAndAnalyticsStickers();\r\n }\r\n }\r\n if((e.action == GridRowAction.Opening) && PkContractUIHelper.IsIDPArticle(e.row)){\r\n if(this.FieldChanged(initArticleFields, e.row)){\r\n if(!confirm(ChangeMethodEmbroideryOnStickers)){\r\n e.row.setFrom(initArticleFields);\r\n }\r\n else {\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n setMethodEmbroideryOnStickersAndAnalyticsStickers();\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Текущие суммы\r\n // Записываем состояние при открытии\r\n let curArticleFields;\r\n curArticles?.rowInitializing.add(e=>{\r\n if(e.action == GridRowAction.Opening){\r\n curArticleFields = e.row.clone();\r\n }\r\n });\r\n\r\n // При закрытии проверяем, какие поля изменились\r\n curArticles?.rowEditorClosing.add(e=>{\r\n if((e.action == GridRowAction.Inserted) && PkContractUIHelper.IsIDPArticle(e.row)){\r\n if(!confirm(ChangeMethodEmbroideryOnStickers)){\r\n e.cancel = true;\r\n }\r\n else {\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n setMethodEmbroideryOnStickersAndAnalyticsStickers();\r\n }\r\n }\r\n if(e.action == GridRowAction.Opening){\r\n if(this.FieldChanged(curArticleFields, e.row) && PkContractUIHelper.IsIDPArticle(e.row)){\r\n if(!confirm(ChangeMethodEmbroideryOnStickers)){\r\n e.row.setFrom(curArticleFields);\r\n }\r\n }\r\n else {\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n setMethodEmbroideryOnStickersAndAnalyticsStickers();\r\n }\r\n }\r\n });\r\n\r\n // Изменение контрагента в роли \"Продавец\"\r\n const partnerTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n let partner = \"\";\r\n let roleId;\r\n\r\n if(partnerTable == null)\r\n return;\r\n\r\n // при открытии сохраняем значение контрагента\r\n partnerTable.rowInvoked.add(e =>\r\n {\r\n if (e.action == GridRowAction.Opening)\r\n {\r\n partner = e.row.tryGet(\"PartnerName\");\r\n roleId = e.row.tryGet(\"RoleID\");\r\n }\r\n });\r\n\r\n // проверяем, изменилось ли значение контрагента\r\n partnerTable.rowEditorClosing.add( e =>\r\n {\r\n if (roleId == 1)\r\n {\r\n var partnerValue = e.row.tryGet(\"PartnerName\");\r\n var role = e.row.tryGet(\"RoleID\");\r\n if (role != roleId || partnerValue != partner)\r\n {\r\n if(!confirm(ChangeMethodEmbroideryOnStickers)){\r\n e.cancel = true;\r\n }\r\n else{\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n setMethodEmbroideryOnStickersAndAnalyticsStickers();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Установка и заполнение стикеров в указанной секции договора при изменении статьи. */\r\n public static async SetAndFillArticleStickerRowAsync(\r\n context: ICardUIExtensionContext,\r\n arContractArticleStickersInitial: CardSection,\r\n costItemID,\r\n objectExtID,\r\n parentRowID,\r\n fromContractParentRowID = null,\r\n isNeedStickersFromContract = false)\r\n {\r\n let stickerList = await PkContractUIHelper.GetArticleStickersByParentRequestAsync(context, costItemID, objectExtID, fromContractParentRowID, isNeedStickersFromContract);\r\n let i = 1;\r\n let stickRows = arContractArticleStickersInitial.rows;\r\n // это условие пока убираю, непонятно зачем оно, в толстом его нет. если возникнет какой-то баг, надо вернуть.\r\n // if (stickerList != null && stickRows.filter(x => x.state != CardRowState.Deleted && Guid.equals(x.get(\"ParentRowID\"), fromContractParentRowID)).length < stickerList.length) \r\n // {\r\n \r\n // }\r\n for (let stickRow of stickerList) {\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"ParentRowID\", createTypedField(parentRowID, DotNetType.Guid));\r\n newRow.set(\"CostItemID\", stickRow.ID);\r\n newRow.set(\"CostItemMdsID\", stickRow.MdsID);\r\n newRow.set(\"CostItemName\", stickRow.Name);\r\n newRow.set(\"CostItemIdpItemCode\", stickRow.CostItemIdpItemCode);\r\n newRow.set(\"Amount\", null);\r\n newRow.set(\"Order\", createTypedField(i++, DotNetType.Int32));\r\n newRow.set(\"Remain\", null);\r\n newRow.set(\"ArticleAmountFactPMC\", null);\r\n newRow.set(\"ChangeStickerRowID\", stickRow.ContractSickRowID ?? null);\r\n if (fromContractParentRowID != null)\r\n {\r\n newRow.set(\"InitialAmount\", stickRow.Amount);\r\n }\r\n\r\n newRow.state = CardRowState.Inserted;\r\n stickRows.push(newRow);\r\n }\r\n }\r\n\r\n /** Копирование строк со статьями из одной таблицы в другую. */\r\n public static CopyArticleRow(card: Card, oldRow: CardRow, toCardSectionName: string) \r\n {\r\n let section = card.sections.tryGet(toCardSectionName);\r\n if (!section){\r\n return;\r\n }\r\n\r\n for (let row of section.rows.filter(x => Guid.equals(x.rowId, oldRow.rowId))) \r\n {\r\n section.rows.remove(row);\r\n }\r\n \r\n let newRow = section.rows.add(); //context.model.card.sections.tryGet('ArContractArticleIdpForPartner1')!.rows.add(); \r\n newRow.setFrom(oldRow);\r\n }\r\n\r\n /** Блокировка и запрет ввода сумм по статье для ее корректировки при помощи стикеров.\r\n * Также откроем ввод стикеров. */\r\n public static ProhibitionEnteringAmountArticle(e: GridRowEventArgs, arArticleStickersTableControl: IControlViewModel, isReadOnlyStickers: boolean = false) \r\n {\r\n if (e.rowModel != null) \r\n {\r\n let amountArticleControl = e.rowModel.controlsBag.find(x => x.name == \"AmountArticleControl\");\r\n let amountWithoutVatArticleControl = e.rowModel.controlsBag.find(x => x.name == \"AmountWithoutVatArticleControl\");\r\n if (amountArticleControl && amountWithoutVatArticleControl)\r\n {\r\n amountArticleControl.isReadOnly = true;\r\n amountWithoutVatArticleControl.isReadOnly = true;\r\n }\r\n }\r\n\r\n arArticleStickersTableControl.isReadOnly = isReadOnlyStickers;\r\n }\r\n\r\n /** Получение суммы по статье договора из таблицы текущие суммы. */\r\n public static async GetAmountFromContractAsync(context: ICardUIExtensionContext, parentArticleRowGuid, parentArticleRowID: string | null = null) {\r\n let outsum: number = 0;\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetArticleAmountFromContractBySticker;\r\n request.info[\"ParentArticleRowGuid\"] = createTypedField(parentArticleRowGuid, DotNetType.String);\r\n request.info[\"parentArticleRowID\"] = createTypedField(parentArticleRowID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n context.validationResult.add(response.validationResult.build());\r\n return outsum;\r\n }\r\n\r\n if (response.info) {\r\n return response.info?.amount.$value;\r\n }\r\n\r\n return outsum;\r\n }\r\n\r\n public static FillArContractCustomParticipants(card: Card, deleteRowID: string | null = null)\r\n {\r\n let acp : CardSection | undefined = card.sections.tryGet(\"ArContractPartners\");\r\n let fcpv : CardSection | undefined = card.sections.tryGet(\"FdCustomParticipantsVirtual\");\r\n let accpv : CardSection | undefined = card.sections.tryGet(\"ArContractCustomParticipantsVirtual\");\r\n let fcprv : CardSection | undefined = card.sections.tryGet('FdCustomParticipants_RolesVirtual');\r\n let fcpu : CardSection | undefined = card.sections.tryGet('FdCustomParticipants_Users');\r\n\r\n if (!acp || !fcpv || !accpv || !fcprv || !fcpu)\r\n {\r\n return;\r\n }\r\n\r\n for (let row of accpv.rows)\r\n {\r\n row.state = CardRowState.Deleted;\r\n }\r\n\r\n accpv.rows.collectionChanged.add(e =>\r\n {\r\n if (e.added)\r\n {\r\n e.added.forEach(item => {\r\n item.fieldChanged.add(e1 => { \r\n if (e1.fieldName == 'Order') {\r\n if (fcpv) {\r\n fcpv.rows.find(_ => _.rowId == item.rowId)!.set('Order', e1.fieldValue, DotNetType.Int32);\r\n } \r\n }\r\n });\r\n });\r\n }\r\n });\r\n\r\n for (let row of fcpv.rows.sort((a, b) => a.tryGet('Order') - b.tryGet('Order')).filter(_ => _.state != CardRowState.Deleted))\r\n {\r\n if (deleteRowID && row.rowId == deleteRowID)\r\n {\r\n return;\r\n }\r\n\r\n let acpRow = acp!.rows.find(_ => _.tryGet('PartnerExternalID')\r\n && row.tryGet(\"PartnerExternalID\")\r\n && _.get('PartnerExternalID') == row.get(\"PartnerExternalID\"));\r\n\r\n let newRow = new CardRow();\r\n\r\n newRow.set('RowID', row.rowId, DotNetType.Guid);\r\n newRow.set('Order', row.get('Order'), DotNetType.Int32);\r\n newRow.set('StageTemplateID', row.get('StageTemplateID'), DotNetType.Guid);\r\n newRow.set('StageTemplateName', row.get('StageTemplateName'), DotNetType.String);\r\n newRow.set('IsParallel', row.get('StageTemplateIsParallel'), DotNetType.Boolean);\r\n newRow.set('TaskTimeLimitationInWorkingDaysNormal', row.get('TaskTimeLimitationInWorkingDaysNormal')?.toString() ?? null, DotNetType.Decimal);\r\n newRow.set('OrderCustom', row.tryGet('OrderCustom'), DotNetType.Int32);\r\n\r\n if(acpRow){\r\n newRow.set('ContractorID', acpRow!.get('PartnerID'), DotNetType.Guid);\r\n newRow.set('ContractorExternalID', acpRow!.get('PartnerExternalID'), DotNetType.Int64);\r\n newRow.set('ContractorName', acpRow!.get('PartnerName'), DotNetType.String);\r\n } \r\n else if(row.tryGetField('PartnerID'))\r\n {\r\n newRow.set('ContractorID', row.tryGetField('PartnerID')?.$value, DotNetType.Guid);\r\n newRow.set('ContractorExternalID', row.tryGetField('PartnerExternalID')?.$value, DotNetType.Int64);\r\n newRow.set('ContractorName', row.tryGetField('PartnerName')?.$value, DotNetType.String); \r\n }\r\n \r\n if (fcprv!.rows.some(_ => _.get('ParentRowID') == row.rowId && _.state != CardRowState.Deleted && _.get('RoleID')))\r\n {\r\n let roleRow = fcprv!.rows.find(_ => _.get('ParentRowID') == row.rowId && _.state != CardRowState.Deleted && _.get('RoleID'));\r\n\r\n if (roleRow) {\r\n newRow.set('RoleID', roleRow.get('RoleID'), DotNetType.Guid);\r\n newRow.set('RoleName', roleRow.get('RoleName'), DotNetType.String);\r\n }\r\n }\r\n \r\n let userRows = fcpu!.rows.filter(_ => _.get('ParentRowID') == row.rowId && _.state != CardRowState.Deleted && _.get('UserID'));\r\n if (userRows.length > 0)\r\n {\r\n newRow.set('Users', userRows.map(_ => _.get('UserName')).join('; '), DotNetType.String);\r\n }\r\n\r\n newRow.state = CardRowState.Inserted;\r\n\r\n newRow.fieldChanged.add(e1 =>\r\n {\r\n if (e1.fieldName == \"Order\")\r\n {\r\n fcprv!.rows.find(_ => _.rowId == newRow.rowId)!.set('Order', e1.fieldValue, DotNetType.Int32);\r\n }\r\n });\r\n\r\n accpv!.rows.add(newRow);\r\n };\r\n }\r\n\r\n public static async IsRequiredRolesWithUsers(context: ICardUIExtensionContext, card: Card, partnerExtID: number | null) : Promise\r\n {\r\n let result = true;\r\n\r\n let fcprv = card.sections.get('FdCustomParticipants_RolesVirtual');\r\n let fcpu = card.sections.get('FdCustomParticipants_Users');\r\n let fcprs = card.sections.get('FdCustomParticipantsVirtual');\r\n let arContractsUser = card.sections.get('ArContractsUser');\r\n if (!fcprv || !fcpu || !fcprs || !arContractsUser)\r\n {\r\n return result;\r\n }\r\n\r\n let accpt = CdUIHelper.GetUIControlFromModel(context.model, \"ArContractCustomParticipantsTable\");\r\n let fdCustomParticipantsTable = CdUIHelper.GetUIControlFromModel(context.model, \"FdCustomParticipantsTable\");\r\n if (!fdCustomParticipantsTable)\r\n {\r\n return result;\r\n }\r\n\r\n if (!fdCustomParticipantsTable.rows.some(x => x.state != CardRowState.Deleted))\r\n {\r\n context.validationResult.add(ValidationResultType.Error, \"В КСД не вычислялись согласующие для процесса согласования, нажмите кнопку \\\"Пересчитать\\\" в блоке \\\"Настраиваемые участники\\\" или пересохраните КСД. Если ошибка осталась, обратитесь на 0911@pik.ru.\");\r\n return false;\r\n }\r\n\r\n partnerExtID = partnerExtID ?? arContractsUser.fields.tryGet(\"CurrentApprovingPartnerExternalID\");\r\n let filteredRows = fcprs.rows.filter(_ => _.state != CardRowState.Deleted && (partnerExtID == null || _.tryGet(\"PartnerExternalID\") == partnerExtID)); \r\n\r\n if (fdCustomParticipantsTable) \r\n { \r\n for (let row of fdCustomParticipantsTable?.rows)\r\n {\r\n row!.style = { \"backgroundColor\": \"#00000000\" };\r\n }\r\n }\r\n\r\n if (accpt)\r\n {\r\n for (let row of accpt?.rows)\r\n {\r\n row!.style = { \"backgroundColor\": \"#00000000\" }\r\n }\r\n }\r\n\r\n let requiredRoles: string[] = [];\r\n let projectRoles: string[] = [];\r\n\r\n for (let satelliteRow of filteredRows)\r\n {\r\n let parentRowId = satelliteRow.get(\"RowID\");\r\n if (fcpu!.rows.filter(_ => _.state != CardRowState.Deleted && _.get(\"ParentRowID\") == parentRowId).length == 0)\r\n {\r\n result = false;\r\n \r\n let fcptColorRow = fdCustomParticipantsTable!.rows.find(controlRow => controlRow.state != CardRowState.Deleted && controlRow.rowId == parentRowId);\r\n if (fcptColorRow != null) \r\n { \r\n fcptColorRow!.style = { \"backgroundColor\": \"#ff00005d\" };\r\n }\r\n \r\n let accptColorRow = accpt?.rows.find(controlRow => controlRow.state != CardRowState.Deleted && controlRow.rowId == parentRowId);\r\n if (accptColorRow != null) \r\n {\r\n accptColorRow.style = { \"backgroundColor\": \"#ff00005d\" };\r\n }\r\n\r\n let roleName = fcprv!.rows.find(_ => _.parentRowId == satelliteRow.rowId)!.get(\"RoleName\");\r\n\r\n var isRequired = satelliteRow.tryGet(\"IsRequired\") ?? false;\r\n\r\n if (isRequired)\r\n {\r\n requiredRoles.push(roleName);\r\n }\r\n else\r\n {\r\n projectRoles.push(roleName);\r\n } \r\n } \r\n } \r\n\r\n if (requiredRoles.length > 0)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, \"Для запуска процесса согласования необходимо указать сотрудника для следующих ролей:\" + \"\\r\\n\" + requiredRoles.join(\"\\r\\n\"));\r\n }\r\n\r\n if (projectRoles.length > 0)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, \"Не найден сотрудник из паспорта проекта для ролей:\" + \"\\r\\n\" + projectRoles.join(\"\\r\\n\") + \"\\r\\n\" + \"Обратитесь к Администратору проекта.\");\r\n }\r\n\r\n return !(requiredRoles.length > 0 || projectRoles.length > 0);\r\n }\r\n\r\n public static IsFieldRequiredAdditionalChecks(card: Card): boolean\r\n { \r\n let acu = card.sections.get('ArContractsUser');\r\n let adc = card.sections.get('ArDocsConstructor');\r\n if (!acu || !adc) {\r\n return true;\r\n }\r\n\r\n if (acu.fields.get('GuidCRM')\r\n || acu.fields.get('ExtID')\r\n || adc.fields.get('CourtCasePaymentDocGuid1C')){\r\n return false;\r\n }\r\n\r\n let aes = card.sections.get('ArExternalSystem');\r\n if (!aes) {\r\n return true;\r\n }\r\n\r\n if (aes.fields.get('ExcelID') > '') {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n /** Проверка договора на историчность. */\r\n public static HasGuidCrm(card: Card) : boolean\r\n {\r\n const section = card.sections.tryGet('ArContractsUser');\r\n if (!section)\r\n {\r\n return false;\r\n }\r\n \r\n let extID = section!.fields.tryGetField('GuidCRM');\r\n \r\n if (extID != null && extID.$value.trim() !== \"\")\r\n {\r\n return true;\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n /// \r\n /// Проверка договора на ExtID\r\n /// \r\n public static HasExtID(card: Card) : boolean\r\n {\r\n const section = card.sections.tryGet('ArContractsUser');\r\n if (!section)\r\n {\r\n return false;\r\n }\r\n \r\n let extID = section!.fields.tryGetField('ExtID');\r\n \r\n return extID != null;\r\n }\r\n\r\n /// \r\n /// Проверка договора на CourtCasePaymentDocGuid1C\r\n /// \r\n public static IsCourtCase(card: Card) : boolean\r\n {\r\n const section = card.sections.tryGet('ArDocsConstructor');\r\n if (!section)\r\n {\r\n return false;\r\n }\r\n \r\n let courtCaseGuid = section!.fields.tryGetField('CourtCasePaymentDocGuid1C');\r\n \r\n return courtCaseGuid != null;\r\n }\r\n\r\n /** Та же самая логика для клиента что раньше по историческим документам. */\r\n public static IsLocked(card: Card): boolean\r\n {\r\n return (Boolean)\r\n // Документы из СРМ на клиенте нужно блокировать аналогично историческим\r\n (PkContractUIHelper.HasGuidCrm(card)\r\n || PkContractUIHelper.IsContractHistorical(card)) ;\r\n }\r\n\r\n /** Подкраска стикерных статей. */\r\n private static SetColorForRows(context: ICardUIExtensionContext, controlName: string, containsField: string) {\r\n const tableControl = CdUIHelper.GetUIControl(context, controlName);\r\n if (tableControl === null || tableControl === undefined){\r\n return;\r\n }\r\n\r\n tableControl.rows.forEach(e => {\r\n if (e.row.getField(containsField)?.$value != null) {\r\n let style = { \"background\": \"#f3ff3f52\" } as React.CSSProperties;\r\n e.style = style;\r\n }\r\n });\r\n }\r\n \r\n /** Подкраска строк на вкладке \"Задачи\". */\r\n public static SetColorForTaskHistoryVirtualRows(context: ICardUIExtensionContext) {\r\n const arArticleStickersVirtualTableControl = CdUIHelper.GetUIControl(context, 'PkTaskHistoryForContractsVirtual');\r\n if (arArticleStickersVirtualTableControl === null || arArticleStickersVirtualTableControl === undefined){\r\n return;\r\n }\r\n\r\n for (let row of arArticleStickersVirtualTableControl.rows)\r\n {\r\n let planned = row.row.getField(\"Planned\")?.$value as Date | null != null ? new Date(row.row.getField(\"Planned\")?.$value) : null;\r\n let completed = row.row.getField(\"Completed\")?.$value as Date | null != null ? new Date(row.row.getField(\"Completed\")?.$value) : new Date();\r\n if (planned && completed > planned)\r\n {\r\n let style = { \"background\": \"#ff7d7d\" } as React.CSSProperties;\r\n row.style = style;\r\n }\r\n }\r\n }\r\n\r\n /** Сформировать SubjectName */\r\n public static async GetContractSubject(card: Card): Promise {\r\n const acu = card.sections.tryGet(\"ArContractsUser\");\r\n const acp = card.sections.tryGet(\"ArContractPartners\");\r\n let subjectName = \"\";\r\n const kind = acu?.fields.get(\"ContractKindDocumentKind\");\r\n const kindID = acu?.fields.get(\"ContractKindID\");\r\n const docNumber = acu?.fields.get(\"DocNumber\");\r\n const date = new Date(acu?.fields.get(\"DocDate\"));\r\n const subject = acu?.fields.get(\"Subject\") ?? \"\";\r\n const partners = acp?.rows.filter(x => x.get(\"RoleName\") !== \"Внешний согласующий\").map(x => x.get(\"PartnerName\"));\r\n subjectName = `${kind} №${docNumber} от ${date?.toLocaleDateString(\"ru-RU\")}`;\r\n if (subject != null && subject.trim() != \"\")\r\n {\r\n subjectName += ` ${subject}`;\r\n }\r\n if (Guid.equals(kindID, TessaArContractKinds.AdditionalAgreementKindTessaID)\r\n || Guid.equals(kindID, TessaArContractKinds.AssignmentKindTessaID)\r\n || Guid.equals(kindID, TessaArContractKinds.CancellationAgreementKindTessaID)) {\r\n const parentCard = acu?.fields.get(\"ParentCardID\");\r\n if (parentCard != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetContractSubjectRequest;\r\n request.info[\"CardID\"] = createTypedField(parentCard, DotNetType.Guid);\r\n let response = await CardService.instance.request(request);\r\n if (response.validationResult.isSuccessful) {\r\n const parentName = response.info[\"Result\"];\r\n subjectName += ` ${parentName.$value}`;\r\n }\r\n }\r\n }\r\n subjectName += `. ${partners?.join(\" с \")}`;\r\n \r\n return subjectName;\r\n }\r\n\r\n /** Проверка факта создания КСД на основе ЭД. */\r\n public static CheckCreatedOnBaseArEDocument(card: Card) {\r\n\r\n // Факт создания КСД на основе ЭД определяется по наличию ссылки на ЭД в списке связанных КСД (секция \"PkReferencesVirtual\")\r\n let sectionTable = card.sections.get('PkReferencesVirtual');\r\n if (sectionTable) {\r\n let res = sectionTable!.rows.find(r => r.state != CardRowState.Deleted && r.has('CardTypeID') && r.tryGet('CardTypeID') === PkCardTypes.ArEDocumentTypeID);\r\n console.log(res);\r\n return (res != null);\r\n }\r\n\r\n // Если секция не проинициализирована, то спрашиваем у сервера\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractCheckCreatedOnBaseArEDocumentRequest;\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n\r\n CardService.instance.request(request).then(response => {\r\n if (!response.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n let res = response.info.BasedOnArEDocument.$value as boolean;\r\n if (!res) {\r\n return false;\r\n }\r\n return true;\r\n });;\r\n\r\n\r\n }\r\n\r\n // \r\n /// Проверяет, присутствует ли указанная категория контрактов в разделе \"ArContractPartners\" данной карточки.\r\n /// \r\n /// Карточка, содержащая секции и строки для поиска.\r\n /// GUID категории контракта для поиска.\r\n /// \r\n static IsContractCategoryPresent(card: Card, idContractCategory: string) {\r\n\r\n let acpSection = card.sections.tryGet(\"ArContractPartners\");\r\n\r\n if (!acpSection) {\r\n return false;\r\n }\r\n\r\n // let contractCategoryID: string | null = null;\r\n // for (let row of acpSection.rows) {\r\n // contractCategoryID = row.get(\"ContractCategoryID\") as string | null;\r\n // if (Guid.equals(contractCategoryID, idContractCategory)) {\r\n // return true;\r\n // }\r\n // }\r\n //\r\n // return false;\r\n\r\n return acpSection.rows\r\n .map(row => row.get(\"ContractCategoryID\"))\r\n .some(contractCategoryID => Guid.equals(contractCategoryID, idContractCategory));\r\n }\r\n}\r\n","export enum CdFdStages {\r\n\r\n NotStarted = 0,\r\n\r\n Active = 1,\r\n\r\n Completed = 2,\r\n\r\n Started = 3\r\n}\r\n","/** Виды отправки корреспонденции. */\r\nexport enum PkCorrespondenceSendingTypes {\r\n /** Почта России. */\r\n RussianPost = 1,\r\n /** Курьеры. */\r\n Couriers = 2,\r\n /** Экспресс доставка. */\r\n ExpressDelivery = 3,\r\n}\r\n\r\n/** Наименования видов отправки корреспонденции. */\r\nexport const PkCorrespondenceSendingTypesDescriptions = new Map([\r\n [PkCorrespondenceSendingTypes.RussianPost, \"Почта России\"],\r\n [PkCorrespondenceSendingTypes.Couriers, \"Курьеры\"],\r\n [PkCorrespondenceSendingTypes.ExpressDelivery, \"Экспресс доставка\"]\r\n]);","function ArContractFdState(id, caption) {\r\n this.id = id;\r\n this.caption = caption;\r\n}\r\n \r\nexport class ArContractFdStates {\r\n\r\n /// \r\n /// Проект\r\n /// \r\n static ProjectStateID = new ArContractFdState(\"ce364240-8b82-46da-82f3-a61483febbe2\", \"Проект\");\r\n}","export class ArCostItem { \r\n public ID: guid;\r\n public MdsID: number;\r\n public Name: string;\r\n\r\n constructor(id: guid, mdsID: number, name: string) {\r\n this.ID = id;\r\n this.MdsID = mdsID;\r\n this.Name = name;\r\n }\r\n}\r\n\r\n/** Статьи затрат. */\r\nexport class ArCostItems {\r\n /** Техническая статья. */\r\n static Technical = new ArCostItem (\"b2d01595-1b58-45c3-9956-6f24f261e516\", 64, \"Техническая статья\");\r\n}","import { TileExtension, ITileGlobalExtensionContext, Tile, TileGroups, TileEvaluationEventArgs , ITileLocalExtensionContext, ITile, disableWithCollapsing, ITilePanel} from 'tessa/ui/tiles';\r\nimport { UIContext, LoadingOverlay, showError, createCardModel, showNotEmpty, UIButton, showMessage, showConfirmWithCancel, showConfirm } from 'tessa/ui';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { createCard, showFormDialog } from 'tessa/ui/uiHost';\r\nimport { KrToken } from 'tessa/workflow';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CardRowState, CardRow, CardSection, CardStoreMode, Card, CardFileState } from 'tessa/cards';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { CardNewRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { TessaArContractKinds } from '../Helpers/PkPrimaryDocsHelper';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { PkContractUIHelper } from '../Helpers/PkContractUIHelper';\r\nimport userSession from 'common/utility/userSession';\r\nimport { CardSavingRequest, ICardModel, IControlViewModel, CardSavingMode } from 'tessa/ui/cards';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ArContractTypes } from '../Helpers/PkEnums';\r\nimport { CdTaskTypes } from 'src/cdScripts/Helpers/CdTaskTypes';\r\nimport { CdFdStages } from 'src/cdScripts/Helpers/CdFdStages';\r\nimport { ArContractFdStates } from 'src/cdScripts/Helpers/ArContractFdStates';\r\nimport { PkFdProcessHelper } from '../Helpers/PkFdProcessHelper';\r\nimport { ArCostItems } from '../Helpers/ArCostItems';\r\nimport { PkLinkHelper } from '../Helpers/PkLinkHelper';\r\nimport { ArTypeProcedure } from '../Helpers/ArTypeProcedure';\r\nimport { PkTaskTypes } from '../Helpers/PkTaskTypes';\r\nimport { PkCommonHelper } from '../Helpers/PkCommonHelper';\r\nimport {ChFileCategories} from \"../Helpers/ChFileCategories\";\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\n\r\nexport class ArContractTileExtension extends TileExtension {\r\n\r\n // состояния в которых недоступна кнопка передать в УС\r\n static contractTransferToUsUnavailableStates = [\r\n CdDocStates.Active.id,\r\n CdDocStates.Recalled.id,\r\n CdDocStates.Rejected.id,\r\n CdDocStates.Terminated.id,\r\n CdDocStates.Revocated.id,\r\n CdDocStates.Fulfilled.id,\r\n CdDocStates.Executed.id\r\n ]\r\n\r\n /**\r\n * Глобально добавляем создание карточек договорных документов в правое меню.\r\n */\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.rightPanel;\r\n const contextSource = panel.contextSource;\r\n const createCard = panel.tryGetTile('CreateCard');\r\n if (!createCard) return;\r\n let documents = createCard.tryGetTile('Documents');\r\n if (!documents) return;\r\n let fdtile = documents.tryGetTile('ArContract');\r\n if(fdtile!=null)\r\n {\r\n fdtile.isEnabled = false;\r\n fdtile.isCollapsed = true;\r\n }\r\n documents.tiles.push(new Tile({\r\n name: 'ArAllContractsGlobalTile',\r\n caption: 'Договорной документ',\r\n icon: '',\r\n contextSource: contextSource,\r\n group: TileGroups.Cards,\r\n order: 1,\r\n tiles: [\r\n new Tile({\r\n name: 'ArContractGlobalTile',\r\n caption: 'Договор',\r\n icon: '',\r\n contextSource,\r\n info: {\r\n basedOnContractKindID: createTypedField(0, DotNetType.Int32)\r\n },\r\n command: async (tile) => { this.GlobalCreateCardTileAction(tile) },\r\n group: TileGroups.Cards,\r\n order: 1\r\n }),\r\n new Tile({\r\n name: 'ArAccountWithoutContractGlobalTile',\r\n caption: 'Счет без договора',\r\n icon: '',\r\n contextSource,\r\n info: {\r\n basedOnContractKindID: createTypedField(5, DotNetType.Int32)\r\n },\r\n command: async (tile) => { this.GlobalCreateCardTileAction(tile) },\r\n group: TileGroups.Cards,\r\n order: 2\r\n })\r\n ]\r\n }));\r\n }\r\n\r\n /**\r\n * Создание документа на основании в карточке Договор (ArContract).\r\n */\r\n public initializingLocal(context: ITileLocalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n const contextSource = panel.contextSource;\r\n const uiContext = panel?.context;\r\n const editor = uiContext?.cardEditor;\r\n // проверяем, что открыта карточка\r\n if (editor == null) {\r\n return;\r\n }\r\n\r\n // проверяем тип открытой карточки ArContract\r\n if (editor.cardModel?.cardType.id !== PkCardTypes.ArContractTypeID) {\r\n return;\r\n } \r\n\r\n let mainContractTileBasedOn = new Tile({\r\n name: 'PkContractTileCreateBasedOn',\r\n caption: 'Создать на основании',\r\n icon: 'ta icon-thin-001',\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n evaluating: this.MainTileVisibleCreateBasedDocument\r\n });\r\n\r\n let additionalAgreementTileBasedOn = new Tile({\r\n name: 'PkAdditionalAgreementTileCreateBasedOn',\r\n caption: 'ДС',\r\n icon: 'ta icon-thin-063',\r\n contextSource,\r\n info: {\r\n basedOnContractKindID: createTypedField(1, DotNetType.Int32)\r\n },\r\n command: async (tile) => { this.CreateCardTileAction(tile) },\r\n group: TileGroups.Cards,\r\n order: 1,\r\n evaluating: this.ContractTileVisibleCreateAgreementBasedDocument\r\n });\r\n\r\n let concessionContractTileBasedOn = new Tile({\r\n name: 'PkConcessionContractTileCreateBasedOn',\r\n caption: 'Уступка',\r\n icon: 'ta icon-thin-063',\r\n contextSource,\r\n info: {\r\n basedOnContractKindID: createTypedField(4, DotNetType.Int32)\r\n },\r\n command: async (tile) => { this.CreateCardTileAction(tile) },\r\n group: TileGroups.Cards,\r\n order: 2,\r\n evaluating: this.ContractTileVisibleCreateBasedDocument\r\n });\r\n\r\n let agreementTerminationTileBasedOn = new Tile({\r\n name: 'PkAgreementTerminationContractTileCreateBasedOn',\r\n caption: 'Соглашение о расторжении',\r\n icon: 'ta icon-thin-063',\r\n contextSource,\r\n info: {\r\n basedOnContractKindID: createTypedField(2, DotNetType.Int32)\r\n },\r\n command: async (tile) => { this.CreateCardTileAction(tile) },\r\n group: TileGroups.Cards,\r\n order: 3,\r\n evaluating: this.CancellationAgreementTileVisible\r\n });\r\n\r\n let makeItValid = new Tile({\r\n name: 'PkMakeItValid',\r\n caption: 'Сделать действующим',\r\n icon: 'ta icon-thin-001',\r\n contextSource,\r\n command: async () => { this.MakeItValidTileAction() },\r\n group: TileGroups.Cards,\r\n order: 11,\r\n evaluating: this.ContractTileVisibleMakeItValid\r\n });\r\n\r\n let transferToUS_Tile = new Tile({\r\n name: 'PkTransferToUs',\r\n caption: 'Передать в УС',\r\n icon: 'ta icon-thin-012',\r\n contextSource,\r\n command: async () => { this.TransferToUS_TileAction() },\r\n group: TileGroups.Cards,\r\n order: 11,\r\n evaluating: this.TransferToUS_TileVisibility\r\n });\r\n\r\n let voidContractTile = new Tile({\r\n name: 'PkVoidContractTile',\r\n caption: 'Аннулировать',\r\n icon: 'ta icon-thin-065',\r\n contextSource,\r\n command: async () => { this.VoidContractTileAction() },\r\n group: TileGroups.Cards,\r\n order: 11,\r\n evaluating: this.VoidContractTileVisibility\r\n });\r\n let rejectProcess = new Tile({\r\n name: \"RejectProcess\",\r\n caption: \"Перевести в состояние Отклонен\",\r\n icon: \"ta icon-thin-253\",\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 99,\r\n command: this.RejectProcessTileAction,\r\n evaluating: this.RejectProcessTileVisibility\r\n });\r\n\r\n let сancelApprovalProcess = new Tile({\r\n name: \"PkCancelApprovalProcess\",\r\n caption: \"Прервать процесс согласования\",\r\n icon: \"ta icon-thin-227\",\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 14,\r\n command: this.CancelApprovalProcessTileAction,\r\n evaluating: this.CancelApprovalProcessTileVisibility\r\n });\r\n\r\n let transferToProjectTile = new Tile({\r\n name: \"PkTransferToProject\",\r\n caption: \"Перевести в проект\",\r\n icon: \"ta icon-thin-258\",\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 14,\r\n command: this.TransferToProjectTileAction,\r\n evaluating: this.TransferToProjectTileVisibility\r\n });\r\n\t\t\r\n let mainProcessGroupTile = new Tile({\r\n name: \"PkProcessGroupTile\",\r\n caption: \"Процессы синхронизации\",\r\n icon: \"ta icon-thin-413\",\r\n contextSource,\r\n group: TileGroups.Bottom,\r\n order: 0,\r\n evaluating: this.mainProcessGroupTileVisibility\r\n });\r\n\r\n let sendStatusToKaTile = new Tile({\r\n name: \"ArContractGlobalTile\",\r\n caption: \"Отправка статуса в КА\",\r\n icon: \"ta icon-thin-012\",\r\n contextSource,\r\n command: this.SendStatusToKa,\r\n group: TileGroups.Cards,\r\n order: 0\r\n });\r\n\r\n mainProcessGroupTile.tiles.push(sendStatusToKaTile);\r\n\r\n let changeCategoryTile = new Tile({\r\n name: \"PkEditCategoryTile\",\r\n caption: \"Корректировка категории\",\r\n icon: \"ta icon-thin-002\",\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 100,\r\n command: this.EditCategoryTileAction,\r\n evaluating: this.EditCategoryAndTypeTileVisibility\r\n });\r\n\r\n let changeContractTypeTile = new Tile({\r\n name: \"PkEditTypeTile\",\r\n caption: \"Замена типа документа\",\r\n icon: \"ta icon-thin-002\",\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 101,\r\n command: this.EditTypeTileAction,\r\n evaluating: this.EditCategoryAndTypeTileVisibility\r\n });\r\n\r\n let cardOthers = panel.tryGetTile('CardOthers');\r\n if (cardOthers != null && contextSource.context.cardEditor?.cardModel?.card.typeId == CdCardTypes.ArContractTypeID){\r\n let copyCardLink = panel.tryGetTile('CopyCardLink');\r\n if (copyCardLink != null ) {\r\n copyCardLink.command = this.CopyCardLinkTileAction;\r\n \r\n let copyDesktopLinkTile = new Tile({\r\n name: \"PkCopyDesktopLinkTile\",\r\n caption: \"Копировать ссылку на толстый клиент\",\r\n icon: \"ta icon-thin-401\",\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 21,\r\n command: this.CopyCardLinkDesktopTileAction,\r\n evaluating: this.CopyCardLinkTileVisibility\r\n });\r\n cardOthers.tiles.push(copyDesktopLinkTile);\r\n }\r\n }\r\n\r\n let copyCardTile = new Tile({\r\n name: 'CopyCard',\r\n caption: 'Создать копию',\r\n icon: 'ta icon-thin-001',\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 102,\r\n command: this.CopyCard,\r\n evaluating: this.CopyCardTileVisibility,\r\n });\r\n\r\n\r\n let clearDiadocInfoTile = new Tile({\r\n name: 'clearDiadocInfoTile',\r\n caption: 'Удаление информации о подписании в Диадок',\r\n icon: 'ta icon-thin-065',\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 103,\r\n command: this.ClearDiadocInfo,\r\n evaluating: this.ClearDiadocInfoVisibility,\r\n });\r\n\r\n this.AddChecksForSendToApproveTileAsync(panel.tiles);\r\n\r\n mainContractTileBasedOn.tiles.push(additionalAgreementTileBasedOn);\r\n mainContractTileBasedOn.tiles.push(concessionContractTileBasedOn);\r\n mainContractTileBasedOn.tiles.push(agreementTerminationTileBasedOn);\r\n panel.tiles.push(mainContractTileBasedOn);\r\n panel.tiles.push(makeItValid);\r\n panel.tiles.push(transferToUS_Tile);\r\n panel.tiles.push(voidContractTile);\r\n panel.tiles.push(rejectProcess);\r\n panel.tiles.push(сancelApprovalProcess);\r\n\t\tpanel.tiles.push(transferToProjectTile); \r\n panel.tiles.push(mainProcessGroupTile);\r\n panel.tiles.push(copyCardTile);\r\n panel.tiles.push(clearDiadocInfoTile);\r\n const systemTileRoot = panel.tryGetTile('CardTools');\r\n systemTileRoot!.tiles.push(changeCategoryTile);\r\n systemTileRoot!.tiles.push(changeContractTypeTile);\r\n\r\n // #TES-5934\r\n if (editor != null\r\n && editor.cardModel != null\r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID)\r\n {\r\n const startProcessTile = panel.tryGetTile('4781bf2f-edb0-4c43-850d-601243af5270');\r\n if (startProcessTile != null) \r\n {\r\n // Переместить Запуск согласования на 3 позицию\r\n startProcessTile.order=0;\r\n startProcessTile.evaluating.add(e => this.StartContractApprovalProcessTileVisibility(e));\r\n }\r\n\r\n this.MoveTilesToGroup(\r\n panel, \r\n mainProcessGroupTile,\r\n PkFdProcessHelper.ResetCalculationProcess,\r\n PkFdProcessHelper.SendToMdsProcessID,\r\n PkFdProcessHelper.UpdateContractFromESUDProcessID,\r\n PkFdProcessHelper.UpdateCalculationFromKCProcessID,\r\n PkFdProcessHelper.FillCalculationFromAUDProcessID);\r\n \r\n let showDeleteCardTile = editor.cardModel.card.info[\"showDeleteCardTile\"]?.$value == true;\r\n let tileDeleteCard = panel.tryGetTile('DeleteCard');\r\n if (tileDeleteCard != null) {\r\n disableWithCollapsing(tileDeleteCard, !showDeleteCardTile, !showDeleteCardTile);\r\n }\r\n }\r\n \r\n // Скрыть тайл Настройка уведомлений по карточке\r\n const notificationSubscriptionsTile = panel.tryGetTile('NotificationSubscriptions');\r\n if (notificationSubscriptionsTile != null) disableWithCollapsing(notificationSubscriptionsTile);\r\n\r\n this.HideTileCreateCardCopyInAssignment(context);\r\n this.HideTilesCreateCardTemplate(context);\r\n }\r\n\r\n private async MoveTilesToGroup(panel: ITilePanel, groupTile: Tile,... tileIDs: string[]) {\r\n tileIDs.forEach(tileID => {\r\n const tile = panel.tryGetTile(tileID);\r\n if(tile != null) {\r\n groupTile.tiles.push(tile);\r\n panel.tiles.forEach( (item, index) => {\r\n if(item.id === tile.id) {\r\n panel.tiles.splice(index,1);\r\n }\r\n });\r\n }\r\n }); \r\n }\r\n\r\n private async AddChecksForSendToApproveTileAsync(tiles: ITile[])\r\n {\r\n // Находим кнопку\r\n let parentTileApprove = tiles.find(t => t.name == \"4781bf2f-edb0-4c43-850d-601243af5270\");\r\n if (parentTileApprove == null)\r\n {\r\n return;\r\n }\r\n\r\n let tileApprove = parentTileApprove.tiles.find(t => t.name == \"4781bf2f-edb0-4c43-850d-601243af5270_StartProcess\");\r\n if (tileApprove == null)\r\n {\r\n return;\r\n }\r\n\r\n tileApprove.command = async () =>\r\n {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model = editor?.cardModel;\r\n let card = model?.card;\r\n if (model == null || card == null)\r\n {\r\n return;\r\n }\r\n\r\n if (!this.CheckStickers(model))\r\n {\r\n return;\r\n }\r\n\r\n if(!await this.IsCheckedForSendToApproveContractAsync(model!))\r\n {\r\n return;\r\n }\r\n \r\n if(!await this.CheckPdcFromKcFlagAsync(model))\r\n {\r\n return;\r\n }\r\n\r\n if (!this.CheckFRCBlockCompleteAsync(model))\r\n {\r\n return;\r\n }\r\n\r\n if(card.info.isCanStartApprovalAdditionalAgreement?.$value)\r\n { \r\n showMessage(`В семействе есть Уступка в НЕ в конечном состоянии Действующий, Исполнен.`);\r\n return; \r\n }\r\n\r\n if(!await this.IsTenderControlFilledInAssignmentAsync(model))\r\n {\r\n return;\r\n }\r\n\r\n if(!this.HasParticipantsStages(card)){\r\n showError(`Внимание! Не найдена актуальная категория договора.`);\r\n return;\r\n }\r\n\r\n if(!await this.CheckMatrixStages(card)){\r\n showError(`В атрибуте \\\"Категория договора\\\" указано значение, которого больше нет в настроечной матрице по организации.`);\r\n return;\r\n }\r\n\r\n if(!this.CustomParticipantsIsEmpty(model)){\r\n showError(`В КСД не заполнены согласующие для процесса согласования, нажмите кнопку \\\"Пересчитать\\\" в блоке \\\"Настраиваемые участники\\\" или пересохраните КСД. Если ошибка осталась, обратитесь на 0911@pik.ru.`);\r\n return;\r\n }\r\n\r\n if (tileApprove) { \r\n let isChanged = await model.hasChanges(false);\r\n if(isChanged){\r\n await editor?.saveCard(uiContext,{ 'fd_create_start_process_task': createTypedField(\"4781bf2f-edb0-4c43-850d-601243af5270\", DotNetType.Guid) }, new CardSavingRequest(CardSavingMode.KeepPreviousCard)); \r\n }\r\n \r\n editor?.openCard({\r\n cardId: model.card.id,\r\n cardTypeId: model.card.typeId,\r\n cardTypeName: model.card.typeName,\r\n info: { 'fd_create_start_process_task': createTypedField(\"4781bf2f-edb0-4c43-850d-601243af5270\", DotNetType.Guid) }\r\n });\r\n }\r\n }; \r\n } \r\n\r\n private CheckStickers(model: ICardModel): boolean\r\n {\r\n let card = model.card;\r\n\r\n // не проводим поверхностную проверку наличия стикеров при отсутствии НЕтехнических статей у сторон с ИДП категорией договора\r\n if (this.IsNoIdpArticlesByIdpCategoryPartners(card))\r\n {\r\n return true;\r\n }\r\n\r\n if (!card.sections.tryGet(\"ArContractArticleStickersInitial\")\r\n || !card.sections.tryGet(\"ArContractArticleStickers\")\r\n || card.sections.tryGet(\"ArContractArticleStickersInitial\")?.rows.length == 0\r\n || card.sections.tryGet(\"ArContractArticleStickers\")?.rows.length == 0)\r\n {\r\n showError(\"Стикерные статьи не заполнены.\");\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Отсутствуют ИДП статьи по стороне с ИДП категорией. Техническая статья - не считается ИДП */\r\n private IsNoIdpArticlesByIdpCategoryPartners(card: Card): boolean\r\n {\r\n let articlesRows = card.sections.tryGet(\"ArContractArticleIdp\")?.rows;\r\n if (!articlesRows) {\r\n return true;\r\n }\r\n\r\n let partnersRows = card.sections.tryGet(\"ArContractPartners\")?.rows;\r\n if (!partnersRows) {\r\n return true;\r\n }\r\n \r\n return partnersRows.every(partnerRow => { \r\n let contractCategoryIsIdp = partnerRow.tryGet(\"ContractCategoryIsOIDP\", false);\r\n let partnerExternalID = partnerRow.get(\"PartnerExternalID\");\r\n if (contractCategoryIsIdp) {\r\n // пробуем найти НЕтехническую статью по стороне.\r\n return !articlesRows!.some(articleRow => articleRow.get(\"PartnerExternalID\") === partnerExternalID && !Guid.equals(articleRow.get(\"CostItemID\"), ArCostItems.Technical.ID));\r\n }\r\n else {\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n private CustomParticipantsIsEmpty(model: ICardModel): boolean\r\n {\r\n let result: boolean = true;\r\n let customParticipants = model.card.sections.get('FdCustomParticipantsVirtual');\r\n let customParticipantsUsers = model.card.sections.get('FdCustomParticipants_Users');\r\n\r\n if (!customParticipants || !customParticipantsUsers) \r\n {\r\n return result;\r\n }\r\n\r\n let contractCustomParticipantsTable = CdUIHelper.GetUIControlFromModel(model, \"ArContractCustomParticipantsTable\")\r\n if (!contractCustomParticipantsTable)\r\n {\r\n return result;\r\n }\r\n\r\n let filteredCustomParticipantsRows = customParticipants.rows.filter(_ => _.state != CardRowState.Deleted);\r\n if(filteredCustomParticipantsRows != null)\r\n {\r\n for (let filteredCustomParticipantsRow of filteredCustomParticipantsRows)\r\n {\r\n let parentRowID = filteredCustomParticipantsRow.get(\"RowID\");\r\n if (customParticipantsUsers!.rows.filter(_ => _.state != CardRowState.Deleted && _.get(\"ParentRowID\") == parentRowID).length == 0)\r\n {\r\n var contractCustomParticipantsColorRow = contractCustomParticipantsTable.rows.find(controlRow =>\r\n controlRow.state != CardRowState.Deleted && controlRow.rowId == parentRowID);\r\n\r\n if (contractCustomParticipantsColorRow != null)\r\n {\r\n contractCustomParticipantsColorRow!.style = { \"backgroundColor\": \"#ff00005d\" };\r\n }\r\n\r\n result = false;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private CheckFRCBlockCompleteAsync(cardModel: ICardModel){\r\n\r\n let errorList: string[] = [];\r\n let financialResponsibilityCenterBlock = cardModel.blocks.get('FinancialResponsibilityCenterBlock');\r\n\r\n let arContractsUserSection = cardModel.card.sections.get('ArContractsUser');\r\n let FRCForBFSection = cardModel.card.sections.get('ArContractMdsFinancialResponsibilityCenterForBF');\r\n let objectOtherSection = cardModel.card.sections.get('ArContractMdsObjectOther');\r\n\r\n if (!arContractsUserSection || !FRCForBFSection || !objectOtherSection || !financialResponsibilityCenterBlock)\r\n {\r\n return;\r\n }\r\n\r\n let FRCOwner = arContractsUserSection.fields.tryGet(\"PkMdmFinancialResponsibilityCenterOwnerID\")\r\n\r\n if (FRCOwner == null && financialResponsibilityCenterBlock.blockVisibility == Visibility.Visible)\r\n {\r\n errorList.push(\"Заполните поле \\\"ЦФО (владелец договора)\\\"\");\r\n }\r\n\r\n if (FRCForBFSection.rows.length === 0 && financialResponsibilityCenterBlock.blockVisibility == Visibility.Visible)\r\n {\r\n errorList.push(\"Заполните поле \\\"ЦФО по БФ\\\"\");\r\n }\r\n\r\n if (objectOtherSection.rows.length === 0 && financialResponsibilityCenterBlock.blockVisibility == Visibility.Visible)\r\n {\r\n errorList.push(\"Заполните поле \\\"Прочие ОИ\\\"\");\r\n }\r\n\r\n if (errorList.length > 0)\r\n {\r\n showError(errorList.join(\"\\n\"));\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private async IsCheckedForSendToApproveContractAsync(model: ICardModel) : Promise\r\n {\r\n let result = true;\r\n let card = model.card;\r\n\r\n // предупреждение о несохраненных изменениях\r\n if (model.hasChanges())\r\n {\r\n let dialogResult = await showConfirm(\"В карточке есть не сохраненные изменения.\\nНажмите \\\"ДА\\\" для запуска следующего этапа без сохранения изменений.\\nНажмите \\\"НЕТ\\\" для отмены действия и далее сохраните карточку.\\nСохранить карточку можно через кнопку в левом тайле или по комбинации клавиш Ctrl+S.\");\r\n\r\n if (!dialogResult)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (Guid.equals(card.sections.tryGet(\"ArContractsUser\")?.fields.tryGet(\"ContractKindID\"), TessaArContractKinds.AccountWithoutContractKindTessaID)\r\n && !card.sections.tryGet(\"ArContractPartners\")?.rows.some(row => (row.tryGet(\"PartnerAutomated\", false) && row.tryGet(\"RoleID\") == 0)))\r\n {\r\n await showError(\"В данном документе не найдена автоматизированная организация с ролью \\\"Покупатель\\\", запустить процесс невозможно.\");\r\n return false;\r\n }\r\n\r\n let arContractPartners = card.sections.tryGet(\"ArContractPartners\");\r\n\r\n if (result && arContractPartners != null\r\n && arContractPartners.rows.some(x => x.tryGet(\"ContractCategoryIsTechnical\", false) as boolean))\r\n {\r\n if (card.info?.IsCreatorsContractsTechnicalCategory?.$value ?? false)\r\n {\r\n this.MakeItValidTileAction();\r\n }\r\n else\r\n {\r\n showMessage(\"У Вас недостаточно прав для запуска согласования договора с технической категорией!\");\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private async CheckPdcFromKcFlagAsync(cardModel: ICardModel) : Promise\r\n {\r\n let section = cardModel.card.sections.get('ArContractsUser');\r\n \r\n if (!section)\r\n {\r\n return false;\r\n }\r\n\r\n let isPdcFromKC = section.fields.get('IsPdcFromKC');\r\n\r\n if(!isPdcFromKC)\r\n {\r\n let reason : string | null = null;\r\n reason = section.fields.get('ReasonsWithoutPDCID') != null ? section.fields.get('ReasonsWithoutPDCID').toString() : null;\r\n\r\n if(!reason)\r\n {\r\n let control = CdUIHelper.GetUIControlFromModel(cardModel, \"ContractReasonsWithoutPDCIDCancelletionControl\");\r\n\r\n if(control)\r\n {\r\n control.isRequired = true;\r\n control.hasActiveValidation = true;\r\n\r\n control.validationFunc = (c) => {\r\n if (c.hasEmptyValue) {\r\n return \"Заполните поле \\\"Причины почему договор без ПДЦ из КЦ\\\"\";\r\n }\r\n \r\n return null;\r\n };\r\n\r\n await showError(\"Заполните поле \\\"Причины почему договор без ПДЦ из КЦ\\\"\");\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private async VoidContractTileVisibility(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let arConSection;\r\n let pkDocumentCommonInfo;\r\n let isAllow: boolean = false;\r\n\r\n if (editor == null || editor.cardModel == null || editor.cardModel.card == null\r\n || (arConSection = editor.cardModel.card.sections.tryGet(\"ArContractsUser\")) == null\r\n || (pkDocumentCommonInfo = editor.cardModel.card.sections.tryGet(\"PkDocumentCommonInfo\")) == null) {\r\n e.setIsEnabledWithCollapsing(e.currentTile, isAllow);\r\n\r\n return;\r\n }\r\n\r\n let stateId = pkDocumentCommonInfo.fields.get(\"StateID\");\r\n let contractKindDocumentKindID = arConSection.fields.tryGet(\"ContractKindID\");\r\n let isDraft = arConSection.fields.tryGet(\"IsDraft\");\r\n\r\n // Кнопка \"Аннулировать\" доступна в уступке в состояниях \"Действующая\"\r\n // или если уступка была выгружена в УС (isDraft = false).\r\n if (contractKindDocumentKindID === TessaArContractKinds.AssignmentKindTessaID) {\r\n isAllow = stateId === CdDocStates.Active || isDraft === false;\r\n e.setIsEnabledWithCollapsing(e.currentTile, isAllow);\r\n return;\r\n }\r\n\r\n if ((stateId != CdDocStates.Fulfilled.id && stateId != CdDocStates.Revocated.id) // для всех состояний кроме: “Исполнен”, “Аннулирован”\r\n && (Guid.equals(contractKindDocumentKindID, TessaArContractKinds.ContractKindTessaID) // Договор\r\n || Guid.equals(contractKindDocumentKindID, TessaArContractKinds.AdditionalAgreementKindTessaID) // Дополнительное соглашение\r\n || Guid.equals(contractKindDocumentKindID, TessaArContractKinds.CancellationAgreementKindTessaID) // Соглашение о расторжении\r\n || Guid.equals(contractKindDocumentKindID, TessaArContractKinds.AccountWithoutContractKindTessaID) // Счет без договора\r\n || Guid.equals(contractKindDocumentKindID, TessaArContractKinds.AssignmentKindTessaID) && editor.cardModel.card.info.isCanVoidAssignment?.$value) // Уступка\r\n && !PkContractUIHelper.IsLocked(editor.cardModel.card)\r\n && editor.cardModel.card.info.VoidContractRole?.$value) {\r\n isAllow = true;\r\n }\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, isAllow);\r\n }\r\n\r\n private ContractTileVisibleMakeItValid(e: TileEvaluationEventArgs)\r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && (editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.Project.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.OnAgreement.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.Rework.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.PreparationDocumentForSigning.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.CheckingCommentsBeforeSending.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.OnSigningInDiadocInCompany.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.OnSigningInDiadocWithPartner.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.CheckSigningInDiadoc.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.ModificationAfterSigningInDiadoc.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.Modification.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.OnSigningAtPartner.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.OnSigningInCompany.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.FixProblems.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.ControlReturnOriginal.id\r\n || editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.ConfirmTransferDocument.id)\r\n && !PkContractUIHelper.IsLocked(editor.cardModel.card)\r\n && (editor.cardModel.card.info.ContractMakeItValidRole?.$value\r\n || editor.cardModel.card.info.TechnicalSupportEmployeeRole?.$value)\r\n );\r\n }\r\n\r\n private async TransferToUS_TileVisibility(e: TileEvaluationEventArgs)\r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n let stateID : number | null = null;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && !PkContractUIHelper.IsLocked(editor.cardModel.card)\r\n && editor.cardModel.card.info.ContractSendToUSRole?.$value\r\n && editor.cardModel.card.sections.tryGet(\"ArContractsUser\")?.fields.get(\"IsDraft\") == true // показываем, если isDraft = 1\r\n && (stateID = editor!.cardModel!.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\")) != null\r\n && ArContractTileExtension.contractTransferToUsUnavailableStates.findIndex(x => x == stateID) < 0 // скрывам, если уже активный договор или \"завершенный\" \r\n );\r\n }\r\n\r\n private MainTileVisibleCreateBasedDocument(e: TileEvaluationEventArgs)\r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n if (editor == null) return;\r\n let FdSatelliteCommonInfoVirtual = editor.cardModel?.card?.sections.tryGet('FdSatelliteCommonInfoVirtual');\r\n let StateName = FdSatelliteCommonInfoVirtual?.fields?.get(\"StateName\");\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null \r\n && editor.cardModel.cardType.id === CdCardTypes.ArContractTypeID\r\n && (editor.cardModel.card.sections.tryGet('ArContractsUser') != null)\r\n && StateName!=null && StateName!='Проект'\r\n && (ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.ContractKindTessaID)\r\n || (ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.AdditionalAgreementKindTessaID)\r\n && ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', \"TypeDSUnderIDPID\", 1)))\r\n );\r\n }\r\n\r\n private ContractTileVisibleCreateBasedDocument(e: TileEvaluationEventArgs) \r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null \r\n && (editor.cardModel.card.sections.tryGet('ArContractsUser') != null)\r\n && (ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.ContractKindTessaID))\r\n && (editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") == CdDocStates.Active.id\r\n || editor.cardModel.card.sections.tryGet(\"ArContractsUser\")?.fields.tryGet(\"isDraft\") == false)\r\n && !ArContractTileExtension.CheckFieldValue(editor.cardModel, 'PkDocumentCommonInfo', 'StateID', CdDocStates.Terminated.id)\r\n && !ArContractTileExtension.CheckFieldValue(editor.cardModel, 'PkDocumentCommonInfo', 'StateID', CdDocStates.Revocated.id)\r\n && !ArContractTileExtension.CheckFieldValue(editor.cardModel, 'PkDocumentCommonInfo', 'StateID', CdDocStates.Rejected.id)\r\n && editor.cardModel.card.info.isCanCreateAssignment?.$value\r\n );\r\n }\r\n\r\n private CancellationAgreementTileVisible(e: TileEvaluationEventArgs) \r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null \r\n && (editor.cardModel.card.sections.tryGet('ArContractsUser') != null)\r\n && (ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.ContractKindTessaID)\r\n || ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.AdditionalAgreementKindTessaID)\r\n || ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.AssignmentKindTessaID))\r\n && editor.cardModel.card.sections.get(\"ArContractsUser\")?.fields.get(\"ParentCardID\") == null\r\n && (ArContractTileExtension.CheckFieldValue(editor.cardModel, 'PkDocumentCommonInfo', 'StateID', CdDocStates.Active.id)\r\n || ArContractTileExtension.CheckFieldValue(editor.cardModel, 'PkDocumentCommonInfo', 'StateID', CdDocStates.Fulfilled.id))\r\n );\r\n } \r\n\r\n private ContractTileVisibleCreateAgreementBasedDocument(e: TileEvaluationEventArgs) \r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null \r\n && (editor.cardModel.card.sections.tryGet('ArContractsUser') != null)\r\n && (ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.ContractKindTessaID)\r\n || ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.AdditionalAgreementKindTessaID))\r\n && !ArContractTileExtension.CheckFieldValue(editor.cardModel, 'PkDocumentCommonInfo', 'StateID', CdDocStates.Terminated.id)\r\n && !ArContractTileExtension.CheckFieldValue(editor.cardModel, 'PkDocumentCommonInfo', 'StateID', CdDocStates.Revocated.id)\r\n && !ArContractTileExtension.CheckFieldValue(editor.cardModel, 'PkDocumentCommonInfo', 'StateID', CdDocStates.Rejected.id)\r\n );\r\n }\r\n\r\n /** Сделать действующим. */\r\n private async MakeItValidTileAction()\r\n {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n const card: Card | undefined = editor?.cardModel?.card;\r\n if (uiContext == null || editor == null || card == null) {\r\n return;\r\n }\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractMakeItValid;\r\n request.info[\"cardId\"] = createTypedField(card.id, DotNetType.Guid);\r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) \r\n { \r\n await showNotEmpty(response.validationResult.build());\r\n } \r\n else \r\n {\r\n const info = response.info;\r\n if (info && info.ErrorParentState) \r\n {\r\n await showError(\"Родительский документ должен быть действующим или исполненным\");\r\n } \r\n else\r\n {\r\n let storeInfo = {'MakeTheContractValid': createTypedField(true, DotNetType.Boolean)};\r\n let storeResult = await editor.saveCard(uiContext, storeInfo);\r\n if (storeResult) {\r\n await showMessage(\"Договорный документ успешно переведен в статус 'Действующий'\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Аннулирование договорного документа. */\r\n private async VoidContractTileAction()\r\n {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n const card: Card | undefined = editor?.cardModel?.card;\r\n if (uiContext == null || editor == null || card == null) {\r\n return;\r\n }\r\n\r\n let answer = await showConfirmWithCancel('Вы действительно хотите аннулировать документ?');\r\n if (!answer) {\r\n return;\r\n }\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.CheckVoidTheContract;\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) { \r\n await showError(response.validationResult.build().toString());\r\n \r\n return;\r\n } \r\n\r\n let isHistorical: boolean = !PkContractUIHelper.IsFieldRequiredAdditionalChecks(card);\r\n if (isHistorical) {\r\n await showMessage(\"ВНИМАНИЕ! Данный КСД был загружен из УС!\");\r\n\r\n let result = await showConfirmWithCancel(\"Вы действительно хотите аннулировать договорной документ?\");\r\n if (!result) {\r\n return;\r\n }\r\n }\r\n\r\n const storeInfo: IStorage = {'VoidTheContract': createTypedField(true, DotNetType.Boolean)};\r\n let storeResult = await editor.saveCard(uiContext, storeInfo);\r\n if (storeResult) {\r\n await showMessage(\"Договорный документ успешно переведен в статус \\\"Аннулирован\\\".\");\r\n }\r\n }\r\n\r\n private async TransferToUS_TileAction()\r\n {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let card = editor?.cardModel?.card;\r\n if (uiContext == null || editor == null) {\r\n return;\r\n }\r\n\r\n let storeInfo: IStorage = {\r\n 'SendToUS': createTypedField(true, DotNetType.Boolean)\r\n }\r\n\r\n if (editor.cardModel != null\r\n && editor.cardModel.card.sections.get(\"ArContractsUser\")?.fields.get(\"ContractKindID\") == TessaArContractKinds.AssignmentKindTessaID) \r\n {\r\n storeInfo['UsUstupkaChecks'] = createTypedField(true, DotNetType.Boolean);\r\n }\r\n\r\n // Флажок \"Использована кнопка Передать в УС\".\r\n if (card) {\r\n card.sections.get(\"ArContractsUser\")?.fields.set(\"IsTransferToUsBtnUsed\", true, DotNetType.Boolean);\r\n if(card.sections.get(\"ArContractsUser\")?.fields.has(\"TransferToUSDate\")){\r\n card.sections.get(\"ArContractsUser\")?.fields.set(\"TransferToUSDate\", createTypedField(PkCommonHelper.GetDateTimeNow(null), DotNetType.DateTime));\r\n }\r\n }\r\n\r\n if (await editor.saveCard(uiContext, storeInfo)) {\r\n await showMessage(\"Договорный документ помечен для передачи в УС. Обращаем внимание на необходимость запуска согласования. Данные по КСД будут выгружены в ближайшее время в УС.\");\r\n } else {\r\n await editor.refreshCard(uiContext);\r\n }\r\n }\r\n\r\n private async CopyCard(tile: ITile) {\r\n const context = UIContext.current;\r\n \r\n if (!context) return;\r\n const editor = context.cardEditor;\r\n if (!editor) return;\r\n const model = editor.cardModel;\r\n if (!model) return;\r\n const card = model.card;\r\n if (!card) return;\r\n let oldCardModel = tile.context.cardEditor?.cardModel;\r\n if (!oldCardModel) return;\r\n \r\n await createCard({\r\n cardTypeId: oldCardModel.cardType.id as string,\r\n cardTypeName: oldCardModel.cardType.name as string,\r\n info: tile.info,\r\n cardModifierAction: async (ctx) => {\r\n let newCard = ctx.card;\r\n \r\n if (!oldCardModel) return;\r\n \r\n let oldCard = oldCardModel.card;\r\n \r\n let newDciSection = newCard.sections.tryGet('DocumentCommonInfo');\r\n \r\n if (newDciSection !== undefined) {\r\n newDciSection.fields['AuthorID'] = userSession.UserID;\r\n newDciSection.fields['AuthorName'] = userSession.UserName;\r\n }\r\n \r\n let newAcuSection = newCard.sections.tryGet('ArContractsUser');\r\n let oldAcuSection = oldCard.sections.tryGet('ArContractsUser');\r\n\r\n if (newAcuSection && oldAcuSection) {\r\n newAcuSection.fields.set('ContractKindID', oldAcuSection.fields.get('ContractKindID'), DotNetType.Guid);\r\n newAcuSection.fields.set('ContractKindDocumentKind', oldAcuSection.fields.get('ContractKindDocumentKind'), DotNetType.String);\r\n newAcuSection.fields.set('ParentCardID', oldAcuSection.fields.get('ParentCardID'), DotNetType.Guid);\r\n newAcuSection.fields.set('ContractTypeID', oldAcuSection.fields.get('ContractTypeID'), DotNetType.Int32);\r\n newAcuSection.fields.set('ContractTypeName', oldAcuSection.fields.get('ContractTypeName'), DotNetType.String);\r\n newAcuSection.fields.set('FirstPartnerExternalID', oldAcuSection.fields.get('FirstPartnerExternalID'), DotNetType.Int64);\r\n newAcuSection.fields.set('FirstPartnerName', oldAcuSection.fields.get('FirstPartnerName'), DotNetType.String);\r\n newAcuSection.fields.set('SecondPartnerExternalID', oldAcuSection.fields.get('SecondPartnerExternalID'), DotNetType.Int64);\r\n newAcuSection.fields.set('SecondPartnerName', oldAcuSection.fields.get('SecondPartnerName'), DotNetType.String);\r\n }\r\n\r\n let newAcvSection = newCard.sections.tryGet('ArContractVirtual');\r\n let oldAcvSection = oldCard.sections.tryGet('ArContractVirtual');\r\n\r\n if (newAcvSection && oldAcvSection) {\r\n newAcvSection.fields.set('ParentCardNumber', oldAcvSection.fields.get('ParentCardNumber'), DotNetType.String);\r\n }\r\n\r\n let newAcpSection = newCard.sections.tryGet('ArContractPartners');\r\n let oldAcpSection = oldCard.sections.tryGet('ArContractPartners');\r\n\r\n if (newAcpSection && oldAcpSection) {\r\n oldAcpSection.rows.forEach((oldRow) => {\r\n let newRow = oldRow.clone();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.state = CardRowState.Inserted;\r\n newAcpSection?.rows.push(newRow);\r\n });\r\n }\r\n },\r\n });\r\n }\r\n\r\n private async ClearDiadocInfo() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n const card: Card | undefined = editor?.cardModel?.card;\r\n if (uiContext == null || editor == null || card == null) {\r\n return;\r\n }\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.CleanDiadocInfoRequest;\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n let response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n await showError(response.validationResult.build().toString());\r\n return;\r\n }\r\n\r\n const files = card.files;\r\n const filesApplication = files.filter(f => f.categoryId === ChFileCategories.PrintForms.id || f.categoryId === ChFileCategories.FullPacket.id);\r\n\r\n for (const f of filesApplication) {\r\n const sf = card.files.find(fod => fod.rowId!==undefined && fod.rowId === f.rowId);\r\n if (sf !== undefined && sf!==null) {\r\n if (sf.state === CardFileState.Inserted) {\r\n sf.state = CardFileState.None;\r\n sf.removeChanges();\r\n } else {\r\n sf.state = CardFileState.Deleted;\r\n }\r\n } else {\r\n f.state = CardFileState.Deleted;\r\n f.typeName = \"File\";\r\n card.files.push(f);\r\n }\r\n }\r\n await editor.cardModel?.saveAsync();\r\n }\r\n\r\n\r\n private ClearDiadocInfoVisibility(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let visible = false;\r\n\r\n if (!userSession.isAdmin)\r\n {\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n return;\r\n }\r\n\r\n visible = editor != null\r\n && editor.cardModel != null\r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update\r\n && (editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value == CdDocStates.Modification.id\r\n || editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value == CdDocStates.OnAgreement.id\r\n || editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value == CdDocStates.PreparationDocumentForSigning.id)\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n private async CreateCardTileAction(tile: ITile)\r\n {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n \r\n const baseCard = editor.cardModel!.card;\r\n const requestInfo = tile.info;\r\n requestInfo['KrCreateBasedOnCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n requestInfo['KrCreateBasedOnCopyFiles'] = createTypedField(false, DotNetType.Boolean);\r\n requestInfo['basedOnContractCardID'] = createTypedField(model.card.id, DotNetType.Guid);\r\n \r\n const baseCardToken = KrToken.tryGet(baseCard.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n requestInfo['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n \r\n if (requestInfo['basedOnContractKindID'].$value == 2) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkAgreementTerminationContractAccessRequest;\r\n request.info[\"CardID\"] = createTypedField(baseCard.id, DotNetType.Guid);\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) { \r\n showNotEmpty(response.validationResult.build());\r\n return;\r\n }\r\n }\r\n\r\n if (requestInfo['basedOnContractKindID'].$value == 4)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkAgreementCessionContractAccessRequest;\r\n request.info[\"CardID\"] = createTypedField(baseCard.id, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) { \r\n showNotEmpty(response.validationResult.build());\r\n return;\r\n }\r\n\r\n let responseInfo = response.tryGetInfo();\r\n let isCanCreateCession:boolean = responseInfo!.isCanCreateCession.$value ?? false;\r\n\r\n if (isCanCreateCession)\r\n {\r\n showMessage(`Создание новой Уступки доступно только после начала действия уже существующей уступки`);\r\n return;\r\n }\r\n }\r\n\r\n let cessionSide : CessionSide = new CessionSide();\r\n cessionSide.PartnersList = [];\r\n if (requestInfo['basedOnContractKindID'].$value == 4) {\r\n let isCancelButton:boolean = false;\r\n let errorMessage = \"Ошибка при создании уступки.\"\r\n let meta = MetadataStorage.instance.cardMetadata;\r\n const dialogsType = meta.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n showError(errorMessage);\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'CessionSides');\r\n if (!dialogForm) {\r\n showError(errorMessage);\r\n return;\r\n }\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n let section;\r\n if ((section = _form.cardModel.card.sections.tryGet('ArContractCessionSidesVirtual')) != null) {\r\n section.fields.set(\"ContractID\", baseCard.id, DotNetType.Guid);\r\n }\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => { \r\n let ccsv : CardSection | undefined = windowCardModel.card.sections.tryGet(\"ArContractCessionSidesVirtual\");\r\n\r\n if (!ccsv) return;\r\n\r\n var assigneeExternalID : number | undefined = ccsv.fields.get(\"AssigneeExternalID\");\r\n var cedentExternalID : number | undefined = ccsv.fields.get(\"CedentExternalID\");\r\n\r\n if (assigneeExternalID && cedentExternalID && assigneeExternalID == cedentExternalID) {\r\n showMessage(\"Цедент и цессионарий должны отличаться\");\r\n return;\r\n }\r\n else if(!assigneeExternalID || !cedentExternalID){\r\n await showError(\"Не заполнены стороны уступки\");\r\n return;\r\n }\r\n else{\r\n if (cedentExternalID)\r\n {\r\n let partner: Partner = new Partner();\r\n partner.ID = ccsv.fields.get(\"CedentID\");\r\n partner.Name = ccsv.fields.get(\"CedentName\");\r\n partner.ExternalID = cedentExternalID;\r\n partner.Inn = ccsv.fields.get(\"CedentINN\");\r\n partner.Automated = ccsv.fields.get(\"CedentAutomated\");\r\n partner.RoleID = 3;\r\n partner.RoleName = \"Цедент\";\r\n \r\n cessionSide.PartnersList.push(partner);\r\n }\r\n\r\n if (assigneeExternalID)\r\n {\r\n let partner: Partner = new Partner();\r\n partner.ID = ccsv.fields.get(\"AssigneeID\");\r\n partner.Name = ccsv.fields.get(\"AssigneeName\");\r\n partner.ExternalID = assigneeExternalID;\r\n partner.Inn = ccsv.fields.get(\"AssigneeINN\");\r\n partner.Automated = ccsv.fields.get(\"AssigneeAutomated\");\r\n partner.RoleID = 4;\r\n partner.RoleName = \"Цессионарий\";\r\n \r\n cessionSide.PartnersList.push(partner);\r\n }\r\n }\r\n\r\n cessionSide.ID = ccsv.fields.get(\"KindOfAssignmentID\");\r\n cessionSide.Name = ccsv.fields.get(\"KindOfAssignmentName\");\r\n\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => { \r\n isCancelButton = true;\r\n btn.close(); \r\n }),\r\n ]\r\n );\r\n\r\n if(isCancelButton) \r\n {\r\n return;\r\n }\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: model.cardType.id,\r\n cardTypeName: model.cardType.name,\r\n info: requestInfo,\r\n saveCreationRequest: false,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn',\r\n cardModifierAction : async ctx =>\r\n {\r\n let newCard = ctx.card;\r\n \r\n if(requestInfo['basedOnContractKindID']!=null && requestInfo['basedOnContractKindID'].$value == 1\r\n || requestInfo['basedOnContractKindID'].$value == 2\r\n || requestInfo['basedOnContractKindID'].$value == 4)\r\n {\r\n var newContractsSection = newCard.sections.tryGet('ArContractsUser');\r\n var oldContractsSection = model.card.sections.tryGet('ArContractsUser');\r\n if(oldContractsSection && newContractsSection){\r\n newContractsSection.fields.set(\"CurrencyID\", createTypedField(oldContractsSection.fields.get(\"CurrencyID\"), DotNetType.Guid));\r\n newContractsSection.fields.set(\"CurrencyName\", createTypedField(oldContractsSection.fields.get(\"CurrencyName\"), DotNetType.String));\r\n } \r\n\r\n var oldProps = model.card.sections.tryGet('ArContractPartners');\r\n var newProps = newCard.sections.tryGet('ArContractPartners');\r\n \r\n if(oldProps!=null)\r\n oldProps.rows.forEach(oldRow=>{\r\n if (oldRow.state == CardRowState.Deleted || oldRow._storage[\"RoleID\"].$value == 2 && oldRow._storage[\"ReplacementOfParticipant\"].$value == true) return;\r\n if (requestInfo['basedOnContractKindID'].$value == 4) {\r\n let partnerExternalID: number = oldRow._storage['PartnerExternalID'].$value;\r\n if (cessionSide.PartnersList.some(p => p.RoleID == 3 \r\n && p.ExternalID == partnerExternalID)) {\r\n return;\r\n }\r\n }\r\n\r\n var newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n \r\n for (let x in oldRow._storage)\r\n {\r\n if(x!='RowID')\r\n {\r\n newRow.set(x, oldRow._storage[x]);\r\n }\r\n }\r\n \r\n newRow.state = CardRowState.Inserted;\r\n \r\n if(newProps!=null)\r\n newProps.rows.push(newRow);\r\n });\r\n\r\n if (requestInfo['basedOnContractKindID'].$value == 4) {\r\n \r\n if(newProps != null)\r\n {\r\n await this.GetActualPartnerFieldsAsync(newProps as CardSection);\r\n newProps.rows.forEach(x=>\r\n {\r\n let xRoleID = x.tryGet(\"RoleID\");\r\n\r\n if(x.tryGet(\"PartnerAutomated\") && (xRoleID == 0 || xRoleID == 1))\r\n {\r\n x.set(\"RoleID\", createTypedField(2, DotNetType.Int32)); \r\n x.set(\"RoleName\", createTypedField('Прочее', DotNetType.String)); \r\n }\r\n });\r\n\r\n if(newProps.rows.find(x => x.tryGet(\"RoleID\") != 2)) {\r\n newProps.rows.clear();\r\n }\r\n } \r\n\r\n let arContractPartnersCedent = oldProps.rows.find(r =>\r\n r.has(\"PartnerExternalID\") && r.tryGet(\"PartnerExternalID\") == cessionSide.PartnersList.find(p => p.RoleID == 3)?.ExternalID);\r\n\r\n cessionSide.PartnersList.forEach(p => {\r\n\r\n let contractCategoryID = (p.RoleID == 3 || p.Automated == true) && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"ContractCategoryID\") \r\n : null;\r\n let contractCategoryName = (p.RoleID == 3 || p.Automated == true) && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"ContractCategoryName\") \r\n : null;\r\n \r\n let contractCategoryExtID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"ContractCategoryExtID\") \r\n : null;\r\n let contractCategoryIsHopeless = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"ContractCategoryIsHopeless\") \r\n : null;\r\n \r\n let contractCategoryIsOIDP = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"ContractCategoryIsOIDP\") \r\n : null;\r\n \r\n let contractCategoryGuidDirectum = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"ContractCategoryGuidDirectum\") \r\n : null;\r\n\r\n let contractCategoryIsTechnical = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"ContractCategoryIsTechnical\") \r\n : null;\r\n\r\n let departmentID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"DepartmentID\") \r\n : null;\r\n \r\n let departmentName = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"DepartmentName\") \r\n : null;\r\n\r\n let departmentGuid1C = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"DepartmentGuid1C\") \r\n : null;\r\n let performerID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PerformerID\") \r\n : null;\r\n\r\n let performerName = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PerformerName\") \r\n : null;\r\n\r\n let performerDepartmentID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PerformerDepartmentID\") \r\n : null;\r\n\r\n let accountantID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"AccountantID\") \r\n : null;\r\n\r\n let accountantName = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"AccountantName\") \r\n : null;\r\n\r\n let accountantGuid1C = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"AccountantGuid1C\") \r\n : null; \r\n let signedID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"SignedID\") \r\n : null;\r\n\r\n let signedName = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"SignedName\") \r\n : null;\r\n\r\n let partnerDepartmentID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PartnerDepartmentID\") \r\n : null;\r\n\r\n let performerGuid1C = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PerformerGuid1C\") \r\n : null;\r\n\r\n let signedGuid1C = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"SignedGuid1C\") \r\n : null;\r\n\r\n let signedAttorneyID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"SignedAttorneyID\") \r\n : null;\r\n\r\n let signedDiadocSigningID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"SignedDiadocSigningID\") \r\n : null;\r\n\r\n let signedProcuratoryID = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"SignedProcuratoryID\") \r\n : null;\r\n\r\n let partnerIsMain = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PartnerIsMain\") \r\n : null;\r\n\r\n let partnerIsVGO = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PartnerIsVGO\") \r\n : null; \r\n \r\n let landAsset = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? (arContractPartnersCedent.tryGet(\"LandAsset\") ?? false)\r\n : false; \r\n\r\n let partnerIsExternal = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PartnerIsExternal\") \r\n : null; \r\n \r\n let partnerInPerimetr = p.RoleID == 3 && arContractPartnersCedent != null \r\n ? arContractPartnersCedent.tryGet(\"PartnerInPerimetr\") \r\n : null; \r\n\r\n var newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n \r\n newRow.set(\"PartnerID\", createTypedField(p.ID, DotNetType.Guid));\r\n newRow.set(\"PartnerName\", createTypedField(p.Name, DotNetType.String));\r\n newRow.set(\"PartnerExternalID\", createTypedField(p.ExternalID, DotNetType.Int64));\r\n newRow.set(\"PartnerINN\", createTypedField(p.Inn, DotNetType.String));\r\n newRow.set(\"PartnerAutomated\", createTypedField(p.Automated, DotNetType.Boolean));\r\n newRow.set(\"RoleID\", createTypedField(p.RoleID, DotNetType.Int32));\r\n newRow.set(\"RoleName\", createTypedField(p.RoleName, DotNetType.String));\r\n newRow.set(\"Order\", createTypedField(cessionSide.PartnersList.indexOf(p), DotNetType.Int32));\r\n \r\n contractCategoryID == null ? newRow.set(\"ContractCategoryID\", null) : newRow.set(\"ContractCategoryID\", createTypedField(contractCategoryID,DotNetType.Guid));\r\n contractCategoryName == null ? newRow.set(\"ContractCategoryName\", null) : newRow.set(\"ContractCategoryName\", createTypedField(contractCategoryName, DotNetType.String));\r\n contractCategoryExtID == null ? newRow.set(\"ContractCategoryExtID\", null) : newRow.set(\"ContractCategoryExtID\", createTypedField(contractCategoryExtID,DotNetType.Int64));\r\n contractCategoryIsHopeless == null ? newRow.set(\"ContractCategoryIsHopeless\", null) : newRow.set(\"ContractCategoryIsHopeless\", createTypedField(contractCategoryIsHopeless, DotNetType.Boolean));\r\n contractCategoryIsOIDP == null ? newRow.set(\"ContractCategoryIsOIDP\", null) : newRow.set(\"ContractCategoryIsOIDP\", createTypedField(contractCategoryIsOIDP,DotNetType.Boolean));\r\n contractCategoryGuidDirectum == null ? newRow.set(\"ContractCategoryGuidDirectum\", null) : newRow.set(\"ContractCategoryGuidDirectum\", createTypedField(contractCategoryGuidDirectum, DotNetType.String));\r\n contractCategoryIsTechnical == null ? newRow.set(\"ContractCategoryIsTechnical\", null) : newRow.set(\"ContractCategoryIsTechnical\", createTypedField(contractCategoryIsTechnical, DotNetType.Boolean)); \r\n departmentID == null ? newRow.set(\"DepartmentID\", null) : newRow.set(\"DepartmentID\", createTypedField(departmentID, DotNetType.Guid)); \r\n departmentName == null ? newRow.set(\"DepartmentName\", null) : newRow.set(\"DepartmentName\", createTypedField(departmentName, DotNetType.String)); \r\n departmentGuid1C == null ? newRow.set(\"DepartmentGuid1C\", null) : newRow.set(\"DepartmentGuid1C\", createTypedField(departmentGuid1C , DotNetType.String));\r\n performerID == null ? newRow.set(\"PerformerID\", null) : newRow.set(\"PerformerID\", createTypedField(performerID, DotNetType.Guid)); \r\n performerName == null ? newRow.set(\"PerformerName\", null) : newRow.set(\"PerformerName\", createTypedField(performerName, DotNetType.String)); \r\n performerDepartmentID == null ? newRow.set(\"PerformerDepartmentID\", null) : newRow.set(\"PerformerDepartmentID\", createTypedField(performerDepartmentID, DotNetType.Guid));\r\n performerGuid1C == null ? newRow.set(\"PerformerGuid1C\", null) : newRow.set(\"PerformerGuid1C\", createTypedField(performerGuid1C , DotNetType.String));\r\n accountantID == null ? newRow.set(\"AccountantID\", null) : newRow.set(\"AccountantID\", createTypedField(accountantID, DotNetType.Guid));\r\n accountantName == null ? newRow.set(\"AccountantName\", null) : newRow.set(\"AccountantName\", createTypedField(accountantName, DotNetType.String));\r\n accountantGuid1C == null ? newRow.set(\"AccountantGuid1C\", null) : newRow.set(\"AccountantGuid1C\", createTypedField(accountantGuid1C , DotNetType.String));\r\n signedID == null ? newRow.set(\"SignedID\", null) : newRow.set(\"SignedID\", createTypedField(signedID, DotNetType.Guid));\r\n signedName == null ? newRow.set(\"SignedName\", null) : newRow.set(\"SignedName\", createTypedField(signedName , DotNetType.String));\r\n signedGuid1C == null ? newRow.set(\"SignedGuid1C\", null) : newRow.set(\"SignedGuid1C\", createTypedField(signedGuid1C, DotNetType.String));\r\n signedAttorneyID == null ? newRow.set(\"SignedAttorneyID\", null) : newRow.set(\"SignedAttorneyID\", createTypedField(signedAttorneyID, DotNetType.Guid));\r\n signedDiadocSigningID == null ? newRow.set(\"SignedDiadocSigningID\", null) : newRow.set(\"SignedDiadocSigningID\", createTypedField(signedDiadocSigningID, DotNetType.Guid));\r\n signedProcuratoryID == null ? newRow.set(\"SignedProcuratoryID\", null) : newRow.set(\"SignedProcuratoryID\", createTypedField(signedProcuratoryID, DotNetType.Int64)); \r\n partnerDepartmentID == null ? newRow.set(\"PartnerDepartmentID\", null) : newRow.set(\"PartnerDepartmentID\", createTypedField(partnerDepartmentID , DotNetType.Guid)); \r\n partnerIsMain == null ? newRow.set(\"PartnerIsMain\", null) : newRow.set(\"PartnerIsMain\", createTypedField(partnerIsMain, DotNetType.Boolean));\r\n partnerIsVGO == null ? newRow.set(\"PartnerIsVGO\", null) : newRow.set(\"PartnerIsVGO\", createTypedField(partnerIsVGO , DotNetType.Boolean));\r\n newRow.set(\"LandAsset\", createTypedField(landAsset , DotNetType.Boolean));\r\n partnerIsExternal == null ? newRow.set(\"PartnerIsExternal\", null) : newRow.set(\"PartnerIsExternal\", createTypedField(partnerIsExternal , DotNetType.Boolean));\r\n partnerInPerimetr == null ? newRow.set(\"PartnerInPerimetr\", null) : newRow.set(\"PartnerInPerimetr\", createTypedField(partnerInPerimetr , DotNetType.Boolean));\r\n\r\n newRow.state = CardRowState.Inserted;\r\n if (newProps != null) { \r\n newProps.rows.push(newRow);\r\n }\r\n });\r\n }\r\n\r\n // ДС/Уступка/СоР\r\n if (requestInfo['basedOnContractKindID'].$value == 1 \r\n || requestInfo['basedOnContractKindID'].$value == 2 \r\n || requestInfo['basedOnContractKindID'].$value == 4){\r\n await this.GetActualPartnerFieldsAsync(newProps as CardSection);\r\n }\r\n }\r\n\r\n if (requestInfo['basedOnContractKindID'].$value == 4) {\r\n var contractsUserSection = newCard.sections.tryGet('ArContractsUser');\r\n if(contractsUserSection) {\r\n if (cessionSide.ID != null && cessionSide.Name != null) { \r\n contractsUserSection.fields.set(\"ConcessionKindID\", createTypedField(cessionSide.ID, DotNetType.Int32));\r\n contractsUserSection.fields.set(\"ConcessionKindName\", createTypedField(cessionSide.Name, DotNetType.String));\r\n }\r\n\r\n if(oldContractsSection \r\n && oldContractsSection.fields.tryGet(\"TypeProcedureID\") != null\r\n && oldContractsSection.fields.tryGet(\"TypeProcedureID\") != ArTypeProcedure.WithoutTender\r\n && oldContractsSection.fields.tryGet(\"TenderID\") != null)\r\n {\r\n // Подставляем в Уступке тип процедуры АНТП \r\n contractsUserSection.fields.set(\"TypeProcedureID\", createTypedField(ArTypeProcedure.ANTPElectronic, DotNetType.Guid));\r\n contractsUserSection.fields.set(\"TypeProcedureName\", createTypedField(ArTypeProcedure.ANTPElectronicName, DotNetType.String));\r\n }\r\n\r\n var cedentExtID = cessionSide.PartnersList.find(x => x.RoleID == 3)?.ExternalID;\r\n var assigneeExtID = cessionSide.PartnersList.find(x => x.RoleID == 4)?.ExternalID;\r\n\r\n if (cedentExtID != 0)\r\n {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractPartnerstInfoRequest;\r\n request.info[\"PartnerExternalID\"] = createTypedField(cedentExtID, DotNetType.Int64); \r\n \r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n return;\r\n } \r\n \r\n if (response.info && response.info.Automated.$value)\r\n {\r\n contractsUserSection.fields.set(\"FirstPartnerExternalID\", createTypedField(cedentExtID, DotNetType.Int64));\r\n contractsUserSection.fields.set(\"FirstPartnerName\", createTypedField(cessionSide.PartnersList.find(x => x.ExternalID == cedentExtID)?.Name, DotNetType.String));\r\n contractsUserSection.fields.set(\"FirstPartnerID\", createTypedField(\"aedf785b-1c18-430c-82b8-76330027a853\", DotNetType.Guid)); \r\n } \r\n else\r\n {\r\n contractsUserSection.fields.set(\"FirstPartnerExternalID\", null);\r\n contractsUserSection.fields.set(\"FirstPartnerName\", null);\r\n contractsUserSection.fields.set(\"FirstPartnerID\", null); \r\n }\r\n }\r\n\r\n if (assigneeExtID != 0)\r\n {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractPartnerstInfoRequest;\r\n request.info[\"PartnerExternalID\"] = createTypedField(assigneeExtID, DotNetType.Int64); \r\n \r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n return;\r\n } \r\n \r\n if (response.info && response.info.Automated.$value)\r\n {\r\n contractsUserSection.fields.set(\"SecondPartnerExternalID\",createTypedField(assigneeExtID, DotNetType.Int64));\r\n contractsUserSection.fields.set(\"SecondPartnerName\", createTypedField(cessionSide.PartnersList.find(x => x.ExternalID == assigneeExtID)?.Name, DotNetType.String));\r\n contractsUserSection.fields.set(\"SecondPartnerID\", createTypedField(\"aedf785b-1c18-430c-82b8-76330027a853\", DotNetType.Guid));\r\n }\r\n else \r\n {\r\n contractsUserSection.fields.set(\"SecondPartnerExternalID\", null);\r\n contractsUserSection.fields.set(\"SecondPartnerName\", null);\r\n contractsUserSection.fields.set(\"SecondPartnerID\", null);\r\n }\r\n }\r\n \r\n }\r\n }\r\n\r\n if (requestInfo['basedOnContractKindID'].$value == 1)\r\n {\r\n newContractsSection = newCard.sections.tryGet('ArContractsUser')\r\n if (newContractsSection && oldContractsSection\r\n && oldContractsSection.fields.tryGet(\"PkMdmFinancialResponsibilityCenterOwnerID\") != null)\r\n {\r\n // поле ЦФО (владелец договора)\r\n newContractsSection.fields.set(\"PkMdmFinancialResponsibilityCenterOwnerID\",\r\n createTypedField(oldContractsSection.fields.get(\"PkMdmFinancialResponsibilityCenterOwnerID\"), DotNetType.Guid));\r\n newContractsSection.fields.set(\"PkMdmFinancialResponsibilityCenterOwnerName\",\r\n createTypedField(oldContractsSection.fields.get(\"PkMdmFinancialResponsibilityCenterOwnerName\"), DotNetType.String));\r\n \r\n // поле ЦФО по БФ\r\n var newFRCForBFSection = newCard.sections.tryGet('ArContractMdsFinancialResponsibilityCenterForBF');\r\n var oldFRCForBFSection = model.card.sections.tryGet('ArContractMdsFinancialResponsibilityCenterForBF');\r\n if (newFRCForBFSection && oldFRCForBFSection)\r\n {\r\n oldFRCForBFSection.rows.forEach(oldRow=>{\r\n var newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n \r\n for (let x in oldRow._storage)\r\n {\r\n if(x != 'RowID')\r\n {\r\n newRow.set(x, oldRow._storage[x]);\r\n }\r\n }\r\n \r\n newRow.state = CardRowState.Inserted;\r\n \r\n if(newFRCForBFSection != null)\r\n {\r\n newFRCForBFSection.rows.push(newRow);\r\n }\r\n })\r\n }\r\n\r\n // поле Прочие ОИ\r\n var newObjectOtherSection = newCard.sections.tryGet('ArContractMdsObjectOther');\r\n var oldObjectOtherSection = model.card.sections.tryGet('ArContractMdsObjectOther');\r\n if (newObjectOtherSection && oldObjectOtherSection)\r\n {\r\n oldObjectOtherSection.rows.forEach(oldRow=>{\r\n var newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n \r\n for (let x in oldRow._storage)\r\n {\r\n if(x != 'RowID')\r\n {\r\n newRow.set(x, oldRow._storage[x]);\r\n }\r\n }\r\n \r\n newRow.state = CardRowState.Inserted;\r\n \r\n if(newObjectOtherSection != null)\r\n {\r\n newObjectOtherSection.rows.push(newRow);\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n if(requestInfo['basedOnContractKindID'].$value == 1 \r\n && oldContractsSection?.fields.tryGet(\"ContractKindID\") == TessaArContractKinds.ContractKindTessaID\r\n && oldContractsSection?.fields.tryGet(\"ContractTypeID\") == ArContractTypes.Framework)\r\n {\r\n newCard.info[\"IsParentFirstOrder\"] = createTypedField(true, DotNetType.Boolean);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n private static CheckFieldValue(model, sectionName, fieldName, fieldValue): boolean {\r\n let result = false;\r\n let section;\r\n let filed;\r\n if (model != null && model.card != null) {\r\n if ((section = model.card.sections.tryGet(sectionName)) != null) {\r\n if (section.fields.tryGet(fieldName) != null) {\r\n if ((filed = section.fields.tryGet(fieldName)) != null) {\r\n if (filed == fieldValue) {\r\n result = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Создание карточки Договора.\r\n */\r\n private async GlobalCreateCardTileAction(tile: ITile)\r\n {\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: CdCardTypes.ArContractTypeID,\r\n info: tile.info,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn'\r\n });\r\n });\r\n }\r\n\r\n /** Проверкка доступности тайла StartContractApproval. */ \r\n private StartContractApprovalProcessTileVisibility(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n const states = [\r\n CdDocStates.Rejected.id as Number\r\n ];\r\n \r\n let visible = (editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null\r\n && !states.some(x => x==editor.cardModel!.card.sections.\r\n get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value));\r\n \r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n private RejectProcessTileVisibility(e: TileEvaluationEventArgs) {\r\n\r\n const editor = e.currentTile.context.cardEditor;\r\n const userID = userSession.UserID;\r\n let visible: boolean = false;\r\n\r\n if (editor == null\r\n || editor.cardModel == null\r\n || editor.cardModel.card == null\r\n || editor.cardModel.card.typeId !== CdCardTypes.ArContractTypeID\r\n || editor.cardModel.card.storeMode !== CardStoreMode.Update) {\r\n e.setIsEnabledWithCollapsing(e.currentTile, false);\r\n return;\r\n }\r\n\r\n let states = [\r\n CdDocStates.Active.id as Number,\r\n CdDocStates.Revocated.id as Number\r\n ];\r\n\r\n let pdciSection = editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\");\r\n let acuSection = editor.cardModel.card.sections.get(\"ArContractsUser\");\r\n // Кнопка \"Отклонить\" доступна в уступке во всех состояниях, кроме \"Действующая\", \"Аннулирована\",\r\n // и если уступка не выгружена в УС (isDraft = true).\r\n if (pdciSection != null && acuSection != null) {\r\n let stateId = pdciSection.fields.get(\"StateID\");\r\n let contractKindDocumentKindID = acuSection.fields.get(\"ContractKindID\");\r\n let isDraft = acuSection.fields.get(\"IsDraft\");\r\n\r\n if (contractKindDocumentKindID === TessaArContractKinds.AssignmentKindTessaID) {\r\n visible = stateId != null\r\n && !states.some(x => x === stateId)\r\n && isDraft === true;\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n return;\r\n }\r\n\r\n states = [\r\n CdDocStates.Rejected.id as Number,\r\n CdDocStates.Revocated.id as Number,\r\n CdDocStates.Terminated.id as Number,\r\n CdDocStates.Active.id as Number,\r\n CdDocStates.Fulfilled.id as Number,\r\n CdDocStates.PreparationDocumentForSigning.id as Number,\r\n CdDocStates.OnSigningInDiadocInCompany.id as Number,\r\n CdDocStates.OnSigningInDiadocWithPartner.id as Number,\r\n CdDocStates.OnSigningInCompany.id as Number,\r\n CdDocStates.OnSigningAtPartner.id as Number,\r\n CdDocStates.CheckSigningInDiadoc.id as Number,\r\n CdDocStates.ConfirmTransferDocument.id as Number,\r\n CdDocStates.ControlReturnOriginal.id as Number\r\n ];\r\n\r\n visible = ((userID == editor.cardModel.card.createdById\r\n || editor.cardModel.card.sections.get(\"ArContractPartners\")?.rows\r\n .find(x => x.getField(\"PerformerID\")?.$value == userID) != null)\r\n && !states.some(x => x==editor.cardModel!.card.sections.\r\n get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value)\r\n && editor.cardModel.card.sections.get(\"ArContractsUser\")?.fields.get(\"IsExportToUS\") != true);\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n \r\n private async RejectProcessTileAction() {\r\n if (!await showConfirm(\"Вы уверены, что договорной документ необходимо перевести в состояние “Отклонен”? \" + \r\n \"Дальнейшие работы по данному договорному документу будут не возможны.\"))\r\n {\r\n return;\r\n }\r\n \r\n const context = UIContext.current;\r\n if (!context) return\r\n const editor = context.cardEditor;\r\n if (!editor) return\r\n const cardModel = editor.cardModel;\r\n if (!cardModel) return\r\n const card = cardModel.card;\r\n if (!card) return\r\n\r\n card.info[\"IsToReject\"] = true;\r\n\r\n const sectionPkDocumentCommonInfo = card.sections.get(\"PkDocumentCommonInfo\");\r\n if (!sectionPkDocumentCommonInfo) return\r\n sectionPkDocumentCommonInfo.fields.set(\"StateID\", CdDocStates.Rejected.id, DotNetType.Int32);\r\n sectionPkDocumentCommonInfo.fields.set(\"StateName\", CdDocStates.Rejected.caption, DotNetType.String);\r\n\r\n const sectionFdSatelliteCommonInfoVirtual = card.sections.get(\"FdSatelliteCommonInfoVirtual\");\r\n if (!sectionFdSatelliteCommonInfoVirtual) return\r\n sectionFdSatelliteCommonInfoVirtual.fields.set(\"StateID\", \"0b8d282c-3bcb-4d14-8d2f-fd391b673823\", DotNetType.Guid);\r\n sectionFdSatelliteCommonInfoVirtual.fields.set(\"StateName\", \"Отклонен\", DotNetType.String);\r\n\r\n await editor.saveCard(context);\r\n }\r\n \r\n private CancelApprovalProcessTileVisibility(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n const userID = userSession.UserID;\r\n\r\n const states = [\r\n CdDocStates.OnAgreement.id as Number,\r\n CdDocStates.Modification.id as Number,\r\n CdDocStates.PreparationDocumentForSigning.id as Number,\r\n CdDocStates.EditSpecialistPrimaryProcurementControl.id as Number\r\n ];\r\n\r\n let visible: boolean;\r\n\r\n if (userSession.isAdmin)\r\n {\r\n visible = editor != null\r\n && editor.cardModel != null\r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update\r\n && editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value != CdDocStates.Active.id\r\n && editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value != CdDocStates.Revocated.id\r\n && editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value != CdDocStates.Terminated.id\r\n && editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value != CdDocStates.Fulfilled.id\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n return;\r\n }\r\n\r\n visible = (editor != null\r\n && editor.cardModel != null \r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update \r\n && (userID == editor.cardModel.card.sections.get(\"ArContractsUser\")?.fields.get(\"AuthorID\")\r\n || editor.cardModel.card.sections.get(\"ArContractPartners\")?.rows\r\n .find(x => x.getField(\"PerformerID\")?.$value == userID) != null)\r\n && (states.some(x => x==editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value)\r\n || (editor.cardModel!.card.sections\r\n .get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value == CdDocStates.Project.id\r\n && editor.cardModel.card.tasks.some(x => Guid.equals(x.typeId, PkTaskTypes.ArMatrixConfirmStartProcessTypeID) \r\n || Guid.equals(x.typeId, PkTaskTypes.ArMatrixConfirmVgoStartProcessTypeID))))\r\n && editor.cardModel.card.sections.get(\"FdStageInstancesVirtual\")?.rows\r\n .find(x => x.getField(\"TaskTypeID\")?.$value == CdTaskTypes.ArPreparationForSigningTypeID && x.getField(\"StateID\")?.$value == CdFdStages.Active) == null\r\n && editor.cardModel.card.sections.get(\"ArContractsUser\")?.fields.get(\"IsExportToUS\") != true);\r\n \r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n \r\n private async mainProcessGroupTileVisibility(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let visible = (editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && e.currentTile != null\r\n && e.currentTile.tiles != null);\r\n\r\n if (e.currentTile != null && e.currentTile.tiles != null) {\r\n await e.currentTile.tiles.forEach(async t => await t.evaluate(true));\r\n visible = visible && (e.currentTile.tiles.find(x=> x.isCollapsed == false && x.isEnabled == true) != null);\r\n }\r\n \r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n private async CancelApprovalProcessTileAction() {\r\n if (!await showConfirm(\"Вы точно хотите прервать процесс согласования?\"))\r\n {\r\n return;\r\n }\r\n \r\n const context = UIContext.current;\r\n if (!context) return;\r\n const editor = context.cardEditor;\r\n if (!editor) return;\r\n const cardModel = editor.cardModel;\r\n if (!cardModel) return;\r\n const card = cardModel.card;\r\n if (!card) return;\r\n\r\n card.info[\"CancelApprovalProcess\"] = true;\r\n\r\n await editor.saveCard(context);\r\n }\r\n\r\n private TransferToProjectTileVisibility(e: TileEvaluationEventArgs) {\r\n let visible = false;\r\n const editor = e.currentTile.context.cardEditor;\r\n\r\n const states = [\r\n CdDocStates.Rejected.id as Number\r\n ];\r\n \r\n if (editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID)\r\n {\r\n let arContractsUser = editor.cardModel.card.sections.get(\"ArContractsUser\");\r\n let arDocsConstructor = editor.cardModel.card.sections.get(\"ArDocsConstructor\");\r\n\r\n if (arContractsUser != null && arDocsConstructor != null)\r\n {\r\n visible = (editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update \r\n && states.some(x => x==editor.cardModel!.card.sections.\r\n get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value)\r\n && arContractsUser.fields.get(\"ExtID\") == null\r\n && arContractsUser.fields.get(\"Guid1C\") == null\r\n && arContractsUser.fields.get(\"GuidCRM\") == null\r\n && arDocsConstructor.fields.get(\"CourtCasePaymentDocGuid1C\") == null\r\n && editor.cardModel.card.info.IsCanTransferToProject?.$value);\r\n }\r\n }\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n private async EditCategoryAndTypeTileVisibility(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let visible = (editor != null\r\n && editor.cardModel != null\r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update\r\n && (editor.cardModel.card.sections.tryGet('ArContractsUser') != null)\r\n && (ArContractTileExtension.CheckFieldValue(editor.cardModel, 'ArContractsUser', 'ContractKindID', TessaArContractKinds.ContractKindTessaID))\r\n && editor.cardModel.card.info.IsAdminAndTpRole?.$value);\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n private async CopyCardLinkTileVisibility(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let visible = (editor != null\r\n && editor.cardModel != null\r\n && editor.cardModel.card != null\r\n && editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID\r\n && editor.cardModel.card.storeMode == CardStoreMode.Update);\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n private async TransferToProjectTileAction() {\r\n if (!await showConfirm(\"Вы уверены что хотите перевести договорной документ в проект?\"))\r\n {\r\n return;\r\n }\r\n \r\n const context = UIContext.current;\r\n if (!context) return;\r\n const editor = context.cardEditor;\r\n if (!editor) return;\r\n const cardModel = editor.cardModel;\r\n if (!cardModel) return;\r\n const card = cardModel.card;\r\n if (!card) return;\r\n\r\n card.info[\"IsToTransferToProject\"] = true;\r\n card.info[\"CancelApprovalProcess\"] = true;\r\n\r\n const sectionPkDocumentCommonInfo = card.sections.get(\"PkDocumentCommonInfo\");\r\n if (!sectionPkDocumentCommonInfo) return;\r\n sectionPkDocumentCommonInfo.fields.set(\"StateID\", CdDocStates.Project.id, DotNetType.Int32);\r\n sectionPkDocumentCommonInfo.fields.set(\"StateName\", CdDocStates.Project.caption, DotNetType.String);\r\n\r\n const sectionFdSatelliteCommonInfoVirtual = card.sections.get(\"FdSatelliteCommonInfoVirtual\");\r\n if (!sectionFdSatelliteCommonInfoVirtual) return;\r\n sectionFdSatelliteCommonInfoVirtual.fields.set(\"StateID\", ArContractFdStates.ProjectStateID.id, DotNetType.Guid);\r\n sectionFdSatelliteCommonInfoVirtual.fields.set(\"StateName\", ArContractFdStates.ProjectStateID.caption, DotNetType.String);\r\n\r\n await editor.saveCard(context);\r\n }\r\n private CopyCardTileVisibility(e: TileEvaluationEventArgs) {\r\n let editor = e.currentTile.context.cardEditor;\r\n if (!editor) return;\r\n if (!editor.cardModel) return;\r\n let acu = editor.cardModel.card.sections.tryGet('ArContractsUser');\r\n if (!acu) return;\r\n const ckID = acu.fields.tryGet('ContractKindID');\r\n\r\n let visible =\r\n editor.cardModel.card != null &&\r\n editor.cardModel.card.typeId == CdCardTypes.ArContractTypeID &&\r\n editor.cardModel.card.storeMode == CardStoreMode.Update &&\r\n (Guid.equals(ckID, TessaArContractKinds.ContractKindTessaID) ||\r\n Guid.equals(ckID, TessaArContractKinds.AccountWithoutContractKindTessaID) ||\r\n Guid.equals(ckID, TessaArContractKinds.AdditionalAgreementKindTessaID));\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n private async EditCategoryTileAction() {\r\n const context = UIContext.current;\r\n if (!context) return;\r\n const editor = context.cardEditor;\r\n if (!editor) return;\r\n const model = editor.cardModel;\r\n if (!model) return;\r\n const card = model.card;\r\n if (!card) return;\r\n let dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName(\"PkDialogs\");\r\n if (!dialogsType) {\r\n return;\r\n }\r\n let dialogForm = dialogsType.forms.find(x => x.name === \"EditArContractSidesCategories\");\r\n if (!dialogForm) {\r\n return;\r\n }\r\n let request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n let response = await CardService.instance.new(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n let windowCardModel = createCardModel(response.card, response.sectionRows);\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async (viewModel) => {\r\n let pkVirtualSection = viewModel.cardModel.card.sections.tryGet('PkContractEditSidesCategoryVirtual');\r\n if (pkVirtualSection == null) {\r\n return;\r\n }\r\n\r\n const arContractsUser = model.card.sections.tryGet('ArContractsUser');\r\n const arContractsPartners = model.card.sections.tryGet('ArContractPartners');\r\n const documentCommonInfo = model.card.sections.tryGet('DocumentCommonInfo');\r\n const tessaCode = documentCommonInfo?.fields.get('SecondaryFullNumber');\r\n\r\n if (arContractsUser == null || documentCommonInfo == null || arContractsPartners == null) {\r\n return;\r\n }\r\n\r\n const buyer = arContractsPartners.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 0);\r\n const seller = arContractsPartners.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 1);\r\n\r\n if (buyer == null || seller == null) {\r\n return;\r\n }\r\n\r\n pkVirtualSection.fields.set(\"BuyerID\", buyer?.get('PartnerID'), DotNetType.Guid);\r\n pkVirtualSection.fields.set(\"BuyerName\", buyer?.get('PartnerName'), DotNetType.String);\r\n pkVirtualSection.fields.set(\"BuyerExternalId\", buyer?.get('PartnerExternalID'), DotNetType.Int64);\r\n pkVirtualSection.fields.set(\"BuyerDepartmentID\", buyer?.get('PartnerDepartmentID'), DotNetType.Guid);\r\n pkVirtualSection.fields.set(\"BuyerCategoryID\", buyer?.get('ContractCategoryID'), DotNetType.Guid);\r\n pkVirtualSection.fields.set(\"BuyerCategoryName\", buyer?.get('ContractCategoryName'), DotNetType.String);\r\n pkVirtualSection.fields.set(\"SellerID\", seller?.get('PartnerID'), DotNetType.Guid);\r\n pkVirtualSection.fields.set(\"SellerName\", seller?.get('PartnerName'), DotNetType.String);\r\n pkVirtualSection.fields.set(\"SellerExternalId\", seller?.get('PartnerExternalID'), DotNetType.Int64);\r\n pkVirtualSection.fields.set(\"SellerDepartmentID\", seller?.get('PartnerDepartmentID'), DotNetType.Guid);\r\n pkVirtualSection.fields.set(\"SellerCategoryID\", seller?.get('ContractCategoryID'), DotNetType.Guid);\r\n pkVirtualSection.fields.set(\"SellerCategoryName\", seller?.get('ContractCategoryName'), DotNetType.String);\r\n pkVirtualSection.fields.set(\"ContractTypeID\", arContractsUser.fields.get('ContractTypeID'), DotNetType.Int32);\r\n pkVirtualSection.fields.set(\"ContractTypeName\", arContractsUser.fields.get('ContractTypeName'), DotNetType.String);\r\n pkVirtualSection.fields.set(\"TessaCode\", tessaCode, DotNetType.String);\r\n },\r\n [\r\n new UIButton('Выполнить', async (btn) => {\r\n if (windowCardModel.card.sections.has(\"PkContractEditSidesCategoryVirtual\")) {\r\n let pkVirtualSection = windowCardModel.card.sections.tryGet(\"PkContractEditSidesCategoryVirtual\");\r\n const arContractsPartners = model.card.sections.tryGet('ArContractPartners');\r\n let buyer = arContractsPartners!.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 0);\r\n let seller = arContractsPartners!.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 1);\r\n let sellerNewCategoryId = pkVirtualSection?.fields.get('SellerCategoryNewID');\r\n let buyerNewCategoryId = pkVirtualSection?.fields.get('BuyerCategoryNewID');\r\n let sellerNewCategoryName = pkVirtualSection?.fields.get('SellerCategoryNewName');\r\n let buyerNewCategoryName = pkVirtualSection?.fields.get('BuyerCategoryNewName');\r\n let errorMsg = '';\r\n if (buyerNewCategoryId == null && sellerNewCategoryId == null) {\r\n errorMsg = \"Необходимо указать хотя бы одну новую категорию договора.\";\r\n }\r\n\r\n if (errorMsg !== '') {\r\n showError(errorMsg);\r\n return;\r\n }\r\n\r\n if (buyerNewCategoryId != null && buyer != null) {\r\n buyer?.set(\"ContractCategoryID\", buyerNewCategoryId, DotNetType.Guid);\r\n buyer?.set(\"ContractCategoryName\", buyerNewCategoryName, DotNetType.String);\r\n }\r\n if (sellerNewCategoryId != null && seller != null) {\r\n seller?.set(\"ContractCategoryID\", sellerNewCategoryId, DotNetType.Guid);\r\n seller?.set(\"ContractCategoryName\", sellerNewCategoryName, DotNetType.String);\r\n }\r\n\r\n if ((sellerNewCategoryId != null && seller != null) || (buyerNewCategoryId != null && buyer != null)) {\r\n let storeInfo = {'PkEditCategoryTile': createTypedField(true, DotNetType.Boolean)};\r\n let storeResult = await editor.saveCard(context, storeInfo);\r\n if (storeResult) {\r\n await showMessage(\"Категории успешно изменены.\");\r\n }\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('Отклонить', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n return;\r\n }\r\n\r\n private async EditTypeTileAction() {\r\n const context = UIContext.current;\r\n if (!context) return;\r\n const editor = context.cardEditor;\r\n if (!editor) return;\r\n const model = editor.cardModel;\r\n if (!model) return;\r\n const card = model.card;\r\n if (!card) return;\r\n let dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName(\"PkDialogs\");\r\n if (!dialogsType) {\r\n return;\r\n }\r\n let dialogForm = dialogsType.forms.find(x => x.name === \"EditArContractType\");\r\n if (!dialogForm) {\r\n return;\r\n }\r\n let request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n let response = await CardService.instance.new(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n let windowCardModel = createCardModel(response.card, response.sectionRows);\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async (viewModel) => {\r\n let pkVirtualSection = viewModel.cardModel.card.sections.tryGet('PkContractEditTypeVirtual');\r\n if (pkVirtualSection == null) {\r\n return;\r\n }\r\n\r\n const documentCommonInfo = model.card.sections.tryGet('DocumentCommonInfo');\r\n const tessaCode = documentCommonInfo?.fields.get('SecondaryFullNumber');\r\n\r\n pkVirtualSection.fields.set(\"TessaCode\", tessaCode, DotNetType.String);\r\n },\r\n [\r\n new UIButton('Выполнить', async (btn) => {\r\n if (windowCardModel.card.sections.has(\"PkContractEditTypeVirtual\")) {\r\n const pkVirtualSection = windowCardModel.card.sections.tryGet(\"PkContractEditTypeVirtual\");\r\n let arContractsUser = model.card.sections.tryGet('ArContractsUser');\r\n const newTypeID = pkVirtualSection?.fields.get('ContractTypeID');\r\n const newTypeName = pkVirtualSection?.fields.get('ContractTypeName');\r\n let errorMsg = '';\r\n if (newTypeID == null) {\r\n errorMsg = \"Необходимо указать тип документа.\";\r\n }\r\n\r\n if (errorMsg !== '') {\r\n showError(errorMsg);\r\n return;\r\n }\r\n arContractsUser?.fields.set(\"ContractTypeID\", newTypeID, DotNetType.Int32);\r\n arContractsUser?.fields.set(\"ContractTypeName\", newTypeName, DotNetType.String);\r\n let storeInfo = {'PkEditTypeTile': createTypedField(true, DotNetType.Boolean)};\r\n let storeResult = await editor.saveCard(context, storeInfo);\r\n if (storeResult) {\r\n await showMessage(\"Типы документов успешно изменены.\");\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('Отклонить', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n return;\r\n }\r\n\r\n private async CopyCardLinkTileAction() {\r\n\r\n const context = UIContext.current;\r\n if (!context) return;\r\n const editor = context.cardEditor;\r\n if (!editor) return;\r\n const model = editor.cardModel;\r\n if (!model) return;\r\n const card = model.card;\r\n if (!card) return;\r\n let subjectName = await PkContractUIHelper.GetContractSubject(card as Card);\r\n PkLinkHelper.ClipboardCopyLink(window.location.href, subjectName);\r\n }\r\n\r\n private async CopyCardLinkDesktopTileAction() {\r\n const context = UIContext.current;\r\n if (!context) return;\r\n const editor = context.cardEditor;\r\n if (!editor) return;\r\n const model = editor.cardModel;\r\n if (!model) return;\r\n const card = model.card;\r\n if (!card) return;\r\n let location = window.location.pathname;\r\n location = location[0] == '/' ? location.substr(1) : location;\r\n location = location.slice(0, location.indexOf('/'));\r\n let link = `tessa://tessaclient.${location}/?Action=OpenCard&ID=${card.id}`;\r\n let subjectName = await PkContractUIHelper.GetContractSubject(card as Card);\r\n PkLinkHelper.ClipboardCopyLink(link, subjectName);\r\n }\r\n\r\n /**\r\n * Получение актуальных PartnerAutomated и PartnerDepartmentID.\r\n * Если !PartnerAutomated, то происходит сброс значений:\r\n * Исполнитель, Подразделение исполнителя, Категория, Отв. за расчеты, Подписант\r\n * @param newProps Секция ArContractPartners\r\n */\r\n private async GetActualPartnerFieldsAsync(newProps: CardSection)\r\n {\r\n newProps.rows.forEach(async newRow => {\r\n \r\n let partnerExternalID = newRow.tryGet(\"PartnerExternalID\");\r\n \r\n if (partnerExternalID != null)\r\n {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractPartnerstInfoRequest;\r\n request.info[\"PartnerExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64); \r\n \r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n return;\r\n }\r\n \r\n newRow.set(\"PartnerAutomated\", response.info[\"Automated\"]);\r\n newRow.set(\"PartnerDepartmentID\", response.info[\"PartnerDepartmentID\"]);\r\n if (newRow.tryGet(\"PartnerAutomated\") == true){\r\n return;\r\n }\r\n\r\n newRow.set(\"PerformerID\", null);\r\n newRow.set(\"PerformerName\", null);\r\n newRow.set(\"PerformerGuid1C\", null);\r\n newRow.set(\"PerformerDepartmentID\", null);\r\n newRow.set(\"AccountantName\", null);\r\n newRow.set(\"AccountantID\", null);\r\n newRow.set(\"AccountantGuid1C\", null);\r\n newRow.set(\"ContractCategoryID\", null);\r\n newRow.set(\"ContractCategoryName\", null);\r\n newRow.set(\"ContractCategoryExtID\", null);\r\n newRow.set(\"ContractCategoryGuidDirectum\", null);\r\n newRow.set(\"ContractCategoryIsHopeless\", null);\r\n newRow.set(\"ContractCategoryIsOIDP\", null);\r\n newRow.set(\"ContractCategoryIsTechnical\", null);\r\n newRow.set(\"DepartmentID\", null);\r\n newRow.set(\"DepartmentName\", null);\r\n newRow.set(\"DepartmentGuid1C\", null);\r\n newRow.set(\"SignedID\", null);\r\n newRow.set(\"SignedName\", null);\r\n newRow.set(\"SignedGuid1C\", null);\r\n newRow.set(\"SignedDiadocSigningID\", null);\r\n newRow.set(\"SignedAttorneyID\", null);\r\n }\r\n }); \r\n }\r\n \r\n /** Скрыть тайл Создать копию у уступки */ \r\n private HideTileCreateCardCopyInAssignment(context: ITileLocalExtensionContext) {\r\n\r\n const leftPanel = context.workspace.leftPanel;\r\n const uiContext = leftPanel?.context;\r\n const editor = uiContext?.cardEditor;\r\n\r\n if (editor == null)\r\n {\r\n return;\r\n }\r\n\r\n const createCardCopyTile = leftPanel.tryGetTile(\"CreateCardCopy\");\r\n if (createCardCopyTile != null) {\r\n disableWithCollapsing(createCardCopyTile);\r\n }\r\n }\r\n\r\n /** Скрытие тайлов: Создать шаблон */ \r\n private HideTilesCreateCardTemplate(context: ITileLocalExtensionContext)\r\n {\r\n const leftPanel = context.workspace.leftPanel;\r\n const uiContext = leftPanel?.context;\r\n const editor = uiContext?.cardEditor;\r\n\r\n if (editor == null) \r\n {\r\n return;\r\n }\r\n\r\n // Сокрытие тайлов \"Создать шаблон\"\r\n // Тайл - Создать шаблон\r\n let createCardTemplateTile = leftPanel\r\n .tryGetTile('CardOthers')!\r\n .tryGetTile(\"CreateCardTemplate\");\r\n\r\n if (editor.cardModel == null) {\r\n return;\r\n }\r\n\r\n let acu = editor.cardModel.card.sections\r\n .tryGet('ArContractsUser');\r\n \r\n if (acu == null) {\r\n return;\r\n }\r\n\r\n const contractKindID = acu.fields.tryGet('ContractKindID');\r\n\r\n // Скрытие тайлов при Договор, ДС, СОР, Счет без договора, Уступка для пользователя и админа\r\n if (contractKindID != null\r\n && (Guid.equals(contractKindID, TessaArContractKinds.ContractKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.AdditionalAgreementKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.CancellationAgreementKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.AccountWithoutContractKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID)))\r\n {\r\n if (createCardTemplateTile != null) {\r\n disableWithCollapsing(createCardTemplateTile);\r\n }\r\n }\r\n }\r\n\r\n\r\n /** Проверка заполненного поля Тендер в уступке при типе процедуры АНПТ (электронный) */\r\n private async IsTenderControlFilledInAssignmentAsync(cardModel: ICardModel) : Promise\r\n { \r\n let card = cardModel.card;\r\n if(card)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let contractKindID: guid | null = acuSection!.fields.get(\"ContractKindID\"); \r\n let typeProcedureID = acuSection?.fields.tryGet(\"TypeProcedureID\");\r\n \r\n if (contractKindID != null \r\n && Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID)\r\n && Guid.equals(typeProcedureID, ArTypeProcedure.ANTPElectronic))\r\n { \r\n let tenderControl = CdUIHelper.GetUIControlFromModel(cardModel, \"TenderControl\");\r\n if(tenderControl)\r\n {\r\n tenderControl.isRequired = true;\r\n tenderControl.hasActiveValidation = true;\r\n tenderControl.validationFunc = (c) => {\r\n if (c.hasEmptyValue) {\r\n return 'Заполните поле \"Тендер\"';\r\n }\r\n return null;\r\n };\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /// \r\n /// Проверяет наличие хотя бы одного этапа в ТЧ Настраиваемые участники\r\n /// \r\n private HasParticipantsStages(card: Card){\r\n let customParticipants = card.sections.tryGet(\"ArContractCustomParticipantsVirtual\");\r\n if(!customParticipants){\r\n return false;\r\n }\r\n else{\r\n return customParticipants.rows.length > 0;\r\n }\r\n \r\n }\r\n\r\n /// \r\n /// Действие по нажатию на Отправка статуса в КА.\r\n /// \r\n private async SendStatusToKa() {\r\n await LoadingOverlay.instance.show(async () => {\r\n let context = UIContext.current;\r\n let card = context?.cardEditor?.cardModel?.card;\r\n if (context == null || card == null) {\r\n return;\r\n }\r\n\r\n let cdLinkRequest = new CardRequest();\r\n cdLinkRequest.requestType = PkRequestTypes.ArSendToKa;\r\n cdLinkRequest.info[\"CardID\"] = createTypedField(card?.id, DotNetType.Guid);\r\n\r\n let response = await CardService.instance.request(cdLinkRequest);\r\n let msg = response.validationResult.build().toString();\r\n if (!(msg > '')){\r\n return;\r\n }\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n showError(msg);\r\n }\r\n\r\n }, \"Отправка статуса в КА\");\r\n }\r\n \r\n /// \r\n /// Проверка на актуальность матрицы, если в КСД в блок Участники процесса \r\n /// в атрибут \"Категория договора\" подтянулась категория (к примеру, из род. карточки), \r\n /// которой больше нет в настроечной матрице по организации.\r\n /// \r\n private async CheckMatrixStages(card: Card){\r\n let result = true;\r\n let acp = card.sections.tryGet(\"ArContractPartners\");\r\n if(!acp){\r\n return false;\r\n }\r\n\r\n acp.rows.forEach(async row => {\r\n if(row.tryGet(\"ContractCategoryID\")){\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractCheckMatrixUpToDate;\r\n request.info[\"PartnerDepartmentID\"] = createTypedField(row.tryGet(\"PartnerDepartmentID\"), DotNetType.Guid);\r\n request.info[\"ContractCategoryID\"] = createTypedField(row.tryGet(\"ContractCategoryID\"), DotNetType.Guid);\r\n let response = await CardService.instance.request(request);\r\n \r\n // Если хоть раз вернулся false, то результат равен false\r\n if(!(result && response.info?.Result?.$value)){\r\n result = false;\r\n }\r\n }\r\n });\r\n \r\n return result;\r\n }\r\n}\r\n\r\nclass CessionSide\r\n{\r\n public ID : number | undefined;\r\n public Name : string | undefined;\r\n public PartnersList : Array;\r\n}\r\n\r\nclass Partner {\r\n ID : string | undefined;\r\n Name : string | undefined;\r\n Inn : string | undefined;\r\n ExternalID : number;\r\n Automated : boolean | undefined;\r\n RoleID : number;\r\n RoleName : string;\r\n}\r\n","/** Типы внутреннего документа*/\r\nexport class PkInnerDocumentKinds\r\n{\r\n /** Документ перемещения*/\r\n static TransferDocumentID = 'a7e69d35-09c0-42b4-a845-2c13793bcc93'\r\n}","import { userSession } from 'common/utility';\r\nimport { TileExtension, ITileLocalExtensionContext, disableWithCollapsing } from 'tessa/ui/tiles';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkInnerDocumentKinds } from '../Helpers/PkInnerDocumentKinds';\r\n\r\n\r\nexport class PkInnerDocumentTileExtension extends TileExtension {\r\n\r\n public initializingLocal(context: ITileLocalExtensionContext) {\r\n this.HideTilesAsync(context);\r\n }\r\n\r\n /// \r\n /// Скрытие кнопок.\r\n /// \r\n private HideTilesAsync(context: ITileLocalExtensionContext) {\r\n // если у текущего пользователя есть права администратора\r\n if (userSession.isAdmin) {\r\n return;\r\n }\r\n\r\n // получаем необходимые параметры\r\n const leftPanel = context.workspace.leftPanel;\r\n const uiContext = leftPanel?.context;\r\n const editor = uiContext?.cardEditor;\r\n\r\n // проверяем, что открыта карточка\r\n if (editor == null) {\r\n return;\r\n }\r\n\r\n // проверяем тип открытой карточки\r\n if (editor.cardModel?.cardType.id !== PkCardTypes.PkInnerDocumentTypeID) {\r\n return;\r\n }\r\n\r\n let card = editor.cardModel.card;\r\n let section = card.sections.tryGet(\"PkInnerDocumentInfo\");\r\n if (section)\r\n {\r\n var kind = section.fields.tryGet(\"KindID\");\r\n if (kind == PkInnerDocumentKinds.TransferDocumentID)\r\n {\r\n // скрываем кнопку Скопировать карточку\r\n let actionTile = leftPanel.tryGetTile(\"CdActions\");\r\n if (actionTile)\r\n {\r\n const createCardCopyTile = actionTile.tryGetTile(\"CopyCard\");\r\n if (createCardCopyTile != null) {\r\n disableWithCollapsing(createCardCopyTile);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import { userSession } from 'common/utility';\r\nimport { TileExtension, ITileLocalExtensionContext, disableWithCollapsing } from 'tessa/ui/tiles';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\n\r\n\r\nexport class PkPersonnelDocumentTileExtension extends TileExtension {\r\n\r\n public async initializingLocal(context: ITileLocalExtensionContext) {\r\n await this.HideTilesAsync(context);\r\n }\r\n\r\n /// \r\n /// Скрытие кнопок.\r\n /// \r\n private async HideTilesAsync(context: ITileLocalExtensionContext) {\r\n // если у текущего пользователя есть права администратора\r\n if (userSession.isAdmin) {\r\n return;\r\n }\r\n\r\n // получаем необходимые параметры\r\n const leftPanel = context.workspace.leftPanel;\r\n const uiContext = leftPanel?.context;\r\n const editor = uiContext?.cardEditor;\r\n\r\n // проверяем, что открыта карточка\r\n if (editor == null) {\r\n return;\r\n }\r\n\r\n // проверяем тип открытой карточки\r\n if (editor.cardModel?.cardType.id !== PkCardTypes.PkPersonnelDocumentTypeID) {\r\n return;\r\n }\r\n\r\n // скрываем кнопки\r\n const createCardCopyTile = leftPanel.tryGetTile(\"CreateCardCopy\");\r\n if (createCardCopyTile != null) {\r\n disableWithCollapsing(createCardCopyTile);\r\n }\r\n\r\n const CreateCardTemplateTile = leftPanel.tryGetTile(\"CreateCardTemplate\");\r\n if (CreateCardTemplateTile != null) {\r\n disableWithCollapsing(CreateCardTemplateTile);\r\n }\r\n\r\n const deleteCardTile = leftPanel.tryGetTile(\"DeleteCard\");\r\n if (deleteCardTile != null) {\r\n disableWithCollapsing(deleteCardTile);\r\n }\r\n\r\n const cardActionHistoryTile = leftPanel.tryGetTile(\"CardActionHistory\");\r\n if (cardActionHistoryTile != null) {\r\n disableWithCollapsing(cardActionHistoryTile);\r\n }\r\n\r\n const exportCardTile = leftPanel.tryGetTile(\"ExportCard\");\r\n if (exportCardTile != null) {\r\n disableWithCollapsing(exportCardTile);\r\n }\r\n }\r\n}","import { TileExtension, ITileLocalExtensionContext, disableWithCollapsing } from 'tessa/ui/tiles';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\n\r\n\r\nexport class PkPersonnelPacketVirtualTileExtension extends TileExtension {\r\n\r\n public async initializingLocal(context: ITileLocalExtensionContext) {\r\n await this.HideTilesAsync(context);\r\n }\r\n\r\n /// \r\n /// Скрытие кнопок.\r\n /// \r\n private async HideTilesAsync(context: ITileLocalExtensionContext) {\r\n // получаем необходимые параметры\r\n const leftPanel = context.workspace.leftPanel;\r\n const uiContext = leftPanel?.context;\r\n const editor = uiContext?.cardEditor;\r\n\r\n // проверяем, что открыта карточка\r\n if (editor == null) {\r\n return;\r\n }\r\n\r\n // проверяем тип открытой карточки\r\n if (editor.cardModel?.cardType.id !== PkCardTypes.PkPersonnelPacketVirtualTypeID) {\r\n return;\r\n }\r\n\r\n // скрываем кнопки\r\n const deleteCardTile = leftPanel.tryGetTile(\"DeleteCard\");\r\n if (deleteCardTile != null) {\r\n disableWithCollapsing(deleteCardTile);\r\n }\r\n }\r\n}","import { TileExtension, ITileGlobalExtensionContext, TileGroups, TileEvaluationEventArgs, Tile } from 'tessa/ui/tiles';\r\nimport { createCardModel, showLoadingOverlay, showNotEmpty, UIButton, UIContext } from 'tessa/ui';\r\nimport { userSession } from 'common/utility';\r\nimport { CardNewRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { createTypedField, DotNetType, Guid, TypedField, Visibility } from 'tessa/platform';\r\nimport { ICardModel } from 'tessa/ui/cards';\r\nimport { CardPermissionFlags, CardRow, CardRowState } from 'tessa/cards';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\n\r\nexport class PkEksInfoTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n // добавляем кнопку \"Информация ЕКС\"\r\n PkEksInfoTileExtension.AddEksInfoTile(context);\r\n }\r\n\r\n /** Добавление кнопки \"Информация ЕКС\". */\r\n private static AddEksInfoTile(context: ITileGlobalExtensionContext) {\r\n // получаем необходимые параметры\r\n const leftPanel = context.workspace.leftPanel;\r\n\r\n // добавляем кнопку \"Информация ЕКС\"\r\n leftPanel.tiles.push(new Tile({\r\n name: \"PkEksInfoTile\",\r\n caption: \"Информация ЕКС\",\r\n icon: \"ta icon-thin-089\",\r\n contextSource: leftPanel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 100,\r\n command: PkEksInfoTileExtension.OpenEksInfoAsync,\r\n evaluating: PkEksInfoTileExtension.CanOpenEksInfoAsync\r\n }));\r\n }\r\n\r\n /** Возможность открытия информации по ЕКС. */\r\n private static async CanOpenEksInfoAsync(e: TileEvaluationEventArgs) {\r\n // получаем необходимые параметры\r\n const editor = e.currentTile.context.cardEditor;\r\n\r\n // если открыта не карточка или пользователь не является администратором\r\n if (editor == null || !userSession.isAdmin) {\r\n // скрываем кнопку и выходим\r\n e.setIsEnabledWithCollapsing(e.currentTile, false);\r\n return;\r\n }\r\n\r\n // инициализируем запрос на получение информации по ЕКС\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetEksMessagesInfo;\r\n request.info[\"CardID\"] = editor.cardModel?.card != null\r\n ? createTypedField(editor.cardModel.card.id, DotNetType.Guid)\r\n : null;\r\n\r\n // отправляем запрос\r\n const response = await CardService.instance.request(request);\r\n\r\n // устанавливаем видимость кнопки\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n response.validationResult.isSuccessful &&\r\n response.info.EksMessagesInfo != null &&\r\n response.info.EksMessagesInfo.length > 0);\r\n }\r\n\r\n /** Обновление секции с сообщениями по ЕКС. */\r\n private static async RefreshEksMessagesInfoSectionAsync(cardID: string, cardModel: ICardModel) {\r\n await showLoadingOverlay(async () => {\r\n // получаем необходимую секцию\r\n const pkemivSection = cardModel.card.sections.tryGet(\"PkEksMessagesInfoVirtual\");\r\n if (pkemivSection == null) {\r\n return;\r\n }\r\n\r\n // инициализируем запрос на получение информации по ЕКС\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetEksMessagesInfo;\r\n request.info[\"CardID\"] = createTypedField(cardID, DotNetType.Guid);\r\n\r\n // отправляем запрос\r\n const response = await CardService.instance.request(request);\r\n\r\n // проверяем ответ\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n // получаем данные из ответа\r\n const eksMessagesInfo = response.info.EksMessagesInfo;\r\n\r\n // проверяем\r\n if (eksMessagesInfo == null) {\r\n return;\r\n }\r\n\r\n // чистим секцию\r\n pkemivSection.rows.clear();\r\n\r\n // заполняем секцию\r\n for (const eksMessageInfo of eksMessagesInfo) {\r\n const newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"TaskID\", eksMessageInfo.TaskID);\r\n newRow.set(\"MessageID\", eksMessageInfo.MessageID);\r\n newRow.set(\"StatusId\", eksMessageInfo.StatusID);\r\n newRow.set(\"StatusName\", eksMessageInfo.StatusName);\r\n newRow.set(\"DateModified\", eksMessageInfo.DateModified);\r\n newRow.set(\"Error\", eksMessageInfo.Error);\r\n newRow.set(\"TaskTypeID\", eksMessageInfo.TaskTypeID);\r\n newRow.set(\"TaskTypeCaption\", eksMessageInfo.TaskTypeCaption);\r\n newRow.state = CardRowState.None;\r\n pkemivSection.rows.push(newRow);\r\n }\r\n\r\n // получаем или добавляем секцию с правами\r\n const pkemivpSection = cardModel.card.permissions.sections.getOrAdd(\"PkEksMessagesInfoVirtual\");\r\n\r\n // устанавливаем разрешения\r\n pkemivpSection.setSectionPermissions(\r\n CardPermissionFlags.ProhibitDeleteRow |\r\n CardPermissionFlags.ProhibitInsertRow |\r\n CardPermissionFlags.ProhibitModify);\r\n }, \"Загрузка информации по сообщениям ЕКС\");\r\n }\r\n\r\n /** Открытие информации по ЕКС. */\r\n private static async OpenEksInfoAsync() {\r\n // получаем необходимые параметры\r\n const context = UIContext.current;\r\n const editor = context.cardEditor;\r\n\r\n // проверяем, что открыта карточка\r\n if (editor?.cardModel?.card == null) {\r\n return;\r\n }\r\n\r\n // получаем небходимым тип карточки с диалоговыми формами\r\n const dialogType = MetadataStorage.instance.cardMetadata.getCardTypeById(PkCardTypes.PkDialogsTypeID);\r\n if (dialogType == null) {\r\n return;\r\n }\r\n\r\n // получаем необходимую диалоговую форму\r\n const dialogForm = dialogType.forms.find(x => x.name === \"PkEksInfoDialog\");\r\n\r\n // проверяем ее наличие\r\n if (dialogForm == null) {\r\n return;\r\n }\r\n\r\n // инициализируем запрос на создание каточки\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogType.id;\r\n\r\n // отправляем запрос\r\n const response = await CardService.instance.new(request);\r\n\r\n // проверяем ответ\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n // создаем модель карточки\r\n const windowCardModel = createCardModel(\r\n response.card,\r\n response.sectionRows);\r\n\r\n // обновляем секцию с сообщениями ЕКС\r\n await PkEksInfoTileExtension.RefreshEksMessagesInfoSectionAsync(editor.cardModel.card.id, windowCardModel);\r\n\r\n // отображаем диалоговое окно\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async () => {\r\n // получаем контрол таблички\r\n const eksInfoTable = CdUIHelper.GetUIControlFromModel(windowCardModel, \"PkEksMessagesInfoDialog\");\r\n\r\n // проверяем контрол\r\n if (eksInfoTable == null) {\r\n return;\r\n }\r\n\r\n // скрываем кнопки \"Добавить\" и \"Удалить\"\r\n eksInfoTable.addButton.setVisibility(Visibility.Collapsed);\r\n eksInfoTable.removeButton.setVisibility(Visibility.Collapsed);\r\n\r\n // получаем колонку \"Обновлено\"\r\n const dateModifiedColumnIndex = eksInfoTable.columns.findIndex(x => \r\n x.header === \"Обновлено\");\r\n\r\n // если такая колонка есть\r\n if (dateModifiedColumnIndex != -1) {\r\n // сортируем по ней по убыванию\r\n eksInfoTable.setSortingColumn(dateModifiedColumnIndex, true);\r\n }\r\n },\r\n [\r\n new UIButton(\r\n \"Переотправить в ЕКС\",\r\n async () => {\r\n // получаем контрол таблички\r\n const eksInfoTable = CdUIHelper.GetUIControlFromModel(windowCardModel, \"PkEksMessagesInfoDialog\");\r\n\r\n // проверяем контрол\r\n if (eksInfoTable == null) {\r\n return;\r\n }\r\n\r\n // получаем список ID заданий выделенных сообщений\r\n const taskIDs = eksInfoTable.selectedRows.map(x =>\r\n x.row.tryGetField(\"TaskID\") as TypedField);\r\n\r\n // переотправляем сообщения в ЕКС\r\n await PkEksInfoTileExtension.ResendEksMessagesAsync(taskIDs);\r\n\r\n // обновляем секцию с сообщениями ЕКС\r\n await PkEksInfoTileExtension.RefreshEksMessagesInfoSectionAsync(editor!.cardModel!.card.id, windowCardModel);\r\n },\r\n null,\r\n null,\r\n // здесь мы устанавливаем видимость кнопки, т.к. доступность isEnabled не работает\r\n () => { \r\n // получаем контрол таблички\r\n const eksInfoTable = CdUIHelper.GetUIControlFromModel(windowCardModel, \"PkEksMessagesInfoDialog\");\r\n\r\n // проверяем контрол\r\n if (eksInfoTable == null) {\r\n return Visibility.Collapsed;\r\n }\r\n\r\n // проверяем что среди выделенных сообщений есть хотя бы 1 не в состоянии \"Не отправлено\"\r\n return eksInfoTable.selectedRows.some(x =>\r\n x.row.tryGet(\"StatusId\") !== 0) ? Visibility.Visible : Visibility.Collapsed;\r\n }),\r\n new UIButton(\r\n \"Обновить данные\",\r\n async () => {\r\n // await showMessage(\"kek\");\r\n // обновляем секцию с сообщениями ЕКС\r\n await PkEksInfoTileExtension.RefreshEksMessagesInfoSectionAsync(editor!.cardModel!.card.id, windowCardModel);\r\n }),\r\n new UIButton(\"Закрыть\", (button) => { button.close(); })\r\n ],\r\n true);\r\n }\r\n\r\n /** Переотправка сообщениий в ЕКС. */\r\n private static async ResendEksMessagesAsync(taskIDs: TypedField[]) {\r\n // инициализируем запрос на обновление сообщений в ЕКС\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkUpdateEksMessagesInfo;\r\n request.info[\"TaskIDs\"] = taskIDs;\r\n request.info[\"StatusID\"] = createTypedField(0, DotNetType.Int32);\r\n\r\n // отправляем запрос\r\n const response = await CardService.instance.request(request);\r\n\r\n // проверяем ответ\r\n await showNotEmpty(response.validationResult.build());\r\n }\r\n}","export class PkConfidantTypes\r\n{\r\n static OrganizationId = 0;\r\n\r\n static OrganizationName = \"Организация\";\r\n\r\n static EmployeeId = 1;\r\n\r\n static EmployeeName = \"Сотрудник\";\r\n}","export class PkKCKPartners {\r\n\r\n //Обобщенный контрагент КСК Физ.лица ПАО ПИК СЗ (ГК ПИК)\r\n static PaoPikSzPartnerExternalID = 234576;\r\n static PaoPikSzPartnerID = 'aedf785b-1c18-430c-82b8-76330027a853';\r\n static PaoPikSzPartnerName = 'Физ.лица ПАО ПИК СЗ (ГК ПИК)';\r\n}","import { TileExtension, Tile, TileGroups, TileEvaluationEventArgs , ITileLocalExtensionContext, ITileGlobalExtensionContext, ITile} from 'tessa/ui/tiles';\r\nimport { UIContext, LoadingOverlay, showError, tryGetFromInfo, showConfirm, showNotEmpty, showMessage } from 'tessa/ui';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { createCard } from 'tessa/ui/uiHost';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CardRow, CardRowState, CardSection } from 'tessa/cards';\r\nimport { CdTaskTypes } from 'src/cdScripts/Helpers/CdTaskTypes';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkConfidantTypes } from '../Helpers/PkConfidantTypes';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { PkOutgoingKinds } from '../Helpers/PkOutgoingKinds';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { PkKCKPartners } from '../Helpers/PkKCKPartners';\r\n\r\nexport class ArPowerOfAttorneyTileExtension extends TileExtension {\r\n \r\n public initializingLocal(context: ITileLocalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n const contextSource = panel.contextSource; \r\n\r\n panel.tiles.push(new Tile({\r\n name: 'PkAuthorityCreateBasedOn',\r\n caption: 'Создать Полномочие на основании заявки',\r\n icon: 'ta icon-thin-063',\r\n contextSource,\r\n command: async () => { this.CreateAuthorityCardTileAction() },\r\n group: TileGroups.Cards,\r\n order: 1,\r\n evaluating: this.CreateAuthorityCardTileVisible\r\n }));\r\n\r\n panel.tiles.push(new Tile({\r\n name: 'RevokePowerOfAttorneyFromCardTile',\r\n caption: 'Отозвать доверенность',\r\n icon: 'ta icon-thin-065',\r\n contextSource,\r\n command: async () => { this.RevokePowerOfAttorneyFromCardAction() },\r\n group: TileGroups.Cards,\r\n order: 1,\r\n evaluating: this.RevokePowerOfAttorneyFromCardTileVisible\r\n }));\r\n\r\n \r\n panel.tiles.push(new Tile({\r\n name: 'PkClearDiadocError',\r\n caption: 'Очистить ошибки диадок',\r\n icon: 'ta icon-thin-060',\r\n contextSource,\r\n command: async (tile) => { this.ClearDiadocErrorForPowerOfAttorneyTileAction(tile) },\r\n group: TileGroups.Cards,\r\n order: 1,\r\n evaluating: this.PkClearDiadocErrorTileVisible\r\n }));\r\n }\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n const contextSource = panel.contextSource; \r\n\r\n panel.tiles.push(new Tile({\r\n name: 'RevokePowerOfAttorneyFromViewTile',\r\n caption: 'Отозвать доверенность',\r\n icon: 'ta icon-thin-065',\r\n contextSource,\r\n command: async (p) => { this.RevokePowerOfAttorneyFromViewAction(p) },\r\n group: TileGroups.Cards,\r\n order: 1,\r\n evaluating: this.RevokePowerOfAttorneyFromViewTileVisible\r\n }));\r\n } \r\n\r\n /* Кнопка Отозвать доверенность видна для действующих доверенностей */\r\n private RevokePowerOfAttorneyFromCardTileVisible(e: TileEvaluationEventArgs) \r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null \r\n && Guid.equals(editor.cardModel.card.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)\r\n && editor.cardModel.card.sections.has(\"PkDocumentCommonInfo\")\r\n && editor.cardModel.card.sections.get(\"PkDocumentCommonInfo\")?.fields.get(\"StateID\") === CdDocStates.CurrentVersion.id\r\n );\r\n }\r\n \r\n /* Кнопка Отозвать доверенность видна для действующих доверенностей */\r\n private PkClearDiadocErrorTileVisible(e: TileEvaluationEventArgs) \r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null \r\n && Guid.equals(editor.cardModel.card.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)\r\n && editor.cardModel.card.sections.has(\"PkDiadocInfo\")\r\n && editor.cardModel.card.sections.get(\"PkDiadocInfo\")?.rows?.filter(row => !!row.get(\"Error\"))?.length! > 0\r\n && tryGetFromInfo(editor.cardModel.card.info, 'IsUserPoAAdmin', false));\r\n }\r\n\r\n /*\r\n Создаем ИСХ с предзаполненным типом \"Отзыв доверенности\", Организацией-получателем, Доверенностями для отзыва. \r\n */\r\n private async RevokePowerOfAttorneyFromCardAction()\r\n {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n } \r\n \r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkOutgoingTypeID,\r\n cardTypeName: PkCardTypes.PkOutgoingTypeName,\r\n saveCreationRequest: false,\r\n creationModeDisplayText: '$UI_Common_Splash_CreatingCard',\r\n cardModifierAction : async ctx =>\r\n {\r\n let newCard = ctx.card; \r\n\r\n // берем значения из карточки\r\n const arPowerOfAttorneySection : CardSection | undefined = model.card.sections.tryGet('ArPowerOfAttorney'); \r\n const arConfidants : CardSection | undefined = model.card.sections.tryGet('ArConfidants'); \r\n const poaDci : CardSection | undefined = model.card.sections.tryGet('DocumentCommonInfo'); \r\n const archiveAct : CardSection | undefined = model.card.sections.tryGet('ArchiveAct'); \r\n\r\n var departmentID = arPowerOfAttorneySection?.fields.get(\"PrincipalOrganizationDepartureID\");\r\n var departmentName = arPowerOfAttorneySection?.fields.get(\"PrincipalOrganizationDepartureName\");\r\n\r\n // доверенное лицо, берем первое\r\n let arConfidantsRow = arConfidants?.rows.find(() => true);\r\n var userID = arConfidantsRow?.get(\"UserID\");\r\n var userName = arConfidantsRow?.get(\"UserName\");\r\n var userExternalID = arConfidantsRow?.get(\"UserExternalID\");\r\n var userDictionaryName = arConfidantsRow?.get(\"UserDictionaryName\");\r\n\r\n // предзаполняем поля карточки исходящего нужными значениями \r\n const dci : CardSection | undefined = newCard.sections.tryGet('DocumentCommonInfo'); \r\n dci?.fields.set(\"DepartmentID\", departmentID, DotNetType.Guid);\r\n dci?.fields.set(\"DepartmentName\", departmentName, DotNetType.String);\r\n dci?.fields.set(\"Subject\", PkOutgoingKinds.PowerOfAttorneyRevocationName, DotNetType.String);\r\n \r\n const pkOutgoing : CardSection | undefined = newCard.sections.tryGet('PkOutgoing'); \r\n pkOutgoing?.fields.set(\"TypeID\", PkOutgoingKinds.PowerOfAttorneyRevocationId, DotNetType.Guid);\r\n pkOutgoing?.fields.set(\"TypeDocumentKind\", PkOutgoingKinds.PowerOfAttorneyRevocationName, DotNetType.String);\r\n\r\n let confidantType = this.GetConfidantType(userDictionaryName);\r\n\r\n if (confidantType != null)\r\n {\r\n pkOutgoing?.fields.set(\"ConfidantTypeID\", confidantType[0], DotNetType.Int32);\r\n pkOutgoing?.fields.set(\"ConfidantTypeName\", confidantType[1], DotNetType.String);\r\n }\r\n\r\n pkOutgoing?.fields.set(\"ConfidantID\",userID,DotNetType.Guid);\r\n pkOutgoing?.fields.set(\"ConfidantName\",userName,DotNetType.String);\r\n\r\n pkOutgoing?.fields.set(\"POAFormID\",arPowerOfAttorneySection?.fields.get(\"PowerOfAttorneyFormID\"),DotNetType.Int32);\r\n pkOutgoing?.fields.set(\"POAFormName\",arPowerOfAttorneySection?.fields.get(\"PowerOfAttorneyFormName\"),DotNetType.String);\r\n\r\n if (userExternalID && parseInt(userExternalID)) { \r\n pkOutgoing?.fields.set(\"ConfidantExternalID\",userExternalID,DotNetType.Int64);\r\n }\r\n\r\n let pps = newCard.sections.tryGet('PkPersonalSigners');\r\n let ppsNewRow = pps?.rows.add();\r\n ppsNewRow!.rowId = Guid.newGuid();\r\n ppsNewRow!.set(\"SignerDepartmentID\", departmentID, DotNetType.Guid);\r\n ppsNewRow!.set(\"SignerID\", archiveAct?.fields.get(\"SignerID\"), DotNetType.Guid);\r\n ppsNewRow!.set(\"SignerName\", archiveAct?.fields.get(\"SignerName\"), DotNetType.String);\r\n ppsNewRow!.set(\"Order\", 0, DotNetType.Int32);\r\n ppsNewRow!.state = CardRowState.Inserted;\r\n\r\n const arPowerOfAttorneyRevocationList = newCard.sections.tryGet('ArPowerOfAttorneyRevocationList');\r\n let row = arPowerOfAttorneyRevocationList?.rows.add();\r\n row!.rowId = Guid.newGuid();\r\n row!.set(\"DocumentID\", model.card.id, DotNetType.Guid);\r\n row!.set(\"DocumentFullNumber\", poaDci?.fields.get(\"FullNumber\"), DotNetType.String);\r\n row!.set(\"DocumentRegDate\", poaDci?.fields.get(\"DateOfRegistration\"), DotNetType.DateTime);\r\n row!.set(\"DocumentFormID\", arPowerOfAttorneySection?.fields.get(\"PowerOfAttorneyFormID\"), DotNetType.Int32);\r\n row!.set(\"DocumentFormName\", arPowerOfAttorneySection?.fields.get(\"PowerOfAttorneyFormName\"), DotNetType.String);\r\n row!.set(\"DocumentTypeID\", arPowerOfAttorneySection?.fields.get(\"PowerOfAttorneyTypeID\"), DotNetType.Int32);\r\n row!.set(\"DocumentTypeName\", arPowerOfAttorneySection?.fields.get(\"PowerOfAttorneyTypeName\"), DotNetType.String); \r\n row!.state = CardRowState.Inserted;\r\n \r\n if (arPowerOfAttorneyRevocationList?.rows.some(x => x != null))\r\n {\r\n let apoav = newCard.sections.tryGet('ArPowerOfAttorneyVirtual');\r\n apoav?.fields.set(\"PowerOfAttorneyFormID\", row?.getField('DocumentFormID')?.$value, DotNetType.Int32);\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkOutgoingGetIndividualsKCKRequest;\r\n request.info[\"DepartmentID\"] = createTypedField(departmentID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n const pkChanceryPartners = newCard.sections.tryGet('PkChanceryPartners');\r\n var pcpNewRow = new CardRow();\r\n pcpNewRow!.rowId = Guid.newGuid();\r\n pcpNewRow!.set(\"PartnerEmail\", 'Не указан', DotNetType.String);\r\n pcpNewRow!.state = CardRowState.Inserted;\r\n \r\n let extID = tryGetFromInfo(response.info, \"ExtID\");;\r\n if (response.validationResult.isSuccessful == true && extID)\r\n {\r\n pcpNewRow!.set(\"PartnerExternalID\", response.info.ExtID.$value , DotNetType.Int64);\r\n pcpNewRow!.set(\"PartnerID\", response.info.ID.$value, DotNetType.Guid);\r\n pcpNewRow!.set(\"PartnerName\", response.info.Name.$value, DotNetType.String);\r\n }\r\n else\r\n {\r\n pcpNewRow!.set(\"PartnerExternalID\", PkKCKPartners.PaoPikSzPartnerExternalID, DotNetType.Int64);\r\n pcpNewRow!.set(\"PartnerID\", PkKCKPartners.PaoPikSzPartnerID, DotNetType.Guid);\r\n pcpNewRow!.set(\"PartnerName\", PkKCKPartners.PaoPikSzPartnerName, DotNetType.String);\r\n }\r\n\r\n pkChanceryPartners?.rows.push(pcpNewRow);\r\n let pdci = newCard.sections.tryGet('PkDocumentCommonInfo');\r\n pdci?.fields.set(\"PartnersContacts\", userName, DotNetType.String);\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n\r\n /* Кнопка Отозвать доверенность видна из представления доверенностей для действующих доверенностей */\r\n private RevokePowerOfAttorneyFromViewTileVisible(e: TileEvaluationEventArgs) \r\n {\r\n let visible = false;\r\n let viewContext = e.currentTile.context.viewContext; \r\n if (viewContext \r\n && viewContext.data \r\n && viewContext.data.length > 0 \r\n && viewContext.selectedRows != null \r\n && viewContext.view \r\n && viewContext.view.metadata.alias.toLowerCase().includes(\"powerofattorney\")) { \r\n visible = viewContext.selectedRows.every(x => x.has(\"StateID\") && x.get(\"StateID\") != null && x.get(\"StateID\") === CdDocStates.CurrentVersion.id); \r\n }\r\n \r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n \r\n /*\r\n Создаем ИСХ с предзаполненным типом \"Отзыв доверенности\", Организацией-получателем, Доверенностями для отзыва. \r\n */\r\n private async RevokePowerOfAttorneyFromViewAction(tile: ITile)\r\n {\r\n var viewContext = tile.context.viewContext;\r\n if (!viewContext || !viewContext.selectedRows) return;\r\n \r\n const distinctSelectedOrgs = [...new Set(viewContext.selectedRows.map(item => item.get('POAOrgDepID') as string))];\r\n const distinctSelectedForms = [...new Set(viewContext.selectedRows.map(item => item.get('POAFormID') as number))];\r\n\r\n if (distinctSelectedOrgs.length > 1) {\r\n showError(\"Для оформления Отзыва все доверенности должны быть от одной организации-доверителя!\");\r\n return;\r\n }\r\n\r\n if (distinctSelectedForms.length > 1) {\r\n showError(\"Для оформления Отзыва все доверенности должны быть одной формы!\");\r\n return;\r\n }\r\n \r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkOutgoingTypeID,\r\n cardTypeName: PkCardTypes.PkOutgoingTypeName,\r\n saveCreationRequest: false,\r\n creationModeDisplayText: '$UI_Common_Splash_CreatingCard',\r\n cardModifierAction : async ctx =>\r\n {\r\n let newCard = ctx.card; \r\n\r\n // берем значения из представлений\r\n let firstSelectedRow = viewContext!.selectedRows!.find(()=>true);\r\n if (!firstSelectedRow) return;\r\n\r\n let departmentID = firstSelectedRow.get(\"POAOrgDepID\");\r\n let departmentName = firstSelectedRow.get(\"POAOrgDepName\");\r\n\r\n // в представлении это строка, где через запятую перечислены доверенные лица, берем первое\r\n let userID = (firstSelectedRow.get(\"POAUserID\") as string).split(',').find(()=>true);\r\n let userName = (firstSelectedRow.get(\"POAUserName\") as string).split(',').find(()=>true);\r\n let userExternalID = (firstSelectedRow.get(\"POAUserExternalID\") as string).split(',').find(()=>true);\r\n let userDictionaryName = (firstSelectedRow.get(\"POAUserDictionaryName\") as string).split(',').find(()=>true);\r\n\r\n // предзаполняем поля карточки исходящего нужными значениями \r\n const dci : CardSection | undefined = newCard.sections.tryGet('DocumentCommonInfo'); \r\n dci?.fields.set(\"DepartmentID\", departmentID, DotNetType.Guid);\r\n dci?.fields.set(\"DepartmentName\", departmentName, DotNetType.String);\r\n dci?.fields.set(\"Subject\", PkOutgoingKinds.PowerOfAttorneyRevocationName, DotNetType.String);\r\n \r\n const pkOutgoing : CardSection | undefined = newCard.sections.tryGet('PkOutgoing'); \r\n pkOutgoing?.fields.set(\"TypeID\", PkOutgoingKinds.PowerOfAttorneyRevocationId, DotNetType.Guid);\r\n pkOutgoing?.fields.set(\"TypeDocumentKind\", PkOutgoingKinds.PowerOfAttorneyRevocationName, DotNetType.String);\r\n\r\n let confidantType = this.GetConfidantType(userDictionaryName);\r\n\r\n if (confidantType != null)\r\n {\r\n pkOutgoing?.fields.set(\"ConfidantTypeID\", confidantType[0], DotNetType.Int32);\r\n pkOutgoing?.fields.set(\"ConfidantTypeName\", confidantType[1], DotNetType.String);\r\n }\r\n\r\n pkOutgoing?.fields.set(\"ConfidantID\", userID,DotNetType.Guid);\r\n pkOutgoing?.fields.set(\"ConfidantName\", userName,DotNetType.String);\r\n\r\n pkOutgoing?.fields.set(\"POAFormID\", firstSelectedRow.get(\"POAFormID\"),DotNetType.Int32);\r\n pkOutgoing?.fields.set(\"POAFormName\", firstSelectedRow.get(\"POAFormName\"),DotNetType.String);\r\n\r\n if (userExternalID && parseInt(userExternalID)) { \r\n pkOutgoing?.fields.set(\"ConfidantExternalID\", userExternalID, DotNetType.Int64);\r\n }\r\n\r\n let pps = newCard.sections.tryGet('PkPersonalSigners');\r\n let ppsNewRow = pps?.rows.add();\r\n ppsNewRow!.rowId = Guid.newGuid();\r\n ppsNewRow!.set(\"SignerDepartmentID\", departmentID, DotNetType.Guid);\r\n ppsNewRow!.set(\"SignerID\", firstSelectedRow.get(\"POASignerID\"), DotNetType.Guid);\r\n ppsNewRow!.set(\"SignerName\", firstSelectedRow.get(\"POASignerName\"), DotNetType.String);\r\n ppsNewRow!.set(\"Order\", 0, DotNetType.Int32);\r\n ppsNewRow!.state = CardRowState.Inserted;\r\n\r\n var arPowerOfAttorneyRevocationList = newCard.sections.tryGet('ArPowerOfAttorneyRevocationList');\r\n viewContext!.selectedRows!.forEach(async selectedRow => {\r\n let row = arPowerOfAttorneyRevocationList?.rows.add();\r\n row!.rowId = Guid.newGuid();\r\n row!.set(\"DocumentID\", selectedRow.get(\"POAID\"), DotNetType.Guid);\r\n row!.set(\"DocumentFullNumber\", selectedRow.get(\"POAFullNumber\"), DotNetType.String);\r\n row!.set(\"DocumentRegDate\", selectedRow.get(\"POARegDate\") ? selectedRow.get(\"POARegDate\") : null, DotNetType.DateTime);\r\n row!.set(\"DocumentFormID\", selectedRow.get(\"POAFormID\"), DotNetType.Int32);\r\n row!.set(\"DocumentFormName\", selectedRow.get(\"POAFormName\"), DotNetType.String);\r\n row!.set(\"DocumentTypeID\", selectedRow.get(\"POATypeID\"), DotNetType.Int32);\r\n row!.set(\"DocumentTypeName\", selectedRow.get(\"POATypeName\"), DotNetType.String); \r\n row!.state = CardRowState.Inserted;\r\n })\r\n\r\n if (arPowerOfAttorneyRevocationList?.rows.some(x => x != null))\r\n {\r\n let apoav = newCard.sections.tryGet('ArPowerOfAttorneyVirtual');\r\n apoav?.fields.set(\"PowerOfAttorneyFormID\", arPowerOfAttorneyRevocationList.rows.find(x => x != null)?.getField(\"DocumentFormID\")?.$value, DotNetType.Int32);\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkOutgoingGetIndividualsKCKRequest;\r\n request.info[\"DepartmentID\"] = createTypedField(departmentID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n const pkChanceryPartners = newCard.sections.tryGet('PkChanceryPartners');\r\n var pcpNewRow = new CardRow();\r\n pcpNewRow!.rowId = Guid.newGuid();\r\n pcpNewRow!.set(\"PartnerEmail\", 'Не указан', DotNetType.String);\r\n pcpNewRow!.state = CardRowState.Inserted;\r\n \r\n let extID = tryGetFromInfo(response.info, \"ExtID\");;\r\n if (response.validationResult.isSuccessful == true && extID)\r\n {\r\n pcpNewRow!.set(\"PartnerExternalID\", response.info.ExtID.$value , DotNetType.Int64);\r\n pcpNewRow!.set(\"PartnerID\", response.info.ID.$value, DotNetType.Guid);\r\n pcpNewRow!.set(\"PartnerName\", response.info.Name.$value, DotNetType.String);\r\n }\r\n else\r\n {\r\n pcpNewRow!.set(\"PartnerExternalID\", PkKCKPartners.PaoPikSzPartnerExternalID, DotNetType.Int64);\r\n pcpNewRow!.set(\"PartnerID\", PkKCKPartners.PaoPikSzPartnerID, DotNetType.Guid);\r\n pcpNewRow!.set(\"PartnerName\", PkKCKPartners.PaoPikSzPartnerName, DotNetType.String);\r\n }\r\n\r\n pkChanceryPartners?.rows.push(pcpNewRow);\r\n let pdci = newCard.sections.tryGet('PkDocumentCommonInfo');\r\n pdci?.fields.set(\"PartnersContacts\", userName, DotNetType.String);\r\n }\r\n });\r\n });\r\n }\r\n \r\n private CreateAuthorityCardTileVisible(e: TileEvaluationEventArgs) \r\n {\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null \r\n && Guid.equals(editor.cardModel.card.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)\r\n && editor.cardModel.card.tasks.some(t => t.typeId == CdTaskTypes.ArPowerOfAttorneyExecutionTaskTypeID)\r\n );\r\n }\r\n\r\n\r\n private async CreateAuthorityCardTileAction()\r\n {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n \r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: CdCardTypes.ArPowersOfAttorneyAuthorityTypeID,\r\n cardTypeName: CdCardTypes.ArPowersOfAttorneyAuthorityTypeName,\r\n saveCreationRequest: false,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn',\r\n cardModifierAction : ctx =>\r\n {\r\n let newCard = ctx.card;\r\n newCard.info[\"BasedOnCardID\"] = createTypedField(model.card.id, DotNetType.Guid);\r\n }\r\n });\r\n });\r\n }\r\n\r\n \r\n private async ClearDiadocErrorForPowerOfAttorneyTileAction(tile: ITile) {\r\n\r\n let dialogResult = await showConfirm(\"Вы уверены, что хотите очистить ошибки Диадок в карточке?\");\r\n\r\n if (!dialogResult)\r\n {\r\n return;\r\n }\r\n\r\n let editor = tile.context.cardEditor;\r\n let model;\r\n if (editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n\r\n let isSuccessful : boolean = true;\r\n \r\n await LoadingOverlay.instance.show(async () => {\r\n \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkClearDiadocErrorRequest;\r\n request.info[\"CardID\"] = createTypedField(model.card.id, DotNetType.Guid);\r\n request.info[\"LoggerName\"] = createTypedField('PoACommon', DotNetType.String);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n await showNotEmpty(response.validationResult.build());\r\n isSuccessful = false;\r\n return;\r\n }\r\n }, 'Очищаем данные...');\r\n\r\n if (isSuccessful) {\r\n await showMessage('Готово!');\r\n }\r\n\r\n await editor.refreshCard();\r\n }\r\n\r\n private GetConfidantType (dictionaryName: string | undefined): [number, string] | null\r\n {\r\n let confidantType: [number, string] | null = null;\r\n\r\n if (dictionaryName)\r\n {\r\n switch (dictionaryName)\r\n {\r\n case \"KCKPartners\":\r\n confidantType = [PkConfidantTypes.OrganizationId, PkConfidantTypes.OrganizationName];\r\n break;\r\n case \"PKUsers\":\r\n confidantType = [PkConfidantTypes.EmployeeId, PkConfidantTypes.EmployeeName];\r\n break;\r\n }\r\n }\r\n\r\n return confidantType;\r\n }\r\n}","import { createTypedField, DotNetType } from \"tessa/platform\";\r\nimport { IStorage, IStorageArray } from \"tessa/platform/storage\";\r\nimport { ValidationResult } from \"tessa/platform/validation\";\r\nimport { showLoadingOverlay, showMessage, showNotEmpty } from \"tessa/ui\";\r\nimport { ITile, ITileGlobalExtensionContext, Tile, TileEvaluationEventArgs, TileExtension, TileGroups } from \"tessa/ui/tiles\";\r\nimport { createCard } from \"tessa/ui/uiHost\";\r\nimport { ITessaViewResult, TessaViewRequest } from \"tessa/views\";\r\n\r\n/** Добавление плитки для дозаполнения договоров.\r\nПри переходе в представление Незаполнение договоры становится доступной плитка Дозаполнить договоры.\r\nПри нажатии на плитку создается карточка Дозаполнение договоров, в которую подтягиваются все выбранные карточки из представления.*/\r\nexport class ArContractsCompletionTileExtension extends TileExtension { \r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext): void {\r\n context.workspace.leftPanel.tiles.push(new Tile({\r\n name: \"CompleteContracts\",\r\n caption: \"Дозаполнить договоры\",\r\n icon: \"ta icon-thin-413\",\r\n contextSource: context.workspace.leftPanel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: this.commandActionAsync,\r\n evaluating: this.setEnableForTile\r\n }));\r\n }\r\n\r\n private setEnableForTile(e: TileEvaluationEventArgs){ \r\n const isEnabled: boolean | null = e.currentTile.context.viewContext?.view?.metadata?.alias === \"_ArContract_\";\r\n e.setIsEnabledWithCollapsing(e.currentTile, isEnabled == true);\r\n }\r\n\r\n private async commandActionAsync(tile: ITile){ \r\n\r\n await showLoadingOverlay(async ()=>{\r\n const viewContext = tile?.context?.viewContext;\r\n if (!viewContext || !viewContext.view){\r\n return;\r\n }\r\n\r\n const tessaViewRequest = new TessaViewRequest(viewContext.view.metadata);\r\n viewContext.parameters.parameters.forEach(viewParameter => {\r\n tessaViewRequest.values.push(viewParameter);\r\n }); \r\n \r\n let viewResult: ITessaViewResult;\r\n try {\r\n viewResult = await viewContext.view.getData(tessaViewRequest);\r\n } catch (err) {\r\n await showNotEmpty(ValidationResult.fromError(err));\r\n return;\r\n } \r\n \r\n const cardsCnt : number = viewResult.rows.length;\r\n if (cardsCnt == 0){\r\n await showMessage(\"В представлении не отображено ни одного документа!\", \"Проверка данных представления\");\r\n return;\r\n }\r\n\r\n const cardIdColumnIndex: number = viewResult.getColumnIndex(\"ContractID\");\r\n const cardSubjectColumnIndex: number = viewResult.getColumnIndex(\"ContractName\");\r\n if (cardIdColumnIndex === -1 || cardSubjectColumnIndex === -1){\r\n return;\r\n }\r\n\r\n const requestInfo: IStorage = {}; \r\n \r\n let cards : IStorageArray = [];\r\n viewResult.rows.forEach(row => { \r\n let map : IStorage = {}; \r\n map[\"CardID\"] = createTypedField(row[cardIdColumnIndex], DotNetType.Guid);\r\n map[\"CardDesc\"] = createTypedField(row[cardSubjectColumnIndex], DotNetType.String);\r\n cards.push(map);\r\n });\r\n\r\n requestInfo[\"Cards\"] = cards;\r\n\r\n await createCard({\r\n cardTypeId: 'D6255C67-BA30-4BF3-9A2F-7D858163F8A2', \r\n info: requestInfo \r\n });\r\n\r\n }, \r\n \"Создание карточки...\");\r\n } \r\n}","export class PkItSystems {\r\n\r\n static TUSID = \"d639fb1c-7edf-4661-969a-5566fac4b5ea\";\r\n static OtherTUSID = \"8de372b5-a918-49af-a7dc-4723bb893e21\";\r\n static DirectualID = \"a152369e-0f7b-48e8-993b-06e29e9d8b8d\";\r\n static PikProjectID = \"3ccad637-97fa-4d1a-a57c-d79cd575f8ad\";\r\n static PikIndustryID = \"72ebd44c-ac3b-4c94-b4b2-0b6c0f586d9a\";\r\n static ZUPID = \"f50e735f-675b-428a-a0dd-ad000c2fc330\";\r\n}","import { TileExtension, ITileGlobalExtensionContext, Tile, TileGroups, TileEvaluationEventArgs } from 'tessa/ui/tiles';\r\nimport { CardRequest, CardService, CardResponse } from 'tessa/cards/service';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { showMessage, showNotEmpty, UIContext } from 'tessa/ui';\r\nimport { ICardModel } from 'tessa/ui/cards';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { CardSection } from 'tessa/cards';\r\nimport { PkItSystems } from '../Helpers/PkItSystems';\r\nimport { userSession } from 'common/utility';\r\n\r\n/** Тайл \"Пересчитать суммы\" для первичных документов. */\r\nexport class ArActRecalculateAmountsTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n panel.tiles.push(new Tile({\r\n name: \"ArActRecalculateAmountsTile\",\r\n caption: \"Пересчитать суммы по статьям\",\r\n icon: \"\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ArActRecalculateAmountsTileExtension.RecalculateAmounts,\r\n evaluating: ArActRecalculateAmountsTileExtension.EnableOnArActCard\r\n }));\r\n\r\n }\r\n\r\n private static async EnableOnArActCard(e: TileEvaluationEventArgs) {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext!.cardEditor;\r\n let model: ICardModel | null;\r\n if (editor == null ||\r\n (model = editor!.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n let visible: boolean = false;\r\n if (model\r\n && Guid.equals(model.cardType.id, PkCardTypes.ArActTypeID)) {\r\n const pkServiceMessageInfo: CardSection | undefined = model.card.sections.tryGet('PkServiceMessageInfo');\r\n // ID Системы-источника, нам нужен Конструктор Актов\r\n const systemID: guid | null = pkServiceMessageInfo!.fields.tryGet('SystemID');\r\n if (systemID\r\n && Guid.equals(systemID, PkItSystems.DirectualID)\r\n && userSession.isAdmin) {\r\n visible = true;\r\n }\r\n }\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n private static async RecalculateAmounts() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext!.cardEditor;\r\n let model: ICardModel | null;\r\n if (editor == null ||\r\n (model = editor!.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n const pkServiceMessageInfo: CardSection | undefined = model.card.sections.tryGet('PkServiceMessageInfo');\r\n if (!pkServiceMessageInfo) return;\r\n const sysObjectID: guid | null = pkServiceMessageInfo!.fields.tryGet('SysObjectId');\r\n if (sysObjectID !== null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArActRecalculateAmountsRequestID;\r\n //request.info[\"CardID\"] = createTypedField(model.card.id, DotNetType.Guid);\r\n request.info[\"SysObjectID\"] = createTypedField(sysObjectID, DotNetType.Guid);\r\n\r\n const response: CardResponse = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n await showMessage(\"Суммы успешно пересчитаны\");\r\n } else {\r\n showMessage(\"SysObjectID is null\");\r\n }\r\n }\r\n}","import { createTypedField, DotNetType } from 'tessa/platform';\r\nimport { showLoadingOverlay } from 'tessa/ui';\r\nimport { TileExtension, ITileLocalExtensionContext, Tile, disableWithCollapsing } from 'tessa/ui/tiles';\r\nimport { createCard } from 'tessa/ui/uiHost';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkCorrespondenceSendingTypes } from '../Helpers/PkCorrespondenceSendingTypes';\r\n\r\n\r\nexport class PkCorrespondenceSendingRequestTileExtension extends TileExtension {\r\n\r\n public async initializingLocal(context: ITileLocalExtensionContext) {\r\n // скрытие кнопок\r\n this.HideTiles(context);\r\n\r\n // инициализация тайла создания заявки на отправку корреспонденции\r\n await this.InitializingCorrespondenceSendingRequestTile(context);\r\n }\r\n\r\n /** Скрытие кнопок. */\r\n private HideTiles(context: ITileLocalExtensionContext) {\r\n // получаем необходимые параметры\r\n const leftPanel = context.workspace.leftPanel;\r\n const uiContext = leftPanel?.context;\r\n const editor = uiContext?.cardEditor;\r\n\r\n // проверяем, что открыта карточка\r\n if (editor == null) {\r\n return;\r\n }\r\n\r\n // проверяем тип открытой карточки\r\n if (editor.cardModel?.cardType.id !== PkCardTypes.PkCorrespondenceSendingRequestTypeID) {\r\n return;\r\n }\r\n\r\n // получаем тайл \"Другие\"\r\n const otherTile = leftPanel.tryGetTile('CardOthers');\r\n\r\n // скрываем кнопки\r\n if (otherTile != null) {\r\n const otherCreateCardCopyTile = otherTile.tryGetTile(\"CreateCardCopy\");\r\n if (otherCreateCardCopyTile != null) {\r\n disableWithCollapsing(otherCreateCardCopyTile);\r\n }\r\n\r\n const otherCreateCardTemplateTile = otherTile.tryGetTile(\"CreateCardTemplate\");\r\n if (otherCreateCardTemplateTile != null) {\r\n disableWithCollapsing(otherCreateCardTemplateTile);\r\n }\r\n }\r\n\r\n const createCardCopyTile = leftPanel.tryGetTile(\"CreateCardCopy\");\r\n if (createCardCopyTile != null) {\r\n disableWithCollapsing(createCardCopyTile);\r\n }\r\n }\r\n\r\n /** Инициализация тайла создания заявки на отправку корреспонденции. */\r\n private async InitializingCorrespondenceSendingRequestTile(context: ITileLocalExtensionContext) {\r\n // получаем правую панель\r\n const rightPanel = context.workspace.rightPanel;\r\n\r\n // получаем тайл \"Создать карточку\"\r\n const createCardTile = rightPanel.tryGetTile(\"CreateCard\");\r\n\r\n // получаем тайл \"Документы\"\r\n const documentsTile = createCardTile?.tryGetTile(\"Documents\");\r\n\r\n // получаем все дочерние тайлы у тайла \"Создать карточку\"\r\n // т.к. тайлы могут находиться в CreateCardMore по иерархии\r\n const createCardTilesIterable = createCardTile?.enumerateTiles();\r\n const createCardTiles = createCardTilesIterable != null ? Array.from(createCardTilesIterable) : null;\r\n\r\n // получаем тайл, в котором находится тайл создания конверта\r\n const parentCorrespondenceSendingRequestTile = createCardTiles?.find(x => \r\n x.tiles.some(y => y.name == \"PkCorrespondenceSendingRequest\"));\r\n\r\n // получаем тайл создания заявки на отправку корреспонденции\r\n const correspondenceSendingRequestTile = parentCorrespondenceSendingRequestTile?.tryGetTile(\"PkCorrespondenceSendingRequest\");\r\n\r\n // проверяем\r\n if (correspondenceSendingRequestTile == null ||\r\n documentsTile == null) {\r\n return;\r\n }\r\n\r\n // получаем индекс тайла заявки на отправку корреспонденции\r\n const index = parentCorrespondenceSendingRequestTile!.tiles.indexOf(correspondenceSendingRequestTile);\r\n\r\n // удаляем тайл создания заявки на отправку корреспонденции из родительского тайла\r\n parentCorrespondenceSendingRequestTile!.tiles.splice(index, 1);\r\n\r\n // добавляем дочерние тайлы\r\n correspondenceSendingRequestTile.tiles.push(new Tile({\r\n name: \"RussianPost\",\r\n caption: \"Почта России\",\r\n icon: \"\",\r\n contextSource: correspondenceSendingRequestTile.contextSource,\r\n order: 0,\r\n command: () => this.CreateCorrespondenceSendingRequestAsync(PkCorrespondenceSendingTypes.RussianPost) \r\n }));\r\n correspondenceSendingRequestTile.tiles.push(new Tile({\r\n name: \"Couriers\",\r\n caption: \"Курьеры\",\r\n icon: \"\",\r\n contextSource: correspondenceSendingRequestTile.contextSource,\r\n order: 1,\r\n command: () => this.CreateCorrespondenceSendingRequestAsync(PkCorrespondenceSendingTypes.Couriers)\r\n }));\r\n correspondenceSendingRequestTile.tiles.push(new Tile({\r\n name: \"ExpressDelivery\",\r\n caption: \"Экспресс доставка\",\r\n icon: \"\",\r\n contextSource: correspondenceSendingRequestTile.contextSource,\r\n order: 2,\r\n command: () => this.CreateCorrespondenceSendingRequestAsync(PkCorrespondenceSendingTypes.ExpressDelivery)\r\n }));\r\n\r\n // удаляем команду с основного тайла (чтобы клик не работал)\r\n correspondenceSendingRequestTile.command = null;\r\n\r\n // устанавливаем ордер для основного тайла (нам нужно после тайла \"Документы\")\r\n correspondenceSendingRequestTile.order = documentsTile.order;\r\n\r\n // добавляем основной тайл в тайл \"Создать карточку\"\r\n createCardTile!.tiles.push(correspondenceSendingRequestTile);\r\n }\r\n\r\n /** Создание карточки заявки на отправку корреспонденции. */\r\n private async CreateCorrespondenceSendingRequestAsync(\r\n sendingType: PkCorrespondenceSendingTypes) {\r\n await showLoadingOverlay(async () => {\r\n // создаем карточку\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkCorrespondenceSendingRequestTypeID,\r\n info: {\r\n // устанавливаем вид отправки в Info\r\n SendingTypeID: createTypedField(sendingType, DotNetType.Int32)\r\n }\r\n })}, \"Создаётся карточка.\");\r\n }\r\n\r\n}","import { CardStoreMode } from 'tessa/cards';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { showLoadingOverlay, UIContext } from 'tessa/ui';\r\nimport { TileExtension, ITileLocalExtensionContext, Tile, TileEvaluationEventArgs } from 'tessa/ui/tiles';\r\nimport { createCard } from 'tessa/ui/uiHost';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkCorrespondenceSendingTypes } from '../Helpers/PkCorrespondenceSendingTypes';\r\n\r\nexport class PkEnvelopeTileExtension extends TileExtension {\r\n\r\n public async initializingLocal(context: ITileLocalExtensionContext) {\r\n // инициализация тайла \"Отправления\" -> \"Почта России\" -> \"Конверт\"\r\n this.InitializingCreateEnvelopeTile(context);\r\n\r\n // инициализация тайла \"Создать заявку на отправку корреспонденции\"\r\n this.InitializingCreateCorrespondenceSendingRequestTile(context);\r\n }\r\n\r\n /** Инициализация тайла \"Отправления\" -> \"Почта России\" -> \"Конверт\". */\r\n private InitializingCreateEnvelopeTile(context: ITileLocalExtensionContext) {\r\n // получаем правую панель\r\n const rightPanel = context.workspace.rightPanel;\r\n\r\n // получаем тайл \"Создать карточку\"\r\n const createCardTile = rightPanel.tryGetTile(\"CreateCard\");\r\n\r\n // получаем тайл \"Документы\"\r\n const documentsTile = createCardTile?.tryGetTile(\"Documents\");\r\n\r\n // получаем все дочерние тайлы у тайла \"Создать карточку\"\r\n // т.к. тайлы могут находиться в CreateCardMore по иерархии\r\n const createCardTilesIterable = createCardTile?.enumerateTiles();\r\n const createCardTiles = createCardTilesIterable != null ? Array.from(createCardTilesIterable) : null;\r\n\r\n // получаем тайл, в котором находится тайл создания конверта\r\n const parentEnvelopeTile = createCardTiles?.find(x => \r\n x.tiles.some(y => y.name == \"PkEnvelope\"));\r\n\r\n // получаем тайл создания конверта\r\n let envelopeTile = parentEnvelopeTile?.tryGetTile(\"PkEnvelope\");\r\n\r\n // проверяем\r\n if (envelopeTile == null ||\r\n documentsTile == null) {\r\n return;\r\n }\r\n\r\n // получаем индекс тайла создания конверта\r\n const index = parentEnvelopeTile!.tiles.indexOf(envelopeTile);\r\n\r\n // удаляем тайл создания конверта из родительского тайла\r\n parentEnvelopeTile!.tiles.splice(index, 1);\r\n\r\n // создаем тайл \"Отправления\"\r\n const dispatchTile = new Tile({\r\n name: \"PkDispatch\",\r\n caption: \"Отправления\",\r\n icon: \"\",\r\n contextSource: createCardTile!.contextSource,\r\n command: null \r\n });\r\n\r\n // создаем тайл \"Почта России\"\r\n const russianPostTile = new Tile({\r\n name: \"PkPostOfficeRF\",\r\n caption: \"Почта России\",\r\n icon: \"\",\r\n contextSource: dispatchTile.contextSource,\r\n command: null \r\n });\r\n\r\n // создаем тайл \"Конверт\"\r\n envelopeTile = new Tile({\r\n name: \"PkEnvelope\",\r\n caption: \"Конверт\",\r\n icon: \"\",\r\n contextSource: russianPostTile.contextSource,\r\n command: this.CreateEnvelopeAsync\r\n });\r\n\r\n // устанавливаем ордер для основного тайла (нам нужно после тайла \"Документы\")\r\n dispatchTile.order = documentsTile.order;\r\n\r\n // добавляем тайл \"Конверт\" в тайл \"Почта России\"\r\n russianPostTile.tiles.push(envelopeTile);\r\n\r\n // добавляем тайл \"Почта России\" в тайл \"Отправления\"\r\n dispatchTile.tiles.push(russianPostTile);\r\n\r\n // добавляем основной тайл \"Отправления\" в тайл \"Создать карточку\"\r\n createCardTile!.tiles.push(dispatchTile);\r\n }\r\n\r\n /** Инициализация тайла \"Создать заявку на отправку корреспонденции\". */\r\n private InitializingCreateCorrespondenceSendingRequestTile(\r\n context: ITileLocalExtensionContext) {\r\n // получаем левую панель\r\n const leftPanel = context.workspace.leftPanel;\r\n\r\n // получаем эдитор из контекста\r\n const editor = leftPanel?.context?.cardEditor;\r\n\r\n // если не удалось получить, значит открыта не карточка\r\n if (editor == null) {\r\n return;\r\n }\r\n\r\n // проверяем тип открытой карточки\r\n if (!Guid.equals(editor.cardModel?.cardType?.id, PkCardTypes.PkEnvelopeTypeID)) {\r\n return;\r\n }\r\n\r\n // создаем тайл\r\n const correspondenceSendingRequestTile = new Tile({\r\n name: \"CreatePkCorrespondenceSendingRequest\",\r\n caption: \"Создать заявку\\n\" +\r\n \"на отправку\\n\" +\r\n \"корреспонденции\",\r\n icon: \"ta icon-thin-084\",\r\n contextSource: leftPanel.contextSource,\r\n command: this.CreateCorrespondenceSendingRequestAsync,\r\n evaluating: this.CreateCorrespondenceSendingRequestEvaluating\r\n });\r\n\r\n // добавляем тайл\r\n leftPanel.tiles.push(correspondenceSendingRequestTile);\r\n }\r\n\r\n /** Создание карточки конверта. */\r\n private async CreateEnvelopeAsync() {\r\n await showLoadingOverlay(async () => {\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkEnvelopeTypeID\r\n });\r\n }, \"Создаётся карточка.\");\r\n }\r\n\r\n /** Создание карточки заявки на отправку корреспонденции. */\r\n private async CreateCorrespondenceSendingRequestAsync() {\r\n // получаем текущий контекст\r\n const uiContext = UIContext.current;\r\n\r\n // получаем карточку из контекста\r\n const card = uiContext.cardEditor?.cardModel?.card;\r\n\r\n // проверяем карточку\r\n if (card == null) {\r\n return;\r\n }\r\n\r\n // получаем секции\r\n const pkeiSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n const pkrvSection = card.sections.tryGet(\"PkRecipientsVirtual\");\r\n\r\n // проверяем и получаем секции\r\n if (pkeiSection == null ||\r\n pkrvSection == null) {\r\n return;\r\n }\r\n\r\n await showLoadingOverlay(async () => {\r\n // получаем первую строку таблички получателей\r\n const recipientRow = pkrvSection.rows.length > 0 ? pkrvSection.rows[0] : null;\r\n\r\n // создаем карточку\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkCorrespondenceSendingRequestTypeID,\r\n info: {\r\n EnvelopeID: createTypedField(card.id, DotNetType.Guid),\r\n SendingTypeID: createTypedField(PkCorrespondenceSendingTypes.RussianPost, DotNetType.Int32),\r\n SenderID: pkeiSection.fields.tryGetField(\"SenderID\"),\r\n SenderName: pkeiSection.fields.tryGetField(\"SenderName\"),\r\n SenderDepartmentID: pkeiSection.fields.tryGetField(\"SenderDepartmentID\"),\r\n SenderOrganizationID: pkeiSection.fields.tryGetField(\"SenderOrganizationID\"),\r\n SenderOrganizationName: pkeiSection.fields.tryGetField(\"SenderOrganizationName\"),\r\n ReceiverOrganizationID: recipientRow?.tryGetField(\"OrganizationID\"),\r\n ReceiverOrganizationExternalID: recipientRow?.tryGetField(\"OrganizationExternalID\"),\r\n ReceiverOrganizationName: recipientRow?.tryGetField(\"OrganizationName\"),\r\n ReceiverName: recipientRow?.tryGetField(\"ContactPerson\"),\r\n ReceiverAddress: recipientRow?.tryGetField(\"AddressFull\")\r\n }\r\n });\r\n }, \"Создаётся карточка\");\r\n }\r\n\r\n /** Доступность тайла \"Создать заявку на отправку корреспонденции\". */\r\n private CreateCorrespondenceSendingRequestEvaluating(e: TileEvaluationEventArgs) {\r\n // получаем карточку\r\n const card = e.currentTile.context.cardEditor?.cardModel?.card;\r\n\r\n // проверяем\r\n if (card == null) {\r\n // устанавливаем видимость тайла\r\n e.setIsEnabledWithCollapsing(e.currentTile, false);\r\n\r\n // выходим\r\n return;\r\n }\r\n\r\n // инициализируем флаг наличия ссылки на исходящий документ\r\n let isExistsOutgoingReference = false;\r\n\r\n // получаем секции\r\n const pkrvSection = card.sections.tryGet(\"PkReferencesVirtual\");\r\n\r\n // проверяем\r\n if (pkrvSection != null) {\r\n // получаем первую ссылку на исходящий документ\r\n const existingOutgoingReference = pkrvSection.rows.find(x =>\r\n Guid.equals(x.tryGet(\"CardTypeID\") as string, PkCardTypes.PkOutgoingTypeID));\r\n\r\n // если ссылка есть, тогда задаем флаг\r\n isExistsOutgoingReference = existingOutgoingReference != null;\r\n }\r\n\r\n // устанавливаем видимость тайла\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n card.storeMode != CardStoreMode.Insert &&\r\n isExistsOutgoingReference);\r\n }\r\n}","import { UIContext, showMessage, tryGetFromInfo } from \"tessa/ui\";\r\nimport { CdCardTypes } from \"src/cdScripts/Helpers/CdCardTypes\";\r\nimport { CdDocStates } from \"src/cdScripts/Helpers/CdDocStates\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { DotNetType, Guid, createTypedField } from \"tessa/platform\";\r\nimport { ITileLocalExtensionContext, Tile, TileEvaluationEventArgs, TileExtension, TileGroups } from \"tessa/ui/tiles\";\r\nimport { Card } from \"tessa/cards\";\r\nimport { PkRequestTypes } from \"../Helpers/PkRequestTypes\";\r\n\r\nexport class ArPowerOfAttorneyAdditionalTileExtension extends TileExtension {\r\n\r\n public initializingLocal(context: ITileLocalExtensionContext) {\r\n\r\n const panel = context.workspace.leftPanel;\r\n const contextSource = panel.contextSource; \r\n\r\n panel.tiles.push(new Tile({\r\n name: 'PkReRegistrationPowerOfAttorney1',\r\n caption: 'Перерегистрирация доверенности',\r\n icon: 'ta icon-thin-091',\r\n contextSource,\r\n command: async () => { this.ReRegistrationPowerOfAttorneyTileAction() },\r\n group: TileGroups.Cards,\r\n order: 1,\r\n evaluating: this.ReRegistrationTileVisible\r\n }));\r\n }\r\n\r\n private async ReRegistrationPowerOfAttorneyTileAction()\r\n {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n const card: Card | undefined = editor?.cardModel?.card;\r\n if (uiContext == null || editor == null || card == null) {\r\n return;\r\n }\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArPOARegisterRequest;\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n \r\n\r\n if (response.validationResult.isSuccessful != true || response.info.Result == false)\r\n {\r\n await showMessage(\"Возникла ошибка при перерегистрации.\");\r\n }\r\n }\r\n\r\n private ReRegistrationTileVisible(e: TileEvaluationEventArgs) \r\n {\r\n const statesList = [\r\n CdDocStates.CurrentVersion.id as Number,\r\n CdDocStates.OnRegistration.id as Number,\r\n CdDocStates.Signing.id as Number,\r\n CdDocStates.OnAgreement.id as Number\r\n ];\r\n\r\n const editor = e.currentTile.context.cardEditor;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null \r\n && editor.cardModel != null \r\n && editor.cardModel.card != null \r\n && Guid.equals(editor.cardModel.card.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)\r\n && editor.cardModel.card.sections.has(\"PkDocumentCommonInfo\")\r\n && statesList.some(x => x==editor.cardModel!.card.sections.get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value)\r\n && tryGetFromInfo(editor.cardModel.card.info, 'IsUserPoAAdmin', false)); \r\n }\r\n}","import { TileExtension, ITileGlobalExtensionContext, Tile, TileGroups,\r\n TileEvaluationEventArgs } from 'tessa/ui/tiles';\r\nimport { UIContext, showNotEmpty, showMessage, showConfirm, LoadingOverlay, tryGetFromInfo, IUIContext} from 'tessa/ui';\r\nimport { CardRequest, CardService, CardResponse } from 'tessa/cards/service';\r\nimport { RequestParameterBuilder, SelectedValue } from 'tessa/views';\r\nimport { ViewParameterMetadata, equalsCriteriaOperator } from 'tessa/views/metadata';\r\nimport { createTypedField, DotNetType, DbType, TypedField } from 'tessa/platform';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { showViewsDialog } from 'tessa/ui/uiHost';\r\nimport { PkCommonHelper } from '../Helpers/PkCommonHelper';\r\nimport { ChRequestTypes } from '../Helpers/ChRequestTypes';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { CardSection } from 'tessa/cards';\r\nimport { userSession } from 'common/utility';\r\nimport { PkCardHelper } from '../Helpers/PkCardHelper';\r\n\r\nexport class ArActTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n panel.tiles.push(new Tile({\r\n name: \"PkChangeDiadocFolder\",\r\n caption: \"Изменить папку Диадок\",\r\n icon: \"ta icon-thin-050\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: ArActTileExtensionHelper.changeDiadocFolderCommand,\r\n evaluating: ArActTileExtensionHelper.changeDiadocFolderTileVisible\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkCreatePacket\",\r\n caption: \"Создать пакет\",\r\n icon: \"ta icon-thin-211\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 15,\r\n command: ArActTileExtensionHelper.createPacketCommand,\r\n evaluating: ArActTileExtensionHelper.createPacketTileVisible\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkRevokeTemplateInDiadoc\",\r\n caption: \"Отозвать шаблон в Диадок\",\r\n icon: \"ta icon-thin-065\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 15,\r\n command: ArActTileExtensionHelper.RevokeTemplateInDiadoc,\r\n evaluating: ArActTileExtensionHelper.CanRevokeTemplateInDiadoc\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkFillPassportInfo\",\r\n caption: \"Перезаполнить согласующих\",\r\n icon: \"\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 15,\r\n command: ArActTileExtensionHelper.RefillPasportInfo,\r\n evaluating: ArActTileExtensionHelper.CanRefillPasportInfo\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"ArRejectDocuments\",\r\n caption: \"Отклонить документы в диадоке\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: ArActTileExtensionHelper.rejectCards,\r\n evaluating: ArActTileExtensionHelper.canRejectCards\r\n }));\r\n panel.tiles.push(new Tile({\r\n name: \"PkSendActToDiadoc\",\r\n caption: \"Отправить первичный документ в ДиаДок\",\r\n icon: \"\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 61,\r\n command: ArActTileExtensionHelper.reSendActToDiadocAsync,\r\n evaluating: ArActTileExtensionHelper.canReSendActToDiadoc\r\n }));\r\n }\r\n}\r\n\r\nexport class ArActTileExtensionHelper {\r\n\r\n public static changeDiadocFolderTileVisible(e: TileEvaluationEventArgs) {\r\n\r\n const editor = e.currentTile.context.cardEditor;\r\n let viewContext = e.currentTile.context.viewContext;\r\n\r\n let visible = ArActTileExtensionHelper.isDocIDsValid(editor, viewContext);\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n visible);\r\n }\r\n\r\n public static createPacketTileVisible(e: TileEvaluationEventArgs) {\r\n\r\n let visible = false;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n visible);\r\n }\r\n\r\n public static async changeDiadocFolderCommand() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let viewContext = UIContext.current.viewContext;\r\n let getDocIDsResult = ArActTileExtensionHelper.getDocIDs(editor, viewContext);\r\n let docIDs = getDocIDsResult.docIDs;\r\n let packetID = getDocIDsResult.packetID;\r\n\r\n if (PkCommonHelper.IsNullOrWhitespace(docIDs)) {\r\n return;\r\n }\r\n\r\n let selectedValue = await ArActTileExtensionHelper.selectNewUnit(docIDs, packetID);\r\n\r\n if (selectedValue == null || selectedValue.selectedRow == null) {\r\n return;\r\n }\r\n\r\n let unitDiadocID = selectedValue.selectedRow.get(\"UODID\");\r\n let unitDiadocName = selectedValue.selectedRow.get(\"UODName\");\r\n\r\n if (editor != null && editor.cardModel != null && editor.cardModel.card != null) {\r\n if (editor.cardModel.cardType.id === PkCardTypes.PkPacketVirtualTypeID) {\r\n let success = await ArActTileExtensionHelper.changeFolderInCards(docIDs, unitDiadocID, unitDiadocName);\r\n if (success)\r\n editor.refreshCard(uiContext);\r\n }\r\n else if (editor != null) {\r\n const storeInfo: IStorage = {\r\n 'ChangeDiadocFolder': createTypedField(true, DotNetType.Boolean),\r\n 'UnitsIfDiadocID': createTypedField(unitDiadocID, DotNetType.Guid),\r\n 'UnitsIfDiadocName': createTypedField(unitDiadocName, DotNetType.String)\r\n };\r\n editor.saveCard(uiContext, storeInfo);\r\n }\r\n }\r\n else if (viewContext != null) {\r\n // TODO откладывается до версии 3.3\r\n }\r\n }\r\n\r\n public static async createPacketCommand() {\r\n }\r\n\r\n private static isDocIDsValid(editor, viewContext) {\r\n let result = false;\r\n let pkdciSection;\r\n let stateID;\r\n const atTheSigner = CdDocStates.AtTheSigner.id;\r\n if (editor != null && editor.cardModel != null && editor.cardModel.cardType) {\r\n if ((editor.cardModel.cardType.id === PkCardTypes.ArActTypeID ||\r\n editor.cardModel.cardType.id === PkCardTypes.ArEDocumentTypeID ||\r\n editor.cardModel.cardType.id === PkCardTypes.PkPacketVirtualTypeID) &&\r\n (pkdciSection = editor.cardModel.card.sections.tryGet(\"PkDocumentCommonInfo\")) != null &&\r\n (stateID = pkdciSection.fields.tryGet(\"StateID\")) != null &&\r\n stateID !== atTheSigner) {\r\n result = true;\r\n }\r\n }\r\n else if (viewContext != null) {\r\n // let view;\r\n // if (!!(view = viewContext.state.ui.getCurrentTree()!)) {\r\n // if (viewContext.getSelectedRowIndex() >= 0) {\r\n // switch (view.viewAlias) {\r\n // case \"PkMyTasks\":\r\n // case \"ArAct\":\r\n // case \"ArActMy\":\r\n // case \"ArEDocument\":\r\n // case \"ArEDocumentMy\":\r\n // let row = viewContext.getSelectedRow();\r\n // let receiverKckList = viewContext.SelectedRows\r\n // .Where(t => t[\"ActReceiverKCKExternalID\"] != null)\r\n // .Select(t => t[\"ActReceiverKCKExternalID\"])\r\n // .ToList();\r\n // let statesList = viewContext.SelectedRows\r\n // .Where(t => t[\"ActStateID\"] != null)\r\n // .Select(t => t[\"ActStateID\"])\r\n // .ToList();\r\n // if (receiverKckList.Count === viewContext.SelectedRows.Count() &&\r\n // receiverKckList.Distinct().Count() === 1 &&\r\n // statesList.Count(x => x == CdDocStates.AtTheSigner) == 0\r\n // viewContext.SelectedRows.Count(t => t[\"IsDocFromDiadoc\"] === 1) ===\r\n // viewContext.SelectedRows.Count())\r\n // result = true;\r\n // break;\r\n // }\r\n // }\r\n // }\r\n\r\n // TODO откладывается до версии 3.3\r\n result = false;\r\n }\r\n return result;\r\n }\r\n\r\n private static async changeFolderInCards( docIDs, unitDiadocID, unitDiadocName) {\r\n const request = new CardRequest();\r\n\r\n request.requestType = ChRequestTypes.PkChangeDiadocFolderInCards;\r\n\r\n request.info[\"DocIDs\"] = createTypedField(docIDs, DotNetType.String);\r\n request.info[\"UnitsIfDiadocID\"] = createTypedField(unitDiadocID, DotNetType.Guid);\r\n request.info[\"UnitsIfDiadocName\"] = createTypedField(unitDiadocName, DotNetType.String);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return false;\r\n\r\n return true;\r\n }\r\n\r\n private static async selectNewUnit(docIDs, packetID) : Promise {\r\n let firstCardID = docIDs.split(',')[0];\r\n if (packetID != null) firstCardID = packetID.toString();\r\n\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = 'UODCardIDForFilter';\r\n parameterMetadata.caption = 'ID карточки для выбора папки';\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n const nameParamList = [new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', firstCardID)\r\n .asRequestParameter()];\r\n\r\n let selectedItem : SelectedValue | null = null;\r\n\r\n await showViewsDialog(\r\n 'UOD',\r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n selectedItem = value;\r\n },\r\n nameParamList\r\n );\r\n\r\n return selectedItem;\r\n }\r\n\r\n private static getDocIDs(editor, viewContext) {\r\n let result = \"\";\r\n let packetID = null;\r\n if (editor != null && editor.cardModel != null && editor.cardModel.card != null) {\r\n if (editor.cardModel.cardType.id === PkCardTypes.ArActTypeID ||\r\n editor.cardModel.cardType.id === PkCardTypes.ArEDocumentTypeID) {\r\n result += editor.cardModel.card.id;\r\n }\r\n else if (editor.cardModel.cardType.id === PkCardTypes.PkPacketVirtualTypeID) {\r\n let section = editor.cardModel.card.sections.get(\"PkPacketCompositionVirtual\");\r\n if (section != null) {\r\n let rows = section.rows;\r\n result = rows.map(row => row.get(\"DocID\")).reduce((current, docId) => current + \",\" + docId);\r\n packetID = editor.cardModel.card.id;\r\n }\r\n }\r\n }\r\n\r\n else if (viewContext != null) {\r\n // TODO откладывается до версии 3.3\r\n }\r\n\r\n return { docIDs: result, packetID: packetID };\r\n }\r\n\r\n public static async RevokeTemplateInDiadoc()\r\n {\r\n let editor = UIContext.current.cardEditor;\r\n\r\n if (editor == null || editor.cardModel == null)\r\n return;\r\n\r\n // предупреждение о несохраненных изменениях\r\n if (editor.cardModel.hasChanges())\r\n {\r\n let dialogResult = await showConfirm(\"В карточке имеются несохраненные данные.\\nВы уверены, что хотите продолжить?\");\r\n\r\n if (!dialogResult)\r\n {\r\n return;\r\n }\r\n }\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.RevokeTemplateInDiadoc;\r\n request.cardId = editor.cardModel.card.id;\r\n let response: CardResponse | null = null;\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n response = await CardService.instance.request(request);\r\n await editor!.openCard({\r\n cardId: editor!.cardModel!.card.id, \r\n cardTypeId: editor!.cardModel!.card.typeId, \r\n cardTypeName: editor!.cardModel!.card.typeName, \r\n context: editor!.context});\r\n }); \r\n\r\n if (!response!.validationResult.isSuccessful)\r\n {\r\n await showNotEmpty(response!.validationResult.build());\r\n return;\r\n }\r\n\r\n await showMessage(\"Шаблон был успешно отозван.\");\r\n }\r\n \r\n public static CanRevokeTemplateInDiadoc(e: TileEvaluationEventArgs) \r\n {\r\n let editor = e.currentTile.context.cardEditor;\r\n\r\n let pkDocumentCommonInfoSection: CardSection | undefined;\r\n let pkDiadocCommonInfoSection: CardSection | undefined;\r\n let pkResponsibleBookkeepersSection: CardSection | undefined;\r\n let pkResponsibleExecutorsSection: CardSection | undefined;\r\n\r\n let visible =\r\n editor != null &&\r\n editor.cardModel != null &&\r\n editor.cardModel.cardType != null &&\r\n [PkCardTypes.ArEDocumentTypeID, PkCardTypes.ArActTypeID].some(x => x === editor!.cardModel!.cardType.id) &&\r\n (pkDocumentCommonInfoSection = editor.cardModel.card.sections.tryGet(\"PkDocumentCommonInfo\")) != null &&\r\n (pkDiadocCommonInfoSection = editor.cardModel.card.sections.tryGet(\"PkDiadocCommonInfo\")) != null &&\r\n (pkResponsibleBookkeepersSection = editor.cardModel.card.sections.tryGet(\"PkResponsibleBookkeepers\")) != null &&\r\n (pkResponsibleExecutorsSection = editor.cardModel.card.sections.tryGet(\"PkResponsibleExecutors\")) != null &&\r\n pkDocumentCommonInfoSection.fields.tryGet(\"StateID\") === CdDocStates.PreProject.id &&\r\n pkDiadocCommonInfoSection.fields.tryGet(\"IsTemplate\") === true &&\r\n (\r\n (pkResponsibleBookkeepersSection.rows != null && pkResponsibleBookkeepersSection.rows.some(x => x.tryGet(\"RoleID\") === userSession.UserID))\r\n || (pkResponsibleExecutorsSection.rows != null && pkResponsibleExecutorsSection.rows.some(x => x.tryGet(\"RoleID\") === userSession.UserID))\r\n || userSession.isAdmin\r\n || tryGetFromInfo(editor.cardModel.card.info, \"UserInFinManagersPGID\", false)\r\n );\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n public static async RefillPasportInfo()\r\n {\r\n let editor = UIContext.current.cardEditor;\r\n\r\n if (editor == null || editor.cardModel == null)\r\n return;\r\n\r\n // предупреждение о несохраненных изменениях\r\n if (editor.cardModel.hasChanges())\r\n {\r\n let dialogResult = await showConfirm(\"В карточке имеются несохраненные данные.\\nВы уверены, что хотите продолжить?\");\r\n\r\n if (!dialogResult)\r\n {\r\n return;\r\n }\r\n }\r\n \r\n await LoadingOverlay.instance.show(async () => {\r\n await PkCardHelper.FillPassportInfo(editor!.cardModel!.card);\r\n }); \r\n\r\n await showMessage(\"Согласующие пересчитаны.\");\r\n }\r\n \r\n public static CanRefillPasportInfo(e: TileEvaluationEventArgs) \r\n {\r\n let editor = e.currentTile.context.cardEditor;\r\n\r\n let pkDocumentCommonInfoSection: CardSection | undefined;\r\n \r\n // доступна для админа во всех состояниях кроме подписания\r\n // для ответственного за распределение акта\r\n let visible =\r\n editor != null &&\r\n editor.cardModel != null &&\r\n editor.cardModel.cardType != null &&\r\n [PkCardTypes.ArEDocumentTypeID, PkCardTypes.ArActTypeID].some(x => x === editor!.cardModel!.cardType.id) &&\r\n (pkDocumentCommonInfoSection = editor.cardModel.card.sections.tryGet(\"PkDocumentCommonInfo\")) != null &&\r\n ( \r\n (userSession.isAdmin && pkDocumentCommonInfoSection.fields.tryGet(\"StateID\") !== CdDocStates.Signing.id) || \r\n (pkDocumentCommonInfoSection.fields.tryGet(\"StateID\") === CdDocStates.AtTheResponsibleForAct.id)\r\n );\r\n\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n \r\n public static canRejectCards(e:TileEvaluationEventArgs)\r\n { \r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || !viewContext.view\r\n || !viewContext.view.metadata \r\n || (viewContext.view.metadata.alias != 'ArAct')\r\n || !viewContext!.selectedRows\r\n || !userSession.isAdmin\r\n \r\n ) {\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile, false);\r\n return;\r\n }\r\n\r\n let context = e.currentTile.context;\r\n let cards = context!.viewContext!.selectedRows!.map(x => createTypedField(x.get(\"ActID\") ||x.get(\"DocID\") || x.get(\"CardID\"), DotNetType.Guid));\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n cards.length > 0);\r\n }\r\n\r\n public static rejectCards()\r\n {\r\n let cards: TypedField[] = new Array;\r\n const context: IUIContext = UIContext.current;\r\n cards = context!.viewContext!.selectedRows!.map(x => createTypedField(x.get(\"ActID\") ||x.get(\"DocID\") || x.get(\"CardID\"), DotNetType.Guid));\r\n\r\n const contractRequest = new CardRequest();\r\n contractRequest.requestType = PkRequestTypes.RejectCards;\r\n contractRequest.info[\"Cards\"] = cards;\r\n CardService.instance.request(contractRequest).then(response=>{\r\n showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n context!.viewContext!.refreshView();\r\n });\r\n }\r\n\r\n public static canReSendActToDiadoc(e: TileEvaluationEventArgs) \r\n {\r\n let editor = e.currentTile.context.cardEditor;\r\n\r\n let pkDocumentCommonInfoSection: CardSection | undefined;\r\n \r\n // для любого пользователя\r\n // для акта в статусе \"ошибка подписания\"\r\n let visible = \r\n editor != null &&\r\n editor.cardModel != null &&\r\n editor!.cardModel!.cardType != null &&\r\n editor!.cardModel!.cardType.id === PkCardTypes.ArActTypeID &&\r\n (pkDocumentCommonInfoSection = editor.cardModel.card.sections.tryGet(\"PkDocumentCommonInfo\")) != null &&\r\n pkDocumentCommonInfoSection.fields.tryGet(\"StateID\") === CdDocStates.ErrorSigning.id;\r\n \r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n }\r\n\r\n public static async reSendActToDiadocAsync()\r\n {\r\n let editor = UIContext.current.cardEditor;\r\n\r\n if (editor == null || editor.cardModel == null)\r\n return;\r\n \r\n // предупреждение о несохраненных изменениях\r\n if (editor.cardModel.hasChanges())\r\n {\r\n let dialogResult = await showConfirm(\"В карточке имеются несохраненные данные.\\nВы уверены, что хотите продолжить?\");\r\n \r\n if (!dialogResult)\r\n {\r\n return;\r\n }\r\n }\r\n \r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.SendActToDiadoc;\r\n request.cardId = editor.cardModel.card.id;\r\n let response: CardResponse | null = null;\r\n \r\n await LoadingOverlay.instance.show(async () => {\r\n response = await CardService.instance.request(request);\r\n await editor!.openCard({\r\n cardId: editor!.cardModel!.card.id, \r\n cardTypeId: editor!.cardModel!.card.typeId, \r\n cardTypeName: editor!.cardModel!.card.typeName, \r\n context: editor!.context});\r\n }); \r\n \r\n if (!response!.validationResult.isSuccessful)\r\n {\r\n await showNotEmpty(response!.validationResult.build());\r\n return;\r\n }\r\n \r\n await showMessage(\"Первичный документ был отправлен в ДиаДок.\");\r\n }\r\n}","import { TileExtension, Tile,\r\n TileEvaluationEventArgs,\r\n ITileLocalExtensionContext,\r\n disableWithCollapsing,\r\n ITileGlobalExtensionContext,\r\n ITile} from 'tessa/ui/tiles';\r\nimport { UIContext, LoadingOverlay, tryGetFromInfo, showNotEmpty, createCardModel, UIButton} from 'tessa/ui';\r\nimport { createTypedField, DotNetType, Guid, TypedField, Visibility } from 'tessa/platform';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { createCard, openCard, showFormDialog } from 'tessa/ui/uiHost';\r\nimport { CardRow, CardRowState, CardSingletonCache, CardStoreMode } from 'tessa/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { KrToken } from 'tessa/workflow';\r\nimport { CardNewRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { ChRequestTypes } from '../Helpers/ChRequestTypes';\r\nimport { userSession } from 'common/utility';\r\nimport { CdStaticRoles } from 'src/cdScripts/Helpers/CdStaticRoles';\r\nimport { PkSettingsCardSingletones } from '../helpers/PkSettingsCardSingletones';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { GridRowAction, GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\n\r\nexport class IrdDocumentTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.rightPanel;\r\n IrdDocumentTileExtensionHelper.SetIsUserInRole();\r\n // TES-12295 Отключение ИРД\r\n /*\r\n panel.tiles.push(new Tile({\r\n name: \"IrdOpenSettings\",\r\n caption: \"Открыть настройки\\nИРД\",\r\n icon: \"ta icon-thin-053\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 10,\r\n command: IrdDocumentTileExtensionHelper.OpenIRDSettings,\r\n evaluating: IrdDocumentTileExtensionHelper.CanOpenIRDSettings\r\n }));\r\n */\r\n let createCard = panel.tryGetTile('CreateCard');\r\n if (createCard != null) {\r\n\r\n let documents = createCard.tryGetTile('Documents');\r\n if (documents != null) {\r\n let irdDocument = documents.tryGetTile('IrdDocument');\r\n if (irdDocument != null && irdDocument.isVisible && !irdDocument.isCollapsed) {\r\n irdDocument.isCollapsed = true;\r\n irdDocument.isEnabled = false;\r\n let irdCreateIrdDocument = new Tile({\r\n name: 'IrdCreateIrdDocument',\r\n caption: 'ИРД',\r\n icon: '',\r\n contextSource: panel.contextSource,\r\n group: irdDocument.group,\r\n order: irdDocument.order\r\n });\r\n let irdCreateActualIrdDocument = new Tile({\r\n name: \"IrdCreateActualIrdDocument\",\r\n caption: \"Актуальный\",\r\n icon: '',\r\n contextSource: panel.contextSource,\r\n order: 0,\r\n command: async (tile) => { IrdDocumentTileExtensionHelper.CreateIrdTileAction(tile, false);}\r\n });\r\n let irdCreateArchiveIrdDocument = new Tile({\r\n name: \"IrdCreateArchiveIrdDocument\",\r\n caption: \"Архивный\",\r\n icon: '',\r\n contextSource: panel.contextSource,\r\n order: 1,\r\n command: async (tile) => { IrdDocumentTileExtensionHelper.CreateIrdTileAction(tile, true);}\r\n });\r\n irdCreateIrdDocument.tiles.push(irdCreateActualIrdDocument);\r\n irdCreateIrdDocument.tiles.push(irdCreateArchiveIrdDocument);\r\n documents.tiles.push(irdCreateIrdDocument);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public initializingLocal(context: ITileLocalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n const editor = panel.context.cardEditor;\r\n let typeid;\r\n if (editor == null || editor.cardModel == null ||\r\n editor.cardModel.cardType.id == null) {\r\n return;\r\n }\r\n typeid = editor.cardModel.cardType.id;\r\n if (typeid !== CdCardTypes.IrdDocumentTypeID && typeid !== CdCardTypes.IrdTEPTypeID) {\r\n return;\r\n }\r\n IrdDocumentTileExtensionHelper.SetIsUserInRole();\r\n\r\n let pkEksInfoTile = panel.tryGetTile('PkEksInfoTile');\r\n if (pkEksInfoTile != null) {\r\n disableWithCollapsing(pkEksInfoTile);\r\n }\r\n\r\n const copyCard = panel.tryGetTile('CopyCard');\r\n if (copyCard != null) {\r\n disableWithCollapsing(copyCard);\r\n }\r\n\r\n const cdCopyCard = panel.tryGetTile('CdCopyCard');\r\n if (cdCopyCard != null) {\r\n disableWithCollapsing(cdCopyCard);\r\n }\r\n\r\n const сopyTileDefault = panel.tryGetTile('CreateCardCopy');\r\n if (сopyTileDefault != null) {\r\n disableWithCollapsing(сopyTileDefault);\r\n }\r\n const deleteCardTile = panel.tryGetTile(\"DeleteCard\");\r\n if (deleteCardTile != null) {\r\n disableWithCollapsing(deleteCardTile);\r\n }\r\n if (typeid !== CdCardTypes.IrdDocumentTypeID) {\r\n return;\r\n }\r\n\r\n const isNewVersion = tryGetFromInfo(editor.cardModel.card.info, \"NewVersion\", false);\r\n if (isNewVersion) {\r\n let saveTile = panel.tryGetTile('SaveCard');\r\n if (saveTile != null) {\r\n saveTile.caption = 'Сохранить новую';\r\n }\r\n let saveCloseAndCreateCardTile = panel.tryGetTile('SaveCloseAndCreateCard');\r\n if (saveCloseAndCreateCardTile != null) {\r\n disableWithCollapsing(saveCloseAndCreateCardTile);\r\n }\r\n }\r\n // TES-12295 Отключение ИРД\r\n // panel.tiles.push(new Tile({\r\n // name: \"IrdCreateVersion\",\r\n // caption: \"Создать новую\\nверсию документа\",\r\n // icon: \"ta icon-thin-050\",\r\n // contextSource: panel.contextSource,\r\n // group: TileGroups.Cards,\r\n // order: 12,\r\n // command: IrdDocumentTileExtensionHelper.startCreateBasedDocumentAction,\r\n // evaluating: IrdDocumentTileExtensionHelper.canStartCreateBasedDocument\r\n // }));\r\n }\r\n}\r\nexport class IrdDocumentTileExtensionHelper {\r\n public static async startCreateBasedDocumentAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n let irdVersionsIDsToArchive = await IrdDocumentTileExtensionHelper.selectIrdVersionsToArchive();\r\n if (irdVersionsIDsToArchive.isCanceled)\r\n return;\r\n let typeID = CdCardTypes.IrdDocumentTypeID;\r\n let typeName = CdCardTypes.IrdDocumentTypeName;\r\n const baseCard = editor.cardModel!.card;\r\n const requestInfo: IStorage = {};\r\n requestInfo['KrCreateBasedOnCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n requestInfo['KrCreateBasedOnCopyFiles'] = createTypedField(false, DotNetType.Boolean);\r\n requestInfo['NewVersion'] = createTypedField(true, DotNetType.Boolean);\r\n requestInfo['IrdVersionsIDsToArchive'] = irdVersionsIDsToArchive.documentIds;\r\n requestInfo['IsAllDocumentsToArchive'] = createTypedField(irdVersionsIDsToArchive.isAll, DotNetType.Boolean);\r\n\r\n const baseCardToken = KrToken.tryGet(baseCard.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n requestInfo['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: typeID,\r\n cardTypeName: typeName,\r\n info: requestInfo,\r\n saveCreationRequest: false,\r\n creationModeDisplayText: '(Новая версия) '\r\n });\r\n });\r\n }\r\n public static canStartCreateBasedDocument(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n let pkDocumentCommonInfo;\r\n let stateID;\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n card.storeMode === CardStoreMode.Update &&\r\n model.cardType.id === CdCardTypes.IrdDocumentTypeID &&\r\n (pkDocumentCommonInfo = model.card.sections.tryGet(\"PkDocumentCommonInfo\")) != null &&\r\n (stateID = pkDocumentCommonInfo.fields.tryGet('StateID')) != null &&\r\n (stateID === CdDocStates.Actual.id || (stateID === CdDocStates.Archived.id && !tryGetFromInfo(card.info, \"HasActualVersion\", false) && tryGetFromInfo(card.info, \"IsLastVersion\", false))) &&\r\n (IrdDocumentTileExtensionHelper._isUserAdminIRD || false)\r\n );\r\n }\r\n\r\n public static async OpenIRDSettings() {\r\n const settings = CardSingletonCache.instance.cards.get(PkSettingsCardSingletones.IrdSettingsCardName);\r\n if (settings) {\r\n openCard({cardId: settings?.id});\r\n return;\r\n }\r\n else {\r\n openCard({cardId: PkSettingsCardSingletones.IrdSettingsCardID});\r\n return;\r\n }\r\n }\r\n private static _isUserAdminIRD: boolean | undefined = undefined;\r\n\r\n public static async SetIsUserInRole() {\r\n {\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.CheckUserInRole;\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(CdStaticRoles.IrdAdministrators, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n if (response.validationResult.build().isSuccessful) {\r\n IrdDocumentTileExtensionHelper._isUserAdminIRD = response.info.IsUserInRole.$value;\r\n }\r\n }\r\n }\r\n\r\n public static CanOpenIRDSettings(e: TileEvaluationEventArgs) {\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile, !userSession.isAdmin &&\r\n (IrdDocumentTileExtensionHelper._isUserAdminIRD || false));\r\n return;\r\n }\r\n\r\n public static async CreateIrdTileAction(tile: ITile, isNewArchive: boolean) {\r\n await LoadingOverlay.instance.show(async () => {\r\n tile.info.IsCreateNewArchiveIrd = isNewArchive;\r\n await createCard({\r\n cardTypeId: CdCardTypes.IrdDocumentTypeID,\r\n info: tile.info,\r\n creationModeDisplayText: (isNewArchive ? 'Архивный' : 'Актуальный') + ' '\r\n });\r\n });\r\n }\r\n /** Инициализируем возможность связывать работы со статьями ИДП,\r\n * пользователь может делать линк на статью ИДП в работах и услугах\r\n */\r\n public static async selectIrdVersionsToArchive(): Promise {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n let result: IrdDialogResult = new IrdDialogResult(false, [], false);\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return result;\r\n }\r\n\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return result;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'IrdActualSerialDocuments');\r\n if (!dialogForm) {\r\n return result;\r\n }\r\n\r\n const irdGetVersionsRequest = new CardRequest();\r\n irdGetVersionsRequest.requestType = PkRequestTypes.IrdGetVersionsRequest;\r\n irdGetVersionsRequest.cardId = editor.cardModel?.card.id!;\r\n const irdGetVersionsResponse = await CardService.instance.request(irdGetVersionsRequest);\r\n if (irdGetVersionsResponse.validationResult.isSuccessful !== true) {\r\n result.isCanceled = true;\r\n return result;\r\n }\r\n let listVersions = irdGetVersionsResponse.info.VersionList;\r\n\r\n if (listVersions === null || listVersions === undefined) {\r\n result.isCanceled = true;\r\n return result;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n result.isCanceled = true;\r\n return result;\r\n }\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n // Ссылки, заполняемые в ShowFormDialog\r\n /** Кнопка для закрытия формы */\r\n let closeBtn: UIButton | null = null;\r\n let buttonClicked: boolean = false;\r\n /** Метод заполнения статьи ИДП*/\r\n let selectRow = async () => {\r\n };\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async (_form) => {\r\n\r\n // Секция диалога.\r\n const dialogIrdDocVersionInfoListVirtual = _form.cardModel.card.sections.tryGet('IrdDocVersionInfoVirtual');\r\n if (dialogIrdDocVersionInfoListVirtual === null || dialogIrdDocVersionInfoListVirtual === undefined) return;\r\n dialogIrdDocVersionInfoListVirtual.rows.clear();\r\n // Добавляем данные\r\n listVersions.forEach(ver => {\r\n let newRow: CardRow = new CardRow();\r\n newRow.state = CardRowState.Inserted;\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"IrdVersionID\", createTypedField(ver.EntityID.$value, DotNetType.Guid));\r\n newRow.set(\"IrdVersionDocFullName\", createTypedField(ver.EntityName.$value, DotNetType.String));\r\n dialogIrdDocVersionInfoListVirtual.rows.push(newRow);\r\n });\r\n const uiDialogIrdList = _form.cardModel.controls.get('IrdVersionsDialog') as GridViewModel | undefined;\r\n if (uiDialogIrdList === null || uiDialogIrdList === undefined) return;\r\n uiDialogIrdList.addButton.setVisibility(Visibility.Collapsed);\r\n uiDialogIrdList.removeButton.setVisibility(Visibility.Collapsed);\r\n selectRow = async () => {\r\n if (uiDialogIrdList.selectedRows !== null && uiDialogIrdList.selectedRows !== undefined ) {\r\n result.documentIds = uiDialogIrdList.selectedRows.map(x => createTypedField(x.row.get('IrdVersionID'), DotNetType.Guid));\r\n }\r\n else if (uiDialogIrdList.selectedRow !== null && uiDialogIrdList.selectedRow !== undefined ) {\r\n result.documentIds.push(createTypedField(uiDialogIrdList.selectedRow.row.get('IrdVersionID')!, DotNetType.Guid));\r\n }\r\n };\r\n\r\n uiDialogIrdList.rowInvoked.add(async (e2) => {\r\n if (e2.action !== GridRowAction.Opening) return;\r\n const docID = e2.row.tryGet('IrdVersionID');\r\n if (docID !== null && docID !== undefined) {\r\n e2.cancel = true;\r\n await openCard({\r\n cardId: docID\r\n });\r\n }\r\n });\r\n },\r\n [closeBtn =\r\n new UIButton('$UI_Common_Cancel', () => {\r\n result.isCanceled = true;\r\n buttonClicked = true;\r\n if (closeBtn === null || closeBtn === undefined) { return; }\r\n closeBtn!.close();\r\n }),\r\n new UIButton('Отправить в архив все', (btn) => {\r\n result.isAll = true;\r\n buttonClicked = true;\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n selectRow();\r\n buttonClicked = true;\r\n btn.close();\r\n }),\r\n ],\r\n false,\r\n () => result.isCanceled = buttonClicked ? result.isCanceled : true\r\n );\r\n return result;\r\n }\r\n}\r\nclass IrdDialogResult {\r\n isAll: boolean;\r\n documentIds: Array;\r\n isCanceled: boolean;\r\n constructor(_isAll: boolean, _documentIds: Array, _isCanceled: boolean) {\r\n this.isAll = _isAll;\r\n this.documentIds = _documentIds;\r\n this.isCanceled = _isCanceled;\r\n }\r\n}\r\n","import { TileExtension, ITileLocalExtensionContext } from 'tessa/ui/tiles';\r\n\r\n/// \r\n/// Расширение, скрывающее возможность создать карточку Входящего документа\r\n/// TES-9413\r\n/// \r\nexport class PkHideInnerDocumentTileExtension extends TileExtension {\r\n\r\n public initializingLocal(context: ITileLocalExtensionContext) {\r\n this.HideTilesAsync(context);\r\n }\r\n\r\n /// \r\n /// Скрытие кнопок.\r\n /// \r\n private HideTilesAsync(context: ITileLocalExtensionContext) {\r\n const rightPanel = context.workspace.rightPanel;\r\n let createCardTile = rightPanel.tryGetTile('CreateCard');\r\n if(createCardTile == null){\r\n return;\r\n }\r\n\r\n let documentsTile = createCardTile.tryGetTile('Documents');\r\n if(documentsTile == null){\r\n return;\r\n }\r\n\r\n let pkInnerDocumentTile = documentsTile.tryGetTile('PkInnerDocument');\r\n if(pkInnerDocumentTile == null){\r\n return;\r\n }\r\n pkInnerDocumentTile.isHidden = true;\r\n }\r\n}","import { TileExtension, Tile, TileGroups, TileEvaluationEventArgs , ITileLocalExtensionContext, ITile } from 'tessa/ui/tiles';\r\nimport { LoadingOverlay, showError, showMessage } from 'tessa/ui';\r\nimport { createTypedField, DotNetType } from 'tessa/platform';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport {ChRequestTypes} from \"../Helpers/ChRequestTypes\";\r\nimport {userSession} from \"common/utility\";\r\nimport {ChStaticRoles} from \"../Helpers/ChStaticRoles\";\r\nimport {PkCardHelper} from \"../Helpers/PkCardHelper\";\r\n\r\nexport class PersonalRoleUpdateDataInMDSTileExtension extends TileExtension {\r\n\r\n public initializingLocal(context: ITileLocalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n const contextSource = panel.contextSource;\r\n const uiContext = panel?.context;\r\n const cardTypeID = uiContext?.cardEditor?.cardModel?.cardType.id;\r\n\r\n if (cardTypeID !== PkCardTypes.PersonalRoleID) {\r\n return;\r\n }\r\n\r\n let updateDataInMDS = new Tile({\r\n name: 'UpdateDataInMDS',\r\n caption: 'Обновить данные из МДС',\r\n icon: 'ta icon-thin-412',\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 100,\r\n command: this.UpdateDataInMDS,\r\n evaluating: this.UpdateDataInMDSTileVisibility\r\n });\r\n\r\n panel.tiles.push(updateDataInMDS);\r\n }\r\n\r\n private async UpdateDataInMDS(tile: ITile) {\r\n await LoadingOverlay.instance.show(async () => {\r\n let card = tile.context.cardEditor?.cardModel?.card;\r\n\r\n if (card === null || !card?.sections.has(\"PersonalRoles\")) {\r\n return;\r\n }\r\n\r\n let sec = card?.sections.tryGet(\"PersonalRoles\");\r\n if (sec == null){\r\n return;\r\n }\r\n\r\n let login = sec.fields.tryGet(\"Login\") as string;\r\n\r\n let request = new CardRequest();\r\n request.requestType = ChRequestTypes.PkUpdateDataInMDS;\r\n request.info[\"Login\"] = createTypedField(login, DotNetType.String);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n await showError(response.validationResult.build().toString());\r\n }\r\n else {\r\n let individualGuid1C;\r\n if (response.info.individualGuid1C) {\r\n individualGuid1C = response.info.individualGuid1C.$value as string;\r\n }\r\n sec.fields.set(\"IndividualGuid1C\", individualGuid1C, DotNetType.Guid);\r\n sec.setChanged(\"IndividualGuid1C\", false);\r\n\r\n await showMessage(response.validationResult.build().toString());\r\n }\r\n }, 'Выполняется синхронизация.');\r\n }\r\n\r\n private async UpdateDataInMDSTileVisibility(e: TileEvaluationEventArgs) {\r\n let isSupportAdmin = await PkCardHelper.IsUserInRoleAsync(\r\n userSession.UserID,\r\n ChStaticRoles.SupportAdministratorID);\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n isSupportAdmin);\r\n }\r\n\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { ChChanceryTileExtension } from './ChChanceryTileExtension';\r\nimport { PkCardTileExtension } from './PkCardTileExtension';\r\nimport { PkDeleteTileOfViewExtension } from './PkDeleteTileOfViewExtension';\r\nimport { PkFileDownloadTileExtension } from './PkFileDownloadTileExtension';\r\nimport { ArContractTileExtension } from './ArContractTileExtension';\r\nimport { PkInnerDocumentTileExtension } from './PkInnerDocumentTileExtension';\r\nimport { PkPersonnelDocumentTileExtension } from './PkPersonnelDocumentTileExtension';\r\nimport { PkPersonnelPacketVirtualTileExtension } from './PkPersonnelPacketVirtualTileExtension';\r\nimport { PkEksInfoTileExtension } from './PkEksInfoTileExtension';\r\nimport { ArPowerOfAttorneyTileExtension } from './ArPowerOfAttorneyTileExtension';\r\nimport { ArContractsCompletionTileExtension } from './ArContractsCompletionTileExtension';\r\nimport { ArActRecalculateAmountsTileExtension } from './ArActRecalculateAmountsTileExtension';\r\nimport { PkCorrespondenceSendingRequestTileExtension } from './PkCorrespondenceSendingRequestTileExtension';\r\nimport { PkEnvelopeTileExtension } from './PkEnvelopeTileExtension';\r\nimport { ArPowerOfAttorneyAdditionalTileExtension } from './ArPowerOfAttorneyAdditionalTileExtension';\r\nimport { ArActTileExtension } from './arActTileExtension';\r\nimport { IrdDocumentTileExtension } from './IrdDocumentTileExtension';\r\nimport { PkHideInnerDocumentTileExtension } from './PkHideInnerDocumentTileExtension';\r\nimport { PersonalRoleUpdateDataInMDSTileExtension } from './PersonalRoleUpdateDataInMDSTileExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: ArActTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChChanceryTileExtension, stage: ExtensionStage.AfterPlatform, order: 2});\r\nExtensionContainer.instance.registerExtension({extension: PkCardTileExtension, stage: ExtensionStage.AfterPlatform, order: 3});\r\nExtensionContainer.instance.registerExtension({extension: PkDeleteTileOfViewExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkFileDownloadTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractTileExtension, stage: ExtensionStage.AfterPlatform, order: 1});\r\nExtensionContainer.instance.registerExtension({extension: PkPersonnelDocumentTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkPersonnelPacketVirtualTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkInnerDocumentTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkHideInnerDocumentTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkEksInfoTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArPowerOfAttorneyTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArPowerOfAttorneyAdditionalTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractsCompletionTileExtension, stage: ExtensionStage.AfterPlatform, order: 10});\r\nExtensionContainer.instance.registerExtension({extension: ArActRecalculateAmountsTileExtension, stage: ExtensionStage.AfterPlatform, order: 11});\r\nExtensionContainer.instance.registerExtension({extension: PkCorrespondenceSendingRequestTileExtension, stage: ExtensionStage.AfterPlatform, order: 22});\r\nExtensionContainer.instance.registerExtension({extension: PkEnvelopeTileExtension, stage: ExtensionStage.AfterPlatform, order: 23});\r\nExtensionContainer.instance.registerExtension({extension: IrdDocumentTileExtension, stage: ExtensionStage.AfterPlatform, order: 24});\r\nExtensionContainer.instance.registerExtension({extension: PersonalRoleUpdateDataInMDSTileExtension, stage: ExtensionStage.AfterPlatform, order: 25});","import { DotNetType, hasFlag, Visibility } from 'tessa/platform';\r\nimport { ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardRowState, CardFieldChangedEventArgs, CardRow, CardPermissionFlags } from 'tessa/cards';\r\nimport { PkClientHelper } from '../Helpers/PkClientHelper';\r\nimport { CdUIHelper } from '../../cdScripts/UI/CdUIHelper';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkCommonHelper } from '../Helpers/PkCommonHelper';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { Guid } from 'tessa/platform';\r\n\r\n/** Статьи ОХР и ИДП */\r\nexport class PkArticles {\r\n /** Распределение суммы по статьям ИДП и ОХР.*/\r\n private readonly articlesSections: string[];\r\n\r\n public constructor(sections: string[]) {\r\n this.articlesSections = sections;\r\n }\r\n\r\n public Initialized(context: ICardUIExtensionContext) {\r\n this.InitSumToPayEditability(context);\r\n // Считаем сумму в Advance из AmountAdvance\r\n this.InitFieldSummation(context, \"ArArticleIdpAmountVirtual\", \"Advance\", \"AmountAdvance\");\r\n this.InitFieldSummation(context, \"ArArticleIdpAmountVirtual\", \"Guarantee\", \"AmountGuarantee\");\r\n\r\n this.InitSumToPayCalculation(context);\r\n this.InitVatToPayCalculation(context);\r\n\r\n PkArticles.ColapseOhrArticlesAddButton(context);\r\n\r\n PkArticles.InheritNdsFromActToOhr(context);\r\n }\r\n\r\n /** Наследуется ставка НДС из акта. */\r\n private static InheritNdsFromActToOhr(context: ICardUIExtensionContext)\r\n {\r\n let card = context.card;\r\n let mainSection = card.sections.tryGet(\"ArchiveAct\");\r\n if (!mainSection)\r\n {\r\n mainSection = card.sections.tryGet(\"PkLetterCreditInfo\");\r\n if (!mainSection)\r\n {\r\n return;\r\n }\r\n }\r\n\r\n const arArticleOHRListVirtual = \r\n card.sections.tryGet(\"ArArticleOHRListVirtual\");\r\n if (!arArticleOHRListVirtual)\r\n {\r\n return;\r\n }\r\n\r\n mainSection!.fields.fieldChanged.add(async(e) =>\r\n {\r\n if (e.fieldName != \"VATRateID\" && e.fieldName != \"VATRateCaption\")\r\n {\r\n return;\r\n }\r\n\r\n let rows = arArticleOHRListVirtual!.rows\r\n .filter(r => r.state != CardRowState.Deleted);\r\n rows.forEach(item =>{\r\n item.set(e.fieldName, e.fieldTypedValue!);\r\n });\r\n });\r\n \r\n arArticleOHRListVirtual!.rows.collectionChanged.add((e) =>\r\n {\r\n if (e.added)\r\n {\r\n let rateID = mainSection!.fields.tryGetField(\"VATRateID\")!;\r\n let rateCaption = mainSection!.fields.tryGetField(\"VATRateCaption\")!;\r\n e.added!.forEach(a=>{\r\n a.set(\"VATRateID\", rateID);\r\n a.set(\"VATRateCaption\", rateCaption);\r\n });\r\n }\r\n });\r\n }\r\n\r\n /** В статьях ОХР нужно добавить возможность удаления строк.*/\r\n public static ColapseOhrArticlesAddButton(context: ICardUIExtensionContext)\r\n {\r\n var arArticleOHRListVirtual = CdUIHelper.GetUIControl(context, \"ArticlesOHRVirtual\");\r\n if (arArticleOHRListVirtual == null)\r\n {\r\n return;\r\n }\r\n\r\n arArticleOHRListVirtual.addButton.setVisibility(Visibility.Collapsed);\r\n }\r\n\r\n public InitSumToPayCalculation(context: ICardUIExtensionContext) {\r\n if (Guid.equals(context.card.typeId, PkCardTypes.ArActTypeID) && context.card.sections.tryGet(\"ArArticleOHRListVirtual\") != null && context.card.sections.tryGet(\"ArArticleOHRListVirtual\")!.rows.length > 0)\r\n {\r\n this.InitFieldSummation(context, \"ArchiveAct\", \"SumToPay\", \"SumToPay\", false);\r\n }\r\n else\r\n {\r\n const getSumByRow = (r: CardRow) => {\r\n const amount: number = Number(r.tryGet(\"Amount\") || 0);\r\n const amountAdvance: number = Number(r.tryGet(\"AmountAdvance\") || 0);\r\n const amountGar: number = Number(r.tryGet(\"AmountGuarantee\") || 0);\r\n return amount - amountAdvance - amountGar;\r\n };\r\n\r\n const fields = [\"AmountAdvance\", \"AmountGuarantee\", \"Amount\"];\r\n this.InitFieldCustomSummation(context, \"ArchiveAct\", \"SumToPay\", getSumByRow, false, fields);\r\n }\r\n }\r\n\r\n\r\n /** Считаем НДС суммы оплаты.*/\r\n public InitVatToPayCalculation(context: ICardUIExtensionContext) {\r\n const archiveAct = context.card.sections.tryGet(\"ArchiveAct\");\r\n if (isNullOrUndefined(archiveAct)) {\r\n return;\r\n }\r\n\r\n const setSumToPay = () => {\r\n const sumToPay = Number(archiveAct.fields.tryGet(\"SumToPay\") || 0);\r\n const vatCaption = String(archiveAct.fields.tryGet(\"VATRateCaption\"));\r\n const vat = Number(PkClientHelper.GetVatValue(vatCaption));\r\n const vatToPay = PkCommonHelper.financial(sumToPay / (vat + 100) * vat);\r\n archiveAct.fields.set(\"VatToPay\", vatToPay.toString().replace(',', '.'), DotNetType.Decimal);\r\n };\r\n\r\n archiveAct.fields.fieldChanged.add((e) => {\r\n if (\r\n e.fieldName == \"SumToPay\"\r\n || e.fieldName == \"VATRateCaption\") {\r\n setSumToPay();\r\n }\r\n });\r\n }\r\n\r\n\r\n /** заблокировать ввод суммы к оплате до заполнения статей; после заполнения пока оставляем возможность отредактировать*/\r\n public InitSumToPayEditability(context: ICardUIExtensionContext) {\r\n const card = context.card;\r\n if (card.typeId != PkCardTypes.ArActTypeID) {\r\n return;\r\n }\r\n \r\n const isSumToPayProhipit = hasFlag(card.permissions.resolver\r\n .getFieldPermissions(\"ArchiveAct\", \"SumToPay\"), CardPermissionFlags.ProhibitModify);\r\n const isVatToPayProhipit = hasFlag(card.permissions.resolver\r\n .getFieldPermissions(\"ArchiveAct\", \"VatToPay\"), CardPermissionFlags.ProhibitModify);\r\n\r\n if (isSumToPayProhipit\r\n || isVatToPayProhipit)\r\n {\r\n return;\r\n }\r\n\r\n const sections = this.articlesSections.map(i => card.sections.get(i)!);\r\n const sumToPay = CdUIHelper.GetUIControl(context, \"SumToPay\")!;\r\n const vatToPay = CdUIHelper.GetUIControl(context, \"VatToPay\")!;\r\n if (sumToPay == null\r\n || vatToPay == null) {\r\n return;\r\n }\r\n\r\n const setEditablilityOfSumToPay = () => {\r\n // if (Guid.equals(context.card.typeId, PkCardTypes.ArActTypeID) && context.card.sections.tryGet(\"ArArticleOHRListVirtual\") != null && context.card.sections.tryGet(\"ArArticleOHRListVirtual\")!.rows.length > 0)\r\n // {\r\n // vatToPay.isReadOnly =\r\n // sumToPay.isReadOnly = true;\r\n // }\r\n // else \r\n {\r\n if (sections.some(i => i.rows.some(r => r.state != CardRowState.Deleted))) {\r\n vatToPay.isReadOnly =\r\n sumToPay.isReadOnly = false;\r\n }\r\n else {\r\n vatToPay.isReadOnly =\r\n sumToPay.isReadOnly = true;\r\n }\r\n } \r\n };\r\n\r\n // Инициализируем\r\n setEditablilityOfSumToPay();\r\n\r\n // Подписываемся на статьи\r\n sections.forEach(item => {\r\n item.rows.collectionChanged.add(() => {\r\n setEditablilityOfSumToPay();\r\n });\r\n\r\n });\r\n }\r\n\r\n\r\n /** Считаем Сумму по сатьям ИДП\r\n * * @param totalSectionName Секция поля для суммы.\r\n * * @param totalFieldName Название поля, хранящего сумму.\r\n * * @param summandFieldName Название поля суммируемого по статьям.\r\n * * @param isRawSet Изменения в карточке не сохраняются.\r\n */\r\n public InitFieldSummation(context: ICardUIExtensionContext, totalSectionName: string, totalFieldName: string, summandFieldName: string, isRawSet: boolean = true) {\r\n const model = context.model;\r\n const card = model.card;\r\n\r\n const articlesTables = this.articlesSections.map(a => card.sections.get(a)!);\r\n\r\n // Скрипт для коллбэка на изменение поля\r\n const setAmount = () => {\r\n const totalTable = card.sections.tryGet(totalSectionName);\r\n if (isNullOrUndefined(totalTable)) {\r\n return;\r\n }\r\n\r\n let amountAdvanceSum: number = 0.0;\r\n articlesTables.forEach(collection => {\r\n amountAdvanceSum += collection.rows.filter(r => r.state != CardRowState.Deleted)\r\n .reduce((sum, current) => sum + Number(current.tryGet(summandFieldName) || 0.0), 0.0);\r\n\r\n });\r\n\r\n totalTable.fields.set(totalFieldName, amountAdvanceSum.toString().replace(',', '.'), DotNetType.Decimal);\r\n if (isRawSet) {\r\n totalTable.clearChanges();\r\n }\r\n };\r\n\r\n // Инициализируем\r\n if (isRawSet) {\r\n setAmount();\r\n }\r\n\r\n const amountAdvanceChanged = (args: CardFieldChangedEventArgs) => {\r\n // Если изменилась состояние строки то присылают Null, пожтому тоже пересчитываем\r\n if (args == null\r\n || args.fieldName == summandFieldName) {\r\n setAmount();\r\n }\r\n };\r\n\r\n articlesTables.forEach(collection => {\r\n PkClientHelper.SubscribeForFieldChanging(collection, amountAdvanceChanged);\r\n });\r\n }\r\n\r\n /** Считаем Сумму по сатьям ИДП\r\n * * @param totalSectionName Секция поля для суммы.\r\n * * @param totalFieldName Название поля, хранящего сумму.\r\n * * @param summandFieldName Название поля суммируемого по статьям.\r\n * * @param isRawSet Изменения в карточке не сохраняются.\r\n */\r\n public InitFieldCustomSummation(context: ICardUIExtensionContext, totalSectionName: string, totalFieldName: string, getSumByRow: any, isRawSet: boolean = true, fieldsToCalculate: string[]) {\r\n const model = context.model;\r\n const card = model.card;\r\n\r\n const articlesTables = this.articlesSections.map(a => card.sections.get(a)!);\r\n\r\n // Скрипт для коллбэка на изменение поля\r\n const setAmount = () => {\r\n const totalTable = card.sections.tryGet(totalSectionName);\r\n if (isNullOrUndefined(totalTable)) {\r\n return;\r\n }\r\n\r\n let amountAdvanceSum: number = 0;\r\n articlesTables.forEach(collection => {\r\n amountAdvanceSum += collection.rows.filter(r => r.state != CardRowState.Deleted)\r\n .reduce((sum, current) => sum + getSumByRow(current) || 0.0, 0.0);\r\n\r\n });\r\n\r\n totalTable.fields.set(totalFieldName, amountAdvanceSum.toString().replace(',', '.'), DotNetType.Decimal);\r\n if (isRawSet) {\r\n totalTable.clearChanges();\r\n }\r\n };\r\n\r\n // Инициализируем\r\n if (isRawSet) {\r\n setAmount();\r\n }\r\n\r\n const amountAdvanceChanged = (args: CardFieldChangedEventArgs) => {\r\n // Если изменилась состояние строки то присылают Null, пожтому тоже пересчитываем\r\n if (args == null\r\n || fieldsToCalculate.some(f => f == args.fieldName)) {\r\n setAmount();\r\n }\r\n };\r\n\r\n articlesTables.forEach(collection => {\r\n PkClientHelper.SubscribeForFieldChanging(collection, amountAdvanceChanged);\r\n });\r\n }\r\n}\r\n","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ArUIHelper, PkArticle } from 'src/pkScripts/UI/ArUIHelper';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { CardNewRequest, CardService, CardRequest } from 'tessa/cards/service';\r\nimport { showNotEmpty, createCardModel, UIButton, tryGetFromInfo } from 'tessa/ui';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { CardRowState, CardRow } from 'tessa/cards';\r\nimport { GridViewModel, ButtonViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ButtonForCopyingRows } from 'src/pkScripts/Helpers/PkClientHelper';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { PkArticles } from '../PkArticles';\r\nimport { ButtonForAddingRows } from 'src/pkScripts/UI/ArUIHelper';\r\n\r\nexport class ArActUIExtension extends CardUIExtension {\r\n\r\n private readonly idpPkArticle: PkArticle;\r\n\r\n private readonly ohrPkArticle: PkArticle;\r\n private readonly articles: PkArticles;\r\n\r\n public constructor(){\r\n super();\r\n let articles = [ \"ArArticleOHRListVirtual\", \"ArArticleIDPListVirtual\" ];\r\n this.ohrPkArticle = new PkArticle(\"ArArticleOHRList\", articles);\r\n this.idpPkArticle = new PkArticle(\"ArArticleIDPList\", articles);\r\n this.articles = new PkArticles(articles);\r\n }\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArActTypeID)) {\r\n return;\r\n }\r\n\r\n ArUIHelper.DocumentsIDPPartnersLogic(context);\r\n ArUIHelper.ContractSenderReceiverLogic(context);\r\n CdUIHelper.InitializeTableObjects(context);\r\n ChUIHelper.CalculateVATAmount(context);\r\n ArUIHelper.EditSenderHandle(context);\r\n ArUIHelper.EditReceiverHandle(context);\r\n await ArUIHelper.ArticleButtonLogic(context);\r\n ArUIHelper.EditContractHandle(context);\r\n ArUIHelper.EditContractsHandle(context);\r\n ArUIHelper.EditDocumentKindHandle(context);\r\n ArUIHelper.EditTableArticlesIdpHandle(context);\r\n ArUIHelper.SetContractControlsVisibilityByDocumentKind(context, null, true);\r\n this.idpPkArticle.Initialized(context);\r\n this.ohrPkArticle.Initialized(context);\r\n ArUIHelper.UpdateInvoiceDateAndNumber(context);\r\n ArUIHelper.DocumentShipmentsReadonlySetting(context);\r\n ArUIHelper.DiadocDeleteLogic(context);\r\n ArUIHelper.PacketCardLogic(context);\r\n ArUIHelper.DiadocButtonLogic(context);\r\n await ArUIHelper.InitializeTableWorksAndServices(context.model, context);\r\n ArUIHelper.ChangesInUIWhenContractsIsChanging(context);\r\n ArUIHelper.SetReadOnlyAmountAndAmountVAT(context);\r\n ArUIHelper.ApproversHandle(context);\r\n ArUIHelper.ResponsibleExecutorsHandle(context);\r\n ArUIHelper.ResponsibleBookkeepersHandle(context);\r\n ArUIHelper.RequiredApproversHandle(context);\r\n ArUIHelper.SignerHandle(context);\r\n ArUIHelper.GoToPacketActionLogic(context);\r\n ArUIHelper.SetDiadocControlsVisibility(context.model);\r\n ArActUIExtension.InitIdpLookup(context);\r\n ButtonForCopyingRows.Initialized(context, \"ArticlesOHRVirtual\", \"ArArticleOHRListVirtual\");\r\n ButtonForAddingRows.Initialized(context, \"ArArticleOhrForChoise\", \"ArticlesOHRVirtual\", \"ArArticleOHRListVirtual\");\r\n ArUIHelper.InitObjectCopying(context.card);\r\n await ArUIHelper.DssSignActionLogicAsync(context);\r\n this.articles.Initialized(context);\r\n ArUIHelper.InitArticlesTabsSwitching(context, context.model.card);\r\n ArUIHelper.SetOtherPaymentsControlsEnable(context);\r\n ArUIHelper.SetPartnerExceptionListControlsEnable(context);\r\n ArUIHelper.EditTableArticlesOHRHandle(context);\r\n }\r\n\r\n public async reopening(context: ICardUIExtensionContext) {\r\n if (!Guid.equals(context.getRequest.cardTypeId, PkCardTypes.ArActTypeID)) {\r\n return;\r\n }\r\n\r\n await this.CheckAutoSigningProcessIsCompleted(context);\r\n }\r\n\r\n /** Проверка сработало ли автоподписание по документу. */\r\n private async CheckAutoSigningProcessIsCompleted(context: ICardUIExtensionContext) {\r\n if (context.uiContext.cardEditor == null ||\r\n context.uiContext.cardEditor.lastData == null) {\r\n return;\r\n }\r\n\r\n const lastStoreResponse = context.uiContext.cardEditor.lastData.storeResponse;\r\n\r\n if (lastStoreResponse == null) {\r\n return;\r\n }\r\n\r\n if (lastStoreResponse.cardId !== context.getRequest.cardId) {\r\n return;\r\n }\r\n\r\n if (!tryGetFromInfo(lastStoreResponse.info, \"IsAutoSigningProcessCompleted\", false)) {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CompleteAutoSigningProcess;\r\n request.info[\"CardID\"] = createTypedField(context.getRequest.cardId, DotNetType.Guid);\r\n\r\n await CardService.instance.request(request);\r\n }\r\n\r\n /** Инициализируем возможность связывать работы со статьями ИДП,\r\n * пользователь может делать линк на статью ИДП в работах и услугах\r\n */\r\n private static InitIdpLookup(context: ICardUIExtensionContext) {\r\n const worksAndServicesTable = CdUIHelper.GetUIControl(context, \"WorksAndServices\");\r\n if (isNullOrUndefined(worksAndServicesTable)) return;\r\n worksAndServicesTable.rowInvoked.add(async e => {\r\n if (e.action != GridRowAction.Opening && e.action != GridRowAction.Inserted) { return; }\r\n /**Строка работ и услуг, для которой могут выбрать статью ИДП*/\r\n const targetRow: CardRow = e.row;\r\n\r\n if (isNullOrUndefined(e.rowModel)) { return; }\r\n const button = e.rowModel!.controls.get('SelectIDPArticle') as ButtonViewModel;\r\n\r\n // Получаем форму\r\n const uiContext = context.uiContext;\r\n const editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null) {\r\n return;\r\n }\r\n\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'ArticlesIDPVirtualDialog');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n button.onClick = async () => {\r\n // Ссылки, заполняемые в ShowFormDialog\r\n /** Кнопка для закрытия формы */\r\n let closeBtn: UIButton | null = null;\r\n /** Метод заполнения статьи ИДП*/\r\n let selectRow = async () => {\r\n };\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async (_form) => {\r\n /** Табличка в карточке */\r\n const actArticleIdpList = context.model.card.sections.tryGet(\"ArArticleIDPListVirtual\");\r\n if (isNullOrUndefined(actArticleIdpList)) return;\r\n\r\n const dialogArticleIDPListVirtual = _form.cardModel.card.sections.tryGet('ArArticleIDPListVirtual');\r\n if (isNullOrUndefined(dialogArticleIDPListVirtual)) return;\r\n\r\n dialogArticleIDPListVirtual.rows.clear();\r\n\r\n //Добавляем данные\r\n //Нужны неудаленные строки с заполненными суммами\r\n let actualArticles = actArticleIdpList.rows.filter(\r\n r => r.state != CardRowState.Deleted && (r.tryGet(\"Amount\") || 0.0) != 0.0)\r\n actualArticles.forEach(ef => dialogArticleIDPListVirtual.rows.push(ef));\r\n\r\n const uiDialogIdpList = _form.cardModel.controls.get('ArticlesIDPVirtualDialog') as GridViewModel | undefined;\r\n if (isNullOrUndefined(uiDialogIdpList)) return;\r\n\r\n selectRow = async () => {\r\n if (isNullOrUndefined(uiDialogIdpList.selectedRow) || isNullOrUndefined(targetRow)) { return; }\r\n targetRow.set('IdpArticleRowID', uiDialogIdpList.selectedRow.row.getField('RowID')!);\r\n targetRow.set('IdpArticleID', uiDialogIdpList.selectedRow.row.getField('ArticleID')!);\r\n targetRow.set('IdpArticleObjectFullName', uiDialogIdpList.selectedRow.row.getField('ObjectFullName')!);\r\n }\r\n\r\n uiDialogIdpList.rowInvoked.add(async (e2) => {\r\n if (e2.action != GridRowAction.Opening) return;\r\n e2.cancel = true;\r\n selectRow();\r\n if (isNullOrUndefined(closeBtn)) { return }\r\n closeBtn!.close();\r\n })\r\n },\r\n [closeBtn =\r\n new UIButton('$UI_Common_OK', async () => {\r\n selectRow();\r\n if (isNullOrUndefined(closeBtn)) { return }\r\n closeBtn!.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n });\r\n }\r\n}","import { CardPermissionFlags } from \"tessa/cards\";\r\nimport { hasFlag } from \"tessa/platform\";\r\n\r\nexport class PermissionsSharedHelper {\r\n\r\n /* Проверка доступности на редактирование поля или секции для скрытия\\открытия кастомных кнопок. */\r\n public static IsEditableCard(cardPermissions: CardPermissionFlags) : boolean\r\n {\r\n return (hasFlag(cardPermissions, CardPermissionFlags.AllowModify) && \r\n !hasFlag(cardPermissions, CardPermissionFlags.ProhibitModify));\r\n }\r\n\r\n /* Проверка доступности на редактирование поля или секции для скрытия\\открытия кастомных кнопок. \r\n в данном случае права на секцию приоритетнее чем запрет на редактирование карточки\r\n */\r\n public static IsEditableSection(cardPermissions: CardPermissionFlags, \r\n sectionPermissions: CardPermissionFlags) : boolean\r\n {\r\n return (hasFlag(cardPermissions, CardPermissionFlags.AllowModify) && \r\n !hasFlag(cardPermissions, CardPermissionFlags.ProhibitModify) &&\r\n hasFlag(sectionPermissions, CardPermissionFlags.None))\r\n || (sectionPermissions && \r\n hasFlag(sectionPermissions, CardPermissionFlags.AllowModify) &&\r\n !hasFlag(sectionPermissions, CardPermissionFlags.ProhibitModify)\r\n ) == true;\r\n }\r\n\r\n /* Проверка доступности на редактирование поля или секции для скрытия\\открытия кастомных кнопок. \r\n в данном случае права на поле приоритетнее чем запрет на редактирование карточки\r\n */\r\n public static IsEditableField(cardPermissions: CardPermissionFlags,\r\n fieldsPermissions: CardPermissionFlags) : boolean\r\n {\r\n return (hasFlag(cardPermissions, CardPermissionFlags.AllowModify) && \r\n !hasFlag(cardPermissions, CardPermissionFlags.ProhibitModify) &&\r\n hasFlag(fieldsPermissions, CardPermissionFlags.None))\r\n || (fieldsPermissions && \r\n hasFlag(fieldsPermissions, CardPermissionFlags.AllowModify) &&\r\n !hasFlag(fieldsPermissions, CardPermissionFlags.ProhibitModify)\r\n ) == true;\r\n }\r\n}","import { userSession } from \"common/utility\";\r\nimport fileDialog from \"file-dialog\";\r\nimport { CdCardTypes } from \"src/cdScripts/Helpers/CdCardTypes\";\r\nimport { CdDocStates } from \"src/cdScripts/Helpers/CdDocStates\";\r\nimport { CdFileTypes } from \"src/cdScripts/Helpers/CdFileTypes\";\r\nimport { Card, CardPermissionFlags, CardRowState, CardSection, CardStoreMode } from \"tessa/cards\";\r\nimport { CardNewRequest, CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { FileCategory, IFile } from \"tessa/files\";\r\nimport { createTypedField, DotNetType, Guid, Visibility } from \"tessa/platform\";\r\nimport { IUIContext, LoadingOverlay, UIButton, createCardModel, showConfirmWithCancel, showError, showMessage, showNotEmpty, tryGetFromInfo } from \"tessa/ui\";\r\nimport { ICardModel } from \"tessa/ui/cards\";\r\nimport { ButtonViewModel, FileListViewModel, getFileNameAndExtension, selectFileCategory } from \"tessa/ui/cards/controls\";\r\nimport { PkContractUIHelper } from \"./PkContractUIHelper\";\r\nimport { TessaArContractKinds } from \"./PkPrimaryDocsHelper\";\r\nimport { PkRequestTypes } from \"./PkRequestTypes\";\r\nimport { MetadataStorage } from \"tessa\";\r\nimport { showFormDialog } from \"tessa/ui/uiHost\";\r\nimport { ChFileCategories } from \"./ChFileCategories\";\r\nimport moment from \"moment\";\r\nimport { PkCommonHelper } from \"./PkCommonHelper\";\r\nimport { ValidationResult } from \"tessa/platform/validation\";\r\n\r\nexport class ArFileHelper {\r\n\r\n /** общие проверки видимости для кнопок*/\r\n public static IsButtonVisibleCommonChecks(model: ICardModel, button: ButtonViewModel, isHistorical: boolean) : boolean\r\n {\r\n var result = true;\r\n\r\n if (model.card.storeMode == CardStoreMode.Insert)\r\n {\r\n button.controlVisibility = Visibility.Collapsed;\r\n\r\n result = false;\r\n }\r\n else\r\n {\r\n button.controlVisibility = Visibility.Visible;\r\n\r\n if (isHistorical)\r\n {\r\n button.isReadOnly = true;\r\n\r\n result = false;\r\n }\r\n else\r\n {\r\n button.isReadOnly = false;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /** добавление файла с диска */\r\n public static async AddFileFromFsAsync(model: ICardModel)\r\n {\r\n fileDialog({multiple: true}).then(files => {\r\n let filesFileControl = model.controls.get('Files') as FileListViewModel;\r\n\r\n //Диалог выбора категории\r\n let t = selectFileCategory(filesFileControl,false);\r\n t.then(async (category) => {\r\n if(category.category!=null && category.cancel!=true \r\n && ArFileHelper.IfCanUploadFileForCategory(model, category.category)) {\r\n \r\n let isCardTypeInWithoutRenameDialogList : boolean = this.CheckCardNeedForRenameDialog(model.card.typeId);\r\n \r\n for (let i = 0; i < files.length; i++) {\r\n const file: File = files[i];\r\n let fileNameHandler = isCardTypeInWithoutRenameDialogList ? null : await this.SetFileNameAsync(model, category.category, file.name);\r\n\r\n if (!!fileNameHandler && !fileNameHandler.Result) {\r\n return;\r\n }\r\n \r\n let tessaFile: IFile = model.fileContainer.createFile(file, \r\n CdFileTypes.DefaultFileType,\r\n category.category,\r\n fileNameHandler?.FileName != null && fileNameHandler?.FileName != '' ? fileNameHandler?.FileName : file.name); \r\n model.fileContainer.addFile(tessaFile); \r\n }\r\n } \r\n });\r\n \r\n }); \r\n }\r\n\r\n\r\n\r\n public static async SetFileNameAsync(model: ICardModel, category: FileCategory, path: string) : Promise { \r\n let fileNameHandler: FileNameHandler = new FileNameHandler();\r\n let fileCounter: number = 0;\r\n let dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName(\"PkDialogs\");\r\n if (!dialogsType) {\r\n return null;\r\n }\r\n \r\n let dialogForm = dialogsType.forms.find(x => x.name === \"EditFileName\");\r\n if (!dialogForm) {\r\n return null;\r\n }\r\n \r\n let request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n let response = await CardService.instance.new(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n\r\n var fileInfo = getFileNameAndExtension(path);\r\n \r\n let windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n fileNameHandler.Result = false;\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async (viewModel) => {\r\n let pkContractFilesVirtualSection = viewModel.cardModel.card.sections.tryGet('PkContractFilesVirtual');\r\n if (pkContractFilesVirtualSection == null) {\r\n return;\r\n }\r\n\r\n const arContractsUser = model.card.sections.tryGet('ArContractsUser');\r\n const arContractsPartners = model.card.sections.tryGet('ArContractPartners');\r\n if (arContractsUser == null) {\r\n return;\r\n }\r\n\r\n let typeName = '';\r\n let subject = '';\r\n switch (category.id) {\r\n case ChFileCategories.Primary.id:\r\n typeName = arContractsUser.fields.get(\"ContractKindDocumentKind\");\r\n subject = arContractsUser.fields.get(\"Subject\");\r\n break;\r\n case ChFileCategories.Informational.id:\r\n typeName = 'Информационные';\r\n break;\r\n case ChFileCategories.AdditionalForContract.id:\r\n typeName = 'Приложение';\r\n\r\n if (model.fileContainer.files.some(x => x))\r\n {\r\n let additionalFiles = model.fileContainer.files.filter(x => x.category && Guid.equals(x.category.id, ChFileCategories.AdditionalForContract.id));\r\n fileCounter = additionalFiles.length;\r\n }\r\n\r\n break;\r\n case ChFileCategories.ANPT.id:\r\n typeName = \"АНПТ (электронный)\";\r\n break;\r\n\r\n case ChFileCategories.PrintForms.id:\r\n typeName = \"Печатные формы\";\r\n break;\r\n case ChFileCategories.FullPacket.id:\r\n typeName = \"Полный пакет\";\r\n break;\r\n }\r\n\r\n let sides = arContractsPartners?.rows\r\n .map(r => r.getField(\"PartnerName\")?.$value) \r\n .join(' с ');\r\n\r\n pkContractFilesVirtualSection.fields.set(\"Number\", arContractsUser.fields.get('DocNumber'), DotNetType.String);\r\n pkContractFilesVirtualSection.fields.set(\"Date\", arContractsUser.fields.get('DocDate'), DotNetType.DateTime);\r\n pkContractFilesVirtualSection.fields.set(\"Sides\", sides, DotNetType.String);\r\n pkContractFilesVirtualSection.fields.set(\"Subject\", subject, DotNetType.String);\r\n pkContractFilesVirtualSection.fields.set(\"TypeName\", typeName, DotNetType.String);\r\n this.SetFileName(fileInfo.ext, category, pkContractFilesVirtualSection, fileCounter);\r\n\r\n pkContractFilesVirtualSection.fields.fieldChanged.add(e => {\r\n let fields = ['Number', 'Date', 'Sides', 'Subject', 'TypeName'];\r\n if (fields.findIndex(x => x === e.fieldName) >= 0) {\r\n this.SetFileName(fileInfo.ext, category, pkContractFilesVirtualSection!, fileCounter);\r\n }\r\n \r\n });\r\n\r\n if (windowCardModel.card.sections.has(\"PkDialogs\"))\r\n {\r\n windowCardModel.card.sections.tryGet(\"PkDialogs\")?.fields.set(\"Comment\", path, DotNetType.String);\r\n }\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n if (windowCardModel.card.sections.has(\"PkContractFilesVirtual\"))\r\n {\r\n var pkContractFilesVirtualSection = windowCardModel.card.sections.tryGet(\"PkContractFilesVirtual\");\r\n var errorMsg = '';\r\n let typeName = pkContractFilesVirtualSection?.fields.get(\"TypeName\");\r\n if (typeName == null || typeName == '')\r\n {\r\n errorMsg += \"Необходимо указать вид документа.\\n\";\r\n }\r\n\r\n let number = pkContractFilesVirtualSection?.fields.get(\"Number\");\r\n if (number == null || number == '')\r\n {\r\n errorMsg += \"Необходимо указать номер документа.\\n\";\r\n }\r\n\r\n if (errorMsg != '')\r\n {\r\n showError(errorMsg);\r\n return;\r\n }\r\n\r\n fileNameHandler.FileName = pkContractFilesVirtualSection?.fields.get(\"Name\");\r\n fileNameHandler.Result = true;\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n\r\n return fileNameHandler;\r\n }\r\n\r\n public static async SetFileName(ext: string, fileCategory: FileCategory, pkContractFilesVirtualSection: CardSection, fileCounter: number) {\r\n let number = pkContractFilesVirtualSection.fields.get(\"Number\");\r\n number = PkCommonHelper.IsNullOrWhitespace(number) ? \"\" : ` №${number} `\r\n let subject = pkContractFilesVirtualSection.fields.get(\"Subject\") ?? \"\";\r\n let sides = pkContractFilesVirtualSection.fields.get(\"Sides\");\r\n let dateValue = pkContractFilesVirtualSection.fields.get(\"Date\") as Date;\r\n let date = dateValue != null ? ` от ${moment(dateValue).format('DD.MM.YY')} ` : \"\";\r\n var typeName = pkContractFilesVirtualSection.fields.get(\"TypeName\");\r\n if (fileCategory.id == ChFileCategories.Informational.id)\r\n {\r\n pkContractFilesVirtualSection.fields.set(\"Name\", `${subject}${number}${date} ${sides}${ext}`.replace(' ', ' '), DotNetType.String);\r\n }\r\n else if (fileCategory.id == ChFileCategories.AdditionalForContract.id)\r\n {\r\n pkContractFilesVirtualSection.fields.set(\"Name\", `${typeName} ${++fileCounter} ${number}${date}${subject} ${sides}${ext}`.replace(' ', ' '), DotNetType.String);\r\n }\r\n else\r\n {\r\n pkContractFilesVirtualSection.fields.set(\"Name\", `${typeName}${number}${date}${subject} ${sides}${ext}`.replace(' ', ' '), DotNetType.String);\r\n }\r\n }\r\n /** проверка видимости кнопки загрузить из файловой системы */\r\n public static IsFsButtonCanExecute(card: Card) : boolean\r\n {\r\n if ((card.permissions.cardPermissions & CardPermissionFlags.AllowInsertFile) == 0\r\n || (card.permissions.cardPermissions & CardPermissionFlags.ProhibitInsertFile) != 0) {\r\n return false;\r\n }\r\n\r\n var result = false;\r\n let sectionName = Guid.equals(card.typeId, CdCardTypes.ArContractTypeID) ? \"ArContractsUser\" : \"PkDocumentConstructorInfo\";\r\n let section : CardSection | undefined = card.sections.tryGet(sectionName);\r\n\r\n if (!section) return false;\r\n\r\n if (Guid.equals(card.typeId, CdCardTypes.ArContractTypeID)) {\r\n result = true;\r\n }\r\n\r\n if (Guid.equals(card.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)) {\r\n if (tryGetFromInfo(card.info, 'CanAddFilesByTask', false))\r\n {\r\n return true;\r\n }\r\n let section = card.sections.get(\"ArPowerOfAttorney\");\r\n if (section && section.fields.get(\"PowerOfAttorneyFormID\") != 1) //не простая письменная\r\n {\r\n result = true;\r\n }\r\n else if (section && section.fields.get(\"PowerOfAttorneyTypeID\") == 2)\r\n {\r\n result = true;\r\n }\r\n else {\r\n const stateSection : CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n \r\n if (!stateSection) return false;\r\n\r\n const currentStateId = stateSection.fields.get(\"StateID\");\r\n const currentStateName = stateSection.fields.get(\"StateName\");\r\n\r\n if ((currentStateId != CdDocStates.Project.id || currentStateName != CdDocStates.Project.caption) && currentStateId != CdDocStates.Rework.id) { \r\n result = true;\r\n }\r\n else {\r\n result = false;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /** добавление файла из конструктора документов */\r\n public static async AddFileFromCdAsync(context: IUIContext, model: ICardModel, card: Card)\r\n {\r\n let args = '';\r\n let req = 'Что-то пошло не так';\r\n\r\n let isCantSendToCd: boolean = card.info[\"IsCantSendToCd\"] ?? false;\r\n if (isCantSendToCd)\r\n {\r\n await showError(\"Нельзя перейти в Конструктор Документов пока не будет завершен текущий сеанс.\");\r\n\r\n return;\r\n }\r\n\r\n let result: ValidationResult = ValidationResult.empty;\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n result = await model.saveAsync();\r\n }, 'Сохраняем карточку.');\r\n\r\n if (!result.isSuccessful)\r\n {\r\n return;\r\n }\r\n\r\n\r\n var currentCard = context?.cardEditor?.cardModel?.card;\r\n\r\n // инфа по КД ПИКК в секции размещена в PkDocumentConstructorInfo, туда же по другим документам надо добавлять\r\n let sectionCDInfoName = Guid.equals(card.typeId, CdCardTypes.ArContractTypeID) ? \"ArContractsUser\" : \"PkDocumentConstructorInfo\";\r\n let sectionCDInfo : CardSection | undefined = card.sections.tryGet(sectionCDInfoName); \r\n if (!sectionCDInfo) return false;\r\n\r\n let isDocFromKd: boolean = sectionCDInfo.fields.get(\"IsFromKD\") ?? false;\r\n var isNewVersion = true;\r\n if (isDocFromKd)\r\n {\r\n var answer = await showConfirmWithCancel(\r\n `Да - Создать новый документ из КД\\n` +\r\n `Нет - Редактировать уже созданный документ из КД\\n` +\r\n \"Отмена - Отменить выбор\");\r\n\r\n if (answer == null)\r\n {\r\n return;\r\n }\r\n\r\n isNewVersion = answer;\r\n }\r\n\r\n // проверка наличия шаблонов только для договоров ГК\r\n if (Guid.equals(card.typeId, CdCardTypes.ArContractTypeID)) {\r\n let isErrorCheckContractCategory = false;\r\n await LoadingOverlay.instance.show(async () => {\r\n let checkContractCategoryRequest = new CardRequest();\r\n checkContractCategoryRequest.requestType = PkRequestTypes.ArCheckContractCategoryInKd;\r\n checkContractCategoryRequest.info[\"CardID\"] = createTypedField(currentCard?.id, DotNetType.Guid); \r\n \r\n let checkContractCategoryResponse = await CardService.instance.request(checkContractCategoryRequest);\r\n if (!checkContractCategoryResponse.validationResult.isSuccessful) {\r\n await showError(checkContractCategoryResponse.validationResult.build().toString());\r\n \r\n isErrorCheckContractCategory = true;\r\n return;\r\n }\r\n \r\n }, 'Проверяем категорию договора.');\r\n\r\n if (isErrorCheckContractCategory) {\r\n return;\r\n }\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n let cdLinkRequest = new CardRequest();\r\n cdLinkRequest.requestType = PkRequestTypes.ArSendToKd;\r\n cdLinkRequest.info[\"CardID\"] = createTypedField(currentCard?.id, DotNetType.Guid);\r\n cdLinkRequest.info[\"IsNewVersion\"] = createTypedField(isNewVersion, DotNetType.Boolean);\r\n\r\n let cdLinkResponse = await CardService.instance.request(cdLinkRequest);\r\n let requestJson: string = cdLinkResponse.info.requestJson!.$value;\r\n if (requestJson != null && requestJson.length > 0)\r\n {\r\n req = requestJson.replace(',', ',\\n');\r\n }\r\n\r\n if (cdLinkResponse.validationResult.isSuccessful)\r\n {\r\n let url: string = cdLinkResponse.info.url!.$value;\r\n if (url && url.length > 0)\r\n {\r\n args = url;// + \" --new-window\";\r\n }\r\n if (Guid.equals(currentCard?.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)) {\r\n \r\n currentCard!.info[\"IsNeedPersonalDataAdded\"] = cdLinkResponse.info.IsNeedPersonalDataAdded!.$value;\r\n \r\n await LoadingOverlay.instance.show(async () => {\r\n result = await model.saveAsync();\r\n }, 'Сохраняем карточку.');\r\n \r\n if (!result.isSuccessful)\r\n {\r\n await showError(result.toString());\r\n return;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let error: string = cdLinkResponse.info.error!.$value;\r\n if (error && error.length > 0)\r\n {\r\n await showError(cdLinkResponse.validationResult.build().toString());\r\n return;\r\n }\r\n }\r\n }, 'Идет обработка запроса в КД.');\r\n \r\n if (userSession.isAdmin) {\r\n showMessage(req);\r\n }\r\n \r\n\r\n if (args)\r\n {\r\n //let browserPath = 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe';\r\n //Process.Start(browserPath, args);\r\n window.open(args,'_blank');\r\n currentCard!.info[\"IsCantSendToCd\"] = true;\r\n }\r\n }\r\n\r\n /** проверка видимости кнопки загрузить из конструктора документов для Комфорта*/\r\n public static IsCdButtonVisibleByState(card: Card): boolean\r\n {\r\n var result = false;\r\n let commonInfo : CardSection | undefined = card.sections.tryGet(\"KrApprovalCommonInfoVirtual\");\r\n const state: number | null = commonInfo ? commonInfo.fields.tryGet('StateID') : null;\r\n // KrState.Draft KrState.Editing\r\n if (state != undefined && (state == 0 || state == 4)) {\r\n result = true;\r\n }\r\n return result;\r\n }\r\n\r\n public static CheckIsHistorical(card: Card): boolean\r\n {\r\n let isHistorical = false;\r\n switch (card.typeId) {\r\n // Уведомление о результатах тендера\r\n case CdCardTypes.ArContractTypeID:\r\n {\r\n isHistorical = PkContractUIHelper.IsLocked(card)\r\n } \r\n break;\r\n case CdCardTypes.ArPowerOfAttorneyTypeID:\r\n {\r\n let section = card.sections.tryGet(\"ArPowerOfAttorney\");\r\n if (section)\r\n {\r\n isHistorical = section.fields.tryGet(\"IsHistorical\", false);\r\n }\r\n } \r\n break;\r\n default:\r\n break;\r\n }\r\n return isHistorical;\r\n }\r\n\r\n /** проверка видимости кнопки загрузить из конструктора документов*/\r\n public static IsCdButtonCanExecute(card: Card): boolean\r\n {\r\n var result = false;\r\n\r\n // проверяем в договорах ГК, что это не Счет без договора\r\n let arContractsUserSection : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n if (arContractsUserSection) {\r\n var kindID : string | undefined = arContractsUserSection.fields.get(\"ContractKindID\");\r\n if (!kindID) return false;\r\n\r\n var kindScoreId = TessaArContractKinds.AccountWithoutContractKindTessaID;\r\n \r\n if (kindID != kindScoreId) {\r\n result = true;\r\n }\r\n }\r\n else {\r\n result = true;\r\n }\r\n\r\n let arContractPartnersSection : CardSection | undefined = card.sections.tryGet(\"ArContractPartners\");\r\n if (arContractPartnersSection)\r\n {\r\n arContractPartnersSection.rows.filter(row => row.state != CardRowState.Deleted && row.get('ContractCategoryExtID') != null)\r\n .forEach(row => {\r\n let contractCategoryExtID: number = row.get('ContractCategoryExtID') || 0;\r\n if (contractCategoryExtID == 269)\r\n {\r\n return true;\r\n }\r\n });\r\n }\r\n result = result && (card.permissions.cardPermissions & CardPermissionFlags.AllowInsertFile)!=0 \r\n && (card.permissions.cardPermissions & CardPermissionFlags.ProhibitInsertFile)==0\r\n return result;\r\n }\r\n\r\n public static IfCanUploadFileForCategory(model: ICardModel, category: FileCategory) : boolean {\r\n if (!(CdCardTypes.ArContractTypeID === model.cardType.id) ||\r\n (!(ChFileCategories.Primary.id === category.id) && !(ChFileCategories.ANPT.id === category.id)))\r\n {\r\n return true;\r\n }\r\n\r\n let count = 0;\r\n model.card.files.forEach(file => {\r\n if (file.categoryId === category.id)\r\n {\r\n count++;\r\n }\r\n });\r\n if (count > 0)\r\n {\r\n showError('Добавление более одного документа в данную категорию запрещено.');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n \r\n private static CheckCardNeedForRenameDialog(typeId: string) : boolean {\r\n let cardTypesThatDontNeedRenameDialogList : string[] = [CdCardTypes.ArPowerOfAttorneyTypeID];\r\n return cardTypesThatDontNeedRenameDialogList.includes(typeId);\r\n }\r\n}\r\n\r\nclass FileNameHandler {\r\n FileName: string = '';\r\n Result: boolean = false;\r\n}","/** Список контролов и секций договорного документа. */\r\nexport class ArContractControlsWithField {\r\n static StickerFormControlsFromExcel: Array = \r\n [\r\n // {ControlName: 'AmountRemainStickerControl', FieldName: 'Remain'},\r\n {ControlName: 'AmountStickerFactControl', FieldName: 'ArticleAmountFactPMC'},\r\n {ControlName: 'ContractorPmcStickerControl', FieldName: 'ContractorPMC'},\r\n {ControlName: 'ContractorGuidPmcStickerControl', FieldName: 'ContractorGuidPMC'},\r\n {ControlName: 'LastActDatePmcStickerControl', FieldName: 'LastActDatePMC'}\r\n ];\r\n}\r\n\r\nexport interface ControlWithField\r\n{\r\n ControlName: string;\r\n\r\n FieldName: string;\r\n}","import { Card, CardRow, CardRowState, CardSection } from 'tessa/cards';\r\nimport { Guid, DotNetType } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class ArContractSharedHelper \r\n{\r\n /** Заполнение виртуальной секции ArContractVirtual.\r\n * Актуально для допников. */\r\n public static async SetArContractVirtualSection(card: Card) \r\n {\r\n let arContractVirtual = card.sections.tryGet('ArContractVirtual');\r\n if (!Guid.equals(card.typeId, CdCardTypes.ArContractTypeID)\r\n || !arContractVirtual) \r\n {\r\n return;\r\n }\r\n\r\n // флаг категории договора для ИДП и признак безнадежности стороны\r\n let arContractPartners = card.sections.tryGet('ArContractPartners');\r\n if (arContractPartners)\r\n {\r\n for(let partnerRow of arContractPartners.rows) \r\n {\r\n let contractCategoryIsOIDP = partnerRow.tryGetField(\"ContractCategoryIsOIDP\")?.$value;\r\n if (contractCategoryIsOIDP != null) \r\n {\r\n arContractVirtual.fields.set(\"CategoryIsIDP\", contractCategoryIsOIDP, DotNetType.Boolean);\r\n }\r\n\r\n let contractCategoryIsHopeless = partnerRow.tryGetField(\"ContractCategoryIsHopeless\")?.$value;\r\n if (contractCategoryIsOIDP != null) \r\n {\r\n arContractVirtual.fields.set(\"CategoryIsHopeless\", contractCategoryIsHopeless, DotNetType.Boolean);\r\n }\r\n }\r\n }\r\n\r\n arContractVirtual.clearChanges();\r\n }\r\n\r\n public static async GetArticleRowByPartners(section: CardSection, isIncome: boolean, firstPartnerRow: CardRow, secondPartnerRow: CardRow) {\r\n return section?.rows.filter(x =>\r\n x.state != CardRowState.Deleted\r\n && (x.get(\"CostItemIsIncome\") ?? false) == isIncome\r\n && ((x.get(\"PartnerExternalID\") == firstPartnerRow.get(\"PartnerExternalID\")\r\n && x.get(\"PartnerRelatedExternalID\") == secondPartnerRow.get(\"PartnerExternalID\"))\r\n || (x.get(\"PartnerRelatedExternalID\") == firstPartnerRow.get(\"PartnerExternalID\")\r\n && x.get(\"PartnerExternalID\") == secondPartnerRow.get(\"PartnerExternalID\"))));\r\n }\r\n\r\n /* Расчет общей текущей суммы по CRM документам. */\r\n public static async GetCrmCurrentArticlesSumAmountAsync(card: Card, sellerEverBeenInPerimeter: boolean, seller: CardRow, byer: CardRow, fieldName: string) {\r\n // Доходный договор - в котором Продавец когда-либо был в периметре ГК ПИК\r\n // Расходный договор - в котором Покупатель когда-либо был в периметре ГК ПИК\r\n // Доходно-расходный - и продавец и покупатель когда-либо были в периметре ГК ПИК (ВГО)\r\n // Текущая сумма по доходному И по доходно-расходному договору = сумме по доходной статье между Продавцом и Покупателем.\r\n // Текущая сумма по расходному договору = сумме по расходной статье между Покупателем и Продавцом. \r\n let amountCurrent : number = 0.0\r\n let section = card.sections.tryGet('ArContractArticleIdp') ;\r\n if (!section) return amountCurrent;\r\n let rows = await this.GetArticleRowByPartners(section, sellerEverBeenInPerimeter, seller, byer);\r\n if (rows && rows.length > 0) {\r\n amountCurrent = rows[0].get(fieldName) ?? 0;\r\n }\r\n return amountCurrent;\r\n }\r\n\r\n /* Расчет общей текущей суммы по НЕ CRM документам. */\r\n public static async GetNotCrmArticlesSumAmountAsync(card: Card, seller: CardRow, byer: CardRow, fieldName: string, initial: boolean = false) {\r\n // Доходный договор - в котором Продавец - автоматизированная сторона.\r\n // Расходный договор - в котором Покупатель - автоматизированная сторона.\r\n // Доходно-расходный - в котором Покупатель И Продавец - автоматизированные стороны\r\n // Текущая сумма по доходному договору = сумме сумм по доходным статьям между Продавцом и Покупателем из блока “Текущие суммы”\r\n // Текущая сумма по расходному И доходно-расходному договору = сумме сумм по расходным статьям между Покупателем и Продавцом из блока “Текущие суммы”\r\n \r\n // упростив получаем - если Покупатель - автоматизированная, то берем сумму по расходным\r\n // иначе - по доходным\r\n let amountCurrent : number = 0.0\r\n let section = card.sections.tryGet(initial ? 'ArContractArticleIdpInitial' : 'ArContractArticleIdp') ;\r\n if (!section) return amountCurrent;\r\n let byerAutomated = byer != null && byer.get(\"PartnerAutomated\") == true;\r\n let rows = await this.GetArticleRowByPartners(section, !byerAutomated, seller, byer);\r\n if (rows && rows.length > 0) {\r\n amountCurrent = rows.map(x => x.get(fieldName) ?? 0.0).reduce((sum, current) => Number(sum) + Number(current), 0.0);\r\n }\r\n return amountCurrent;\r\n }\r\n} ","export class PkAccreditationPerimeters {\r\n\r\n /// \r\n /// Группа Компаний ПИК\r\n /// \r\n public static GkPIKPerimeter = 'ГруппаКомпанийПИК';\r\n}","export class ContractorMappingData {\r\n public PartnerExternalID: number;\r\n public RoleID: number;\r\n public ContractCategoryID: guid;\r\n}\r\n\r\nexport class TypeProcedureMappingData {\r\n public Contractors: ContractorMappingData[];\r\n\r\n public constructor() {\r\n this.Contractors = new Array();\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel, IFormViewModel, IControlViewModel } from 'tessa/ui/cards';\r\nimport { Guid, Visibility, createTypedField, DotNetType, DbType, hasFlag} from 'tessa/platform';\r\nimport {\r\n GridViewModel,\r\n ButtonViewModel,\r\n GridRowAction,\r\n TabControlViewModel,\r\n IntegerBoxViewModel,\r\n DecimalBoxViewModel,\r\n GridRowEventArgs,\r\n GridRowViewModel,\r\n AutoCompleteEntryViewModel,\r\n TextBoxViewModel,\r\n DateTimeViewModel,\r\n LabelViewModel\r\n} from 'tessa/ui/cards/controls';\r\nimport { Card, CardRowState, CardRowsListener, CardRow, CardPermissionFlags, CardSection, CardStoreMode, CardFieldChangedEventArgs, CardGetMode, CardFileState } from 'tessa/cards';\r\nimport { ValidationResultType, ValidationResult } from 'tessa/platform/validation';\r\nimport { userSession } from 'common/utility';\r\nimport { DefaultFormMainViewModel } from 'tessa/ui/cards/forms';\r\nimport { CardRequest, CardService, CardGetRequest, CardGetFileContentRequest } from 'tessa/cards/service';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { RequestParameterBuilder, SelectedValue, TessaViewRequest, ViewService } from 'tessa/views';\r\nimport { ViewParameterMetadata, equalsCriteriaOperator, RequestParameter, containsCriteriaOperator } from 'tessa/views/metadata';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { showViewsDialog, openCard, createCard, showView } from 'tessa/ui/uiHost';\r\nimport { showError, showNotEmpty, UIButton, showConfirm, LoadingOverlay, showLoadingOverlay, showConfirmWithCancel, showMessage, tryGetFromInfo } from 'tessa/ui';\r\nimport { CdCommonHelper } from 'src/cdScripts/Helpers/CdCommonHelper';\r\nimport { autorun, reaction, runInAction } from 'mobx';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { FileListViewModel } from 'tessa/ui/cards/controls';\r\nimport { TessaArContractKinds } from '../../Helpers/PkPrimaryDocsHelper';\r\nimport { ArTypeProcedure } from '../../Helpers/ArTypeProcedure';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { PkContractUIHelper } from '../../Helpers/PkContractUIHelper';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { PkClientHelper } from 'src/pkScripts/Helpers/PkClientHelper';\r\nimport { ChRequestTypes } from 'src/pkScripts/Helpers/ChRequestTypes';\r\nimport { ChStaticRoles } from 'src/pkScripts/Helpers/ChStaticRoles';\r\nimport { ArContractCategory } from 'src/pkScripts/Helpers/ArContractCategory';\r\nimport { PermissionsSharedHelper } from 'src/pkScripts/Helpers/PermissionsSharedHelper';\r\nimport { ArFileHelper } from 'src/pkScripts/Helpers/ArFileHelper';\r\nimport { ArContractControlsWithField } from 'src/pkScripts/Helpers/ArContractControlsWithField';\r\nimport { PkUIHelper } from '../PkUIHelper';\r\nimport { ArContractSharedHelper } from 'src/pkScripts/Helpers/ArContractSharedHelper';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { PkAccreditationPerimeters } from 'src/pkScripts/Helpers/PkAccreditationPerimeters';\r\nimport { ArContractTypes, EfsAudMethodIds } from 'src/pkScripts/Helpers/PkEnums';\r\nimport { PkMethodsEmbroideryOnStickersID } from 'src/pkScripts/Helpers/PkEnums';\r\nimport { ContractorMappingData, TypeProcedureMappingData } from 'src/pkScripts/Helpers/TypeProcedureMappingData';\r\nimport { PkFileTypes } from 'src/pkScripts/Helpers/PkFileTypes';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\nimport { IUserSession } from 'common/utility/userSession';\r\nimport { CdFdProcessHelper } from 'src/cdScripts/Helpers/CdFdProcessHelper';\r\nimport { CdFdStages } from 'src/cdScripts/Helpers/CdFdStages';\r\nimport {CdTaskTypes} from \"../../../cdScripts/Helpers/CdTaskTypes\";\r\nimport {DocumentSections} from \"../../Helpers/Enums/DocumentSections\";\r\nimport {PkMatrixWorkplaceHelper} from \"../../Views/PkMatrixWorkplaceHelper\";\r\n\r\nconst PdcChangeFieldMessage = \"При изменении текущего параметра в документе произойдут изменения: \" +\r\n \"снимется метка \\\"ПДЦ из КЦ\\\", удалятся приложения, и документ будет отключен от ЦГП. Продолжить?\";\r\n\r\nexport class ArContractUIExtension extends CardUIExtension {\r\n\r\n \r\n private readonly KDPdcFromKCEditFields = [\"PartnerExternalID\", \"PerformerID\", \"AccountantID\", \r\n \"SignedID\",\"ContractCategoryID\"];\r\n private readonly covenantCategories = [ 72, 73, 74, 180, 246, 270 ];\r\n private disposer: Function | null = null;\r\n private _listener: CardRowsListener | null;\r\n public selectedRow: ReadonlyMap | null;\r\n public CanEditArticleIDPCurrent : boolean = false;\r\n public _isReadOnlyStickers : boolean = true;\r\n public tabs: TabControlViewModel;\r\n public copy: IFormViewModel[];\r\n public numbertab=0;\r\n public partnerExtID : number | null;\r\n public partnerName : string | null;\r\n public partnerRoleID : string | null; \r\n public isNeedValidationArticle : boolean = true;\r\n public startValuesForIsFromKD : ValuesForIsFromKD; \r\n public CopyRow : boolean = true;\r\n /*Было ли изменено какое-либо поле табличной строки Плановые расходы к перевыставлению на ремонтно-восстановительные работы.
\r\n Необходимо для возможности закрытия формы редактирования строки таблицы, когда пользователь просто открыл строку для просмотра.*/\r\n private plannedExpensesTableRowFieldWasChanged: boolean = false;\r\n private disableSaving:boolean = false;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArContractTypeID)) {\r\n return;\r\n }\r\n\r\n if (this._listener) {\r\n this._listener.stop();\r\n }\r\n\r\n const entityAccGrid = context.model.controls.get(\"EntityAccountants\") as GridViewModel;\r\n // const entityAccHistoryGrid = context.model.controls.get(\"EntityAccountantsHistory\") as GridViewModel;\r\n const eDocumentHistoryGrid = context.model.controls.get(\"EDocumentsHistory\") as GridViewModel;\r\n const linkToDiadocButton = context.model.controls.get(\"LinkToDiadoc\") as ButtonViewModel;\r\n const linkCovenantsGrid = context.model.controls.get(\"LinkCovenants\") as GridViewModel;\r\n const linkCovenantsConditionGrid = context.model.controls.get(\"LinkCovenantsCondition\") as GridViewModel;\r\n \r\n this.tabs = CdUIHelper.GetUIControl(context, \"ArticlePartners\") as TabControlViewModel;\r\n this.copy = this.tabs.tabs.slice();\r\n \r\n //запоминаем стартовые значения некоторых реквизитов, изменение которых может влиять на снятие флага документ из кд\r\n this.startValuesForIsFromKD = this.GetValuesForIsFromKD(context.model.card);\r\n\r\n //подписываемся на изменения значимых свойств для свойства документ из кд\r\n await this.GetChangesForIsFromKD(context.model);\r\n\r\n await this.SetVisibilityForDmsContractCategory(context, context.model.card, userSession);\r\n\r\n // скрытие вкладки паспорта контракта\r\n await this.HideEntityAccountantsTab(context.model);\r\n\r\n // скрытие вкладки паспорта контракта\r\n await this.HideEDocumentsHistoryTab(context.model, eDocumentHistoryGrid);\r\n\r\n // логика открытия документов Диадок из истории документов\r\n await this.OpenEDocumentsHistoryLogic(eDocumentHistoryGrid, linkToDiadocButton);\r\n\r\n // валидация строк паспорта котракта\r\n await this.ValidatingEntityAccountantsRows(context.model.card, entityAccGrid);\r\n\r\n // запрет редактирования таблицы Плановые расходы\r\n await this.ProhobotEditArContractPlannedExpensesTable(context, context.model.card);\r\n\r\n // Работа с таблицей Стороны документа\r\n this.WorkWithAllSidePartnersTable(context, context.model.card);\r\n\r\n // Копирование первоначальной суммы в поля Сумма всего (в рублях) и Сумма текущая.\r\n this.CopySumFromAmountBeginning(context.model.card);\r\n\r\n // Таблица \"Первоначальные суммы\"\r\n CdUIHelper.InitializeContractTableObjects(context, this.NeedsProhibitAfterTransferToUS(context.model.card), userSession);\r\n\r\n // Уведомление пользователя о снятии метки ПДЦ из КЦ\r\n this.OnPdcFromKcEditFields(context);\r\n\r\n // Работа с первоначальными суммами.\r\n this.WorkWithInitialAmount(context, context.model.card);\r\n\r\n //Работа с виртуальными первоначальными суммами сторон.\r\n await this.WorkWithInitialAmountByPartnersAsync(context, context.model.card);\r\n\r\n // Работа с текущими суммами.\r\n this.WorkWithInitialAmountCurrent(context, context.model.card);\r\n\r\n // Отображение контрола \"Родительский документ\"\r\n this.VisibilityParentCardControl(context, context.model.card);\r\n\r\n // Дата расторжения - доступно на изменение только в соглашении о расторжении.\r\n this.EnableDateCancelletionControl(context, context.model.card);\r\n\r\n // Дата расторжения обязательна в соглашении о расторжении.\r\n this.DateCancelletionControlIsRequired(context, context.model.card);\r\n\r\n // Поле Предел суммы доступно и обязательно если Тип договора = Рамочный.\r\n this.EnableAmountLimitControl(context, context.model.card);\r\n\r\n // Поле \"Контакты собственника\" должно быть доступно только, если категория договора \"Аренда юридических адресов\".\r\n this.EnableContactsOwnerControl(context, context.model.card);\r\n\r\n // Связка предприятие-подразделения-автор \r\n CdUIHelper.GroupEnterpriseLogic(context);\r\n\r\n //Отображение контролов в зависимости от типа документа\r\n this.VisibilityControlByType(context, context.model.card);\r\n \r\n this.ChangeArticleIDPController(context, context.model.card);\r\n\r\n // Установка видимости блока \"Плановые расходы к перевыставлению на ремонтно-восстановительные работы\" \r\n this.SetVisibilityForArContractPlannedExpensesBlock(context, context.model.card);\r\n\r\n // Работа с виртуальной секцией ArTenderBuyersSellersVirtual добавляем в нее покупателей и продавцов для использования в сортировке тендеров.\r\n await this.WorkWithTenderBuyersSellers(context);\r\n\r\n // Работа с виртуальной секцией ArContractNonpartyPartnerVirtual\r\n await this.WorkWithTenderNonpartyPartners(context);\r\n\r\n // Отображение контрола \"Основной контрагент\".\r\n await this.VisibilityPartnerIsMainControl(context);\r\n\r\n // Отображение контрола \"Относится к блоку ЗемАктив\".\r\n await this.WorkLandAssetControlAsync(context); \r\n\r\n // Отображение контрола \"Договор основного контрагента\".\r\n await this.VisibilityMainContractorContractControl(context);\r\n\r\n // Работа с полями Тип процедуры и Тендер\r\n await this.WorkWithTenderControl(context);\r\n\r\n // Работа с полем \"Серийный номер\".\r\n await this.VisibilitySerialNumberControl(context);\r\n\r\n // Работа с контролом первоначальной суммы.\r\n await this.WorkWithAmmountBeginning(context);\r\n\r\n // Работа с вкладкой ПА и ЭДО.\r\n await this.WorkWithPaEdoTabAsync(context);\r\n\r\n // Работа с полем Причина статуса ЭДО.\r\n await this.WorkWithEdoReasonFieldAsync(context);\r\n\r\n // Работа с контролом сумма всего.\r\n this.WorkWithAmmountTotal(context);\r\n\r\n // Работа с контролом \"Тип договора\".\r\n this.WorkWithContractType(context);\r\n\r\n // очистим изменения в карточке\r\n if (context.model.card.storeMode != CardStoreMode.Insert) {\r\n context.model.card.removeChanges(); \r\n }\r\n\r\n await ArUIHelper.DiadocButtonLogicWithPkDiadocInfo(context);\r\n\r\n // Установка запрета редактирования всех секций для исторических документов.\r\n this.SetBlockControlsForHistoryContracts(context, context.model.card);\r\n\r\n // Логика маппинга полей, связанных с полем \"Тип процедуры\"\r\n this.TypeProcedureMappingLogic(context.model);\r\n\r\n // Установка запрета редактирования всех секций для исторических документов.\r\n this.SetBlockControlsForHistoryContracts(context, context.model.card);\r\n \r\n // Подписка на кнопку \"Показать/Скрыть разбивку на стикеры\" для текущих сумм по стороне 1.\r\n await PkContractUIHelper.StickerForCurrentForPartnerButtonClickAsync(context);\r\n\r\n // Подписка на кнопку \"Показать разбивку на стикеры для первоначальных сумм\" по стороне 1.\r\n await PkContractUIHelper.StickerForInitialForPartnerButtonClickAsync(context);\r\n\r\n // Подписка на кнопку \"Показать/Скрыть разбивку на стикеры\" для текущих сумм по стороне 2.\r\n await PkContractUIHelper.StickerForCurrentForPartnerButtonClickAsync(context, 2);\r\n\r\n // Подписка на кнопку \"Показать разбивку на стикеры для первоначальных сумм\" по стороне 2.\r\n await PkContractUIHelper.StickerForInitialForPartnerButtonClickAsync(context, 2);\r\n\r\n this.ShowPreviewFile(context);\r\n\r\n // скрытие вкладки паспорта контракта и процессы\r\n await this.HideControlForUserByRole(context.model);\r\n\r\n // Видимость вкладки условия договора\r\n this.SetContractConditionTabVisibility(context.model);\r\n\r\n // Логика кнопки 'Добавить ковенант'\r\n this.CreateCovenantButtonControlLogicAsync(context.model, context.model.card);\r\n\r\n // Логика кнопки 'Скопировать все ковенанты'\r\n this.CopyCovenantButtonControlLogicAsync(context.model, context.model.card);\r\n\r\n // Открытие карточки ковенант по двойному клику\r\n this.OpenCovenantCardAsync(linkCovenantsGrid);\r\n\r\n // Открытие карточки ковенант по двойному клику по условию\r\n this.OpenCovenantConditionCardAsync(linkCovenantsConditionGrid);\r\n\r\n // работа с датой документа \r\n this.WorkDocDate(context.model.card);\r\n\r\n // работа с реквизитом \"Дата документа\" документа\r\n this.ValidatingDateControlByYear(context, context.model.card, \"DocDate\", 2199, \"Дата документа\");\r\n\r\n // работа с реквизитом \"Период действия с\" документа\r\n this.ValidatingDateControlByYear(context, context.model.card, \"DateValidityPeriodFrom\", 2099, \"Период действия с\");\r\n\r\n // работа с реквизитом \"Период действия по\" документа\r\n this.ValidatingDateControlByYear(context, context.model.card, \"DateValidityPeriodUntil\", 2199, \"Период действия по\");\r\n \r\n // работа с курсом валют.\r\n this.WorkWithRate(context, context.model.card);\r\n\r\n // работа с валютой.\r\n await this.WorkWithCurrencyAsync(context);\r\n\r\n // работа с условной единицей.\r\n this.WorkWithYe(context, context.model.card);\r\n\r\n // Обработчик табличного контрола с первоначальными суммами.\r\n await this.WorkWithArticlesInitialControlAsync(context);\r\n\r\n // Обработчик табличного контрола с текущими суммами.\r\n this.WorkWithArticlesCurrentControl(context);\r\n\r\n // Очистка полей при копировании карточки.\r\n if (context.model.card.info.IsCardCopying != null)\r\n {\r\n if (context.model.card.info.IsCardCopying.$value == true) \r\n { \r\n await this.ClearFieldsWhenCopyCard(context);\r\n }\r\n }\r\n\r\n this.initShowLinkedDocsViewButton(context);\r\n\r\n this.initDownloadLinkedDocsButton(context);\r\n \r\n await this.IsUserInRoleAsync(userSession.UserID, ChStaticRoles.AdministrativeGroupRoleID, context.model.card); \r\n\r\n this.CheckTypeOfSupplementaryAgreement(context.model.card);\r\n\r\n // Подписка на изменение стикерных статей в секции.\r\n PkContractUIHelper.ArticleStickersChanged(context, context.model.card);\r\n\r\n // Заполнение виртуальной секции ArContractVirtual.\r\n await ArContractSharedHelper.SetArContractVirtualSection(context.model.card);\r\n\r\n // Покраска строк на вкладке \"Задачи\"\r\n PkContractUIHelper.SetColorForTaskHistoryVirtualRows(context);\r\n\r\n // Проверка для поля \"Условная единица\"\r\n await this.CheckCurrencyAndYeControlsAsync(context, context.model.card);\r\n\r\n // Добавление возможности редактирования реквизитов \"Исполнитель\", \"Ответственный за расчеты\", \"Подписант\" по автоматизированным сторонам ДС\r\n await this.SetReadOnlyControlsInAdditionalAgreementKindAsync(context, context.model.card);\r\n\r\n // Установка прав доступа к контролам\r\n await this.SetSelectTypeProcedureButtonVisibilityAsync(context);\r\n\r\n // Обработка нажатия выбора для поля \"Тип процедуры\"\r\n await this.SelectTypeProcedureButtonControlAsync(context, context.model.card);\r\n\r\n // В ДС для доходной стороны запретить добавление статей \r\n await this.SetReadOnlyCostItemInAdditionalAgreementAsync(context,context.model.card);\r\n\r\n //Доступность чекбокса Подписание в Диадок\r\n this.DiadocMarkEnable(context, context.model);\r\n \r\n this.CheckAmountFromEDTask(context.model.card);\r\n\r\n this.RemoveIsFromKDLogic(context.model.card);\r\n this.RemoveIsFromKDAndIsPdcFromKCLogic(context, context.model.card);\r\n\r\n //обработка событий по обнулению статуса ПА\r\n this.WorkWithPaStatus(context.model.card);\r\n\r\n await this.CopyArticleInVgoAssignmentKindAsync(context, context.model.card);\r\n\r\n this.SetReadOnlyChangeArticleIDPButtons(context, context.model.card);\r\n\r\n this.SetReadOnlyArContractPartnersInIntegrationsDoc(context, context.model.card);\r\n\r\n this.RecalcVirtualAmountByPartner(context.model.card);\r\n\r\n this.SetANTPElectronicIfPartnerChanged(context, context.model.card);\r\n \r\n await this.SetTenderInNewAssignmentAsync(context, context.model.card);\r\n\r\n this.SetReadOnlyTypeProcedureControl(context, context.model.card);\r\n\r\n this.DocCommentValidation(context, context.model.card);\r\n\r\n this.SetEditableFields(context, context.model.card);\r\n\r\n await this.SetReadOnlyArContractPartnersAsync(context, context.model.card);\r\n\r\n CdUIHelper.AllowEditESUDDocs(context, userSession, DocumentSections.ArContractPartnersTable);\r\n\r\n await this.FromCDButtonControlVisibility(context);\r\n\r\n this.MethodEmbroideryOnStickersChangedAsync(context);\r\n\r\n await this.SetVisibilityForConsolidatingLawyerBlockAsync(context, context.model.card);\r\n\r\n this.AllowEditESUDDocs(context, userSession);\r\n\r\n this.AUDLimitReportButtonLogic(context);\r\n\r\n // Поле Сумма уступки доступно если договор из CRM.\r\n this.EnableAmountOfTheAssignmentControl(context, context.model.card);\r\n this.SetVisibilityForFinancialResponsibilityCenterBlockAsync(context, context.model.card);\r\n\r\n this.AddPartnerTableRowEditorClosing(context);\r\n\r\n this.DiadocSignControlDisable(context, context.model);\r\n }\r\n\r\n /// \r\n /// TES-11556\r\n /// Добавлена логика скрытия файлов для сотрудников, не входящих в статическую роль \"Доступ к ДМС\",\r\n /// если используется категория \"ДМС\".\r\n /// Добавлена статическая роль \"Доступ к ДМС\" и категория контракта \"ДМС\" в кодовую базу\r\n /// \r\n private async SetVisibilityForDmsContractCategory(context: ICardUIExtensionContext, card: Card, userSession: IUserSession) {\r\n\r\n let acpSection = card.sections.tryGet(\"ArContractPartners\");\r\n\r\n if (!acpSection) {\r\n return;\r\n }\r\n\r\n if (!PkContractUIHelper.IsContractCategoryPresent(card, ArContractCategory.DMS)) {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CheckUserInRole;\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(ChStaticRoles.AccessToDmsID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n let isAccessToDms = false;\r\n isAccessToDms = tryGetFromInfo(response.info, \"IsUserInRole\", isAccessToDms);\r\n\r\n let files = context.model.controls.get(\"Files\") as FileListViewModel;\r\n\r\n if (!isAccessToDms) {\r\n files.controlVisibility = Visibility.Hidden;\r\n }\r\n }\r\n\r\n /// \r\n /// Блокируем чек-бокс \"Подписание в Диадок\" на этапе \"Доработка после подписания в Диадок\"\r\n /// \r\n private DiadocSignControlDisable(context: ICardUIExtensionContext, model: ICardModel) {\r\n const pkDciSection = model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if (pkDciSection) {\r\n let stateID = pkDciSection.fields.tryGet('StateID');\r\n\r\n if (context.card.tasks.some(task => task.typeId === CdTaskTypes.ArEditBeforeSigningTypeID)\r\n && stateID === CdDocStates.ModificationAfterSigningInDiadoc.id) {\r\n let diadocSignControl = context.model.controls.get('DiadocSignControl');\r\n if (diadocSignControl) {\r\n diadocSignControl.isReadOnly = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// \r\n /// Общая функция для ивента rowEditorClosing таблицы Участники процесса\r\n /// \r\n private AddPartnerTableRowEditorClosing(context: ICardUIExtensionContext)\r\n {\r\n const partnerTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n if (partnerTable == null)\r\n return;\r\n\r\n partnerTable.rowEditorClosing.add(() => {\r\n this.SetVisibilityForFinancialResponsibilityCenterBlockAsync(context, context.model.card);\r\n });\r\n\r\n partnerTable.rowEditorClosing.add(async () => {\r\n this.AutocompleteFRCOwner(context, context.model.card);\r\n });\r\n }\r\n\r\n /// \r\n /// Настройка видимости блока ЦФО\r\n /// \r\n /// \r\n /// \r\n private async SetVisibilityForFinancialResponsibilityCenterBlockAsync(context: ICardUIExtensionContext, card: Card) {\r\n\r\n const partnerTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n if (partnerTable == null)\r\n return;\r\n \r\n let financialResponsibilityCenterBlock = context.model.blocks.get('FinancialResponsibilityCenterBlock');\r\n if (financialResponsibilityCenterBlock == null) {\r\n return;\r\n }\r\n\r\n let acuSection = card.sections.tryGet('ArContractsUser');\r\n let acpSection = card.sections.tryGet('ArContractPartners');\r\n if (acuSection == null || acpSection == null) {\r\n return;\r\n }\r\n \r\n let contractKindId: guid | null = acuSection!.fields.get('ContractKindID');\r\n let isContractKinds = (contractKindId == TessaArContractKinds.ContractKindTessaID ||\r\n contractKindId == TessaArContractKinds.AdditionalAgreementKindTessaID ||\r\n contractKindId == TessaArContractKinds.AccountWithoutContractKindTessaID);\r\n\r\n let filteredPartners = acpSection.rows.filter(x => x.tryGet(\"PartnerExternalID\") != '257570' && x.tryGet(\"RoleID\") != 2)\r\n let isVgo = filteredPartners.length >= 2 && filteredPartners.every(x => x.tryGet(\"PartnerAutomated\") ?? false);\r\n\r\n let isExpenditurePaper = false;\r\n let isFinancialAnalytic = false;\r\n let contractCategoryID = null;\r\n\r\n acpSection.rows.forEach(row => {\r\n let partnerInPerimetr = row.tryGet('PartnerInPerimetr');\r\n let roleId = row.tryGet('RoleID');\r\n\r\n // Условие по которому определяется, является ли документ расходным\r\n if (partnerInPerimetr == true && roleId == 0) {\r\n isExpenditurePaper = true;\r\n }\r\n\r\n // Условие по которому определяется относится ли выбранная категория к фин.аналитике\r\n if (roleId == 0) {\r\n contractCategoryID = row.tryGet('ContractCategoryID');\r\n }\r\n });\r\n\r\n if (contractCategoryID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetContractCategoryIsFinancialAnalyticRequestID;\r\n request.info[\"ContractCategoryID\"] = createTypedField(contractCategoryID, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n isFinancialAnalytic = tryGetFromInfo(response.info, \"IsFinancialAnalytic\", isFinancialAnalytic);\r\n }\r\n if (isFinancialAnalytic != null && isContractKinds && !isVgo && isExpenditurePaper && isFinancialAnalytic) {\r\n financialResponsibilityCenterBlock.blockVisibility = Visibility.Visible;\r\n }\r\n else {\r\n financialResponsibilityCenterBlock.blockVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArContractTypeID)) {\r\n return;\r\n }\r\n\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if(this.disableSaving)\r\n {\r\n await showError(\"В договоре нельзя заменить стороны или роли, так как для новых участников договора не найден АНПТ\");\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n await ArUIHelper.ArCorfirmRejectEDOAsync(context);\r\n await ArUIHelper.ArCreateAgreementEDOAsync(context);\r\n await ArUIHelper.ArCheckAgreementEDOAsync(context);\r\n await ArUIHelper.ArApproveCancelEDOAsync(context);\r\n await this.FinancialResponsibilityCenterBlockAsync(context);\r\n await this.CheckAnalyticksStickersInParentContractAsync(context, context.model.card);\r\n }\r\n\r\n\r\n private async FinancialResponsibilityCenterBlockAsync(context: ICardUIExtensionContext) {\r\n let card = context.card;\r\n let financialResponsibilityCenterBlock = context.model.blocks.get('FinancialResponsibilityCenterBlock');\r\n if (financialResponsibilityCenterBlock == null) {\r\n return;\r\n }\r\n\r\n if (financialResponsibilityCenterBlock.blockVisibility == Visibility.Collapsed) {\r\n let arContractMdsFrcForBf = card.sections.tryGet(\"ArContractMdsFinancialResponsibilityCenterForBF\");\r\n arContractMdsFrcForBf?.rows.forEach(item => {\r\n item.state = CardRowState.Deleted;\r\n });\r\n\r\n let arContractMdsObjectOther = card.sections.tryGet(\"ArContractMdsObjectOther\");\r\n arContractMdsObjectOther?.rows.forEach(item => {\r\n item.state = CardRowState.Deleted;\r\n });\r\n\r\n card.sections.tryGet(\"ArContractsUser\")?.fields.set(\"PkMdmFinancialResponsibilityCenterOwnerID\", null);\r\n card.sections.tryGet(\"ArContractsUser\")?.fields.set(\"PkMdmFinancialResponsibilityCenterOwnerName\", null);\r\n }\r\n }\r\n\r\n private async AutocompleteFRCOwner(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let financialResponsibilityCenterBlock = context.model.blocks.get(\"FinancialResponsibilityCenterBlock\");\r\n let arContractsUserSection = card.sections.get(\"ArContractsUser\");\r\n let ownerID;\r\n let ownerName;\r\n\r\n if (!financialResponsibilityCenterBlock || !arContractsUserSection)\r\n {\r\n return;\r\n }\r\n\r\n let FRCOwnerID = arContractsUserSection.fields.get(\"PkMdmFinancialResponsibilityCenterOwnerID\");\r\n let authorDepartmentGuid1C = arContractsUserSection.fields.get(\"AuthorDepartmentGuid1C\");\r\n\r\n if (financialResponsibilityCenterBlock.blockVisibility == Visibility.Visible\r\n && FRCOwnerID == null && authorDepartmentGuid1C != null)\r\n {\r\n var request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetFRCOwnerRequest;\r\n request.info[\"AuthorDepartmentGuid1C\"] = createTypedField(authorDepartmentGuid1C, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n ownerID = response.info.OwnerID;\r\n ownerName = response.info.OwnerName;\r\n\r\n if (ownerID != null && ownerName != null) \r\n {\r\n arContractsUserSection.fields.set(\"PkMdmFinancialResponsibilityCenterOwnerID\", ownerID.$value, DotNetType.Guid);\r\n arContractsUserSection.fields.set(\"PkMdmFinancialResponsibilityCenterOwnerName\", ownerName.$value, DotNetType.String);\r\n }\r\n }\r\n }\r\n\r\n private async AUDLimitReportButtonLogic(context: ICardUIExtensionContext ) {\r\n let audLimitReportButton = CdUIHelper.GetUIControl(context, \"AUDLimitReportButton\");\r\n let audLimitReportUrlControl = CdUIHelper.GetUIControl(context, \"AUDLimitReportUrlControl\"); \r\n if (audLimitReportButton == null || audLimitReportUrlControl == null) {\r\n return;\r\n }\r\n\r\n audLimitReportButton.onClick = () => {\r\n window.open(audLimitReportUrlControl?.text, '_blank');\r\n };\r\n\r\n let setControlVisibility = ((methodId: number) => {\r\n audLimitReportButton!.controlVisibility = methodId === PkMethodsEmbroideryOnStickersID.AUD ? Visibility.Visible : Visibility.Collapsed;\r\n });\r\n\r\n let acu = context.card.sections.tryGet(\"ArContractsUser\")\r\n if (acu) {\r\n setControlVisibility(acu.fields.get(\"MethodEmbroideryOnStickersID\"));\r\n acu!.fields!.fieldChanged.add(async e => {\r\n if (e.fieldName == \"MethodEmbroideryOnStickersID\") {\r\n setControlVisibility(e.fieldValue);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // При отправке на согласование\\сделать действующим\\передать в УС\r\n // Если и ДС и Родитель ТСУ = true, но родитель из КА, а ДС из ЕФС - создаем диалоговое окошко выбора для пользователя.\r\n private async CheckAnalyticksStickersInParentContractAsync(context: ICardUIExtensionContext, card: Card){\r\n var acuSection = card.sections.get(\"ArContractsUser\");\r\n if (!acuSection) {\r\n return;\r\n }\r\n\r\n if (!context.storeRequest.info.MakeTheContractValid\r\n && !context.storeRequest.info.SendToUS\r\n && context.card.tasks.find(t =>\r\n t.state === CardRowState.Deleted\r\n && (Guid.equals(t.typeId, PkTaskTypes.ArMatrixConfirmStartProcessTypeID) \r\n || Guid.equals(t.typeId, PkTaskTypes.ArMatrixConfirmVgoStartProcessTypeID)\r\n || Guid.equals(t.typeId, PkTaskTypes.ArMatrixEditTypeID)\r\n || Guid.equals(t.typeId, PkTaskTypes.ArFillFromAUDTypeID))\r\n && (Guid.equals(t.optionId, CdFdProcessHelper.ForApproval)\r\n || Guid.equals(t.optionId, CdFdProcessHelper.NewApprovalCycle)\r\n || Guid.equals(t.optionId, CdFdProcessHelper.PkReturnToSigner)\r\n || Guid.equals(t.optionId, CdFdProcessHelper.PkResendForApproval)\r\n || Guid.equals(t.optionId, CdFdProcessHelper.PkFillOut))) == null) {\r\n return;\r\n }\r\n\r\n let parentCardID = acuSection.fields.get(\"ParentCardID\");\r\n if (acuSection.fields.get(\"AnalyticsStickers\") != true\r\n || acuSection.fields.get(\"MethodEmbroideryOnStickersID\") == PkMethodsEmbroideryOnStickersID.ConstructorOfActs\r\n || parentCardID == null) {\r\n return;\r\n }\r\n\r\n var requestParentAnalyticksStickersAndMethod = new CardRequest();\r\n requestParentAnalyticksStickersAndMethod.requestType = PkRequestTypes.PkGetAnalyticsStickersAndMethodID;\r\n requestParentAnalyticksStickersAndMethod.info[\"CardID\"] = createTypedField(parentCardID, DotNetType.Guid);\r\n\r\n const responseParentAnalyticksStickersAndMethod = await CardService.instance.request(requestParentAnalyticksStickersAndMethod);\r\n if (!responseParentAnalyticksStickersAndMethod.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n if (tryGetFromInfo(responseParentAnalyticksStickersAndMethod.info, \"AnalyticsStickers\") == true && \r\n tryGetFromInfo(responseParentAnalyticksStickersAndMethod.info, \"MethodEmbroideryOnStickers\") == PkMethodsEmbroideryOnStickersID.ConstructorOfActs) {\r\n let sync = context.card.tasks.some(t => Guid.equals(t.typeId, PkTaskTypes.ArFillFromAUDTypeID) && t.state == CardRowState.Deleted); \r\n let dialogResult = await showConfirm(\r\n (sync\r\n ? \"Договор и все дополнительные соглашения к нему будут отключены от ЦГП\" \r\n : \"Статьи затрат для Дополнительного соглашения должны быть загружены из Конструктора актов, после смены состояния ДС на Действующий родительский договор будет отключен от ЦГП\") +\r\n \"\\nПродолжить?\");\r\n \r\n if (!dialogResult) {\r\n context.validationResult.add(ValidationResultType.Error, \"Операция отменена.\");\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /// \r\n /// Установка редактируемых полей.\r\n /// з.ы. перенес из толстого, тут почему-то не было\r\n /// \r\n private SetEditableFields(context: ICardUIExtensionContext, card: Card) {\r\n if (!card) {\r\n return;\r\n }\r\n\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n if (!acuSection) {\r\n return;\r\n }\r\n\r\n let arContractPartnersTable = CdUIHelper.GetUIControl(context, 'ArContractPartnersTable');\r\n if (!arContractPartnersTable) {\r\n return;\r\n }\r\n let partners: CardRow;\r\n arContractPartnersTable.rowInitializing.add(async e => {\r\n // Метка может быть снята, лишние проверки не нужны\r\n if (acuSection?.fields.tryGet('IsPdcFromKC') && acuSection?.fields.tryGet('IsFromKD')) {\r\n // Сохраняем текущее значение\r\n partners = e.row.clone();\r\n\r\n let partnerControl = e.rowModel?.controlsBag.find(c => c.name === 'PartnersKCKControl');\r\n partnerControl!.isReadOnly = false;\r\n }\r\n\r\n let partnerPerformer = e.rowModel?.controlsBag.find(c => c.name === 'PartnerPerformer');\r\n let partnerAccountant = e.rowModel?.controlsBag.find(c => c.name === 'PartnerAccountant');\r\n let partnerSigned = e.rowModel?.controlsBag.find(c => c.name === 'PartnerSigned');\r\n let contractCategoryControl = e.rowModel?.controlsBag.find(c => c.name === 'ContractCategoryControl');\r\n let partnerExternalID = e.row.tryGet('PartnerExternalID');\r\n let isAutomated = await this.GetArContractPartnerstInfoAutomatedAsync(partnerExternalID);\r\n if (partnerExternalID != null && isAutomated) {\r\n partnerPerformer!.isReadOnly = false;\r\n partnerAccountant!.isReadOnly = false;\r\n partnerSigned!.isReadOnly = false;\r\n contractCategoryControl!.isReadOnly = false;\r\n } else {\r\n partnerPerformer!.isReadOnly = true;\r\n partnerAccountant!.isReadOnly = true;\r\n partnerSigned!.isReadOnly = true;\r\n contractCategoryControl!.isReadOnly = true;\r\n }\r\n\r\n });\r\n\r\n // Проверка на ПДЦ из КЦ\r\n let access = this.PdcFromKcDocumentFromKDAllowEditFields(card)\r\n || (tryGetFromInfo(card.info, \"ArContractHasAccessToEdit\") && card.info[\"ArContractHasAccessToEdit\"] === true);\r\n\r\n if (!access) {\r\n return;\r\n }\r\n // let arContractPartnersTable = CdUIHelper.GetUIControl(context, 'ArContractPartnersTable');\r\n let subjectControl = context.model!.controlsBag.find(c => c.name === 'Subject');\r\n if (subjectControl) {\r\n subjectControl.isReadOnly = false;\r\n }\r\n // Сбрасывание чекбоксов при редактировании полей указанных в TES-7698.\r\n arContractPartnersTable.rowEditorClosing.add(e => {\r\n // Метка может быть снята, лишние проверки не нужны\r\n if(acuSection?.fields.tryGet(\"IsPdcFromKC\") && acuSection?.fields.tryGet(\"IsFromKD\")){\r\n // Если внесены изменения в одно из полей в KDPdcFromKCEditFields\r\n if(e.action == GridRowAction.Opening && this.CheckKDPdcFromKCEditFieldsChanged(partners, e.row)){\r\n if(!confirm(PdcChangeFieldMessage)){\r\n e.row.setFrom(partners);\r\n }\r\n else{\r\n acuSection.fields.set(\"IsFromKD\", false, DotNetType.Boolean);\r\n acuSection.fields.set(\"IsPdcFromKC\", false, DotNetType.Boolean);\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Сбрасывание чекбоксов при редактировании полей указанных в TES-7698.\r\n // Записываем значение поля\r\n let value = acuSection?.fields.tryGet(\"Subject\", null);\r\n\r\n acuSection?.fields.fieldChanged.add(async e => {\r\n if(e.fieldName == \"Subject\"){\r\n // Проверяем, изменилось ли саму значение\r\n if (acuSection && acuSection.fields.tryGet(\"Subject\", null) != value &&\r\n // Если метка уже снята, проверять нет смысла \r\n (acuSection.fields.tryGet(\"IsFromKD\", false) || acuSection.fields.tryGet(\"IsPdcFromKC\", false)))\r\n {\r\n let result = await showConfirm(\"Признак \\\"Документ из КД\\\" и \\\"ПДЦ из КЦ\\\" (если он был проставлен) будет снят. Продолжить?\");\r\n if (result)\r\n {\r\n acuSection.fields.set(\"IsFromKD\", false, DotNetType.Boolean);\r\n acuSection.fields.set(\"IsPdcFromKC\", false, DotNetType.Boolean);\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n }\r\n else\r\n {\r\n // Возвращаем значение\r\n acuSection.fields.set(\"Subject\", value, DotNetType.String);\r\n }\r\n }\r\n }\r\n }); \r\n }\r\n\r\n private async SetReadOnlyArContractPartnersAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n \r\n var arContractsPartnerTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n \r\n if (!arContractsPartnerTable) return;\r\n\r\n let isAdmin: boolean = await this.IsAdmin();\r\n let contractKindId: guid | null = acuSection!.fields.get(\"ContractKindID\");\r\n let PkDocumentCommonInfo = card.sections.tryGet('PkDocumentCommonInfo');\r\n let StateID = PkDocumentCommonInfo?.fields?.get(\"StateID\");\r\n let isContractKinds = (contractKindId == TessaArContractKinds.AssignmentKindTessaID ||\r\n contractKindId == TessaArContractKinds.AdditionalAgreementKindTessaID ||\r\n contractKindId == TessaArContractKinds.CancellationAgreementKindTessaID);\r\n \r\n // Если пользователь не админ и состояние проект и Договорный документ вида (ДС или Уступка или Сор)\r\n // Блокируем в ТЧ \"Участники процесса\" поля Контрагент и Роль\r\n arContractsPartnerTable.rowInitialized.add(e =>\r\n {\r\n var partnerAutomated = e.row.tryGet(\"PartnerAutomated\") == true;\r\n var partnersKCKControl = e.rowModel?.controlsBag.find(x => x.name == \"PartnersKCKControl\"); // Контрагент\r\n var partnerRole = e.rowModel?.controlsBag.find(x => x.name == \"PartnerRole\"); // Роль\r\n var partnerPerformer = e.rowModel?.controlsBag.find(x => x.name == \"PartnerPerformer\"); // Исполнитель\r\n var partnerSigned = e.rowModel?.controlsBag.find(x => x.name == \"PartnerSigned\"); // Подписант\r\n var partnerAccountant = e.rowModel?.controlsBag.find(x => x.name == \"PartnerAccountant\"); // Ответственный за расчеты\r\n var partnerDepartment = e.rowModel?.controlsBag.find(x => x.name == \"PartnerDepartment\"); // Подразделение исполнителя\r\n var contractCategoryControl = e.rowModel?.controlsBag.find(x => x.name == \"ContractCategoryControl\");//Категория договора\r\n \r\n let partnerSection = card.permissions.sections.tryGet(\"ArContractPartners\");\r\n let partnerFlag = partnerSection?.fieldPermissions?.tryGet(\"PartnerID\");\r\n let roleFlag = partnerSection?.fieldPermissions?.tryGet(\"RoleID\");\r\n\r\n let partnerIsReadOnly = false;\r\n let roleIsReadOnly = false;\r\n\r\n if (partnerFlag != null) {\r\n partnerIsReadOnly = partnerFlag.$value == CardPermissionFlags.ProhibitModify;\r\n }\r\n\r\n if (roleFlag != null) {\r\n roleIsReadOnly = roleFlag.$value == CardPermissionFlags.ProhibitModify;\r\n }\r\n\r\n partnersKCKControl!.isReadOnly = partnerIsReadOnly;\r\n partnerRole!.isReadOnly = roleIsReadOnly;\r\n\r\n if (!isAdmin && StateID == CdDocStates.Project.id && isContractKinds)\r\n {\r\n partnersKCKControl!.isReadOnly = true;\r\n partnerRole!.isReadOnly = true;\r\n\r\n let isPdcFromKC: boolean | null = acuSection!.fields.get(\"IsPdcFromKC\");\r\n let isFromKD: boolean | null = acuSection!.fields.get(\"IsFromKD\");\r\n\r\n if (contractKindId == TessaArContractKinds.AdditionalAgreementKindTessaID\r\n && (isPdcFromKC == true) && (isFromKD == true)\r\n && card.createdById == userSession.UserID)\r\n {\r\n contractCategoryControl!.isReadOnly = true;\r\n }\r\n }\r\n else if(!isAdmin && StateID == CdDocStates.Active.id && isContractKinds)\r\n {\r\n partnersKCKControl!.isReadOnly = true;\r\n partnerRole!.isReadOnly = true;\r\n partnerPerformer!.isReadOnly = true;\r\n partnerSigned!.isReadOnly = true;\r\n partnerAccountant!.isReadOnly = true;\r\n partnerDepartment!.isReadOnly = true;\r\n contractCategoryControl!.isReadOnly = true;\r\n }\r\n else if(isAdmin && (StateID == CdDocStates.Active.id || StateID == CdDocStates.Project.id) && isContractKinds)\r\n {\r\n partnersKCKControl!.isReadOnly = false;\r\n partnerRole!.isReadOnly = false;\r\n\r\n if (partnerAutomated)\r\n {\r\n partnerPerformer!.isReadOnly = false;\r\n partnerSigned!.isReadOnly = false;\r\n partnerAccountant!.isReadOnly = false;\r\n partnerDepartment!.isReadOnly = false;\r\n contractCategoryControl!.isReadOnly = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Проверка равенства полей + того, что измененное значение \r\n // обязывает сбрасывать метки ПДЦ из КЦ и Документ из КД \r\n private CheckKDPdcFromKCEditFieldsChanged(c1: CardRow, c2: CardRow){\r\n let flag = false;\r\n c2.forEach((_value, key) => {\r\n if((key != \".state\" && key != \".changed\")&&(c1.tryGet(key) != c2.tryGet(key) \r\n && (this.KDPdcFromKCEditFields.indexOf(key) > -1))){\r\n flag = true;\r\n }\r\n });\r\n return flag;\r\n }\r\n\r\n private OnPdcFromKcEditFields(context: ICardUIExtensionContext){\r\n let card = context.card;\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n\r\n // Проверка на ПДЦ из КЦ\r\n let isPdcFromKd = acuSection.fields.tryGet(\"IsPdcFromKC\");\r\n if (isPdcFromKd)\r\n {\r\n let initArticles = CdUIHelper.GetUIControl(context, \"ContractArticleIdp\");\r\n let curArticles = CdUIHelper.GetUIControl(context, \"ContractArticleIdpVirtualNew\");\r\n\r\n // Начальные суммы\r\n // Записываем состояние при открытии\r\n let initArticleFields;\r\n initArticles?.rowInitializing.add(e=>{\r\n if(e.action == GridRowAction.Opening){\r\n initArticleFields = e.row.clone();\r\n }\r\n });\r\n\r\n // При закрытии проверяем, какие поля изменились\r\n initArticles?.rowEditorClosing.add(e=>{ \r\n if(e.action == GridRowAction.Inserted){\r\n if(!confirm(PdcChangeFieldMessage)){\r\n e.cancel = true;\r\n }\r\n else {\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n }\r\n }\r\n if(e.action == GridRowAction.Opening){\r\n if(PkContractUIHelper.FieldChanged(initArticleFields, e.row)){\r\n if(!confirm(PdcChangeFieldMessage)){\r\n e.row.setFrom(initArticleFields);\r\n }\r\n else {\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Текущие суммы\r\n // Записываем состояние при открытии\r\n let curArticleFields;\r\n curArticles?.rowInitializing.add(e=>{\r\n if(e.action == GridRowAction.Opening){\r\n curArticleFields = e.row.clone();\r\n }\r\n });\r\n\r\n // При закрытии проверяем, какие поля изменились\r\n curArticles?.rowEditorClosing.add(e=>{ \r\n if(e.action == GridRowAction.Inserted){\r\n if(!confirm(PdcChangeFieldMessage)){\r\n e.cancel = true;\r\n }\r\n else {\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n }\r\n }\r\n if(e.action == GridRowAction.Opening){\r\n if(PkContractUIHelper.FieldChanged(curArticleFields, e.row)){\r\n if(!confirm(PdcChangeFieldMessage)){\r\n e.row.setFrom(curArticleFields);\r\n }\r\n }\r\n else {\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n }\r\n } \r\n });\r\n\r\n // Изменение контрагента в роли \"Продавец\"\r\n const partnerTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n let partner = \"\";\r\n let roleId;\r\n\r\n if(partnerTable == null)\r\n return;\r\n\r\n // при открытии сохраняем значение контрагента\r\n partnerTable.rowInvoked.add(e =>\r\n {\r\n if (e.action == GridRowAction.Opening)\r\n {\r\n partner = e.row.tryGet(\"PartnerName\");\r\n roleId = e.row.tryGet(\"RoleID\");\r\n }\r\n });\r\n\r\n // проверяем, изменилось ли значение контрагента\r\n partnerTable.rowEditorClosing.add( e =>\r\n {\r\n if (roleId == 1)\r\n {\r\n var partnerValue = e.row.tryGet(\"PartnerName\");\r\n var role = e.row.tryGet(\"RoleID\");\r\n if (role != roleId || partnerValue != partner)\r\n {\r\n if(!confirm(PdcChangeFieldMessage)){\r\n e.cancel = true;\r\n }\r\n else{\r\n card.info[\"PdcFromKcRemoved\"] = true;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n private NeedsProhibitAfterTransferToUS(card: Card){\r\n let isTransferToUS = card.sections.get(\"ArContractsUser\")?.fields.get(\"IsTransferToUsBtnUsed\");\r\n\r\n return !userSession.isAdmin // У админа должен быть доступ\r\n && isTransferToUS != null\r\n && isTransferToUS; // Передан в УС\r\n \r\n }\r\n\r\n private IsArticleRowReadonlyAfterTransferToUS(row: CardRow, card: Card){\r\n return !CdUIHelper.IsRowCreatedAfterTransferToUS(row, card) && this.NeedsProhibitAfterTransferToUS(card);\r\n }\r\n\r\n private WorkWithPaStatus(card: Card)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n\r\n let arContractPartnersSection : CardSection | undefined = card.sections.tryGet(\"ArContractPartners\");\r\n let arContractArticleIdp : CardSection | undefined = card.sections.tryGet(\"ArContractArticleIdp\");\r\n let arContractArticleIdpForPartner1 : CardSection | undefined = card.sections.tryGet(\"ArContractArticleIdpForPartner1\");\r\n let arContractArticleIdpForPartner2 : CardSection | undefined = card.sections.tryGet(\"ArContractArticleIdpForPartner2\");\r\n let arPaStatus = card.sections.tryGet(\"ArPaStatus\");\r\n\r\n acuSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"IsPdcFromKC\")\r\n {\r\n if (e.fieldValue != null && e.fieldValue == false)\r\n {\r\n if (arPaStatus != null)\r\n {\r\n this.SetNullAllFieldsPaStatus(arPaStatus);\r\n }\r\n }\r\n }\r\n });\r\n\r\n if(arPaStatus)\r\n {\r\n arPaStatus.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"PaStatusID\")\r\n {\r\n if (arPaStatus)\r\n {\r\n arPaStatus.fields.set(\"PaStatusDate\", null);\r\n arPaStatus.fields.set(\"PaStatusReason\", null);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if(arContractPartnersSection)\r\n {\r\n arContractPartnersSection.rows.forEach(item => {\r\n item.fieldChanged.add(i => {\r\n if (i.fieldName == \"ContractCategoryID\" && i.fieldValue != null)\r\n {\r\n let roleID = item.tryGetField(\"RoleID\")?.$value;\r\n\r\n if (roleID != null && roleID == 0)\r\n {\r\n if (i.fieldValue.toString().toLowerCase() != \"e64e312f-aef9-4822-89b6-c1003f11bda9\" \r\n && i.fieldValue.toString().toLowerCase() != \"d3b58594-fdf4-47af-8435-8fB8cdd96ea1\"\r\n && i.fieldValue.toString().toLowerCase() != \"338778bc-dd57-4523-bbe7-9a9dfcb78683\"\r\n && i.fieldValue.toString().toLowerCase() != \"4cfcd915-7523-4c53-b18f-c1735ee1283b\"\r\n && arPaStatus != null)\r\n {\r\n this.SetNullAllFieldsPaStatus(arPaStatus);\r\n }\r\n }\r\n }\r\n });\r\n })\r\n }\r\n\r\n if (arContractArticleIdpForPartner1)\r\n {\r\n arContractArticleIdpForPartner1.rows.collectionChanged.add(e => {\r\n if (e.added)\r\n {\r\n e.added.forEach(() => {\r\n let objects: string[] = new Array()\r\n \r\n if (arContractArticleIdp)\r\n {\r\n arContractArticleIdp.rows.forEach(row => {\r\n let objectID = row.tryGetField(\"ObjectID\")?.$value;\r\n\r\n if (objectID != null && !objects.includes(objectID.toString().toLowerCase()))\r\n {\r\n objects.push(objectID.toString().toLowerCase())\r\n }\r\n });\r\n\r\n if (objects.length > 1 && arPaStatus != null)\r\n {\r\n this.SetNullAllFieldsPaStatus(arPaStatus);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (arContractArticleIdpForPartner2)\r\n {\r\n arContractArticleIdpForPartner2.rows.collectionChanged.add(e => {\r\n if (e.added)\r\n {\r\n e.added.forEach(() => {\r\n let objects: string[] = new Array()\r\n \r\n if (arContractArticleIdp)\r\n {\r\n arContractArticleIdp.rows.forEach(row => {\r\n let objectID = row.tryGetField(\"ObjectID\")?.$value;\r\n\r\n if (objectID != null && !objects.includes(objectID.toString().toLowerCase()))\r\n {\r\n objects.push(objectID.toString().toLowerCase())\r\n }\r\n });\r\n\r\n if (objects.length > 1 && arPaStatus != null)\r\n {\r\n this.SetNullAllFieldsPaStatus(arPaStatus);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n private SetNullAllFieldsPaStatus(arPaStatus: CardSection)\r\n {\r\n let paStatusID = arPaStatus.fields.get(\"PaStatusID\");\r\n \r\n if (paStatusID != null)\r\n {\r\n arPaStatus.fields.set(\"PaStatusID\", null);\r\n arPaStatus.fields.set(\"PaStatusName\", null);\r\n }\r\n }\r\n\r\n public async reopened(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n this.ReasonsWithoutPDCIDCancelletionControlIsRequired(context, context.model.card);\r\n }\r\n\r\n private RemoveIsFromKDLogic(card: Card)\r\n {\r\n card.files.forEach(file => {\r\n if (file.categoryId != ChFileCategories.Primary.id){\r\n return;\r\n }\r\n\r\n file.stateChanged.add(e =>{\r\n if (e.newState !== CardFileState.Replaced && e.newState !== CardFileState.ModifiedAndReplaced && e.newState !== CardFileState.Modified) {\r\n return;\r\n }\r\n\r\n let section = card.sections.tryGet(\"ArContractsUser\");\r\n if (section){\r\n section.fields.set(\"IsFromKD\", false, DotNetType.Boolean);\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n private RemoveIsFromKDAndIsPdcFromKCLogic(context: ICardUIExtensionContext, card: Card)\r\n {\r\n context.model.fileContainer.containerFileChanged.add(async (e) => \r\n {\r\n if (e.added != null) \r\n {\r\n if (e.added.category != null && (e.added.category.id == ChFileCategories.Primary.id || e.added.category.id == ChFileCategories.AdditionalForContract.id))\r\n {\r\n let section = card.sections.tryGet(\"ArContractsUser\");\r\n if (section && (section.fields.tryGet(\"IsFromKD\", false) || section.fields.tryGet(\"IsPdcFromKC\", false)))\r\n {\r\n let result = await showConfirm(\"Признак \\\"Документ из КД\\\" и \\\"ПДЦ из КЦ\\\" (если он был проставлен) будет снят. Продолжить?\");\r\n\r\n if (result)\r\n {\r\n section.fields.set(\"IsFromKD\", false, DotNetType.Boolean);\r\n section.fields.set(\"IsPdcFromKC\", false, DotNetType.Boolean);\r\n }\r\n else\r\n {\r\n await e.fileContainer.removeFile(e.added, true);\r\n e.fileContainer.source.notifyRemoved(e.added);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n private async GetChangesForIsFromKD(cardModel : ICardModel )\r\n {\r\n let PkDocumentCommonInfo = cardModel.card.sections.tryGet('PkDocumentCommonInfo');\r\n let StateID = PkDocumentCommonInfo?.fields?.get(\"StateID\");\r\n if(!(StateID==CdDocStates.Project.id || StateID == CdDocStates.Project.Modification || StateID == CdDocStates.Project.EditSpecialistPrimaryProcurementControl))\r\n return;\r\n\r\n let acuSection= cardModel .card.sections.tryGet(\"ArContractsUser\");\r\n if (acuSection) {\r\n acuSection.fields.fieldChanged.add(e =>\r\n {\r\n if ((e.fieldName == \"DocNumber\"\r\n || e.fieldName == \"DocDate\"\r\n || e.fieldName == \"AmountBeginning\"\r\n || e.fieldName == \"AmountTotal\")\r\n && (acuSection!=null && acuSection.fields.get(\"IsFromKD\") == true)\r\n && (acuSection!=null && acuSection.fields.get(\"IsPdcFromKC\") == false)\r\n )\r\n {\r\n this.ChangeIsFromKD(cardModel);\r\n }\r\n });\r\n }\r\n \r\n \r\n let acptControl = cardModel.controls.get(\"ArContractPartnersTable\") as GridViewModel;\r\n let ContractArticleIdp = cardModel.controls.get(\"ContractArticleIdp\") as GridViewModel;\r\n if (ContractArticleIdp && acptControl) \r\n {\r\n acptControl.rowEditorClosed.add(() =>\r\n { \r\n if (acuSection && acuSection.fields.get(\"IsFromKD\") == true\r\n && (acuSection!=null && acuSection.fields.get(\"IsPdcFromKC\") == false))\r\n {\r\n this.ChangeIsFromKD(cardModel);\r\n }\r\n });\r\n ContractArticleIdp.rowEditorClosed.add(() =>\r\n { \r\n if (acuSection && acuSection.fields.get(\"IsFromKD\") == true\r\n && (acuSection!=null && acuSection.fields.get(\"IsPdcFromKC\") == false))\r\n {\r\n this.ChangeIsFromKD(cardModel);\r\n }\r\n });\r\n }\r\n \r\n cardModel.card.files.collectionChanged.add(()=>\r\n { \r\n //запоминаем стартовые значения некоторых реквизитов, изменение которых может влиять на снятие флага документ из кд\r\n this.startValuesForIsFromKD = this.GetValuesForIsFromKD(cardModel.card);\r\n }); \r\n }\r\n\r\n private ChangeIsFromKD(cardModel: ICardModel, error = false): void {\r\n const isPdcFromKc = this.startValuesForIsFromKD.IsPdcFromKc ?? false;\r\n const pkDocumentCommonInfo = cardModel.card.sections.tryGet('PkDocumentCommonInfo');\r\n const stateID = pkDocumentCommonInfo?.fields?.get(\"StateID\");\r\n\r\n if (!(stateID === CdDocStates.Project.id\r\n || stateID === CdDocStates.Modification.id\r\n || stateID === CdDocStates.EditSpecialistPrimaryProcurementControl.id)) {\r\n return;\r\n }\r\n\r\n const newValuesForIsFromKD = this.GetValuesForIsFromKD(cardModel.card);\r\n\r\n const partnersEqual = this.EqualListPartners(\r\n this.startValuesForIsFromKD.Partners!,\r\n newValuesForIsFromKD.Partners!);\r\n\r\n const objectsEqual = this.EqualListObjectsByArticle(\r\n this.startValuesForIsFromKD.ObjectByArticle!,\r\n newValuesForIsFromKD.ObjectByArticle!);\r\n\r\n let startValuesEqualNewValues = partnersEqual\r\n && objectsEqual\r\n && this.startValuesForIsFromKD.DocDate === newValuesForIsFromKD.DocDate\r\n && this.startValuesForIsFromKD.DocNumber === newValuesForIsFromKD.DocNumber\r\n && this.startValuesForIsFromKD.AmountBeginning === newValuesForIsFromKD.AmountBeginning\r\n && this.startValuesForIsFromKD.AmountTotal === newValuesForIsFromKD.AmountTotal;\r\n\r\n if (isPdcFromKc && this.startValuesForIsFromKD.ObjectByArticle?.some(x =>\r\n newValuesForIsFromKD.ObjectByArticle?.some(y => y.Amount !== x.Amount))) {\r\n startValuesEqualNewValues = false;\r\n }\r\n\r\n if (startValuesEqualNewValues && !error) {\r\n return;\r\n }\r\n\r\n showMessage('Изменение данных приведет к снятию галочки \"Документ из КД\". После корректировки данных просьба загрузить файл из КД повторно');\r\n cardModel.card.info[\"FileIsFromKDActual\"] = cardModel.card.sections.tryGet(\"ArContractsUser\")?.fields.set(\"IsFromKD\", newValuesForIsFromKD.IsFromKD = false, DotNetType.Boolean);\r\n }\r\n\r\n private EqualPartners(p1: PartnerForIsFromKD, p2: PartnerForIsFromKD): boolean {\r\n return p1.ContractCategoryGuid1C === p2.ContractCategoryGuid1C &&\r\n p1.SignedID === p2.SignedID;\r\n }\r\n\r\n private EqualListPartners(listPartner1: PartnerForIsFromKD[], listPartner2: PartnerForIsFromKD[]): boolean {\r\n if ((!listPartner1 || !listPartner2)\r\n && !listPartner1 !== !listPartner1) {\r\n return true;\r\n }\r\n\r\n if (listPartner1?.length !== listPartner2?.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < listPartner1?.length; i++) {\r\n if (!this.EqualPartners(listPartner1[i], listPartner2[i])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private EqualObjectByArticle(obj1: ObjectByArticle, obj2: ObjectByArticle): boolean {\r\n return obj1.ObjectID === obj2.ObjectID\r\n && obj1.PartnerExternalID === obj2.PartnerExternalID\r\n && obj1.PartnerRelatedExternalID === obj2.PartnerRelatedExternalID;\r\n }\r\n\r\n private EqualListObjectsByArticle(listObjectsByArticle1: ObjectByArticle[], listObjectsByArticle2: ObjectByArticle[]): boolean {\r\n if ((!listObjectsByArticle1 || !listObjectsByArticle2)\r\n && !listObjectsByArticle1 !== !listObjectsByArticle1) {\r\n return true;\r\n }\r\n\r\n if (listObjectsByArticle1?.length !== listObjectsByArticle2?.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < listObjectsByArticle1?.length; i++) {\r\n if (!this.EqualObjectByArticle(listObjectsByArticle1[i], listObjectsByArticle2[i])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private GetValuesForIsFromKD(card: Card): ValuesForIsFromKD {\r\n const acuSection = card.sections.tryGet(\"ArContractsUser\");\r\n const docDate = acuSection?.fields.tryGet(\"DocDate\");\r\n const docNumber = acuSection?.fields.tryGet(\"DocNumber\");\r\n const amountBeginning = acuSection?.fields.tryGet(\"AmountBeginning\");\r\n const amountTotal = acuSection?.fields.tryGet(\"AmountTotal\");\r\n const isFromKD = acuSection?.fields.tryGet(\"IsFromKD\");\r\n const isPdcFromKc = acuSection?.fields.tryGet(\"IsPdcFromKC\");\r\n\r\n const partners = card.sections.tryGet(\"ArContractPartners\")?.rows\r\n .filter(row => row.state !== CardRowState.Deleted)\r\n .map(row => new PartnerForIsFromKD(\r\n row.tryGet(\"ContractCategoryGuid1C\"),\r\n row.tryGet(\"SignedID\")\r\n ));\r\n\r\n const objectByArticle = card.sections.tryGet(\"ArContractArticleIdp\")?.rows\r\n .filter(row => row.state !== CardRowState.Deleted)\r\n .map(row => new ObjectByArticle(\r\n row.tryGet(\"ObjectID\"),\r\n row.tryGet(\"PartnerExternalID\"),\r\n row.tryGet(\"PartnerRelatedExternalID\"),\r\n row.tryGet(\"Amount\")\r\n ));\r\n\r\n return new ValuesForIsFromKD(docDate, docNumber, amountBeginning, amountTotal, isFromKD, isPdcFromKc, partners, objectByArticle);\r\n }\r\n \r\n private async IsUserInRoleAsync(userId: string, roleId: string, card: Card)\r\n {\r\n let acu = card.sections.tryGet(\"ArContractsUser\");\r\n if (!acu) {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.CheckUserInRole\r\n request.info[\"UserID\"] = createTypedField(userId, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(roleId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.build().isSuccessful)\r\n {\r\n acu.fields.set(\"IsUserInAdministrativeGroupRoleID\", response.info.IsUserInRole.$value, DotNetType.Boolean);\r\n }\r\n }\r\n\r\n /**\r\n * Инициализация кнопки \"Показать все связанные документы\".\r\n * При нажатии на кнопку в Тессе открывается новая вкладка \"Связанные документы\", в которой отображены все документы, ссылаяющиеся на текущий договор.\r\n * Для отображения документов используется преднастроенное представление PkLinkedDocumentsUnderContract.\r\n * В скрытый параметр ContractCardID передается идентификатор текущей карточки.\r\n */ \r\n initShowLinkedDocsViewButton(context: ICardUIExtensionContext){\r\n \r\n const showLinkedDocsViewButton = CdUIHelper.GetUIControl(context, \"ShowLinkedDocsView\");\r\n if (!showLinkedDocsViewButton) return;\r\n \r\n showLinkedDocsViewButton.onClick = async () => { \r\n \r\n const contractCardParameterMetadata = new ViewParameterMetadata();\r\n contractCardParameterMetadata.alias = \"ContractCardID\";\r\n contractCardParameterMetadata.caption = \"ContractCardID\";\r\n contractCardParameterMetadata.schemeType = \"Guid\";\r\n contractCardParameterMetadata.hidden = true; \r\n const paramCard = new RequestParameterBuilder()\r\n .withMetadata(contractCardParameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', context.card.id)\r\n .asRequestParameter();\r\n\r\n\r\n await showView({\r\n viewAlias: 'PkLinkedDocumentsUnderContract',\r\n displayValue: 'Связанные документы',\r\n parameters: [\r\n paramCard\r\n ],\r\n treeVisible: true\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Инициализация кнопки \"Выгрузить все связанные документы\".\r\n * При нажатии на кнопку в Тессе производится выгрузка всех документов, ссылаяющиеся на текущий договор.\r\n */ \r\n initDownloadLinkedDocsButton(context: ICardUIExtensionContext){\r\n \r\n const downloadLinkedDocsButton = CdUIHelper.GetUIControl(context, \"DownloadLinkedDocs\");\r\n if (!downloadLinkedDocsButton) return;\r\n \r\n downloadLinkedDocsButton.onClick = async () => { \r\n \r\n const contractCardParameterMetadata = new ViewParameterMetadata();\r\n contractCardParameterMetadata.alias = \"ContractCardID\";\r\n contractCardParameterMetadata.caption = \"ContractCardID\";\r\n contractCardParameterMetadata.schemeType = \"Guid\";\r\n contractCardParameterMetadata.hidden = true; \r\n\r\n const linkedDocumentsView = ViewService.instance.getByName('PkLinkedDocumentsUnderContract')!;\r\n\r\n const request = new TessaViewRequest(linkedDocumentsView.metadata);\r\n\r\n const idParam = new RequestParameterBuilder()\r\n .withMetadata(linkedDocumentsView.metadata.parameters.get('ContractCardID')!)\r\n .addCriteria(equalsCriteriaOperator(), '', context.card.id)\r\n .asRequestParameter();\r\n\r\n request.values.push(idParam);\r\n\r\n const result = await linkedDocumentsView.getData(request);\r\n\r\n let listID: guid[] = [];\r\n\r\n for (let row of result.rows) \r\n {\r\n listID.push(row[0]); \r\n }\r\n \r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = PkFileTypes.PkGetDownloadLinkedDocsReportContent;\r\n getFileContentRequest.versionRowId = Guid.empty;\r\n getFileContentRequest.fileId = Guid.empty;\r\n getFileContentRequest.fileName = PkFileTypes.PkGetDownloadLinkedDocsReportContent; \r\n getFileContentRequest.cardId = context.card.id;\r\n getFileContentRequest.info[\"CardIds\"] = listID!.map(x => createTypedField(x, DotNetType.Guid));\r\n \r\n const getFileContentResponse = await showLoadingOverlay(async () => {\r\n return await CardService.instance.getFileContent(getFileContentRequest);\r\n }, \"Выполняется выгрузка файла...\");\r\n await showNotEmpty(getFileContentResponse.validationResult.build());\r\n if (getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n return;\r\n }\r\n const dlgFileName = \"Выгрузка договоров из Tessa\";\r\n const dlgDefaultExt = \".zip\";\r\n PkCommonHelper.SaveFileContent(dlgFileName + dlgDefaultExt, getFileContentResponse.content);\r\n }\r\n }\r\n\r\n /*Работа с датой документа.*/\r\n private WorkDocDate(card: Card)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let contractKindID: guid | null = acuSection!.fields.get(\"ContractKindID\");\r\n\r\n if (!acuSection || !contractKindID)\r\n return;\r\n\r\n\r\n acuSection.fields.fieldChanged.add(async e =>\r\n {\r\n if (e.fieldName == \"DocDate\")\r\n {\r\n if (contractKindID != TessaArContractKinds.ContractKindTessaID\r\n && contractKindID != TessaArContractKinds.AssignmentKindTessaID\r\n && contractKindID != TessaArContractKinds.CancellationAgreementKindTessaID\r\n && contractKindID != TessaArContractKinds.AdditionalAgreementKindTessaID\r\n && contractKindID != TessaArContractKinds.AccountWithoutContractKindTessaID)\r\n {\r\n return;\r\n }\r\n\r\n let dateValidityPeriodFrom = acuSection!.fields.get(\"DateValidityPeriodFrom\");\r\n if (!dateValidityPeriodFrom)\r\n {\r\n acuSection!.fields.set(\"DateValidityPeriodFrom\", e.fieldValue, DotNetType.DateTime);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Проверка полей на максимальное значение (по году). */\r\n private ValidatingDateControlByYear(context: ICardUIExtensionContext, card: Card, ctrName: string, maxYear: number, fieldCaption: string) \r\n {\r\n if (!card)\r\n {\r\n return;\r\n }\r\n\r\n let dateControl = CdUIHelper.GetUIControl(context, ctrName);\r\n if (!dateControl)\r\n {\r\n return;\r\n }\r\n\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n\r\n dateControl!.hasActiveValidation = true;\r\n dateControl!.validationFunc = (c) => {\r\n if (c.hasEmptyValue) {\r\n return null;\r\n }\r\n\r\n let currentYear = (c as DateTimeViewModel).selectedDate?.toDate().getFullYear();\r\n if (!currentYear){\r\n return null;\r\n }\r\n\r\n if (currentYear <= maxYear){\r\n return null;\r\n }\r\n\r\n return `Поле \\\"${fieldCaption}\\\" заполнено некорректно. Укажите дату не позднее 31.12.${maxYear}.`;\r\n };\r\n }\r\n \r\n /** работа с курсом валют. */\r\n private WorkWithRate(context: ICardUIExtensionContext, card: Card) \r\n {\r\n var isHistorical = PkContractUIHelper.IsLocked(card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n \r\n let exchangeRateControl = CdUIHelper.GetUIControl(context, \"ExchangeRateControl\");\r\n if (!exchangeRateControl)\r\n {\r\n return;\r\n }\r\n\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n \r\n exchangeRateControl!.hasActiveValidation = true;\r\n exchangeRateControl!.validationFunc = (c) => {\r\n let rate: number | null = acuSection!.fields.get(\"Rate\");\r\n if (!c.hasEmptyValue && rate && rate < 0) {\r\n return \"Значение \\\"Курс к рублю\\\" не может быть отрицательным.\";\r\n }\r\n\r\n return null;\r\n };\r\n\r\n acuSection.fields.fieldChanged.add(async e =>\r\n {\r\n if (e.fieldName == \"Rate\")\r\n {\r\n this.RecalcAmountAll(card);\r\n if (!e.fieldValue || e.fieldValue < 0) {\r\n return false;\r\n }\r\n\r\n var amountBeginning: number = acuSection!.fields.get(\"AmountBeginning\") ?? 0;\r\n var multiplicity: number = acuSection!.fields.get(\"ExchangeRateMultiplicity\") ?? 0;\r\n\r\n let amountTotal: number = multiplicity == 0 ? 0 : amountBeginning * ((e.fieldValue ?? 0) / multiplicity);\r\n acuSection!.fields.set(\"AmountTotal\", amountTotal.toString().replace(',', '.'), DotNetType.Decimal);\r\n }\r\n });\r\n }\r\n\r\n private RecalcAmountAll(card : Card)\r\n {\r\n let ArticleIdpInitial = card.sections.get(\"ArContractArticleIdpInitial\");\r\n let ArticleIdp = card.sections.get(\"ArContractArticleIdp\");\r\n \r\n if (ArticleIdpInitial == null || ArticleIdp==null) return;\r\n\r\n ArticleIdpInitial.rows.forEach(row => {\r\n if(row.state!=CardRowState.Deleted)\r\n {\r\n let Amount = row.tryGetField(\"Amount\")!.$value;\r\n let AmountAll = this.GetAmountAll(Amount, card);\r\n row.set(\"AmountAll\",AmountAll.toString().replace(',', '.'), DotNetType.Decimal);\r\n }\r\n });\r\n ArticleIdp.rows.forEach(row => {\r\n if(row.state!=CardRowState.Deleted)\r\n {\r\n let Amount = row.tryGetField(\"Amount\")!.$value;\r\n let AmountAll = this.GetAmountAll(Amount, card);\r\n row.set(\"AmountAll\",AmountAll.toString().replace(',', '.'), DotNetType.Decimal);\r\n }\r\n }); \r\n }\r\n\r\n private GetAmountAll(amount, card : Card)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n var rate: number = acuSection!.fields.get(\"Rate\") ?? 0;\r\n var exchangeRateMultiplicity: number = acuSection!.fields.get(\"ExchangeRateMultiplicity\") ?? 0;\r\n var exchangeRate: number = acuSection!.fields.get(\"ExchangeRateRate\") ?? 0;\r\n var currencyID = acuSection!.fields.get(\"CurrencyID\");\r\n var isYE = acuSection!.fields.get(\"IsYE\");\r\n \r\n\r\n // let amountTotal: number = multiplicity == 0 ? 0 : amountBeginning * ((e.fieldValue ?? 0) / multiplicity);\r\n // acuSection!.fields.set(\"AmountTotal\", amountTotal.toString().replace(',', '.'), DotNetType.Decimal); \r\n if (amount != null)\r\n {\r\n if (isYE!=null && isYE == true)\r\n {\r\n return exchangeRateMultiplicity == 0 ? 0 : amount * (rate / exchangeRateMultiplicity); \r\n }\r\n else\r\n {\r\n if (currencyID!=null && (!Guid.equals(currencyID, \"acaabdfc-2c88-472f-a861-1813bfafe49d\")))\r\n {\r\n return exchangeRateMultiplicity == 0 ? 0 : amount * (exchangeRate / exchangeRateMultiplicity); \r\n }\r\n else\r\n {\r\n return amount;\r\n }\r\n }\r\n }\r\n else\r\n return amount;\r\n }\r\n\r\n /** работа с условной единицей. */\r\n private WorkWithYe(context: ICardUIExtensionContext, card: Card) \r\n {\r\n var isHistorical = PkContractUIHelper.IsLocked(card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n \r\n let exchangeRateControl = CdUIHelper.GetUIControl(context, \"ExchangeRateControl\");\r\n if (!exchangeRateControl)\r\n {\r\n return;\r\n }\r\n\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n\r\n let isYe: boolean | null = acuSection.fields.get(\"IsYE\");\r\n exchangeRateControl!.isReadOnly = !(isYe != null && isYe);\r\n\r\n acuSection.fields.fieldChanged.add(async e =>\r\n {\r\n if (e.fieldName == \"IsYE\")\r\n {\r\n this.RecalcAmountAll(card);\r\n exchangeRateControl!.isReadOnly = !(e.fieldValue != null && e.fieldValue);\r\n\r\n if (!e.fieldValue) {\r\n let rate: number | null = acuSection!.fields.get(\"ExchangeRateRate\");\r\n acuSection!.fields.set(\"Rate\", rate?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** работа с валютой. */\r\n private async WorkWithCurrencyAsync(context: ICardUIExtensionContext)\r\n {\r\n var card = context.model.card;\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let adcSection = card.sections.get(\"ArDocsConstructor\");\r\n if (!acuSection || !adcSection)\r\n {\r\n return;\r\n }\r\n\r\n let contractKindID = acuSection.fields.get(\"ContractKindID\");\r\n if (contractKindID != null \r\n && (contractKindID == TessaArContractKinds.AdditionalAgreementKindTessaID\r\n || contractKindID == TessaArContractKinds.AssignmentKindTessaID\r\n || contractKindID == TessaArContractKinds.CancellationAgreementKindTessaID))\r\n {\r\n let arCurrency = context.model.controls.get('CurrencyControl');\r\n if(arCurrency!=null) \r\n {\r\n arCurrency.isReadOnly = true;\r\n } \r\n }\r\n\r\n\r\n var isHistorical = (PkContractUIHelper.HasGuidCrm(card)\r\n || acuSection.fields.tryGetField('ExtID') != null\r\n || adcSection.fields.tryGetField('CourtCasePaymentDocGuid1C') != null)\r\n && !(userSession.isAdmin && CdUIHelper.IsActiveOrFulfilled(card));\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n \r\n if (card.storeMode == CardStoreMode.Insert)\r\n {\r\n acuSection.fields.set(\"ExchangeRateRate\", \"1\", DotNetType.Decimal);\r\n acuSection.fields.set(\"ExchangeRateMultiplicity\", \"1\", DotNetType.Decimal);\r\n acuSection.fields.set(\"Rate\", \"1\", DotNetType.Decimal);\r\n }\r\n\r\n let currencyId: guid | null = acuSection.fields.get(\"CurrencyID\");\r\n if (currencyId)\r\n {\r\n await this.FillExchangeRateAsync(card, currencyId);\r\n }\r\n\r\n let stateID = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n acuSection.fields.fieldChanged.add(async e =>\r\n {\r\n if (e.fieldName == \"CurrencyID\" && e.fieldValue)\r\n {\r\n await this.FillExchangeRateAsync(card, e.fieldValue);\r\n\r\n acuSection!.fields.set(\"AmountBeginning\", null);\r\n if(stateID != CdDocStates.Active.id && stateID != CdDocStates.OnAgreement.id\r\n && acuSection?.fields.tryGet(\"ContractKindID\") != TessaArContractKinds.AssignmentKindTessaID)\r\n {\r\n acuSection!.fields.set(\"TypeProcedureID\", null, DotNetType.Guid);\r\n acuSection!.fields.set(\"TypeProcedureName\", null, DotNetType.String);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private async FillExchangeRateAsync(card: Card, currencyId: string)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n\r\n let docDate = acuSection.fields.get(\"DocDate\");\r\n\r\n var request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArGetxchangeRateByCurrency;\r\n request.info[\"CurrencyID\"] = createTypedField(currencyId, DotNetType.Guid);\r\n request.info[\"DocDate\"] = createTypedField(docDate, DotNetType.DateTime);\r\n\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n let id: guid | null = null;\r\n let exchangeRateRate: number | null = 1;\r\n let exchangeRateMultiplicity: number | null = 1;\r\n\r\n if (response.validationResult.isSuccessful)\r\n {\r\n id = tryGetFromInfo(response.info, \"ID\", id);\r\n exchangeRateRate = tryGetFromInfo(response.info, \"Rate\", exchangeRateRate);\r\n exchangeRateMultiplicity = tryGetFromInfo(response.info, \"Multiplicity\", exchangeRateMultiplicity);\r\n }\r\n\r\n let rate: number | null = acuSection.fields.get(\"ExchangeRateRate\");\r\n let multiplicity: number | null = acuSection.fields.get(\"ExchangeRateMultiplicity\");\r\n let isYe: boolean | null = acuSection.fields.get(\"IsYE\");\r\n\r\n if (rate != exchangeRateRate || multiplicity != exchangeRateMultiplicity) {\r\n acuSection.fields.set(\"ExchangeRateID\", id, DotNetType.Guid);\r\n acuSection.fields.set(\"ExchangeRateRate\", exchangeRateRate, DotNetType.Decimal);\r\n acuSection.fields.set(\"ExchangeRateMultiplicity\", exchangeRateMultiplicity?.toString() ?? null, DotNetType.Decimal);\r\n this.RecalcAmountAll(card);\r\n if (!(isYe != null && isYe)) {\r\n acuSection.fields.set(\"Rate\", exchangeRateRate?.toString() ?? null, DotNetType.Decimal);\r\n } \r\n }\r\n }\r\n\r\n private ShowPreviewFile(context: ICardUIExtensionContext){\r\n const fdChangesTab = context.model.forms.find(x => x.name === 'ArContractTabs');\r\n if (!fdChangesTab) {\r\n return;\r\n }\r\n const mainView = context.model.mainForm as DefaultFormMainViewModel;\r\n if (!mainView) {\r\n return;\r\n }\r\n\r\n this.disposer = reaction(\r\n () => mainView.selectedTab,\r\n tab => {\r\n if (tab === fdChangesTab) {\r\n let filesAdditional = context.model.controls.get('FilesAdditional') as FileListViewModel;\r\n if (filesAdditional == null){\r\n return;\r\n } \r\n if (filesAdditional.isEmpty) return;\r\n let fileView = filesAdditional.files.find(x=> x.caption === \"История.html\");\r\n\r\n if (fileView != null) {\r\n let file = context.fileContainer.files.find(x=> x.name === \"История.html\");\r\n fileView.model.ensureVersionsLoaded();\r\n filesAdditional.manager?.showPreview(file!)\r\n }\r\n }\r\n }\r\n );\r\n\r\n }\r\n\r\n\r\n private async HideControlForUserByRole(model: ICardModel){\r\n // Скрытие \"Тип ДС\" если вид договора \"Договор\" \r\n let arContractUser = model.card.sections.get(\"ArContractsUser\");\r\n if (arContractUser == null) return;\r\n\r\n let contractKindID = arContractUser.fields.get(\"ContractKindID\");\r\n if (contractKindID == null || contractKindID != TessaArContractKinds.AdditionalAgreementKindTessaID) {\r\n let typeOfAdditionalAgreement = model.controls.get('TypeOfAdditionalAgreement');\r\n if(typeOfAdditionalAgreement) {\r\n typeOfAdditionalAgreement.controlVisibility = Visibility.Collapsed;\r\n } \r\n }\r\n\r\n\r\n var isAdminAndTp = model.card.info.IsAdminAndTpRole;\r\n\r\n if (isAdminAndTp.$value == false) {\r\n\r\n //Скрытие вкладки паспорта котракта\r\n let mainForm = model.mainForm as DefaultFormMainViewModel;\r\n if (mainForm) {\r\n const ContractPassportForm = model.forms.find(x => x.name === \"ContractPassport\");\r\n if (ContractPassportForm) ContractPassportForm.visibility = Visibility.Collapsed;\r\n\r\n const UniversalProcessesForm = model.forms.find(x => x.name === \"UniversalProcesses\");\r\n if (UniversalProcessesForm) {\r\n //UniversalProcessesForm.visibility = Visibility.Collapsed;\r\n UniversalProcessesForm.blocks.forEach(block => block.blockVisibility = block.name == \"Block1\" ? Visibility.Visible : Visibility.Collapsed)\r\n const fcpt = UniversalProcessesForm.blocks.find(i => i.name == \"Block1\")?.controls.find(i => i.name == \"FdCustomParticipantsTable\") as GridViewModel;\r\n fcpt.isReadOnly == true;\r\n fcpt.addButton.setVisibility(Visibility.Collapsed)\r\n fcpt.removeButton.setVisibility(Visibility.Collapsed)\r\n fcpt.leftButtons.find(x => x.caption==\"Пересчитать\")?.setVisibility(Visibility.Collapsed)\r\n } \r\n\r\n const historyTab = model.forms.find(x => x.name === \"HistoryTab\"); // вкладка История изменений\r\n if (historyTab) \r\n {\r\n historyTab.visibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n // скрываем \"Порядковый номер\"\r\n var serialNumberControl = model.controls.get('SerialNumberControl');\r\n if (serialNumberControl) {\r\n serialNumberControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n // скрываем \"Системный номер\"\r\n let systNumber = model.controls.get('SystNumber');\r\n if (systNumber) {\r\n systNumber.controlVisibility = Visibility.Collapsed;\r\n }\r\n \r\n // скрываем \"iD_MDS\"\r\n let iD_MDS = model.controls.get('ID_MDS');\r\n if (iD_MDS) {\r\n iD_MDS.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n // скрываем \"ID_KSD\"\r\n let ID_KSD = model.controls.get('ID_KSD');\r\n if (ID_KSD) {\r\n ID_KSD.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n // скрываем \"Историческая сумма первоначальная\"\r\n let oldAmountBegining = model.controls.get('OldAmountBegining');\r\n if (oldAmountBegining) {\r\n oldAmountBegining.controlVisibility = Visibility.Collapsed;\r\n }\r\n // скрываем \"Историческая сумма всего (в рублях)\"\r\n let oldAmountTotallnRub = model.controls.get('OldAmountTotallnRub');\r\n if (oldAmountTotallnRub) {\r\n oldAmountTotallnRub.controlVisibility = Visibility.Collapsed;\r\n }\r\n // скрываем \"Историческая сумма по договору текущая\"\r\n let oldAmountCurrent = model.controls.get('OldAmountCurrent');\r\n if (oldAmountCurrent) {\r\n oldAmountCurrent.controlVisibility = Visibility.Collapsed;\r\n }\r\n // скрываем \"Историческая сумма по документу текущая в рублях\"\r\n let oldCurrentSumInRub = model.controls.get('OldCurrentSumInRub');\r\n if (oldCurrentSumInRub) {\r\n oldCurrentSumInRub.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n\r\n /// \r\n /// Обновление JSON-значения секции сторон документа в виртуальном строковом поле для дальнейше передачи в представление.\r\n /// \r\n private UpdateContractorsMappingData(mappingData: TypeProcedureMappingData, acvSection: CardSection, acpSection: CardSection)\r\n {\r\n acpSection.rows.filter(x => x.state != CardRowState.Deleted).forEach(row => {\r\n const partnerExternalID = row.tryGet(\"PartnerExternalID\");\r\n const roleID = row.tryGet(\"RoleID\");\r\n\r\n if (partnerExternalID == null\r\n || roleID == null){ \r\n return;\r\n }\r\n\r\n const contractCategoryID = row.tryGet(\"ContractCategoryID\");\r\n\r\n var contractorMappingData = new ContractorMappingData();\r\n contractorMappingData.PartnerExternalID = partnerExternalID;\r\n contractorMappingData.RoleID = roleID;\r\n contractorMappingData.ContractCategoryID = contractCategoryID;\r\n\r\n mappingData.Contractors.push(contractorMappingData);\r\n });\r\n\r\n const objectsLikeString = JSON.stringify(mappingData);\r\n acvSection.fields.set(\"TypeProcedureMappingData\", objectsLikeString, DotNetType.String);\r\n acvSection.clearChanges();\r\n }\r\n\r\n /// \r\n /// Логика маппинга полей, связанных с полем \"Тип процедуры\".\r\n /// \r\n private TypeProcedureMappingLogic(model: ICardModel)\r\n {\r\n var card = model.card;\r\n\r\n var isHistorical = PkContractUIHelper.IsLocked(card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n \r\n let acvSection = card.sections.get(\"ArContractVirtual\");\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let acpSection = card.sections.get(\"ArContractPartners\");\r\n let acptControl = model.controls.get(\"ArContractPartnersTable\");\r\n let dciSection = card.sections.get(\"PkDocumentCommonInfo\");\r\n if (acvSection\r\n && acuSection\r\n && acpSection\r\n && acptControl\r\n && dciSection\r\n && acvSection.fields.has(\"TypeProcedureMappingData\")){\r\n \r\n let mappingData = new TypeProcedureMappingData();\r\n\r\n this.UpdateContractorsMappingData(mappingData, acvSection, acpSection);\r\n\r\n var acptGridView = acptControl as GridViewModel;\r\n let stateID = model.card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n\r\n acptGridView.rowInitializing.add(() =>{\r\n \r\n acpSection!.rows.filter(x => x.state != CardRowState.Deleted).forEach(row => {\r\n row.fieldChanged.add(e1 =>{\r\n \r\n if ((e1.fieldName == \"PartnerExternalID\" && e1.fieldValue != null)\r\n || (e1.fieldName == \"RoleID\" && e1.fieldValue != null)\r\n || e1.fieldName == \"ContractCategoryID\"){ \r\n mappingData = new TypeProcedureMappingData();\r\n\r\n this.UpdateContractorsMappingData(mappingData, acvSection!, acpSection!);\r\n\r\n if(stateID != CdDocStates.Active.id && stateID != CdDocStates.OnAgreement.id\r\n && acuSection?.fields.tryGet(\"ContractKindID\") != TessaArContractKinds.AssignmentKindTessaID)\r\n {\r\n // сбросим поле \"Тип процедуры\"\r\n acuSection!.fields.set(\"TypeProcedureID\", null, DotNetType.Guid);\r\n acuSection!.fields.set(\"TypeProcedureName\", null, DotNetType.String);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n\r\n // при изменении полей сбросим \"Тип процедуры\", т.к. указанное значение уже может быть недоступно для выбора\r\n let stateid=dciSection.fields.get(\"StateID\")\r\n if(stateid!=null && stateid != CdDocStates.Project.id && PkContractUIHelper.IsLocked(card) == false)\r\n acuSection.fields.fieldChanged.add(e =>{ \r\n if (e.fieldName == \"ContractKindID\" // Вид документа\r\n || e.fieldName == \"ParentCardID\" // Родительский документ\r\n || e.fieldName == \"AmountTotal\"){ // Сумма всего в рублях \r\n if(stateID != CdDocStates.Active.id && stateID != CdDocStates.OnAgreement.id\r\n && acuSection?.fields.tryGet(\"ContractKindID\") != TessaArContractKinds.AssignmentKindTessaID)\r\n { \r\n // сбросим поле \"Тип процедуры\"\r\n acuSection!.fields.set(\"TypeProcedureID\", null, DotNetType.Guid);\r\n acuSection!.fields.set(\"TypeProcedureName\", null, DotNetType.String);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n \r\n private CopyCovenantButtonControlLogicAsync(model: ICardModel, card: Card) {\r\n let copyCovenantButton = model.controls.get(\"CopyCovenants\") as ButtonViewModel;\r\n if (copyCovenantButton)\r\n {\r\n copyCovenantButton.isReadOnly = true;\r\n let copyContractSection = card.sections.tryGet(\"PkContractToCopy\");\r\n if (copyContractSection)\r\n {\r\n copyContractSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"ContractID\") \r\n {\r\n if (!e) return;\r\n copyCovenantButton.isReadOnly = e.fieldValue == null;\r\n }\r\n }); \r\n }\r\n copyCovenantButton.onClick = async () =>\r\n {\r\n await showLoadingOverlay(async () => {\r\n let contractSection = card.sections.tryGet(\"ArContractsUser\");\r\n let copyContractSection = card.sections.tryGet(\"PkContractToCopy\");\r\n if (contractSection\r\n && copyContractSection)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCopyAllCovenants;\r\n request.info[\"CopyContractID\"] = createTypedField(copyContractSection.fields.tryGet(\"ContractID\"), DotNetType.Guid);\r\n request.info[\"DestinationContractID\"] = createTypedField(card.id, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n copyContractSection.fields.set(\"ContractID\", null);\r\n copyContractSection.fields.set(\"ContractNumberVirtual\", null);\r\n\r\n await model.saveAsync();\r\n }\r\n }, \"Копирование ковенант...\");\r\n }\r\n }\r\n }\r\n\r\n private CreateCovenantButtonControlLogicAsync(model: ICardModel, card: Card) {\r\n let addCovenantButton = model.controls.get(\"AddCovenant\") as ButtonViewModel;\r\n if (addCovenantButton)\r\n {\r\n addCovenantButton.onClick = async () =>\r\n {\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkCovenantTypeID,\r\n cardTypeName: \"PkCovenant\",\r\n info: {},\r\n saveCreationRequest: false,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn',\r\n cardModifierAction : ctx =>\r\n {\r\n let newCard = ctx.card;\r\n let covenantSection = newCard.sections.tryGet(\"PkCovenantInfo\");\r\n let contractSection = card.sections.tryGet(\"ArContractsUser\");\r\n let partnersSection = card.sections.tryGet(\"ArContractPartners\");\r\n if (covenantSection\r\n && contractSection\r\n && partnersSection)\r\n {\r\n var contractor = partnersSection.rows.filter(s => s.get(\"RoleID\") === 1)[0];\r\n var borrower = partnersSection.rows.filter(s => s.get(\"RoleID\") === 0)[0];\r\n\r\n covenantSection.fields.set(\"ContractID\", createTypedField(card.id, DotNetType.Guid));\r\n covenantSection.fields.set(\"ContractNumberVirtual\", createTypedField(contractSection.fields.get(\"DocNumber\"), DotNetType.String));\r\n covenantSection.fields.set(\"ContractNameVirtual\", createTypedField(contractSection.fields.get(\"SubjectName\"), DotNetType.String));\r\n covenantSection.fields.set(\"ContractDate\", createTypedField(contractSection.fields.get(\"DocDate\"), DotNetType.DateTime));\r\n covenantSection.fields.set(\"ContractorID\", createTypedField(contractor.get(\"PartnerID\"), DotNetType.Guid));\r\n covenantSection.fields.set(\"ContractorName\", createTypedField(contractor.get(\"PartnerName\"), DotNetType.String));\r\n covenantSection.fields.set(\"ContractorCategoryID\", createTypedField(contractor.get(\"ContractCategoryID\"), DotNetType.Guid));\r\n covenantSection.fields.set(\"ContractorCategoryName\", createTypedField(contractor.get(\"ContractCategoryName\"), DotNetType.String));\r\n covenantSection.fields.set(\"BorrowerID\", createTypedField(borrower.get(\"PartnerID\"), DotNetType.Guid));\r\n covenantSection.fields.set(\"BorrowerName\", createTypedField(borrower.get(\"PartnerName\"), DotNetType.String));\r\n covenantSection.fields.set(\"BorrowerCategoryID\", createTypedField(borrower.get(\"ContractCategoryID\"), DotNetType.Guid));\r\n covenantSection.fields.set(\"BorrowerCategoryName\", createTypedField(borrower.get(\"ContractCategoryName\"), DotNetType.String));\r\n covenantSection.fields.set(\"PeriodFrom\", createTypedField(contractSection.fields.get(\"DateValidityPeriodFrom\"), DotNetType.DateTime));\r\n covenantSection.fields.set(\"PeriodTo\", createTypedField(contractSection.fields.get(\"DateValidityPeriodUntil\"), DotNetType.DateTime));\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n private OpenCovenantCardAsync(linkCovenantsGrid: GridViewModel) {\r\n if (linkCovenantsGrid == null) return;\r\n linkCovenantsGrid.rowInvoked.add(async e => {\r\n if (e.action == GridRowAction.Opening){\r\n let cardId = e.row.get(\"CovenantID\");\r\n await openCard({\r\n cardId: cardId,\r\n });\r\n e.cancel = true;\r\n return;\r\n } \r\n }); \r\n }\r\n\r\n private OpenCovenantConditionCardAsync(linkCovenantsConditionGrid: GridViewModel) {\r\n if (linkCovenantsConditionGrid == null) return;\r\n linkCovenantsConditionGrid.rowInvoked.add(async e => {\r\n if (e.action == GridRowAction.Opening){\r\n let cardId = e.row.get(\"CovenantID\");\r\n await openCard({\r\n cardId: cardId,\r\n });\r\n e.cancel = true;\r\n return;\r\n } \r\n }); \r\n }\r\n\r\n private SetContractConditionTabVisibility(model: ICardModel) {\r\n let partnersSection = model.card.sections.tryGet(\"ArContractPartners\");\r\n if (partnersSection)\r\n {\r\n let mainForm = model.mainForm as DefaultFormMainViewModel;\r\n var tabForm = \"ContractCondition\";\r\n const form = model.forms.find(x => x.name === tabForm);\r\n\r\n if (mainForm)\r\n {\r\n for (var partner of partnersSection.rows) {\r\n let category: number = partner.tryGetField(\"ContractCategoryExtID\") != null ? \r\n partner.tryGetField(\"ContractCategoryExtID\")!.$value : null;\r\n\r\n if (category)\r\n {\r\n if (this.covenantCategories.indexOf(category) > -1)\r\n {\r\n if (form) form.visibility = Visibility.Visible;\r\n return;\r\n }\r\n } \r\n }\r\n if (form) form.visibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n\r\n /**Преобразует таблицу контрагентов в Json*/\r\n /// \r\n /// Json .\r\n /// \r\n public AdaptPartnerListToJson(model: ICardModel)\r\n {\r\n let list = new Array();\r\n let card = model.card;\r\n let pov = card.sections.get(\"PkPartnersVirtual\");\r\n let partnersList = card.sections.tryGet(\"ArContractPartners\");\r\n if (isNullOrUndefined(partnersList)) return;\r\n \r\n let actualPartners = partnersList.rows.filter(\r\n r => r.state != CardRowState.Deleted);\r\n actualPartners.forEach(row => { \r\n\r\n if (model.card.sections.tryGet(\"ArContractsUser\")?.fields.tryGet(\"ContractKindID\") == TessaArContractKinds.AssignmentKindTessaID\r\n && row.tryGet(\"RoleID\") == 2) \r\n {\r\n return;\r\n }\r\n\r\n if (row.get(\"PartnerExternalID\") != null) \r\n list.push(row.get(\"PartnerExternalID\")); \r\n });\r\n let json = JSON.stringify(list);\r\n\r\n if (pov!.fields.has(\"PartnersLikeString\")){\r\n let PartnersLikeString = json;\r\n pov!.fields.set(\"PartnersLikeString\", PartnersLikeString, DotNetType.String);\r\n pov!.clearChanges();\r\n } \r\n }\r\n\r\n /**Устанавлаги в зависимости от категории договора*/ \r\n public SetParameterMappingByPartner(model: ICardModel, partnerExtID)\r\n { \r\n let card = model.card;\r\n let pov = card.sections.get(\"ArContractVirtual\");\r\n let partnersList = card.sections.tryGet(\"ArContractPartners\");\r\n if (isNullOrUndefined(partnersList) || partnerExtID==null || pov==null) return;\r\n \r\n let actualPartners = partnersList.rows.find(\r\n r => r.state != CardRowState.Deleted && r.get(\"PartnerExternalID\") != null && r.get(\"PartnerExternalID\") == partnerExtID);\r\n\r\n if(actualPartners!=null )\r\n { \r\n if(actualPartners.get(\"ContractCategoryIsOIDP\")!=null && actualPartners.get(\"ContractCategoryIsHopeless\")!=null) \r\n {\r\n pov.fields.set(\"CategoryIsIDP\", actualPartners.get(\"ContractCategoryIsOIDP\"), DotNetType.Boolean);\r\n pov.fields.set(\"CategoryIsHopeless\", actualPartners.get(\"ContractCategoryIsHopeless\"), DotNetType.Boolean);\r\n } else\r\n {\r\n pov.fields.set(\"CategoryIsIDP\",null);\r\n pov.fields.set(\"CategoryIsHopeless\", null);\r\n } \r\n if(actualPartners.get(\"RoleID\")!=null && (actualPartners.get(\"RoleID\")==1 || actualPartners.get(\"RoleID\")==0))\r\n {\r\n pov.fields.set(\"IsIncomeCost\",createTypedField(false ,DotNetType.Boolean));\r\n }\r\n else\r\n {\r\n pov.fields.set(\"IsIncomeCost\",null);\r\n }\r\n\r\n }\r\n pov.clearChanges(); \r\n }\r\n /** Работа с контролом \"Тип договора\". */\r\n private WorkWithContractType(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n let arContractsUser : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n const contractTypeControl = context.model.controls.get('ContractTypeControl');\r\n\r\n if (contractTypeControl == null || !arContractsUser) {\r\n return;\r\n }\r\n \r\n var contractKindID = arContractsUser.fields.get('ContractKindID');\r\n if (contractKindID == TessaArContractKinds.CancellationAgreementKindTessaID || contractKindID == TessaArContractKinds.AdditionalAgreementKindTessaID|| contractKindID == TessaArContractKinds.AssignmentKindTessaID)\r\n {\r\n contractTypeControl.isReadOnly = !tryGetFromInfo(context.card.info, \"IsAdminAndTpRole\", false);\r\n }\r\n }\r\n\r\n /** Работа с контролом сумма всего. */\r\n private WorkWithAmmountTotal(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n\r\n const amountTotalControl = context.model.controls.get('AmountTotalControl');\r\n let arContractsUser : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n\r\n if (amountTotalControl == null || !arContractsUser) {\r\n return;\r\n }\r\n \r\n // Если соглашение об расторжении, то поле Сумма всего не обязательно.\r\n var contractKindID = arContractsUser.fields.get('ContractKindID');\r\n if (contractKindID == TessaArContractKinds.CancellationAgreementKindTessaID)\r\n {\r\n amountTotalControl.isRequired = false;\r\n }\r\n }\r\n\r\n /** Очистка полей при копировании карточки. */\r\n private async ClearFieldsWhenCopyCard(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n if (card.created)\r\n {\r\n return;\r\n }\r\n\r\n for (let i = context.fileContainer.files.length - 1; i >= 0; i--) {\r\n let file = context.fileContainer.files[i];\r\n context.fileContainer.removeFile(file);\r\n }\r\n\r\n card.files.clear();\r\n\r\n let outgoingRefDocs : CardSection | undefined = card.sections.tryGet(\"OutgoingRefDocs\");\r\n if (outgoingRefDocs) {\r\n for (let i = outgoingRefDocs.rows.length - 1; i >= 0; i--) {\r\n let row = outgoingRefDocs.rows[i];\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n } \r\n else\r\n {\r\n outgoingRefDocs.rows.remove(row);\r\n }\r\n }\r\n }\r\n\r\n let pkDiadocInfo : CardSection | undefined = card.sections.tryGet(\"PkDiadocInfo\");\r\n if (pkDiadocInfo) {\r\n for (let i = pkDiadocInfo.rows.length - 1; i >= 0; i--) {\r\n let row = pkDiadocInfo.rows[i];\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n } \r\n else\r\n {\r\n pkDiadocInfo.rows.remove(row);\r\n }\r\n }\r\n }\r\n\r\n let pkDocumentCommonInfo : CardSection | undefined = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if (pkDocumentCommonInfo) {\r\n pkDocumentCommonInfo.fields.set('StateID', createTypedField(CdDocStates.Project.id, DotNetType.Int32));\r\n pkDocumentCommonInfo.fields.set('StateName', createTypedField(CdDocStates.Project.caption, DotNetType.String));\r\n }\r\n\r\n let arContractsUserSection : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n if (arContractsUserSection) {\r\n arContractsUserSection.fields.set('DocNumber', null);\r\n arContractsUserSection.fields.set('SystemFullNumber', null);\r\n arContractsUserSection.fields.set('SystemNumber', null);\r\n arContractsUserSection.fields.set('SystemNumberSequence', null);\r\n arContractsUserSection.fields.set('IsFromKD', createTypedField(false, DotNetType.Boolean));\r\n arContractsUserSection.fields.set('IsPdcFromKC', createTypedField(false, DotNetType.Boolean));\r\n arContractsUserSection.fields.set('GuidDirectum', null);\r\n }\r\n \r\n let documentCommonInfoSection : CardSection | undefined = card.sections.tryGet(\"DocumentCommonInfo\");\r\n if (documentCommonInfoSection) {\r\n documentCommonInfoSection.fields.set('Subject', null);\r\n documentCommonInfoSection.fields.set('FullNumber', null);\r\n documentCommonInfoSection.fields.set('Number', null);\r\n documentCommonInfoSection.fields.set('SecondaryFullNumber', null);\r\n documentCommonInfoSection.fields.set('SecondaryNumber', null);\r\n documentCommonInfoSection.fields.set('SecondarySequence', null);\r\n }\r\n\r\n let pkDiadocCommonInfo : CardSection | undefined = card.sections.tryGet(\"PkDiadocCommonInfo\");\r\n if (pkDiadocCommonInfo) {\r\n pkDiadocCommonInfo.fields.set('DiadocStatusID', null);\r\n pkDiadocCommonInfo.fields.set('DiadocStatusName', null);\r\n pkDiadocCommonInfo.fields.set('DiadocStatusCaption', null);\r\n\r\n pkDiadocCommonInfo.fields.set('DiadocRevocationStatusID', null);\r\n pkDiadocCommonInfo.fields.set('DiadocRevocationStatusName', null);\r\n pkDiadocCommonInfo.fields.set('DiadocRevocationStatusCaption', null);\r\n\r\n pkDiadocCommonInfo.fields.set('DiadocEntityID', null);\r\n pkDiadocCommonInfo.fields.set('DiadocMessageID', null);\r\n pkDiadocCommonInfo.fields.set('URL', null);\r\n pkDiadocCommonInfo.fields.set('IsDownloadedFilesFail', null);\r\n pkDiadocCommonInfo.fields.set('SignerID', null);\r\n pkDiadocCommonInfo.fields.set('UserSignDepartmentID', null);\r\n pkDiadocCommonInfo.fields.set('BoxID', null);\r\n pkDiadocCommonInfo.fields.set('PacketID', null);\r\n pkDiadocCommonInfo.fields.set('ExtPacketID', null);\r\n pkDiadocCommonInfo.fields.set('DeliveryDate', null);\r\n pkDiadocCommonInfo.fields.set('IsSigned', null);\r\n pkDiadocCommonInfo.fields.set('AttachmentComment', null);\r\n pkDiadocCommonInfo.fields.set('RejectionComment', null);\r\n pkDiadocCommonInfo.fields.set('PrintFormFileRowID', null);\r\n }\r\n\r\n let aes : CardSection | undefined = card.sections.tryGet(\"ArEdoStatus\"); \r\n if (aes) {\r\n aes.rows.clear();\r\n }\r\n\r\n let pcrpac : CardSection | undefined = card.sections.tryGet(\"PkCardRolesPermissionsArContract\");\r\n if (pcrpac) {\r\n pcrpac.rows.forEach(row => {\r\n row.state = CardRowState.Inserted;\r\n });\r\n }\r\n\r\n let acp : CardSection | undefined = card.sections.tryGet(\"ArContractPartners\");\r\n if (acp) {\r\n acp.rows.forEach(row => {\r\n row.set('Modified', null);\r\n row.state = CardRowState.Inserted;\r\n });\r\n }\r\n }\r\n\r\n /** Работа с полем Причина статуса ЭДО. */\r\n private async WorkWithEdoReasonFieldAsync(context: ICardUIExtensionContext) {\r\n var isHistorical = PkContractUIHelper.IsLocked(context.card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n \r\n const arEdoStatusTable = CdUIHelper.GetUIControl(context, \"ArEdoStatusTableControl\");\r\n if (!arEdoStatusTable) {\r\n return;\r\n }\r\n\r\n arEdoStatusTable.rowInvoked.add(e =>\r\n {\r\n if (e.action != GridRowAction.Deleting)\r\n {\r\n const edoReason = e?.rowModel?.controls.get('EdoReasonControl');\r\n if (!edoReason) {\r\n return;\r\n }\r\n \r\n if (e.row.getField(\"HasActiveValidation\")!.$value) {\r\n edoReason.isRequired = true;\r\n edoReason.hasActiveValidation = true;\r\n }\r\n\r\n e.row.fieldChanged.add(e1 => {\r\n if (e1.fieldName == \"StatusEdoID\") {\r\n e.row.set(\"HasActiveValidation\", createTypedField(true, DotNetType.Boolean));\r\n\r\n // При изменении реквизита “Статус ЭДО” вручную, \r\n // Дата статуса ЭДО заполняется датой изменения реквизита “Статус ЭДО”.\r\n e.row.set(\"DateStatusEdo\", createTypedField(new Date(), DotNetType.DateTime)); \r\n\r\n edoReason.isRequired = true;\r\n edoReason.hasActiveValidation = true;\r\n }\r\n });\r\n }\r\n });\r\n\r\n arEdoStatusTable.rowEditorClosing.add(e =>\r\n {\r\n const edoReason = e?.rowModel?.controls.get('EdoReasonControl');\r\n if (!edoReason) {\r\n return;\r\n }\r\n \r\n if (edoReason.hasActiveValidation && edoReason.hasEmptyValue) {\r\n showError(\"Заполните поле \\\"Причина ЭДО\\\"\");\r\n\r\n e.cancel = true;\r\n }\r\n });\r\n }\r\n\r\n /** Работа с вкладкой ПА и ЭДО. */\r\n private async WorkWithPaEdoTabAsync(context: ICardUIExtensionContext) {\r\n var tabPaEdo = context.model.formsBag.find(_ => _.name == \"TabPaEdo\");\r\n if (tabPaEdo != null)\r\n {\r\n let isAdmin: boolean = await this.IsAdmin();\r\n this.SetPropertiesForAllControlsInTab(tabPaEdo, !isAdmin);\r\n }\r\n\r\n const arEdoStatusTable = CdUIHelper.GetUIControl(context, \"ArEdoStatusTableControl\");\r\n if (!arEdoStatusTable) {\r\n return;\r\n }\r\n\r\n arEdoStatusTable.leftButtons.forEach(b => b.setVisibility(Visibility.Collapsed))\r\n arEdoStatusTable.moveDownButton.setVisibility(Visibility.Collapsed);\r\n arEdoStatusTable.moveUpButton.setVisibility(Visibility.Collapsed);\r\n arEdoStatusTable.addButton.setVisibility(Visibility.Collapsed);\r\n arEdoStatusTable.removeButton.setVisibility(Visibility.Collapsed);\r\n }\r\n\r\n private SetPropertiesForAllControlsInTab(tabPaEdo: IFormViewModel, isReadOnly: boolean | null = null, isRequired: boolean | null = null, isVisible: boolean | null = null)\r\n {\r\n tabPaEdo.blocks.forEach(block => {\r\n block.controls.forEach(control => {\r\n if (isReadOnly)\r\n {\r\n control.isReadOnly = isReadOnly;\r\n }\r\n\r\n if (isRequired)\r\n {\r\n control.isRequired = isRequired;\r\n }\r\n\r\n if (isVisible)\r\n {\r\n control.controlVisibility = isVisible ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n });\r\n });\r\n }\r\n\r\n /** Работа с контролом первоначальной суммы. */\r\n private async WorkWithAmmountBeginning(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n let arContractsUserSection : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n const amountBeginningControl = context.model.controls.get('AmountBeginningControl');\r\n\r\n if (amountBeginningControl == null || !arContractsUserSection) {\r\n return;\r\n }\r\n\r\n let stateID = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n\r\n // Если соглашение об расторжении, то поле Сумма первоначальная не обязательно.\r\n var contractKindID = arContractsUserSection.fields.get('ContractKindID');\r\n if (contractKindID == TessaArContractKinds.CancellationAgreementKindTessaID) {\r\n amountBeginningControl.isRequired = false;\r\n\r\n // Если Вид документа = Договор и Тип договора = Рамочный, то значение реквизита Сумма перв. устанавливается = 0.\r\n arContractsUserSection.fields.fieldChanged.add(async e => {\r\n // Если в Сумма перв. передается новое значение, то поле \"Тип процедуры\" сбрасывает свое значение\r\n if (e.fieldName == \"AmountBeginning\" && stateID != CdDocStates.Active.id && stateID != CdDocStates.OnAgreement.id) {\r\n arContractsUserSection!.fields.set(\"TypeProcedureID\", null, DotNetType.Guid);\r\n arContractsUserSection!.fields.set(\"TypeProcedureName\", null, DotNetType.String);\r\n }});\r\n\r\n return;\r\n }\r\n\r\n // Если Вид документа = договор, а тип договора = Рамочный, реквизит Сумма первоначальная.недоступен для изменения.\r\n var contractTypeID: number | undefined = arContractsUserSection.fields.get('ContractTypeID');\r\n var contractKindID = arContractsUserSection.fields.get('ContractKindID');\r\n if (contractTypeID && contractTypeID == 3\r\n && contractKindID == TessaArContractKinds.ContractKindTessaID) {\r\n amountBeginningControl.isRequired = false;\r\n amountBeginningControl.isReadOnly = true;\r\n }\r\n \r\n\r\n // Если Вид документа = Договор и Тип договора = Рамочный, то значение реквизита Сумма перв. устанавливается = 0.\r\n arContractsUserSection.fields.fieldChanged.add(async e => {\r\n // Если в Сумма перв. передается новое значение, то поле \"Тип процедуры\" сбрасывает свое значение\r\n if (e.fieldName == \"AmountBeginning\" && stateID != CdDocStates.Active.id && stateID != CdDocStates.OnAgreement.id\r\n && arContractsUserSection?.fields.tryGet(\"ContractKindID\") != TessaArContractKinds.AssignmentKindTessaID) {\r\n arContractsUserSection!.fields.set(\"TypeProcedureID\", null, DotNetType.Guid);\r\n arContractsUserSection!.fields.set(\"TypeProcedureName\", null, DotNetType.String);\r\n }\r\n \r\n if (e.fieldName == \"ContractTypeID\"){\r\n contractKindID = arContractsUserSection?.fields.get('ContractKindID');\r\n if (e.fieldValue != null && e.fieldValue == 3\r\n && contractKindID == TessaArContractKinds.ContractKindTessaID) {\r\n amountBeginningControl.isRequired = false;\r\n amountBeginningControl.isReadOnly = true;\r\n\r\n arContractsUserSection?.fields.set('AmountBeginning',createTypedField(\"0\",DotNetType.Decimal));\r\n } \r\n else {\r\n amountBeginningControl.isRequired = true;\r\n let isReadOnly = context.model.card.info.isReadOnly;\r\n amountBeginningControl.isReadOnly = (isReadOnly || false);\r\n }\r\n }\r\n \r\n if (e.fieldName == \"ContractKindID\")\r\n {\r\n contractTypeID = arContractsUserSection?.fields.get('ContractTypeID');\r\n if (e.fieldValue != null && e.fieldValue == TessaArContractKinds.ContractKindTessaID\r\n && contractTypeID == 3) {\r\n amountBeginningControl.isRequired = false;\r\n amountBeginningControl.isReadOnly = true;\r\n\r\n arContractsUserSection?.fields.set('AmountBeginning',createTypedField(\"0\",DotNetType.Decimal));\r\n } else {\r\n let isReadOnly = context.model.card.info.isReadOnly;\r\n amountBeginningControl.isRequired = true;\r\n amountBeginningControl.isReadOnly = (isReadOnly || false);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Доступность изменения статьей (и сумм) в зависимости от метода расшифровки на стикеры. */\r\n private async MethodEmbroideryOnStickersChangedAsync(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n let arContractsUserSection : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n const amountBeginningControl = context.model.controls.get('AmountBeginningControl');\r\n\r\n if (amountBeginningControl == null || !arContractsUserSection) {\r\n return;\r\n }\r\n\r\n // нельзя изменять статьи, если метод расшифровки на стикеры = ЕФС (АУД).\r\n let amountBeginningSetEnabled = (methodsEmbroideryOnStickersValue: number | null) => { \r\n amountBeginningControl.isRequired = !methodsEmbroideryOnStickersValue || !EfsAudMethodIds.includes(methodsEmbroideryOnStickersValue);\r\n amountBeginningControl.isReadOnly = methodsEmbroideryOnStickersValue != null && EfsAudMethodIds.includes(methodsEmbroideryOnStickersValue);\r\n }\r\n\r\n amountBeginningSetEnabled(arContractsUserSection.fields.tryGet(\"MethodEmbroideryOnStickersID\"));\r\n\r\n // подписываемся на изменения способа расшифровки на стикеры.\r\n arContractsUserSection.fields.fieldChanged.add(async e => { \r\n if (e.fieldName == \"MethodEmbroideryOnStickersID\") {\r\n amountBeginningSetEnabled(e.fieldValue);\r\n }});\r\n }\r\n\r\n /** Работа с полем \"Серийный номер\". */\r\n private async VisibilitySerialNumberControl(context: ICardUIExtensionContext){\r\n const serialNumberControl = CdUIHelper.GetUIControl(context, \"SerialNumberControl\");\r\n if (!serialNumberControl) {\r\n return;\r\n }\r\n\r\n let isAdmin: boolean = await this.IsAdmin();\r\n if (isAdmin) {\r\n serialNumberControl.controlVisibility = Visibility.Visible;\r\n }else{\r\n serialNumberControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n private async WorkWithTenderControl(context: ICardUIExtensionContext){\r\n let card: Card = context.model.card;\r\n let arContractsUserSection : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n\r\n if (!arContractsUserSection) {\r\n return;\r\n }\r\n\r\n const tenderControl = context.model.controls.get('TenderControl');\r\n\r\n let procedureTypeId = arContractsUserSection.fields.get(\"TypeProcedureID\");\r\n if (Guid.equals(procedureTypeId, ArTypeProcedure.Tender))\r\n {\r\n if (tenderControl != null) tenderControl.isRequired = true;\r\n }\r\n\r\n arContractsUserSection.fields.fieldChanged.add(async e => { \r\n // Если в поле “Тип процедуры” указано значение “Без тендера” или поле пустое, \r\n // то при попытке ручного ввода значения в поле “Тендер” или при попытке выбрать \r\n // Тендер из справочника Тендеров с помощью кнопки, выдается ошибка\r\n // При этом документ должен быть не из CRM\r\n if (!this.IsCRM(card)) {\r\n if (e.fieldName == \"TenderID\") {\r\n if (e.fieldValue == null) {\r\n return;\r\n }\r\n\r\n if (arContractsUserSection!.fields.get(\"TypeProcedureID\") == ArTypeProcedure.WithoutTender\r\n || arContractsUserSection!.fields.get(\"TypeProcedureID\") == null) {\r\n showError(\"Тип процедуры не включает в себя выбор тендера\");\r\n arContractsUserSection!.fields.set(\"TenderID\", null, DotNetType.Guid);\r\n arContractsUserSection!.fields.set(\"TenderName\", null, DotNetType.String);\r\n return;\r\n }\r\n }\r\n\r\n if (e.fieldName == \"TenderName\") {\r\n if (e.fieldValue == null) {\r\n return;\r\n }\r\n\r\n if (arContractsUserSection!.fields.get(\"TypeProcedureID\") == ArTypeProcedure.WithoutTender\r\n || arContractsUserSection!.fields.get(\"TypeProcedureID\") == null) {\r\n arContractsUserSection!.fields.set(\"TenderID\", null, DotNetType.Guid);\r\n arContractsUserSection!.fields.set(\"TenderName\", null, DotNetType.String);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (e.fieldName !== \"TypeProcedureID\" || e.fieldValue == null){\r\n return;\r\n }\r\n\r\n let procedureTypeId = e.fieldValue;\r\n\r\n if (Guid.equals(procedureTypeId, ArTypeProcedure.Tender)) {\r\n tenderControl!.isRequired = true;\r\n }\r\n \r\n if (Guid.equals(procedureTypeId, ArTypeProcedure.WithoutTender)) {\r\n // Если поле “Тендер” заполнено, и после этого был изменен тип процедуры на “Без тендера”, значение в поле “Тендер” удаляется\r\n arContractsUserSection!.fields.set(\"TenderID\", null, DotNetType.Guid);\r\n arContractsUserSection!.fields.set(\"TenderName\", null, DotNetType.String);\r\n }\r\n });\r\n }\r\n\r\n private async VisibilityMainContractorContractControl(context: ICardUIExtensionContext){\r\n let card: Card = context.model.card;\r\n let arContractPartnersSection : CardSection | undefined = card.sections.tryGet(\"ArContractPartners\");\r\n let arContractsUserSection : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n\r\n if (!arContractPartnersSection || !arContractsUserSection) {\r\n return;\r\n }\r\n\r\n let mainContractorContractControl = context.model.controlsBag.find(x => x.name == \"MainContractorContractControl\");\r\n if (!mainContractorContractControl) {\r\n return;\r\n }\r\n\r\n if (this.PartnerIsMain(card) || this.PartnerIsExternal(card))\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Visible;\r\n mainContractorContractControl.isRequired = true;\r\n\r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", true);\r\n }\r\n else\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Collapsed;\r\n mainContractorContractControl.isRequired = false;\r\n\r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", false);\r\n }\r\n\r\n if (arContractsUserSection.fields.get(\"ContractTypeID\") != 1 \r\n && arContractsUserSection.fields.get(\"ContractTypeID\") != 2\r\n && !this.PartnerIsExternal(card))\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Collapsed;\r\n mainContractorContractControl.isRequired = false;\r\n\r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", false);\r\n }\r\n\r\n var isHistorical = PkContractUIHelper.IsLocked(card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n \r\n\r\n const arContractPartnersTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n if (arContractPartnersTable === null || arContractPartnersTable === undefined){\r\n return;\r\n }\r\n\r\n arContractsUserSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName !== \"ContractTypeID\" || e.fieldValue == null){\r\n return;\r\n }\r\n\r\n if (e.fieldValue !== 1 && e.fieldValue !== 2 && !this.PartnerIsExternal(card)){\r\n if (!mainContractorContractControl) {\r\n return;\r\n }\r\n\r\n mainContractorContractControl.controlVisibility = Visibility.Collapsed;\r\n mainContractorContractControl.isRequired = false;\r\n \r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", false);\r\n } else {\r\n if (!mainContractorContractControl || !arContractPartnersSection) {\r\n return;\r\n }\r\n\r\n if (this.PartnerIsMain(card) || this.PartnerIsExternal(card))\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Visible;\r\n mainContractorContractControl.isRequired = true;\r\n \r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", true);\r\n }\r\n else\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Collapsed;\r\n mainContractorContractControl.isRequired = false;\r\n \r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", false);\r\n }\r\n }\r\n });\r\n\r\n arContractPartnersTable.rowEditorClosed.add( e =>\r\n {\r\n if (e.cancel != true)\r\n {\r\n var partnerIsMain: boolean | null = e.row.get(\"PartnerIsMain\");\r\n if (e.rowModel == null) {\r\n return;\r\n }\r\n\r\n let partnerIsMainControl = e.rowModel.controlsBag.find(x => x.name == \"PartnerIsMainControl\");\r\n if (partnerIsMainControl?.controlVisibility == Visibility.Visible && partnerIsMain != null && partnerIsMain)\r\n {\r\n if (!mainContractorContractControl) {\r\n return;\r\n }\r\n\r\n mainContractorContractControl.controlVisibility = Visibility.Visible;\r\n mainContractorContractControl.isRequired = true;\r\n \r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", true);\r\n } else{\r\n if (!mainContractorContractControl || !arContractPartnersSection) {\r\n return;\r\n }\r\n\r\n if (this.PartnerIsMain(card) || this.PartnerIsExternal(card))\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Visible;\r\n mainContractorContractControl.isRequired = true;\r\n \r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", true);\r\n }\r\n else\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Collapsed;\r\n mainContractorContractControl.isRequired = false;\r\n \r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", false);\r\n }\r\n }\r\n }\r\n });\r\n\r\n arContractPartnersSection.rows.collectionChanged.add(e => {\r\n if (e.removed) {\r\n var partnerIsMain:boolean | null = e.removed.some(r => r.get(\"PartnerIsMain\"));\r\n var partnerIsExternal:boolean | null = e.removed.some(r => r.get(\"PartnerIsExternal\"));\r\n if ((partnerIsMain == null || !partnerIsMain) && (partnerIsExternal == null || !partnerIsExternal))\r\n {\r\n return;\r\n }\r\n\r\n if (!arContractPartnersSection || !mainContractorContractControl) {\r\n return;\r\n }\r\n \r\n if (this.PartnerIsMain(card) || this.PartnerIsExternal(card))\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Visible;\r\n mainContractorContractControl.isRequired = true;\r\n \r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", true);\r\n }\r\n else\r\n {\r\n mainContractorContractControl.controlVisibility = Visibility.Collapsed;\r\n mainContractorContractControl.isRequired = false;\r\n \r\n this.AddValueToRequestStoreInfo(context, \"isMainContractorContractControlVisible\", false);\r\n }\r\n }\r\n });\r\n } \r\n\r\n private AddValueToRequestStoreInfo(context: ICardUIExtensionContext,key: string ,val: boolean )\r\n {\r\n context.card.info[key] = createTypedField(val, DotNetType.Boolean);\r\n }\r\n\r\n private async VisibilityPartnerIsMainControl(context: ICardUIExtensionContext){\r\n let card: Card = context.model.card;\r\n let arContractsUserSection : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n\r\n if (!arContractsUserSection) {\r\n return;\r\n }\r\n\r\n const arContractPartnersTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n if (arContractPartnersTable === null || arContractPartnersTable === undefined){\r\n return;\r\n }\r\n\r\n arContractPartnersTable.rowInvoked.add(e => {\r\n if (e.action !== GridRowAction.Deleting) {\r\n if (e.rowModel == null) {\r\n return;\r\n }\r\n\r\n let partnerIsMainControl = e.rowModel.controlsBag.find(x => x.name == \"PartnerIsMainControl\");\r\n if (!partnerIsMainControl) {\r\n return;\r\n }\r\n\r\n let contractTypeID: number | undefined = arContractsUserSection?.fields.get(\"ContractTypeID\");\r\n if (contractTypeID != null && (contractTypeID == 1 || contractTypeID == 2))\r\n {\r\n partnerIsMainControl.controlVisibility = Visibility.Visible;\r\n }\r\n else\r\n {\r\n partnerIsMainControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n });\r\n }\r\n \r\n /// \r\n /// Отображение контрола \"Относится к блоку ЗемАктив\".\r\n /// \r\n private async WorkLandAssetControlAsync(context: ICardUIExtensionContext)\r\n {\r\n const arContractPartnersTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n if (arContractPartnersTable === null || arContractPartnersTable === undefined){\r\n return;\r\n }\r\n\r\n arContractPartnersTable.rowInvoked.add(async e => {\r\n if (e.action !== GridRowAction.Deleting) {\r\n if (e.rowModel == null) {\r\n return;\r\n }\r\n\r\n let landAssetControl = e.rowModel.controlsBag.find(x => x.name == \"LandAssetControl\");\r\n\r\n if (landAssetControl)\r\n {\r\n await this.SetLandAssetControlReadOnlyAsync(e.row.tryGet(\"PartnerExternalID\"), landAssetControl!);\r\n\r\n e.row.fieldChanged.add(async e1 =>\r\n {\r\n if (e1.fieldName == \"PartnerExternalID\")\r\n {\r\n e.row.set(\"LandAsset\", false, DotNetType.Boolean);\r\n await this.SetLandAssetControlReadOnlyAsync(e1.fieldValue, landAssetControl!);\r\n }\r\n });\r\n } \r\n }\r\n });\r\n\r\n }\r\n\r\n private async SetLandAssetControlReadOnlyAsync(partnerExternalID: number | null, landAssetControl: IControlViewModel)\r\n {\r\n if (partnerExternalID == null)\r\n {\r\n landAssetControl.isReadOnly = true;\r\n return;\r\n }\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractPartnerstInfoRequest;\r\n request.info[\"PartnerExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64); \r\n\r\n let response = await CardService.instance.request(request);\r\n \r\n let isLandAsset = response.info.IsLandAsset.$value as boolean; \r\n \r\n if (isLandAsset)\r\n {\r\n landAssetControl.isReadOnly = false;\r\n }\r\n else\r\n {\r\n landAssetControl.isReadOnly = true;\r\n }\r\n } \r\n\r\n\r\n private async WorkWithTenderNonpartyPartners(context: ICardUIExtensionContext){\r\n var card: Card = context.model.card;\r\n\r\n let arContractPartnersSection : CardSection | undefined = card.sections.tryGet(\"ArContractPartners\");\r\n let nonPartySection : CardSection | undefined = card.sections.tryGet(\"ArContractNonpartyPartnerVirtual\");\r\n\r\n if (!arContractPartnersSection || !nonPartySection) {\r\n return;\r\n }\r\n\r\n await this.RecalcArContractNonpartyPartnerVirtualAsync(card);\r\n\r\n const arContractPartnersTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n if (arContractPartnersTable === null || arContractPartnersTable === undefined){\r\n return;\r\n }\r\n\r\n arContractPartnersTable.rowInvoked.add(async(e) => {\r\n if (e.action !== GridRowAction.Deleting) {\r\n return;\r\n }\r\n\r\n nonPartySection?.fields.set(\"Partner1ExtID\", null);\r\n nonPartySection?.fields.set(\"Partner1RoleName\", null);\r\n nonPartySection?.fields.set(\"Partner2ExtID\", null);\r\n nonPartySection?.fields.set(\"Partner2RoleName\", null);\r\n\r\n await this.RecalcArContractNonpartyPartnerVirtualAsync(card, e.row);\r\n });\r\n\r\n arContractPartnersTable.rowInitialized.add(e => { \r\n if(e.action == GridRowAction.Inserted)\r\n {\r\n e.row.fieldChanged.add(async(e1) => {\r\n if (e1.fieldName !== \"Partner2ExtID\" && e1.fieldName !== \"RoleName\"){\r\n return;\r\n }\r\n\r\n await this.RecalcArContractNonpartyPartnerVirtualAsync(card);\r\n });\r\n }\r\n });\r\n }\r\n\r\n private async RecalcArContractNonpartyPartnerVirtualAsync(card: Card, deletedRow?: CardRow)\r\n {\r\n let arContractsUser : CardSection | undefined = card.sections.tryGet(\"ArContractsUser\");\r\n let arContractPartnersSection : CardSection | undefined = card.sections.tryGet(\"ArContractPartners\");\r\n let nonPartySection : CardSection | undefined = card.sections.tryGet(\"ArContractNonpartyPartnerVirtual\");\r\n\r\n if (!arContractsUser || !arContractPartnersSection || !nonPartySection) {\r\n return;\r\n }\r\n\r\n let existsPartners : number[] = [];\r\n\r\n arContractPartnersSection.rows.forEach(row => {\r\n\r\n if(row.state === CardRowState.Deleted){\r\n return;\r\n }\r\n\r\n if (deletedRow && deletedRow.rowId === row.rowId) {\r\n return;\r\n }\r\n\r\n let partnerExtID: number | undefined = row.get(\"PartnerExternalID\");\r\n let roleName: string | undefined = row.get(\"RoleName\");\r\n\r\n if (!partnerExtID || !roleName) {\r\n return;\r\n }\r\n\r\n switch (roleName) {\r\n case \"Цессионарий\":\r\n existsPartners.push(partnerExtID);\r\n nonPartySection?.fields.set(\"Partner1ExtID\", createTypedField(partnerExtID, DotNetType.Int64));\r\n nonPartySection?.fields.set(\"Partner1RoleName\", createTypedField(roleName, DotNetType.String));\r\n\r\n break;\r\n case \"Цедент\":\r\n existsPartners.push(partnerExtID);\r\n\r\n break;\r\n }\r\n });\r\n \r\n nonPartySection?.fields.set(\"Partner2ExtID\", createTypedField(null, DotNetType.Int64));\r\n nonPartySection?.fields.set(\"Partner2RoleName\", createTypedField(null, DotNetType.String));\r\n\r\n let parentCardID = arContractsUser.fields.tryGet(\"ParentCardID\");\r\n if (!parentCardID)\r\n {\r\n return;\r\n }\r\n\r\n const getRequest = new CardGetRequest();\r\n getRequest.cardId = parentCardID;\r\n getRequest.getMode = CardGetMode.ReadOnly;\r\n\r\n // загружаем карточку\r\n const getResponse = await CardService.instance.get(getRequest);\r\n if (!getResponse.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n let parentPartnersSection : CardSection | undefined = getResponse.card.sections.tryGet(\"ArContractPartners\");\r\n if (!parentPartnersSection) {\r\n return;\r\n }\r\n\r\n parentPartnersSection.rows.forEach(row => {\r\n if(row.state === CardRowState.Deleted) {\r\n return;\r\n }\r\n\r\n let parentPartnerExtID: number | undefined = row.get(\"PartnerExternalID\");\r\n let parentRoleName: string | undefined = row.get(\"RoleName\");\r\n\r\n if (!parentPartnerExtID || !parentRoleName || existsPartners.includes(parentPartnerExtID)) {\r\n return;\r\n }\r\n\r\n switch (parentRoleName) {\r\n case \"Покупатель\":\r\n case \"Продавец\":\r\n nonPartySection?.fields.set(\"Partner2ExtID\", createTypedField(parentPartnerExtID, DotNetType.Int64));\r\n nonPartySection?.fields.set(\"Partner2RoleName\", createTypedField(parentRoleName, DotNetType.String));\r\n\r\n break;\r\n }\r\n });\r\n }\r\n\r\n private async WorkWithTenderBuyersSellers(context: ICardUIExtensionContext){\r\n var card: Card = context.model.card;\r\n\r\n this.CopyPartnersNames(card);\r\n\r\n const arContractPartnersTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n if (arContractPartnersTable === null || arContractPartnersTable === undefined){\r\n return;\r\n }\r\n\r\n arContractPartnersTable.rowInvoked.add(e => {\r\n if (e.action !== GridRowAction.Deleting) {\r\n return;\r\n }\r\n \r\n this.CopyPartnersNames(card, e.row);\r\n });\r\n\r\n arContractPartnersTable.rowInitialized.add(e => { \r\n if(e.action == GridRowAction.Inserted)\r\n {\r\n e.row.fieldChanged.add(async e1 => {\r\n if (e1.fieldName !== \"PartnerName\" && e1.fieldName !== \"RoleName\"){\r\n return;\r\n }\r\n\r\n this.CopyPartnersNames(card);\r\n });\r\n }\r\n });\r\n }\r\n\r\n private CopyPartnersNames(card: Card, deletedRow?: CardRow){\r\n let arContractPartnersSection : CardSection | undefined = card.sections.tryGet(\"ArContractPartners\");\r\n let arTenderBuyersSellersVirtualSection : CardSection | undefined = card.sections.tryGet(\"ArTenderBuyersSellersVirtual\");\r\n\r\n if (!arContractPartnersSection || !arTenderBuyersSellersVirtualSection) {\r\n return;\r\n }\r\n\r\n let partnerBuyersNames: Array = [];\r\n let partnerSellersNames: Array = [];\r\n\r\n arTenderBuyersSellersVirtualSection?.fields.set(\"BuyerExtId\", null);\r\n arTenderBuyersSellersVirtualSection?.fields.set(\"SellerExtId\", null);\r\n\r\n arContractPartnersSection.rows.forEach(row => {\r\n if(row.state === CardRowState.Deleted){\r\n return;\r\n }\r\n\r\n if (deletedRow && deletedRow.rowId === row.rowId) {\r\n return;\r\n }\r\n\r\n let partnerName: string | undefined = row.get(\"PartnerName\");\r\n let roleName: string | undefined = row.get(\"RoleName\");\r\n let extID: number | undefined = row.get(\"PartnerExternalID\");\r\n\r\n if (!partnerName || !roleName) {\r\n return;\r\n }\r\n\r\n switch (roleName) {\r\n case \"Покупатель\":\r\n if (!partnerBuyersNames.includes(partnerName)) {\r\n partnerBuyersNames.push(partnerName);\r\n arTenderBuyersSellersVirtualSection?.fields.set(\"BuyerExtId\", createTypedField(extID, DotNetType.Int64));\r\n }\r\n\r\n break; \r\n case \"Продавец\":\r\n if (!partnerSellersNames.includes(partnerName)) {\r\n partnerSellersNames.push(partnerName);\r\n arTenderBuyersSellersVirtualSection?.fields.set(\"SellerExtId\", createTypedField(extID, DotNetType.Int64));\r\n }\r\n\r\n break;\r\n }\r\n });\r\n\r\n arTenderBuyersSellersVirtualSection.fields.set(\"Buyers\", null);\r\n if (partnerBuyersNames.length > 0) {\r\n this.AddStringFromListToField(card, partnerBuyersNames, \"ArTenderBuyersSellersVirtual\", \"Buyers\");\r\n }\r\n\r\n arTenderBuyersSellersVirtualSection.fields.set(\"Sellers\", null);\r\n if (partnerSellersNames.length > 0) {\r\n this.AddStringFromListToField(card, partnerSellersNames, \"ArTenderBuyersSellersVirtual\", \"Sellers\");\r\n }\r\n }\r\n\r\n private AddStringFromListToField(card: Card, partnerBuyersNames: Array, sectionName: string, fieldName: string)\r\n {\r\n let section : CardSection | undefined = card.sections.tryGet(sectionName);\r\n\r\n if (!section) {\r\n return;\r\n }\r\n\r\n section.fields.set(fieldName, null);\r\n\r\n partnerBuyersNames.forEach(name =>\r\n {\r\n let field: string | undefined = section?.fields.get(fieldName);\r\n if (!field || !field.includes(name))\r\n {\r\n var cnt = field?.length ?? 0;\r\n var value = cnt == 0 ? `${name}` : `${field},${name}`;\r\n\r\n section?.fields.set(fieldName, createTypedField(value, DotNetType.String));\r\n }\r\n });\r\n }\r\n \r\n /** Для открытия ПД, у которых указан данный договор и есть табличная часть со статьями ИДП*/\r\n private async InitDocsOpeningByIdp(context: ICardUIExtensionContext)\r\n {\r\n const projectRequestParameter = ArContractUIExtension.BuildContractParameter(context.card.id);\r\n const parameterList = [projectRequestParameter];\r\n \r\n let selectedItem: SelectedValue | null = null;\r\n await showViewsDialog(\r\n \"ArContractDocsForIdpLimits\",\r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n selectedItem = value;\r\n\r\n if (isNullOrUndefined(selectedItem)\r\n || isNullOrUndefined(selectedItem.selectedRow)){\r\n return;\r\n }\r\n\r\n let row = selectedItem.selectedRow;\r\n let id = row.get(\"DocID\") || row.get(\"DOCID\");\r\n if (isNullOrUndefined(id)){\r\n return;\r\n }\r\n\r\n await openCard({\r\n cardId: id\r\n });\r\n },\r\n parameterList\r\n );\r\n }\r\n\r\n /** Получить параметр для фильтрации первичных документов по договору */\r\n private static BuildContractParameter(ContractId: string)\r\n {\r\n const paramMetadata = new ViewParameterMetadata();\r\n paramMetadata.alias = 'Contract';\r\n paramMetadata.caption = 'Договор';\r\n paramMetadata.hidden = true;\r\n paramMetadata.dataType = DbType.Guid;\r\n paramMetadata.multiple = false;\r\n\r\n return new RequestParameterBuilder()\r\n .withMetadata(paramMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', ContractId )\r\n .readOnly(true)\r\n .asRequestParameter();\r\n }\r\n\r\n // Скрытие вкладки паспорта котракта\r\n private async HideEntityAccountantsTab(model: ICardModel) {\r\n let mainForm = model.mainForm as DefaultFormMainViewModel;\r\n if (mainForm != null) { \r\n let isAdmin: boolean = await this.IsAdmin();\r\n if (!isAdmin) {\r\n const сontractPassportForm = model.forms.find(x => x.name === \"ContractPassport\");\r\n if (сontractPassportForm) сontractPassportForm.visibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n\r\n private async IsAdmin(){\r\n let request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetIsAdministrator;\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n\r\n let response = await CardService.instance.request(request);\r\n if (response.validationResult.isSuccessful) {\r\n return response.info.IsAdministrator!.$value;\r\n }else {\r\n return false;\r\n }\r\n }\r\n\r\n // Скрытие вкладки истории документов\r\n private async HideEDocumentsHistoryTab(model: ICardModel, eDocumentHistoryGrid: GridViewModel) {\r\n if (eDocumentHistoryGrid == null) return;\r\n\r\n let mainForm = model.mainForm as DefaultFormMainViewModel;\r\n if (mainForm != null && eDocumentHistoryGrid.rows.length === 0) {\r\n const eDocumentHistoryForm = model.forms.find(x => x.name === \"EDocumentsHistory\");\r\n if (eDocumentHistoryForm) eDocumentHistoryForm.visibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n // Открытие документов по ссылкам\r\n private async OpenEDocumentsHistoryLogic(eDocumentHistoryGrid: GridViewModel, linkToDiadocButton: ButtonViewModel) {\r\n if (eDocumentHistoryGrid == null) return;\r\n if (linkToDiadocButton == null) return;\r\n\r\n // открытие строки\r\n eDocumentHistoryGrid.rowInvoked.add(e => {\r\n if (e.action !== GridRowAction.Opening) return;\r\n const url = e.row.tryGet(\"URL\");\r\n if (!PkCommonHelper.IsNullOrWhitespace(url)) window.open(url);\r\n e.cancel = true;\r\n });\r\n\r\n // кнопка \"Открыть документы в Диадок\"\r\n linkToDiadocButton.onClick = () => {\r\n const urls = eDocumentHistoryGrid.rows.map(x => x.row.tryGet(\"URL\"));\r\n urls.forEach(url => { if (!PkCommonHelper.IsNullOrWhitespace(url)) window.open(url); });\r\n };\r\n }\r\n\r\n // Валидация строк паспорта контракта\r\n private async ValidatingEntityAccountantsRows(card: Card, entityAccGrid: GridViewModel) {\r\n if (entityAccGrid == null) return;\r\n\r\n entityAccGrid.rowValidating.add(e => {\r\n let pkAccountantVitrualSection = card.sections.tryGet(\"PkAccountantVitrual\");\r\n if (pkAccountantVitrualSection == null) return;\r\n if (e.row.tryGet(\"EntityID\") == null) {\r\n e.validationResult.add(\r\n ValidationResult.fromText(\"Поле \\\"Юридическое лицо\\\" обязательно для заполнения.\",\r\n ValidationResultType.Error));\r\n }\r\n if (e.row.tryGet(\"AuthorID\") == null &&\r\n e.row.tryGet(\"ExecutorID\") == null &&\r\n e.row.tryGet(\"SignerID\") == null &&\r\n pkAccountantVitrualSection.rows.find(x => x.parentRowId === e.row.rowId) == null) {\r\n e.validationResult.add(\r\n ValidationResult.fromText(\"Одно из полей \\\"Автор\\\", \\\"Исполнитель\\\", \\\"Подписант\\\", \\\"Бухгалтеры\\\" обязательно для заполнения.\",\r\n ValidationResultType.Error));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * запрет редактирования таблицы Плановые расходы\r\n */\r\n private async ProhobotEditArContractPlannedExpensesTable(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const plannedExpensesTable = context.model.controls.get('ArContractPlannedExpensesTable') as GridViewModel;\r\n const ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (plannedExpensesTable == null || ArContractsUser == null) return;\r\n if (ArContractsUser.fields.tryGetField('IsArticleContract') == null) return;\r\n if (ArContractsUser.fields.tryGet('IsArticleContract') == true)\r\n {\r\n plannedExpensesTable.isReadOnly = false;\r\n }\r\n\r\n if ((card.permissions.cardPermissions & CardPermissionFlags.ProhibitInsertRow) == 8) {\r\n return;\r\n }\r\n\r\n // получим реальный ID статьи\r\n let realArticleID;\r\n let articleGuid1C;\r\n let request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdContractGetArticleID;\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n\r\n // проверка ответа\r\n let response = await CardService.instance.request(request);\r\n if (response.validationResult.isSuccessful) {\r\n realArticleID = response.info.ArticleID;\r\n articleGuid1C = response.info.ArticleGuid1C;\r\n }\r\n\r\n plannedExpensesTable.rowAdding.add(e => {\r\n // присвоим роль\r\n e.row.set('RoleContractorID', createTypedField(401, DotNetType.Int64));\r\n e.row.set('RoleExtID', createTypedField(401, DotNetType.Int64));\r\n e.row.set('RoleRole', createTypedField('Прочее', DotNetType.String)); \r\n // присвоим статью\r\n if (realArticleID != null && articleGuid1C != null) \r\n {\r\n e.row.set('ArticleExtID', createTypedField(653, DotNetType.Int64));\r\n e.row.set('ArticleID', createTypedField(realArticleID.$value, DotNetType.Guid));\r\n e.row.set('ArticleName', createTypedField('Ремонтно-восстановительные работы (невозмещаемые)', DotNetType.String));\r\n e.row.set('ArticleGuid1C', createTypedField(articleGuid1C.$value, DotNetType.Guid));\r\n }\r\n });\r\n\r\n /* Заполнение виртуальных полей для маппинга в поле Договор с виновником \r\n ResidentialComplexIDs - json, строка вида [\"id1\",\"id2\"],\r\n представляет собой список идентификторов выбранных жилищных комплексов, указанных в таблице Первоначальные суммы\r\n */\r\n plannedExpensesTable.rowInitializing.add(() => {\r\n const sections = card.sections;\r\n const virtSect = sections.tryGet(\"PkPartnersVirtual\");\r\n const arcticleIdpSect = sections.tryGet(\"ArContractArticleIdp\");\r\n\r\n if (!virtSect || !arcticleIdpSect){\r\n return;\r\n }\r\n\r\n const filteredRows: CardRow[] = \r\n arcticleIdpSect.rows.filter(r=>r.state != CardRowState.Deleted && r.getField(\"ResidentialComplexID\"));\r\n \r\n const rcIdsFilter: string = filteredRows\r\n .map(r=> '\"' + r.getField(\"ResidentialComplexID\")?.$value + '\"')\r\n .filter((v, i, a) => a.indexOf(v) == i)\r\n .join(',');\r\n\r\n const rcNamesFilter: string = filteredRows\r\n .map(r=> '\"' + r.getField(\"ResidentialComplexName\")?.$value + '\"')\r\n .filter((v, i, a) => a.indexOf(v) == i)\r\n .join('; ');\r\n \r\n virtSect.fields.set('ResidentialComplexIDs', \r\n (!rcIdsFilter || rcIdsFilter.length === 0) ? null : '[' + rcIdsFilter + ']', DotNetType.String);\r\n virtSect.fields.set('ResidentialComplexNames', \r\n (!rcNamesFilter || rcNamesFilter.length === 0) ? null : rcNamesFilter, DotNetType.String);\r\n \r\n virtSect.clearChanges();\r\n });\r\n\r\n plannedExpensesTable.rowInvoked.add(e => {\r\n if (!e.rowModel) return;\r\n\r\n this.plannedExpensesTableRowFieldWasChanged = e.action === GridRowAction.Inserted;\r\n\r\n if (e.action == GridRowAction.Opening || e.action == GridRowAction.Inserted) {\r\n // Проставление свойства ReadOnly для контролов формы редактирования строки таблицы\r\n let setReadOnlyPropertyForTableRowControls = (isReadOnly: boolean) => {\r\n const controlNames: string[] = [\r\n \"ArContractPlannedExpensesPartner\",\r\n \"ArContractPlannedExpensesSumToReSubmit\",\r\n \"ArContractPlannedExpensesArticle\"\r\n ];\r\n\r\n e.rowModel?.controlsBag.filter(c => controlNames.includes(c.name + '')).forEach((control) => {\r\n control.isReadOnly = isReadOnly;\r\n })\r\n }\r\n\r\n setReadOnlyPropertyForTableRowControls(e.row.getField(\"ContractID\") == null);\r\n\r\n e.row.fieldChanged.add(eventArgs => {\r\n // Изменили поле строки таблицы, значит при закрытии формы будем проверять обязательность полей\r\n this.plannedExpensesTableRowFieldWasChanged = true;\r\n\r\n // Если изменили значение поля Договор с виновником, \r\n // то нужно перевыбрать контрагента\r\n if (eventArgs.fieldName === \"ContractID\"){\r\n const row = e.row;\r\n row.set(\"PartnerID\", null, DotNetType.Guid);\r\n row.set(\"PartnerExternalID\", null, DotNetType.Int64);\r\n row.set(\"PartnerName\", null, DotNetType.String);\r\n\r\n setReadOnlyPropertyForTableRowControls(eventArgs.fieldValue == null);\r\n }\r\n }) \r\n }\r\n });\r\n\r\n plannedExpensesTable.rowEditorClosing.add(e => {\r\n // Если на форме не изменили никакое поле, то проверку обязательности полей не проводим\r\n if (this.plannedExpensesTableRowFieldWasChanged === false)\r\n {\r\n return;\r\n }\r\n\r\n const row = e.row;\r\n if (row.getField(\"PartnerID\") == null || \r\n row.getField(\"ArticleID\") == null || \r\n row.getField(\"SumToReSubmit\") == null || \r\n row.getField(\"ReasonID\") == null || \r\n row.getField(\"ContractID\") == null) {\r\n e.cancel = true;\r\n showError('Заполните все поля на форме!');\r\n }\r\n }); \r\n }\r\n private CheckRowFieldAndsGetError(\r\n fieldName: string,\r\n displayName: string,\r\n row: CardRow\r\n )\r\n {\r\n if(row!=null)\r\n { \r\n if (row.tryGet(fieldName) == null)\r\n { \r\n return \"\\r\\nПоле \\\"\"+ displayName + \"\\\" обязательно для заполнения!\"; \r\n }\r\n } \r\n return \"\"; \r\n }\r\n\r\n private async CheckAccessToDmsAndContractCategoryAsync(row: CardRow, isAccessToDms: boolean) {\r\n\r\n if (!isAccessToDms && Guid.equals(row.tryGet('ContractCategoryID'), ArContractCategory.DMS)) {\r\n return \"\\r\\nКатегория договора \\\"ДМС\\\" доступна для выбора только для пользователей с ролью \\\"Доступ к ДМС\\\".\\n\" +\r\n \"Для получение указанных прав необходимо подать заявку через портал - https://service.pik.ru/new\";\r\n }\r\n\r\n return '';\r\n\r\n }\r\n\r\n private CheckPartnerRow_PartnerDepartmentAndContractCategory(row: CardRow)\r\n {\r\n let partnerDepartment = row.tryGet('DepartmentName') as string;\r\n if (partnerDepartment?.toLowerCase()?.indexOf('бухгалтер') == -1){\r\n return '';\r\n }\r\n\r\n let failContractCategoryID : guid = '87d59f64-39e3-4c94-82a7-4bf76fea4c1d';\r\n let contractCategoryID : guid | null = row.tryGet('ContractCategoryID');\r\n if (!Guid.equals(failContractCategoryID, contractCategoryID)){\r\n return '';\r\n }\r\n\r\n return '\\r\\nДанная категория договора недоступна для выбора до особого распоряжения!';\r\n }\r\n \r\n private PartnerIsMain(card: Card)\r\n {\r\n const arContractPartners = card.sections.tryGet('ArContractPartners');\r\n\r\n return arContractPartners?.rows.some(r => \r\n r.state!=CardRowState.Deleted\r\n && r.tryGet(\"PartnerIsMain\") == true); \r\n }\r\n\r\n private PartnerIsExternal(card: Card)\r\n {\r\n let ArContractPartners = card.sections.tryGet('ArContractPartners');\r\n if(ArContractPartners==null) return false;\r\n let isPartnerExternal = false;\r\n ArContractPartners.rows.forEach(row=>\r\n {\r\n let PartnerIsExternal = row.tryGet(\"PartnerIsExternal\");\r\n \r\n if(row.state!=CardRowState.Deleted && PartnerIsExternal==true)\r\n { \r\n isPartnerExternal = true;\r\n }\r\n });\r\n\r\n return isPartnerExternal; \r\n }\r\n\r\n /**\r\n * Работа с таблицей Стороны документа\r\n */\r\n private async WorkWithAllSidePartnersTable(context: ICardUIExtensionContext, card: Card) {\r\n var isHistorical = PkContractUIHelper.IsLocked(card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n\r\n /* Функция получает категорию договора первого покупателя из таблицы Участники процесса\r\n если у покупателя нет категории, то категорию продавца\r\n и обновляет категорию покупателя в секции ArContractUser\r\n Используется для маппинга представления выбора основного договора \r\n в таблице Плановые расходы к перевыставлению на ремонтно-восстановительные работы\r\n ставим в поле сумма 0 и делаем ридонли, если категория - соглашение об ЭДО\r\n */\r\n const contractCategoryChanged = (deletedRowId?: string) => {\r\n //let categoryId: TypedField | null | undefined = null;\r\n let categoryId: string | null = null;\r\n let categoryName: string | null = null;\r\n\r\n const arContractPartnersSection = card.sections.tryGet(\"ArContractPartners\");\r\n if (!arContractPartnersSection){\r\n return;\r\n }\r\n \r\n let categoryRow = arContractPartnersSection.rows.find(row => row.rowId !== deletedRowId &&\r\n row.tryGet(\"ContractCategoryID\") != null &&\r\n row.tryGet(\"RoleID\", 10) == 0)\r\n \r\n if (!categoryRow) {\r\n categoryRow = arContractPartnersSection.rows.find(row => row.rowId !== deletedRowId &&\r\n row.tryGet(\"ContractCategoryID\") != null &&\r\n row.tryGet(\"RoleID\", 10) == 1) \r\n }\r\n\r\n if (categoryRow) {\r\n categoryId = categoryRow.get(\"ContractCategoryID\");\r\n categoryName = categoryRow.get(\"ContractCategoryName\"); \r\n }\r\n\r\n const arContractUserSection = card.sections.tryGet(\"ArContractsUser\");\r\n if (arContractUserSection)\r\n { \r\n arContractUserSection.fields.set(\"ContractCategoryID\", categoryId, DotNetType.Guid); \r\n arContractUserSection.fields.set(\"ContractCategoryName\", categoryName, DotNetType.String);\r\n }\r\n\r\n let isReadOnly = card.info.isReadOnly;\r\n var amountBeginningControl = context.model.controls.get(\"AmountBeginningControl\");\r\n if (amountBeginningControl)\r\n {\r\n amountBeginningControl.isReadOnly = Guid.equals(categoryId, ArContractCategory.DocumentManagementAgreement) \r\n || isReadOnly === true \r\n || (arContractUserSection?.fields.tryGet(\"ContractTypeID\") == 3 \r\n && Guid.equals(arContractUserSection?.fields.tryGet(\"ContractKindID\"), TessaArContractKinds.ContractKindTessaID));\r\n if (Guid.equals(categoryId, ArContractCategory.DocumentManagementAgreement))\r\n {\r\n arContractUserSection?.fields.set(\"AmountBeginning\", \"0\", DotNetType.Decimal);\r\n }\r\n } \r\n } \r\n \r\n const ArContractPartnersTable = context.model.controls.get('ArContractPartnersTable') as GridViewModel;\r\n const ArContractPartners = card.sections.tryGet('ArContractPartners');\r\n const arContractsUser = card.sections.tryGet('ArContractsUser');\r\n const FdSatelliteCommonInfoVirtual = card.sections.tryGet('FdSatelliteCommonInfoVirtual');\r\n if (ArContractPartnersTable == null || ArContractPartners == null || arContractsUser == null || FdSatelliteCommonInfoVirtual == null) return;\r\n \r\n if (!this.PartnerIsExternal(card))\r\n {\r\n // заполним скрытое поле КА\r\n this.FillHideFieldKA(card);\r\n }\r\n else\r\n {\r\n // проверки на внешнего согласующего\r\n this.ExternalPartnerChecks(card);\r\n }\r\n let contractKindID = arContractsUser.fields.get(\"ContractKindID\");\r\n let cardPermissions = context.model.card.permissions.resolver.getCardPermissions();\r\n let arContractPartnersSectionPermissions = context.model.card.permissions.resolver.getSectionPermissions(\"ArContractPartners\");\r\n let isPartnersTableReadOnly = !PermissionsSharedHelper.IsEditableSection(cardPermissions, arContractPartnersSectionPermissions)\r\n || (contractKindID != null && (Guid.equals(contractKindID, TessaArContractKinds.AdditionalAgreementKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.CancellationAgreementKindTessaID)));\r\n let setExternalPartner = false;\r\n let isReadOnlyInAssignment = Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID);\r\n let stateID = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n const arContractArticleIdpPermissions = context.model.card.permissions.sections.tryGet(\"ArContractPartners\")?.fieldPermissions;\r\n const isAccountantAllowModify = arContractArticleIdpPermissions?.tryGet(\"AccountantID\")?.$value == CardPermissionFlags.AllowModify;\r\n const isSignedAllowModify = arContractArticleIdpPermissions?.tryGet(\"SignedID\")?.$value == CardPermissionFlags.AllowModify;\r\n const isContractCategoryAllowModify = arContractArticleIdpPermissions?.tryGet(\"ContractCategoryID\")?.$value == CardPermissionFlags.AllowModify;\r\n\r\n ArContractPartnersTable.rowInitialized.add(e => {\r\n const context = ArContractPartnersTable.cardModel.currentRow?.rowFormContext;\r\n if (context) {\r\n const origCloseFunc = context.close;\r\n context.close = function (...args: any[]) {\r\n e.cancel = false;\r\n return origCloseFunc.call(context, ...args);\r\n };\r\n } \r\n });\r\n // добавим самописные кнопки под таблицу\r\n if(!isPartnersTableReadOnly)\r\n {\r\n // кнопка Добавить внешнего согласующего\r\n if(card.info.IsAllowAddPartnerExternal!=null && card.info.IsAllowAddPartnerExternal.$value==true)\r\n {\r\n let addRowButtonExternal = new UIButton(\"Добавить внешнего согласующего\",\r\n async () => {\r\n setExternalPartner = true;\r\n ArContractPartnersTable.addRow();\r\n });\r\n ArContractPartnersTable.rightButtons.push(addRowButtonExternal);\r\n addRowButtonExternal.setIsEnabled(!isPartnersTableReadOnly && \r\n !this.PartnerIsExternal(card) &&\r\n !hasFlag(arContractPartnersSectionPermissions, CardPermissionFlags.ProhibitInsertRow));\r\n this.disposer = autorun(() => addRowButtonExternal.setIsEnabled(!this.PartnerIsExternal(card))); \r\n }\r\n // кнопка Добавить новую сторону\r\n let addRowButton = new UIButton(\"Добавить новую сторону\",\r\n async () => {\r\n ArContractPartnersTable.addRow();\r\n });\r\n ArContractPartnersTable.rightButtons.push(addRowButton);\r\n // кнопка Удалить строку\r\n let removeRowButton = new UIButton(\"Удалить строку\",\r\n async () => {\r\n if(!this.IsArticleRowReadonlyAfterTransferToUS(ArContractPartnersTable.selectedRow?.row!, card)) {\r\n ArContractPartnersTable.removeRow();\r\n }\r\n else {\r\n showError(\"Нельзя удалить строку в документе, переведенном в УС\");\r\n }\r\n });\r\n ArContractPartnersTable.rightButtons.push(removeRowButton);\r\n // следим за selectedRow; когда значение меняется, то мы устанавливаем доступность кнопки\r\n this.disposer = autorun(() => removeRowButton.setIsEnabled(!!ArContractPartnersTable.selectedRow &&\r\n !isReadOnlyInAssignment &&\r\n stateID != CdDocStates.Active.id &&\r\n !hasFlag(arContractPartnersSectionPermissions, CardPermissionFlags.ProhibitDeleteRow)));\r\n this.disposer = autorun(() => addRowButton.setIsEnabled(!isReadOnlyInAssignment &&\r\n stateID != CdDocStates.Active.id &&\r\n !hasFlag(arContractPartnersSectionPermissions, CardPermissionFlags.ProhibitInsertRow)));\r\n }\r\n\r\n let PartnerDepartment;\r\n let PartnerPerformer;\r\n let PartnerAccountant;\r\n let PartnerSigned;\r\n let contractCategoryControl;\r\n let partnerIsMainControl;\r\n let landAssetControl;\r\n\r\n let isAccessToDms = await PkMatrixWorkplaceHelper.CheckUserInRoleAsync(ChStaticRoles.AccessToDmsID);\r\n\r\n ArContractPartnersTable.rowEditorClosing.add(async e => {\r\n let isError = false;\r\n let textError = \"\";\r\n let isSpecificError = false;\r\n let textSpecificError = \"\";\r\n let isErrorForDms = false;\r\n let textMessageForDms = '';\r\n\r\n const ArContractPartners = card.sections.tryGet('ArContractPartners');\r\n let ContractCategoryIsHopeless = e.row.tryGet(\"ContractCategoryIsHopeless\");\r\n let PartnerAutomated = e.row.tryGet(\"PartnerAutomated\");\r\n let RoleID = e.row.tryGet(\"RoleID\");\r\n if (ArContractPartners == null) {\r\n return;\r\n } \r\n \r\n if (PartnerAutomated == true)\r\n {\r\n //Проверка признака безденежный\r\n ArContractPartners.rows.forEach(row=>\r\n {\r\n let PartnerAutomated2 = row.tryGet(\"PartnerAutomated\");\r\n let ContractCategoryIsHopeless2 = row.tryGet(\"ContractCategoryIsHopeless\");\r\n if(!(row.state==CardRowState.Deleted || PartnerAutomated2==null || PartnerAutomated2!=true))\r\n { \r\n if(ContractCategoryIsHopeless && ContractCategoryIsHopeless2 && ContractCategoryIsHopeless2 != ContractCategoryIsHopeless)\r\n {\r\n isError=true; \r\n }\r\n }\r\n });\r\n\r\n textSpecificError += this.CheckPartnerRow_PartnerDepartmentAndContractCategory(e.row);\r\n isSpecificError = textSpecificError > '';\r\n textError += textSpecificError;\r\n\r\n textMessageForDms += await this.CheckAccessToDmsAndContractCategoryAsync(e.row, isAccessToDms);\r\n isErrorForDms = textMessageForDms > '';\r\n textError += textMessageForDms;\r\n \r\n var isRequired = PkContractUIHelper.IsFieldRequiredAdditionalChecks(card);\r\n if (isRequired) {\r\n //Проверка заполненности полей\r\n textError += this.CheckRowFieldAndsGetError(\"ContractCategoryID\", \"Категория договора\", e.row);\r\n if(!Guid.equals(contractKindID, TessaArContractKinds.AccountWithoutContractKindTessaID)){\r\n textError += this.CheckRowFieldAndsGetError(\"SignedID\", \"Подписант\", e.row);\r\n }\r\n \r\n textError += this.CheckRowFieldAndsGetError(\"PerformerID\", \"Исполнитель\", e.row);\r\n textError += this.CheckRowFieldAndsGetError(\"AccountantID\", \"Ответственный за расчеты\", e.row);\r\n } \r\n }\r\n if (isError)\r\n {\r\n textError += \"\\r\\nНеверно указана категория договора!\\r\\nПризнак 'Безденежный' должен быть одинаковым для каждой автоматизированной стороны.\" \r\n }\r\n\r\n isError = isError || isSpecificError;\r\n\r\n let bayer=0;\r\n let seller=0;\r\n let cedent = 0;\r\n let assignee = 0;\r\n //let another = 0;\r\n ArContractPartners.rows.forEach(row=> \r\n {\r\n if (!(row.state == CardRowState.Deleted || row.rowId==e.row.rowId))\r\n { \r\n let RoleID2 = row.tryGet(\"RoleID\");\r\n //if(RoleID2==null) another++;\r\n if(RoleID2==0) bayer++;\r\n if(RoleID2==1) seller++; \r\n if(RoleID2==3) cedent++;\r\n if(RoleID2==4) assignee++;\r\n } \r\n });\r\n\r\n if (RoleID == 2)\r\n { \r\n if ((cedent == 0 || assignee == 0) && (bayer == 0 || seller == 0))\r\n {\r\n textError += \"\\r\\nНеверно указана роль контрагента!\";\r\n }\r\n }\r\n if( textError.length>0 && PkContractUIHelper.IsLocked(card) == false)\r\n {\r\n showError(textError.replace('\\r\\n',''));\r\n let stateID = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n if (!isSpecificError && !isErrorForDms && stateID === CdDocStates.Project.id)\r\n {\r\n let result = await showConfirm(\"Закрыть без проверки на заполнение обязательных полей?\");\r\n if (!result) {\r\n e.cancel = true;\r\n }\r\n }\r\n else\r\n {\r\n e.cancel = true;\r\n }\r\n }\r\n });\r\n\r\n const a = async (e2: CardFieldChangedEventArgs) => \r\n {\r\n if (e2 == null)\r\n {\r\n return;\r\n }\r\n\r\n const row = e2.storage;\r\n \r\n if (e2.fieldName == \"PartnerAutomated\") {\r\n if (e2.fieldValue == null || e2.fieldValue == false) {\r\n if (PartnerPerformer != null && PartnerDepartment != null &&\r\n PartnerAccountant != null && PartnerSigned != null)\r\n {\r\n PartnerPerformer.isReadOnly = true;\r\n PartnerAccountant.isReadOnly = !isAccountantAllowModify;\r\n PartnerSigned.isReadOnly = !isSignedAllowModify;\r\n PartnerDepartment.isReadOnly = true;\r\n contractCategoryControl.isReadOnly = !isContractCategoryAllowModify;\r\n landAssetControl.isReadOnly = true;\r\n }\r\n }\r\n else {\r\n if (PartnerPerformer != null && PartnerDepartment != null &&\r\n PartnerAccountant != null && PartnerSigned != null\r\n && PkContractUIHelper.IsLocked(card) == false) // документ не исторический\r\n {\r\n PartnerPerformer.isReadOnly = false;\r\n PartnerAccountant.isReadOnly = false;\r\n PartnerSigned.isReadOnly = false;\r\n PartnerDepartment.isReadOnly = false;\r\n contractCategoryControl.isReadOnly = Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID) && row.tryGet('ContractCategoryID') != null;\r\n landAssetControl.isReadOnly = false;\r\n }\r\n }\r\n }\r\n \r\n if (e2.fieldName == \"PartnerExternalID\") { \r\n if(e2.fieldValue!=null)\r\n {\r\n row.set('SignedID', null);\r\n row.set('SignedName', null);\r\n row.set('SignedGuid1C', null);\r\n row.set('RoleID', null);\r\n row.set('RoleName', null);\r\n row.set('PerformerID', null);\r\n row.set('PerformerName', null);\r\n row.set('PerformerDepartmentID', null);\r\n row.set('PerformerGuid1C', null);\r\n row.set('PartnerIsMain', null);\r\n row.set('DepartmentID', null);\r\n row.set('DepartmentName', null);\r\n row.set('DepartmentGuid1C', null);\r\n row.set('AccountantID', null);\r\n row.set('AccountantName', null);\r\n row.set('AccountantGuid1C', null);\r\n row.set('ContractCategoryID', null);\r\n row.set('ContractCategoryExtID', null);\r\n row.set('ContractCategoryName', null);\r\n row.set('ContractCategoryIsHopeless', null);\r\n let DepartmentID;\r\n let IsVGO;\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkContractGetInfoByPartner;\r\n request.info[\"ExtID\"] = createTypedField(e2.fieldValue, DotNetType.Int64);\r\n \r\n // проверка ответа\r\n let response = await CardService.instance.request(request);\r\n if (response.validationResult.isSuccessful) {\r\n DepartmentID = response.info.DepartmentID;\r\n IsVGO = response.info.IsVGO;\r\n if (DepartmentID != null)\r\n row.set('PartnerDepartmentID', createTypedField(DepartmentID!.$value, DotNetType.Guid));\r\n if (IsVGO != null)\r\n row.set('PartnerIsVGO', createTypedField(IsVGO!.$value, DotNetType.Boolean));\r\n } \r\n } else\r\n {\r\n row.set('PartnerIsVGO', null);\r\n row.set('PartnerDepartmentID', null);\r\n row.set('SignedID', null);\r\n row.set('SignedName', null);\r\n row.set('SignedGuid1C', null);\r\n row.set('RoleID', null);\r\n row.set('RoleName', null);\r\n row.set('PerformerID', null);\r\n row.set('PerformerName', null);\r\n row.set('PerformerDepartmentID', null);\r\n row.set('PerformerGuid1C', null);\r\n row.set('PartnerIsMain', null);\r\n row.set('DepartmentID', null);\r\n row.set('DepartmentName', null);\r\n row.set('DepartmentGuid1C', null);\r\n row.set('AccountantID', null);\r\n row.set('AccountantName', null);\r\n row.set('AccountantGuid1C', null);\r\n row.set('ContractCategoryID', null);\r\n row.set('ContractCategoryExtID', null);\r\n row.set('ContractCategoryName', null);\r\n row.set('ContractCategoryIsHopeless', null);\r\n }\r\n }\r\n if (e2.fieldName == \"PerformerGuid1C\") {\r\n if(e2.fieldValue == null)\r\n row.set('PerformerGuid1C', null);\r\n }\r\n // заполнение департамента на основе исполнителя \r\n if (e2.fieldName == \"PerformerDepartmentID\") {\r\n if(e2.fieldValue == null)\r\n row.set('PerformerDepartmentID', null);\r\n row.set('DepartmentID', null);\r\n row.set('DepartmentName', null);\r\n row.set('DepartmentGuid1C', null);\r\n if(e2.fieldValue!=null)\r\n {\r\n let DepartmentID;\r\n let DepartmentName;\r\n let DepartmentGuid1C;\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkContractGetDepartmentRequest;\r\n request.info[\"DepartmentID\"] = createTypedField(e2.fieldValue, DotNetType.Guid);\r\n \r\n // проверка ответа\r\n let response = await CardService.instance.request(request);\r\n if (response.validationResult.isSuccessful) {\r\n DepartmentID = response.info.DepartmentID!.$value;\r\n DepartmentName = response.info.DepartmentName!.$value;\r\n DepartmentGuid1C = response.info.DepartmentGuid1C!.$value;\r\n }\r\n \r\n if (DepartmentID != null && DepartmentName != null) {\r\n row.set('DepartmentID', createTypedField(DepartmentID, DotNetType.Guid));\r\n row.set('DepartmentName', createTypedField(DepartmentName, DotNetType.String));\r\n row.set('DepartmentGuid1C', createTypedField(DepartmentGuid1C, DotNetType.String));\r\n }\r\n }\r\n } \r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(ArContractPartners, a);\r\n\r\n ArContractPartnersTable.rowInvoked.add(async e => { \r\n this.partnerExtID = null;\r\n this.partnerName = null;\r\n this.partnerRoleID = null;\r\n if (e.action == GridRowAction.Opening)\r\n {\r\n if(e.row.tryGet(\"PartnerExternalID\"))\r\n {\r\n this.partnerExtID = e.row.tryGet(\"PartnerExternalID\");\r\n this.partnerName = e.row.tryGet(\"PartnerName\");\r\n this.partnerRoleID = e.row.tryGet(\"RoleID\");\r\n }\r\n }\r\n\r\n if (e.action != GridRowAction.Deleting) \r\n { \r\n if (!this.PartnerIsExternal(card))\r\n {\r\n // заполним скрытое поле КА\r\n this.FillHideFieldKA(card);\r\n }\r\n else\r\n {\r\n // проверки на внешнего согласующего\r\n this.ExternalPartnerChecks(card);\r\n } \r\n }\r\n\r\n if (e.action != GridRowAction.Deleting) \r\n { \r\n if (!e.rowModel) return;\r\n PartnerPerformer = e.rowModel.controlsBag.find(x => x.name == \"PartnerPerformer\");\r\n PartnerAccountant = e.rowModel.controlsBag.find(x => x.name == \"PartnerAccountant\");\r\n PartnerDepartment = e.rowModel.controlsBag.find(x => x.name == \"PartnerDepartment\");\r\n PartnerSigned = e.rowModel.controlsBag.find(x => x.name == \"PartnerSigned\");\r\n contractCategoryControl = e.rowModel.controlsBag.find(x => x.name == \"ContractCategoryControl\"); \r\n partnerIsMainControl = e.rowModel.controlsBag.find(x => x.name == \"PartnerIsMainControl\"); \r\n landAssetControl = e.rowModel.controlsBag.find(x => x.name == \"LandAssetControl\"); \r\n if(setExternalPartner)\r\n {\r\n setExternalPartner=false;\r\n e.row.set('PartnerIsExternal', createTypedField(true, DotNetType.Boolean));\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetAuthorDepartment;\r\n request.info[\"AuthorID\"] = createTypedField(userSession.UserID,DotNetType.Guid);\r\n\r\n if(userSession.UserID == arContractsUser.fields.get(\"AuthorID\"))\r\n request.info[\"AuthorDepartmentID\"] = createTypedField(arContractsUser.fields.get(\"AuthorDepartmentID\"),DotNetType.Guid);\r\n else\r\n request.info[\"AuthorDepartmentID\"]=null;\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) {\r\n \r\n if(response.info.PartnerExternalID!=null)\r\n {\r\n e.row.set('PartnerExternalID',response.info.PartnerExternalID);\r\n e.row.set('PartnerID',response.info.PartnerID);\r\n e.row.set('PartnerName',response.info.PartnerName);\r\n e.row.set('PartnerINN',response.info.PartnerINN);\r\n e.row.set('PartnerAutomated',response.info.PartnerAutomated); \r\n } \r\n }\r\n if(userSession.UserID == arContractsUser.fields.get(\"AuthorID\"))\r\n {\r\n e.row.set('PerformerID',createTypedField(arContractsUser.fields.get(\"AuthorID\"),DotNetType.Guid));\r\n e.row.set('PerformerName',createTypedField(arContractsUser.fields.get(\"AuthorName\"),DotNetType.String));\r\n e.row.set('PerformerDepartmentID',createTypedField(arContractsUser.fields.get(\"AuthorDepartmentID\"),DotNetType.Guid));\r\n e.row.set('DepartmentID',createTypedField(arContractsUser.fields.get(\"AuthorDepartmentID\"),DotNetType.Guid));\r\n e.row.set('DepartmentName',createTypedField(arContractsUser.fields.get(\"AuthorDepartmentName\"),DotNetType.String)); \r\n } else\r\n {\r\n e.row.set('PerformerID',createTypedField(userSession.UserID,DotNetType.Guid));\r\n e.row.set('PerformerName',createTypedField(userSession.UserName,DotNetType.String));\r\n if (response.validationResult.isSuccessful) {\r\n if(response.info.PartnerExternalID!=null)\r\n {\r\n e.row.set('PerformerDepartmentID',response.info.AuthorPerformerDepartmentID);\r\n e.row.set('DepartmentID',response.info.AuthorDepartmentID);\r\n e.row.set('DepartmentName',response.info.AuthorDepartmentName); \r\n } \r\n }\r\n }\r\n }\r\n if (isPartnersTableReadOnly)\r\n {\r\n e.rowModel.controlsBag.forEach(control=>{\r\n control.isReadOnly = true; \r\n });\r\n PartnerAccountant.isReadOnly = !isAccountantAllowModify;\r\n PartnerSigned.isReadOnly = !isSignedAllowModify;\r\n contractCategoryControl.isReadOnly = !isContractCategoryAllowModify;\r\n return; \r\n }\r\n // инициализация\r\n let PartnerAutomated = e.row.tryGet('PartnerAutomated');\r\n if (PartnerPerformer != null && PartnerAccountant != null\r\n && PartnerSigned != null && PartnerAutomated != null && (card.permissions.cardPermissions & CardPermissionFlags.AllowModify)!=0) \r\n if (PartnerAutomated == false)\r\n {\r\n PartnerPerformer.isReadOnly = true;\r\n PartnerAccountant.isReadOnly = !isAccountantAllowModify;\r\n PartnerSigned.isReadOnly = !isSignedAllowModify;\r\n PartnerDepartment.isReadOnly = true;\r\n contractCategoryControl.isReadOnly = !isContractCategoryAllowModify;\r\n landAssetControl.isReadOnly = true;\r\n }\r\n else {\r\n if (this.IsLocked(card) == false) // документ не исторический\r\n {\r\n PartnerPerformer.isReadOnly = false;\r\n PartnerAccountant.isReadOnly = false;\r\n PartnerSigned.isReadOnly = false;\r\n PartnerDepartment.isReadOnly = false;\r\n contractCategoryControl.isReadOnly = Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID) && e.row.tryGet('ContractCategoryID') != null;\r\n landAssetControl.isReadOnly = false;\r\n }\r\n } \r\n \r\n if (contractKindID != null && Guid.equals(contractKindID, TessaArContractKinds.AccountWithoutContractKindTessaID))\r\n { \r\n PartnerSigned.controlVisibility = Visibility.Collapsed;\r\n }\r\n // разрешаем указание основного КА только один раз \r\n let partnerIsMainBool = (card.permissions.cardPermissions & CardPermissionFlags.AllowModify)==0;\r\n ArContractPartners.rows.forEach(partnerRow => {\r\n let partnerIsMainValue = partnerRow.tryGet('PartnerIsMain', false);\r\n if (partnerIsMainValue != null && partnerIsMainValue == true) {\r\n partnerIsMainBool = true;\r\n }\r\n\r\n });\r\n\r\n partnerIsMainControl.isReadOnly = partnerIsMainBool;\r\n let partnerIsMain = e.row.tryGet('PartnerIsMain', false);\r\n if (partnerIsMain != null && partnerIsMain == true)\r\n {\r\n partnerIsMainControl.isReadOnly = false;\r\n }\r\n\r\n if(Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID))\r\n {\r\n var partnersKCKControl = e.rowModel.controlsBag.find(x => x.name == \"PartnersKCKControl\");\r\n partnersKCKControl!.isReadOnly = true;\r\n\r\n var partnerRoleControl = e.rowModel.controlsBag.find(x => x.name == \"PartnerRole\");\r\n partnerRoleControl!.isReadOnly = true;\r\n }\r\n }\r\n \r\n if (e.action === GridRowAction.Deleting) \r\n {\r\n let partnerName = e.row.tryGet('PartnerName', false);\r\n let partnerExternalID = e.row.tryGet('PartnerExternalID');\r\n if(partnerName==null) partnerName = \"\";\r\n let result = await showConfirm(\"Вы действительно хотите удалить контрагента \"+ partnerName + \" из сторон договора?\");\r\n if (!result) {\r\n e.cancel = true;\r\n } else\r\n { \r\n this.partnerExtID = partnerExternalID;\r\n this.partnerName = partnerName;\r\n await this.ClearArticleIDPbyPartner(context, card); \r\n contractCategoryChanged(e.row.rowId);\r\n let acuSection= context.model.card.sections.tryGet(\"ArContractsUser\");\r\n if (acuSection) {\r\n if (acuSection && acuSection.fields.get(\"IsFromKD\") == true\r\n && (acuSection!=null && acuSection.fields.get(\"IsPdcFromKC\") == false))\r\n {\r\n this.ChangeIsFromKD(context.model,true); //явно прокинем ошибку\r\n }\r\n }\r\n\r\n }\r\n }\r\n });\r\n\r\n ArContractPartnersTable.rowEditorClosed.add(async e => {\r\n if(e.cancel!=true)\r\n {\r\n let ArContractPartners = card.sections.tryGet('ArContractPartners');\r\n if(ArContractPartners!=null){\r\n let findrow = ArContractPartners.rows.find(x => x.rowId === e.row.rowId);\r\n //если в секции нет строки значит действие было отменено\r\n if(findrow!=null)\r\n {\r\n //Если редактировали существующего ка\r\n if (e.action == GridRowAction.Opening)\r\n {\r\n await this.CheckClearTabArticle(context, card, e.row);\r\n }\r\n //Если добавляли нового\r\n if (e.action == GridRowAction.Inserted)\r\n {\r\n if (e.row.tryGet(\"PartnerAutomated\") == true)\r\n {\r\n await this.AddTabArticle(context, card, e.row);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let isIDP = false;\r\n \r\n let ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if(ArContractPartners==null || ArContractsUser==null) return;\r\n ArContractPartners.rows.forEach(row=>\r\n {\r\n let ContractCategoryIsOIDP = row.tryGet(\"ContractCategoryIsOIDP\");\r\n \r\n if(!(row.state==CardRowState.Deleted || ContractCategoryIsOIDP==null || ContractCategoryIsOIDP!=true))\r\n { \r\n isIDP=true;\r\n }\r\n });\r\n\r\n ArContractsUser.fields.set('IsIDP', isIDP,DotNetType.Boolean); \r\n contractCategoryChanged();\r\n }\r\n });\r\n\r\n ArContractPartnersTable.rowEditorClosed.add(async e => {\r\n if (e.cancel == true)\r\n {\r\n return;\r\n }\r\n\r\n let acp = card.sections.tryGet('ArContractPartners');\r\n if (acp && acp.rows.length == 1) {\r\n let answer = await showConfirmWithCancel('Указана первая сторона в документе. Необходимо добавить вторую сторону. Перейти к заполнению второй стороны?');\r\n if (answer) {\r\n await ArContractPartnersTable.addRow();\r\n }\r\n }\r\n });\r\n\r\n ArContractPartnersTable.rowInitializing.add(async _e => {\r\n let aContractPartners = card.sections.get('ArContractPartners');\r\n if (aContractPartners!.rows.length == 2)\r\n {\r\n var roleID = aContractPartners!.rows[0].get(\"RoleID\");\r\n if (roleID == 0)\r\n {\r\n aContractPartners!.rows[1].set(\"RoleID\", 1, DotNetType.Int32);\r\n aContractPartners!.rows[1].set(\"RoleName\", \"Продавец\", DotNetType.String);\r\n }\r\n else if (roleID == 1)\r\n {\r\n aContractPartners!.rows[1].set(\"RoleID\", 0, DotNetType.Int32);\r\n aContractPartners!.rows[1].set(\"RoleName\", \"Покупатель\", DotNetType.String);\r\n }\r\n }\r\n\r\n // в случае соглашения ЭДО может быть только 2 стороны, не даем добавить\r\n let rows = aContractPartners!.rows.filter(_ => _.state != CardRowState.Deleted);\r\n if (rows && rows.length == 3 && \r\n rows.find(r => Guid.equals(r.get(\"ContractCategoryID\"), ArContractCategory.DocumentManagementAgreement)))\r\n {\r\n await showError(\"В Соглашении об ЭДО не может быть третьей стороны\");\r\n _e.cancel = true;\r\n }\r\n });\r\n ArContractPartners.rows.collectionChanged.add(async e => { \r\n if(e.removed!=null && e.removed.length>0)\r\n {\r\n this.CheckAmountLimitControl(context.model);\r\n await this.CheckFieldProcedureType(context.model.card);\r\n \r\n if (!this.PartnerIsExternal(card))\r\n {\r\n // заполним скрытое поле КА\r\n this.FillHideFieldKA(card);\r\n }\r\n else\r\n {\r\n // проверки на внешнего согласующего\r\n this.ExternalPartnerChecks(card);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Проверки на внешнего согласующего. */\r\n ExternalPartnerChecks(card: Card) {\r\n const ArContractPartners = card.sections.tryGet('ArContractPartners');\r\n const arContractsUser = card.sections.tryGet('ArContractsUser');\r\n ArContractPartners?.rows.forEach(row => {\r\n if (row.state == CardRowState.Deleted) {\r\n return;\r\n }\r\n \r\n let partnerIsExternal = row.tryGet('PartnerIsExternal', false);\r\n let partnerID = row.tryGetField('PartnerID');\r\n let partnerExternalID = row.tryGetField('PartnerExternalID');\r\n\r\n if (partnerIsExternal != null && partnerIsExternal == true && partnerID != null && partnerExternalID != null) {\r\n arContractsUser?.fields.set('HidePartnerID', createTypedField(partnerID!.$value, DotNetType.Guid));\r\n arContractsUser?.fields.set('HidePartnerExternalID', createTypedField(partnerExternalID!.$value, DotNetType.Int64));\r\n }\r\n });\r\n }\r\n\r\n /** Заполнение скрытого поля КА. */\r\n FillHideFieldKA(card: Card) {\r\n const ArContractPartners = card.sections.tryGet('ArContractPartners');\r\n const arContractsUser = card.sections.tryGet('ArContractsUser');\r\n ArContractPartners?.rows.forEach(row => {\r\n if (row.state == CardRowState.Deleted) {\r\n return;\r\n }\r\n\r\n let partnerIsMainValue = row.tryGet('PartnerIsMain', false);\r\n let partnerID = row.tryGetField('PartnerID');\r\n let partnerExternalID = row.tryGetField('PartnerExternalID');\r\n\r\n if (partnerIsMainValue != null && partnerIsMainValue == true && partnerID != null && partnerExternalID != null) {\r\n arContractsUser?.fields.set('HidePartnerID', createTypedField(partnerID!.$value, DotNetType.Guid));\r\n arContractsUser?.fields.set('HidePartnerExternalID', createTypedField(partnerExternalID!.$value, DotNetType.Int64));\r\n }\r\n else {\r\n arContractsUser?.fields.set('HidePartnerID', null);\r\n arContractsUser?.fields.set('HidePartnerExternalID', null);\r\n }\r\n });\r\n }\r\n \r\n /// \r\n /// Если КСД не Уступка и нет потомков Уступок, то:\r\n ///Если Тип процедуры в КСД не заполнен и в КСД все организации наши, то Тип процедуры в КСД устанавливается в значение Без тендера(внутригрупповой).\r\n ///Очищается тип процедуры в КСД если в КСД Тип процедуры = Без тендера(внутригрупповой) и в КСД не все организации наши.\r\n /// \r\n private async CheckFieldProcedureType(card : Card)\r\n {\r\n let ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (ArContractsUser == null) return;\r\n let contractKindID = ArContractsUser.fields.tryGetField('ContractKindID');\r\n if (contractKindID != null && Guid.equals(contractKindID.$value, TessaArContractKinds.AssignmentKindTessaID)) return;\r\n \r\n\r\n let isNotFound = false;\r\n \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArCheckRelatedConcession;\r\n request.cardId=card.id;\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful && response.info.isNotFound!=null) {\r\n isNotFound = response.info.isNotFound.$value\r\n } \r\n if (isNotFound!=true) return;\r\n let ArContractPartners = card.sections.tryGet('ArContractPartners');\r\n if(ArContractPartners==null) return;\r\n\r\n let allVGO = true;\r\n ArContractPartners.rows.forEach(row=>\r\n { \r\n if (row.state != CardRowState.Deleted)\r\n {\r\n let field = row.tryGet(\"PartnerIsVGO\");\r\n if(field==null || field!=true)\r\n {\r\n allVGO = false;\r\n }\r\n } \r\n });\r\n \r\n if (ArContractPartners.rows.length == 0) allVGO = false;\r\n let TypeProcedureID = ArContractsUser.fields.tryGetField('TypeProcedureID');\r\n if(allVGO && TypeProcedureID == null)\r\n {\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"TypeProcedureID\", createTypedField(ArTypeProcedure.WithoutTenderInGroup, DotNetType.Guid));\r\n CdCommonHelper.SetFieldToSection(ArContractsUser, \"TypeProcedureName\", createTypedField(ArTypeProcedure.WithoutTenderInGroupName, DotNetType.String)); \r\n }\r\n if(!allVGO && TypeProcedureID !=null && Guid.equals(TypeProcedureID.$value, ArTypeProcedure.WithoutTenderInGroup))\r\n {\r\n ArContractsUser.fields.set('TypeProcedureID', null); \r\n ArContractsUser.fields.set('TypeProcedureName', null); \r\n }\r\n }\r\n\r\n /// \r\n /// Если вид документа = Договор и документ безденежный, Реквизит Предел суммы на год устанавливается недоступным для изменения.\r\n /// \r\n private CheckAmountLimitControl(model: ICardModel)\r\n {\r\n let ContractCategoryIsHopeless=false;\r\n \r\n let ArContractPartners = model.card.sections.tryGet('ArContractPartners');\r\n if(ArContractPartners==null) return;\r\n ArContractPartners.rows.forEach(row=>\r\n { \r\n if (row.state != CardRowState.Deleted)\r\n {\r\n let field = row.tryGet(\"ContractCategoryIsHopeless\");\r\n if(field!=true)\r\n {\r\n ContractCategoryIsHopeless = false;\r\n return;\r\n } else\r\n {\r\n ContractCategoryIsHopeless = true;\r\n }\r\n } \r\n });\r\n \r\n \r\n var amountLimitControl = model.controls.get('AmountLimitControl');\r\n if (amountLimitControl == null)\r\n {\r\n return;\r\n }\r\n\r\n if (ContractCategoryIsHopeless)\r\n { \r\n amountLimitControl.isReadOnly = true; \r\n } \r\n }\r\n\r\n /**\r\n * Копирование первоначальной суммы в поля Сумма всего (в рублях) и Сумма текущая.\r\n */\r\n private CopySumFromAmountBeginning(card: Card)\r\n {\r\n let acuSection = card.sections.tryGet(\"ArContractsUser\");\r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n\r\n acuSection.fields.fieldChanged.add(e =>\r\n {\r\n if (e.fieldName == \"AmountBeginning\" && acuSection)\r\n {\r\n let exchangeRateRate: number = acuSection.fields.get(\"ExchangeRateRate\");\r\n let exchangeRateMultiplicity: number = acuSection.fields.get(\"ExchangeRateMultiplicity\");\r\n \r\n acuSection.fields.set('AmountTotal', exchangeRateMultiplicity == 0 ? 0 : ((e.fieldValue ?? 0) * (exchangeRateRate / exchangeRateMultiplicity)).toString().replace(',', '.'), DotNetType.Decimal); \r\n }\r\n });\r\n } \r\n /**\r\n * Работа с виртуальными первоначальными суммами.\r\n */\r\n private async WorkWithInitialAmountByPartnersAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let arContractArticleIdp1 = context.model.controls.get('ContractArticleIdp1') as GridViewModel;\r\n let arContractArticleIdp2 = context.model.controls.get('ContractArticleIdp2') as GridViewModel;\r\n let arContractArticleIdpControl = context.model.controls.get('ContractArticleIdp') as GridViewModel;\r\n let arContractArticleIdpInitial = context.model.controls.get('ContractArticleIdpVirtualNew') as GridViewModel;\r\n let arContractArticleIdpInitial1 = context.model.controls.get('ContractArticleIdpVirtualNew1') as GridViewModel;\r\n let arContractArticleIdpInitial2 = context.model.controls.get('ContractArticleIdpVirtualNew2') as GridViewModel;\r\n let arContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n\r\n // Отобразим вкладки по уже сохраненным данным\r\n this.CheckVisibilityTabsArticle(context, card); \r\n \r\n // Заполним виртуальные таблицы\r\n let largeNumberArticleMessageVisability = await this.ReargeArticleIDP(context, card, true);\r\n largeNumberArticleMessageVisability = await this.ReargeCurrentArticleIDP(context, card, largeNumberArticleMessageVisability); \r\n\r\n // кнопка Открыть документы расчета лимитов\r\n let openDocLimitsButton1 = new UIButton(\"Открыть документы расчета лимитов\",\r\n async () => {\r\n await this.InitDocsOpeningByIdp(context);\r\n },\r\n null,\r\n () => {\r\n return true;\r\n }\r\n );\r\n arContractArticleIdp1.leftButtons.push(openDocLimitsButton1);\r\n\r\n let openDocLimitsButton2 = new UIButton(\"Открыть документы расчета лимитов\",\r\n async () => {\r\n await this.InitDocsOpeningByIdp(context);\r\n },\r\n null,\r\n () => {\r\n return true;\r\n }\r\n );\r\n arContractArticleIdp2.leftButtons.push(openDocLimitsButton2);\r\n\r\n // добавить статью недоступна, если по стороне нельзя менять статьи, и если метод расшифровки на стикеры == ЕФС(АУД)\r\n let addButtonEnabled = (readonlyFlagName) => {\r\n if (EfsAudMethodIds.includes(arContractsUser?.fields.tryGet(\"MethodEmbroideryOnStickersID\"))){\r\n return false;\r\n }\r\n\r\n if ((arContractsUser?.fields.tryGet(\"ContractTypeID\") == 3)\r\n && arContractsUser?.fields.tryGet(\"ContractKindID\") == TessaArContractKinds.ContractKindTessaID) {\r\n return (tryGetFromInfo(card.info, \"IsAdminAndTpRole\", false)\r\n && !tryGetFromInfo(card.info, readonlyFlagName, false));\r\n }\r\n return !tryGetFromInfo(card.info, readonlyFlagName, false);\r\n };\r\n\r\n // удалить статью недоступна, если по стороне нельзя менять статьи, и если метод расшифровки на стикеры == ЕФС(АУД)\r\n let deleteButtonEnabled = (readonlyFlagName, grid: GridViewModel) => {\r\n if (EfsAudMethodIds.includes(arContractsUser?.fields.tryGet(\"MethodEmbroideryOnStickersID\"))){\r\n return false;\r\n }\r\n\r\n return !tryGetFromInfo(card.info, readonlyFlagName, false) && grid.selectedRows.length > 0;\r\n };\r\n\r\n // если карточка доступна на редактирование или есть права по секции\r\n if (PermissionsSharedHelper.IsEditableSection(\r\n context.model.card.permissions.cardPermissions,\r\n context.model.card.permissions.resolver.getSectionPermissions(\"ArContractArticleIdpInitial\")\r\n ))\r\n {\r\n // кнопка Добавить новую\r\n let addRowButton = new UIButton(\"Добавить\",\r\n async () => {\r\n if (!this.IsContractPartnersChecked(card))\r\n {\r\n await showError(`Для добавления статей БК в табличной части участники процесса должны быть выполнены следующие условия:\\n\\r\r\n 1. минимум две стороны с ролями покупатель и продавец\\n\\r\r\n 2. одна сторона должна быть автоматизирована`);\r\n \r\n return;\r\n }\r\n \r\n this.numbertab=1; \r\n await arContractArticleIdpControl.addRow();\r\n //await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card); \r\n await this.RecalcAmountByPartner(context.model.card);\r\n this.numbertab=0; \r\n }, \r\n null, \r\n () => addButtonEnabled(\"FirstIsReadOnly\")\r\n );\r\n arContractArticleIdp1.rightButtons.push(addRowButton);\r\n \r\n let addRowButton2 = new UIButton(\"Добавить\",\r\n async () => {\r\n if (!this.IsContractPartnersChecked(card))\r\n {\r\n await showError(`Для добавления статей БК в табличной части участники процесса должны быть выполнены следующие условия:\\n\\r\r\n 1. минимум две стороны с ролями покупатель и продавец\\n\\r\r\n 2. одна сторона должна быть автоматизирована`);\r\n \r\n return;\r\n }\r\n \r\n this.numbertab=2; \r\n await arContractArticleIdpControl.addRow();\r\n //await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card); \r\n await this.RecalcAmountByPartner(context.model.card);\r\n this.numbertab=0;\r\n }, \r\n null, \r\n () => addButtonEnabled(\"SecondIsReadOnly\")\r\n );\r\n arContractArticleIdp2.rightButtons.push(addRowButton2);\r\n \r\n let removeRowButton = new UIButton(\"Удалить\",\r\n async () => { \r\n if(arContractArticleIdp1.selectedRow!=null) \r\n {\r\n if(!this.IsArticleRowReadonlyAfterTransferToUS(arContractArticleIdp1.selectedRow?.row!, card)){\r\n let row = arContractArticleIdpControl.rows.find(x => x.rowId === arContractArticleIdp1.selectedRow?.rowId);\r\n if(row!=null)\r\n {\r\n row.isSelected=true; \r\n } \r\n await arContractArticleIdpControl.removeRow();\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card); \r\n await this.RecalcAmountByPartner(context.model.card); \r\n }\r\n else{\r\n showError(\"Нельзя удалить строку в документе, переведенном в УС\");\r\n }\r\n }\r\n },\r\n null,\r\n () => deleteButtonEnabled(\"FirstIsReadOnly\", arContractArticleIdp1)\r\n );\r\n arContractArticleIdp1.rightButtons.push(removeRowButton);\r\n \r\n let removeRowButton2 = new UIButton(\"Удалить\",\r\n async () => {\r\n if(arContractArticleIdp2.selectedRow!=null) \r\n {\r\n if(!this.IsArticleRowReadonlyAfterTransferToUS(arContractArticleIdp2.selectedRow?.row!, card)){\r\n let row = arContractArticleIdpControl.rows.find(x => x.rowId === arContractArticleIdp2.selectedRow?.rowId);\r\n if(row!=null)\r\n {\r\n row.isSelected=true; \r\n } \r\n await arContractArticleIdpControl.removeRow();\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card); \r\n await this.RecalcAmountByPartner(context.model.card); \r\n }\r\n else{\r\n showError(\"Нельзя удалить строку в документе, переведенном в УС\");\r\n }\r\n } \r\n },\r\n null,\r\n () => deleteButtonEnabled(\"SecondIsReadOnly\", arContractArticleIdp2)\r\n );\r\n arContractArticleIdp2.rightButtons.push(removeRowButton2);\r\n }\r\n \r\n arContractArticleIdp1.rowInvoked.add(async e=>{\r\n // событие открытия записи\r\n if(e.action==GridRowAction.Opening){\r\n // отменяем открытие формы редактирования\r\n e.cancel=true;\r\n let row = arContractArticleIdpControl.rows.find(x => x.rowId === e.row.rowId);\r\n if(row != null){\r\n await arContractArticleIdpControl.editRow(row); \r\n }\r\n\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card);\r\n await this.RecalcAmountByPartner(context.model.card); \r\n }\r\n });\r\n\r\n arContractArticleIdp2.rowInvoked.add(async e=>{\r\n // событие открытия записи\r\n if(e.action==GridRowAction.Opening){\r\n // отменяем открытие формы редактирования\r\n e.cancel=true;\r\n let row = arContractArticleIdpControl.rows.find(x => x.rowId === e.row.rowId);\r\n if(row != null){\r\n await arContractArticleIdpControl.editRow(row); \r\n }\r\n\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card); \r\n await this.RecalcAmountByPartner(context.model.card); \r\n }\r\n });\r\n\r\n arContractArticleIdpInitial1.rowInvoked.add(async e=>{\r\n // событие открытия записи\r\n if(e.action==GridRowAction.Opening){\r\n // отменяем открытие формы редактирования\r\n e.cancel=true;\r\n let row = arContractArticleIdpInitial.rows.find(x => x.rowId === e.row.rowId);\r\n if(row != null){\r\n await arContractArticleIdpInitial.editRow(row); \r\n } \r\n }\r\n });\r\n\r\n arContractArticleIdpInitial2.rowInvoked.add(async e=>{\r\n // событие открытия записи\r\n if(e.action==GridRowAction.Opening){\r\n e.cancel=true;\r\n let row = arContractArticleIdpInitial.rows.find(x => x.rowId === e.row.rowId);\r\n if(row!=null)\r\n {\r\n await arContractArticleIdpInitial.editRow(row); \r\n } \r\n }\r\n });\r\n\r\n var ChangeArticleIDP1 = context.model.controls.get('ChangeArticleIDP1');\r\n if (ChangeArticleIDP1 != null && arContractsUser != null) {\r\n var Button = ChangeArticleIDP1 as ButtonViewModel;\r\n let contractKindID = arContractsUser.fields.tryGetField('ContractKindID');\r\n if ((contractKindID != null && Guid.equals(contractKindID.$value, TessaArContractKinds.ContractKindTessaID)) \r\n || tryGetFromInfo(card.info, \"FirstIsReadOnly\", false)){\r\n Button.controlVisibility = Visibility.Collapsed;\r\n }\r\n else {\r\n Button.onClick = async () => {\r\n\r\n if (arContractsUser == null)\r\n return;\r\n\r\n let parentCardID = arContractsUser.fields.tryGet('ParentCardID');\r\n if (parentCardID == null) {\r\n showError(\"Должен быть указан родительский договор\");\r\n }\r\n\r\n let docDate = arContractsUser.fields.tryGet('DocDate');\r\n if (docDate == null) {\r\n showError(\"Должна быть указана дата документа\");\r\n }\r\n\r\n if (parentCardID == null || docDate == null) {\r\n return;\r\n }\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArGetMostRecentDocumentDateFromTheLinked;\r\n request.info[\"ParentCardID\"] = createTypedField(parentCardID, DotNetType.Guid);\r\n request.info[\"DocDate\"] = createTypedField(docDate, DotNetType.DateTime);\r\n\r\n let response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n await showMessage(response.validationResult.build().toString());\r\n }\r\n\r\n await this.AddChangeArticleLogicAsync(context);\r\n };\r\n }\r\n }\r\n\r\n var ChangeArticleIDP2 = context.model.controls.get('ChangeArticleIDP2');\r\n if (ChangeArticleIDP2!=null && arContractsUser!=null)\r\n {\r\n var Button = ChangeArticleIDP2 as ButtonViewModel;\r\n let contractKindID = arContractsUser.fields.tryGetField('ContractKindID'); \r\n if ((contractKindID!=null && Guid.equals(contractKindID.$value, TessaArContractKinds.ContractKindTessaID))\r\n || tryGetFromInfo(card.info, \"SecondIsReadOnly\", false)) //Договор\r\n {\r\n Button.controlVisibility = Visibility.Collapsed;\r\n } \r\n else\r\n {\r\n Button.onClick = async () => {\r\n if(arContractsUser!=null && arContractsUser.fields.tryGetField('ParentCardID')==null)\r\n {\r\n showError(\"Должен быть указан родительский договор\");\r\n return;\r\n }\r\n else\r\n {\r\n await this.AddChangeArticleLogicAsync(context); \r\n }\r\n }; \r\n }\r\n }\r\n }\r\n\r\n private IsContractPartnersChecked(card: Card) : boolean {\r\n let acp = card.sections.tryGet(\"ArContractPartners\")\r\n if (!acp)\r\n {\r\n return false;\r\n }\r\n\r\n let arContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n let contractKindID = arContractsUser!.fields.tryGet(\"ContractKindID\");\r\n if (arContractsUser && contractKindID && contractKindID == TessaArContractKinds.AssignmentKindTessaID)\r\n {\r\n return true;\r\n }\r\n\r\n let isHasBuyer = acp.rows.some(_ => _.get(\"RoleID\") == 0);\r\n let isHasSeller = acp.rows.some(_ => _.get(\"RoleID\") == 1);\r\n let isHasAutomated = acp.rows.some(_ => _.get(\"PartnerAutomated\"));\r\n if (isHasBuyer && isHasSeller && isHasAutomated)\r\n {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private CheckVisibilityTabsArticle(context: ICardUIExtensionContext, card: Card)\r\n {\r\n if(context==null) return; \r\n let articlesBlock = context.model.blocks.get(\"ArticlesBlock\");\r\n let arContractArticleIdp = context.model.controls.get('ContractArticleIdp');\r\n let ContractArticleIdpInitial = context.model.controls.get('ContractArticleIdpVirtualNew');\r\n let ControlInitialAmountIDP = context.model.controls.get('ControlInitialAmountIDP');\r\n let ChangeArticleIDP = context.model.controls.get('ChangeArticleIDP');\r\n \r\n if(arContractArticleIdp && ContractArticleIdpInitial && ControlInitialAmountIDP && ChangeArticleIDP)\r\n { \r\n arContractArticleIdp.controlVisibility = Visibility.Hidden;\r\n ContractArticleIdpInitial.controlVisibility = Visibility.Hidden;\r\n ControlInitialAmountIDP.controlVisibility = Visibility.Hidden; \r\n ChangeArticleIDP.controlVisibility = Visibility.Hidden; \r\n }\r\n\r\n //Удалим все вкладки\r\n (this.tabs.tabs as IFormViewModel[]).splice(0,2);\r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\"); \r\n if (!ArContractsUser)\r\n {\r\n return;\r\n }\r\n let ArContractPartners = card.sections.tryGet(\"ArContractPartners\"); \r\n let FirstPartnerExternalID = ArContractsUser.fields.tryGetField('FirstPartnerExternalID');\r\n let SecondPartnerExternalID = ArContractsUser.fields.tryGetField('SecondPartnerExternalID');\r\n let cnt = 0;\r\n if(FirstPartnerExternalID!=null || SecondPartnerExternalID!=null)\r\n { \r\n if(FirstPartnerExternalID!=null)\r\n {\r\n if(ArContractPartners != null)\r\n {\r\n let temp = ArContractPartners.rows.find(x=> \r\n x.get(\"RoleID\")!=null\r\n && (x.get(\"RoleID\") === 1 || x.get(\"RoleID\") === 3)\r\n && x.get(\"PartnerExternalID\")!=null\r\n && x.get(\"PartnerExternalID\") === FirstPartnerExternalID?.$value\r\n );\r\n card.info[\"FirstIsReadOnly\"] = temp != null;\r\n }\r\n this.copy[0].tabCaption = ArContractsUser.fields.get('FirstPartnerName');\r\n (this.tabs.tabs as IFormViewModel[]).push(this.copy[0]);\r\n this.tabs.selectedTab = this.tabs.tabs[cnt]; \r\n cnt++;\r\n }\r\n if(SecondPartnerExternalID!=null)\r\n {\r\n if(ArContractPartners != null)\r\n {\r\n let temp = ArContractPartners.rows.find(x=> \r\n x.get(\"RoleID\")!=null\r\n && (x.get(\"RoleID\") === 1 || x.get(\"RoleID\") === 3)\r\n && x.get(\"PartnerExternalID\")!=null\r\n && x.get(\"PartnerExternalID\") === SecondPartnerExternalID?.$value\r\n );\r\n card.info[\"SecondIsReadOnly\"] = temp != null;\r\n }\r\n (this.tabs.tabs as IFormViewModel[]).push(this.copy[1]);\r\n this.tabs.tabs[cnt].tabCaption = ArContractsUser.fields.get('SecondPartnerName');\r\n this.tabs.selectedTab = this.tabs.tabs[cnt];\r\n cnt++;\r\n }\r\n this.tabs.controlVisibility = Visibility.Visible;\r\n if (articlesBlock)\r\n articlesBlock.blockVisibility = Visibility.Visible;\r\n \r\n } else\r\n {\r\n this.tabs.controlVisibility = Visibility.Collapsed; \r\n if (articlesBlock)\r\n articlesBlock.blockVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n private async ReargeArticleIDP(context: ICardUIExtensionContext, card: Card, messageVisibility : boolean = true)\r\n {\r\n let rows = context.model.card.sections.tryGet('ArContractArticleIdpInitial')!.rows; \r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n let ArContractArticleIdpForPartner1 = context.model.card.sections.tryGet('ArContractArticleIdpForPartner1');\r\n let ArContractArticleIdpForPartner2 = context.model.card.sections.tryGet('ArContractArticleIdpForPartner2');\r\n if(rows == null || ArContractsUser == null || ArContractArticleIdpForPartner1 == null || ArContractArticleIdpForPartner2 == null) {\r\n return false;\r\n }\r\n\r\n let FirstPartnerExternalID = ArContractsUser.fields.tryGetField('FirstPartnerExternalID');\r\n let SecondPartnerExternalID = ArContractsUser.fields.tryGetField('SecondPartnerExternalID');\r\n\r\n ArContractArticleIdpForPartner1.rows.clear();\r\n ArContractArticleIdpForPartner2.rows.clear();\r\n\r\n let articleIdpForPartner1Counter = 0;\r\n let articleIdpForPartner2Counter = 0;\r\n\r\n runInAction(async() => {\r\n rows.forEach(row =>\r\n {\r\n if (row.state == CardRowState.Deleted)\r\n {\r\n return;\r\n }\r\n \r\n if(FirstPartnerExternalID!=null && row.get(\"PartnerExternalID\")==FirstPartnerExternalID.$value)\r\n {\r\n let newRow = context.model.card.sections.tryGet('ArContractArticleIdpForPartner1')!.rows.add(); \r\n newRow.setFrom(row);\r\n articleIdpForPartner1Counter++;\r\n }\r\n\r\n if(SecondPartnerExternalID!=null && row.get(\"PartnerExternalID\")==SecondPartnerExternalID.$value)\r\n {\r\n let newRow = context.model.card.sections.tryGet('ArContractArticleIdpForPartner2')!.rows.add(); \r\n newRow.setFrom(row);\r\n articleIdpForPartner2Counter++;\r\n }\r\n });\r\n });\r\n\r\n return await this.SetArticlesBlockVisiblityAsync(context, articleIdpForPartner1Counter, articleIdpForPartner2Counter, messageVisibility);\r\n }\r\n\r\n private async ReargeCurrentArticleIDP(context: ICardUIExtensionContext, card: Card, messageVisibility : boolean = true)\r\n {\r\n let rows = context.model.card.sections.tryGet('ArContractArticleIdp')!.rows; \r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n let ArContractCurrentArticleIdpForPartner1 = context.model.card.sections.tryGet('ArContractCurrentArticleIdpForPartner1');\r\n let ArContractCurrentArticleIdpForPartner2 = context.model.card.sections.tryGet('ArContractCurrentArticleIdpForPartner2');\r\n if(rows == null || ArContractsUser == null || ArContractCurrentArticleIdpForPartner1 == null || ArContractCurrentArticleIdpForPartner2 == null) \r\n {\r\n return false;\r\n }\r\n \r\n let FirstPartnerExternalID = ArContractsUser.fields.tryGetField('FirstPartnerExternalID');\r\n let SecondPartnerExternalID = ArContractsUser.fields.tryGetField('SecondPartnerExternalID');\r\n\r\n ArContractCurrentArticleIdpForPartner1.rows.clear();\r\n ArContractCurrentArticleIdpForPartner2.rows.clear();\r\n\r\n let articleIdpForPartner1Counter = 0;\r\n let articleIdpForPartner2Counter = 0;\r\n runInAction(async() => {\r\n rows.forEach(row =>\r\n {\r\n if (row.state == CardRowState.Deleted)\r\n {\r\n return;\r\n }\r\n\r\n if(FirstPartnerExternalID!=null && row.tryGet(\"PartnerExternalID\")==FirstPartnerExternalID.$value)\r\n {\r\n let newRow = ArContractCurrentArticleIdpForPartner1!.rows.add(); \r\n newRow.setFrom(row);\r\n articleIdpForPartner1Counter++;\r\n }\r\n\r\n if(SecondPartnerExternalID!=null && row.tryGet(\"PartnerExternalID\")==SecondPartnerExternalID.$value)\r\n {\r\n let newRow = ArContractCurrentArticleIdpForPartner2!.rows.add(); \r\n newRow.setFrom(row);\r\n articleIdpForPartner2Counter++;\r\n }\r\n });\r\n });\r\n\r\n return await this.SetArticlesBlockVisiblityAsync(context, articleIdpForPartner1Counter, articleIdpForPartner2Counter, messageVisibility);\r\n }\r\n\r\n private async SetArticlesBlockVisiblityAsync(context: ICardUIExtensionContext, articleIdpForPartner1Counter, articleIdpForPartner2Counter, messageVisibility : boolean = true)\r\n {\r\n if (messageVisibility && (articleIdpForPartner1Counter > 500 || articleIdpForPartner2Counter > 500))\r\n {\r\n let answer = await showConfirmWithCancel(\"В карточке больше 500 статей. Хотите загрузить статьи? Внимание, загрузка статей может занять большое количество времени!\");\r\n if (!answer)\r\n {\r\n var articlesBlock = context.model.blocks[\"ArticlesBlock\"];\r\n\r\n if (articlesBlock.BlockVisibility != Visibility.Collapsed)\r\n {\r\n articlesBlock.SetBlockVisibility(false, true);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private async ClearArticleIDPbyPartner(context : ICardUIExtensionContext, card : Card ,withtab : boolean = true)\r\n {\r\n let arContractArticleIdp = context.model.controls.get('ContractArticleIdp') as GridViewModel;\r\n let arContractArticleIdpInitial = card.sections.tryGet(\"ArContractArticleIdpInitial\");\r\n \r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\"); \r\n if(ArContractsUser==null || arContractArticleIdpInitial==null) return;\r\n let ExtID;\r\n \r\n if (this.partnerExtID!=null && ArContractsUser.fields.get(\"FirstPartnerExternalID\") == this.partnerExtID)\r\n {\r\n ExtID = ArContractsUser!.fields.get(\"FirstPartnerExternalID\");\r\n await arContractArticleIdpInitial.rows.forEach(async row =>{\r\n if(row.get('PartnerExternalID')!=null && row.get('PartnerExternalID')==ExtID)\r\n {\r\n let row2 = arContractArticleIdp.rows.find(x => x.rowId === row.rowId);\r\n if(row2!=null)\r\n {\r\n row2.isSelected=true; \r\n await arContractArticleIdp.removeRow(); \r\n } \r\n }\r\n }); \r\n if (withtab)\r\n {\r\n ArContractsUser.fields.set('FirstPartnerID',null);\r\n ArContractsUser.fields.set('FirstPartnerExternalID',null);\r\n ArContractsUser.fields.set('FirstPartnerName',null);\r\n \r\n this.CheckVisibilityTabsArticle(context,card);\r\n }\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card);\r\n await this.RecalcAmountByPartner(context.model.card); \r\n }\r\n if (this.partnerExtID!=null && ArContractsUser.fields.get(\"SecondPartnerExternalID\") == this.partnerExtID)\r\n {\r\n ExtID = ArContractsUser.fields.get(\"SecondPartnerExternalID\");\r\n await arContractArticleIdpInitial.rows.forEach(async row =>{\r\n if(row.get('PartnerExternalID')!=null && row.get('PartnerExternalID')==ExtID)\r\n {\r\n let row2 = arContractArticleIdp.rows.find(x => x.rowId === row.rowId);\r\n if(row2!=null)\r\n {\r\n row2.isSelected=true; \r\n } \r\n await arContractArticleIdp.removeRow();\r\n }\r\n }); \r\n if (withtab)\r\n {\r\n ArContractsUser.fields.set('SecondPartnerID',null);\r\n ArContractsUser.fields.set('SecondPartnerExternalID',null);\r\n ArContractsUser.fields.set('SecondPartnerName',null);\r\n \r\n this.CheckVisibilityTabsArticle(context,card);\r\n }\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card);\r\n await this.RecalcAmountByPartner(context.model.card); \r\n } \r\n }\r\n private async AddTabArticle(context : ICardUIExtensionContext, card : Card ,row : CardRow)\r\n {\r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\"); \r\n if(ArContractsUser!.fields.get(\"FirstPartnerExternalID\")==null)\r\n {\r\n ArContractsUser!.fields.set(\"FirstPartnerID\",row.get(\"PartnerID\"),DotNetType.Guid);\r\n ArContractsUser!.fields.set(\"FirstPartnerExternalID\",row.get(\"PartnerExternalID\"),DotNetType.Int64);\r\n ArContractsUser!.fields.set(\"FirstPartnerName\",row.get(\"PartnerName\"),DotNetType.String); \r\n }\r\n else\r\n {\r\n if(ArContractsUser!.fields.get(\"SecondPartnerExternalID\")==null)\r\n {\r\n ArContractsUser!.fields.set(\"SecondPartnerID\",row.get(\"PartnerID\"),DotNetType.Guid);\r\n ArContractsUser!.fields.set(\"SecondPartnerExternalID\",row.get(\"PartnerExternalID\"),DotNetType.Int64);\r\n ArContractsUser!.fields.set(\"SecondPartnerName\",row.get(\"PartnerName\"),DotNetType.String); \r\n }\r\n }\r\n this.CheckVisibilityTabsArticle(context,card);\r\n }\r\n \r\n private async ReplacePartnerRelatedInArticleAsync(context : ICardUIExtensionContext, card : Card ,name : string, ExtID : string = \"\")\r\n { \r\n let ArContractArticleIdpInitial = card.sections.tryGet(\"ArContractArticleIdpInitial\");\r\n let ArContractArticleIdp = card.sections.tryGet(\"ArContractArticleIdp\");\r\n\r\n ArContractArticleIdp?.rows.forEach(async row =>{\r\n if (row.state != CardRowState.Deleted)\r\n {\r\n if(row.get('PartnerRelatedExternalID')!=null && row.get('PartnerRelatedExternalID')== this.partnerExtID )\r\n {\r\n row.set(\"PartnerRelatedExternalID\",ExtID,DotNetType.Int64);\r\n row.set(\"PartnerRelatedName\",name,DotNetType.String);\r\n }\r\n }\r\n }); \r\n ArContractArticleIdpInitial?.rows.forEach(async row =>{\r\n if (row.state != CardRowState.Deleted)\r\n {\r\n if(row.get('PartnerRelatedExternalID')!=null && row.get('PartnerRelatedExternalID')==this.partnerExtID)\r\n {\r\n row.set(\"PartnerRelatedExternalID\",ExtID,DotNetType.Int64);\r\n row.set(\"PartnerRelatedName\",name,DotNetType.String);\r\n }\r\n }\r\n });\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card); \r\n }\r\n\r\n private async ReplacePartnerInEdoAsync(card : Card ,name : string, ExtID : string = \"\")\r\n { \r\n let ArEdo = card.sections.tryGet(\"ArEdoStatus\");\r\n \r\n\r\n ArEdo?.rows.forEach(async row =>{\r\n if (row.state != CardRowState.Deleted)\r\n {\r\n if(row.get('Contractor1ExternalID')!=null && row.get('Contractor1ExternalID')== this.partnerExtID )\r\n {\r\n row.set(\"Contractor1ExternalID\",ExtID,DotNetType.Int64);\r\n row.set(\"Contractor1Name\",name,DotNetType.String);\r\n }\r\n if(row.get('Contractor2ExternalID')!=null && row.get('Contractor2ExternalID')== this.partnerExtID )\r\n {\r\n row.set(\"Contractor2ExternalID\",ExtID,DotNetType.Int64);\r\n row.set(\"Contractor2Name\",name,DotNetType.String);\r\n }\r\n }\r\n }); \r\n \r\n }\r\n\r\n private async ReplaceArticleIDPbyPartner(context : ICardUIExtensionContext, card : Card ,name : string, ExtID : string = \"\")\r\n {\r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\"); \r\n \r\n if(this.partnerExtID!=null && ArContractsUser!.fields.get(\"FirstPartnerExternalID\") != this.partnerExtID && ArContractsUser!.fields.get(\"SecondPartnerExternalID\") != this.partnerExtID)\r\n return;\r\n \r\n let ArContractArticleIdp = card.sections.tryGet(\"ArContractArticleIdpInitial\");\r\n let ArContractArticleIdpInitial = card.sections.tryGet(\"ArContractArticleIdp\");\r\n\r\n ArContractArticleIdp?.rows.forEach(async row =>{\r\n if (row.state != CardRowState.Deleted)\r\n {\r\n if(row.get('PartnerExternalID')!=null && row.get('PartnerExternalID')== this.partnerExtID )\r\n {\r\n row.set(\"PartnerExternalID\",ExtID,DotNetType.Int64);\r\n row.set(\"PartnerName\",name,DotNetType.String);\r\n }\r\n }\r\n }); \r\n ArContractArticleIdpInitial?.rows.forEach(async row =>{\r\n if (row.state != CardRowState.Deleted)\r\n {\r\n if(row.get('PartnerExternalID')!=null && row.get('PartnerExternalID')==this.partnerExtID)\r\n {\r\n row.set(\"PartnerExternalID\",ExtID,DotNetType.Int64);\r\n row.set(\"PartnerName\",name,DotNetType.String);\r\n }\r\n }\r\n });\r\n let currentTab = this.tabs.tabs.find(x => x.tabCaption==this.partnerName)\r\n if(currentTab!=null)\r\n {\r\n currentTab.tabCaption=name;\r\n }\r\n\r\n if(ArContractsUser!.fields.get(\"FirstPartnerExternalID\")==this.partnerExtID)\r\n { \r\n ArContractsUser!.fields.set(\"FirstPartnerExternalID\",ExtID,DotNetType.Int64);\r\n ArContractsUser!.fields.set(\"FirstPartnerName\",name,DotNetType.String); \r\n }\r\n else\r\n {\r\n if(ArContractsUser!.fields.get(\"SecondPartnerExternalID\")==this.partnerExtID)\r\n { \r\n ArContractsUser!.fields.set(\"SecondPartnerExternalID\",ExtID,DotNetType.Int64);\r\n ArContractsUser!.fields.set(\"SecondPartnerName\",name,DotNetType.String); \r\n }\r\n }\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card); \r\n await this.RecalcAmountByPartner(context.model.card); \r\n }\r\n private async CheckClearTabArticle(context : ICardUIExtensionContext, card : Card ,myrow : CardRow)\r\n { \r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\"); \r\n\r\n if(myrow.tryGet('RoleID')!=null && myrow.tryGet('RoleID')!=this.partnerRoleID && this.partnerRoleID!=null)\r\n {\r\n await this.ClearArticleIDPbyPartner(context, card, false);\r\n }\r\n if(myrow.tryGet('PartnerExternalID') && myrow.tryGet('PartnerExternalID') != this.partnerExtID && this.partnerExtID!=null)\r\n {\r\n await this.ReplacePartnerRelatedInArticleAsync(context, card, myrow.get(\"PartnerName\"),myrow.get(\"PartnerExternalID\"));\r\n await this.ReplacePartnerInEdoAsync(card, myrow.get(\"PartnerName\"),myrow.get(\"PartnerExternalID\"));\r\n let isAutomated = myrow.tryGet('PartnerAutomated');\r\n if(isAutomated!=null)\r\n {\r\n if(isAutomated!=true)\r\n {\r\n await this.ClearArticleIDPbyPartner(context, card);\r\n }else\r\n {\r\n if( ArContractsUser!.fields.get(\"FirstPartnerExternalID\") == this.partnerExtID || ArContractsUser!.fields.get(\"SecondPartnerExternalID\") == this.partnerExtID)\r\n {\r\n await this.ReplaceArticleIDPbyPartner(context, card, myrow.get(\"PartnerName\"),myrow.get(\"PartnerExternalID\"));\r\n } else\r\n {\r\n await this.AddTabArticle(context, card, myrow);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(ArContractsUser!.fields.get(\"FirstPartnerExternalID\") == this.partnerExtID && myrow.tryGet(\"PartnerAutomated\") == true)\r\n {\r\n ArContractsUser!.fields.set(\"FirstPartnerID\",myrow.get(\"PartnerID\"),DotNetType.Guid);\r\n ArContractsUser!.fields.set(\"FirstPartnerExternalID\",myrow.get(\"PartnerExternalID\"),DotNetType.Int64);\r\n ArContractsUser!.fields.set(\"FirstPartnerName\",myrow.get(\"PartnerName\"),DotNetType.String); \r\n } else if(ArContractsUser!.fields.get(\"SecondPartnerExternalID\") == this.partnerExtID && myrow.tryGet(\"PartnerAutomated\") == true)\r\n {\r\n ArContractsUser!.fields.set(\"SecondPartnerID\",myrow.get(\"PartnerID\"),DotNetType.Guid);\r\n ArContractsUser!.fields.set(\"SecondPartnerExternalID\",myrow.get(\"PartnerExternalID\"),DotNetType.Int64);\r\n ArContractsUser!.fields.set(\"SecondPartnerName\",myrow.get(\"PartnerName\"),DotNetType.String); \r\n }\r\n\r\n // Проверим доступность редактирования\r\n let ArContractPartners = card.sections.tryGet(\"ArContractPartners\"); \r\n let FirstPartnerExternalID = ArContractsUser!.fields.tryGetField('FirstPartnerExternalID');\r\n if(FirstPartnerExternalID!=null)\r\n {\r\n let temp = ArContractPartners!.rows.find(x=> \r\n x.get(\"RoleID\")!=null\r\n && (x.get(\"RoleID\") === 1 || x.get(\"RoleID\") === 3)\r\n && x.get(\"PartnerExternalID\")!=null\r\n && x.get(\"PartnerExternalID\") === FirstPartnerExternalID?.$value\r\n );\r\n card.info[\"FirstIsReadOnly\"] = temp != null; \r\n }\r\n\r\n let SecondPartnerExternalID = ArContractsUser!.fields.tryGetField('SecondPartnerExternalID');\r\n if(SecondPartnerExternalID!=null)\r\n {\r\n let temp = ArContractPartners!.rows.find(x=> \r\n x.get(\"RoleID\")!=null\r\n && (x.get(\"RoleID\") === 1 || x.get(\"RoleID\") === 3)\r\n && x.get(\"PartnerExternalID\")!=null\r\n && x.get(\"PartnerExternalID\") === SecondPartnerExternalID?.$value\r\n );\r\n card.info[\"SecondIsReadOnly\"] = temp != null; \r\n } \r\n }\r\n\r\n private SetPartnerInArticle(card : Card, myrow : CardRow)\r\n { \r\n if(this.numbertab==1)\r\n {\r\n myrow.set('PartnerID',card.sections.tryGet('ArContractsUser')?.fields.get('FirstPartnerID'),DotNetType.Guid);\r\n myrow.set('PartnerExternalID',card.sections.tryGet('ArContractsUser')?.fields.get('FirstPartnerExternalID'),DotNetType.Int64);\r\n myrow.set('PartnerName',card.sections.tryGet('ArContractsUser')?.fields.get('FirstPartnerName'),DotNetType.String);\r\n }\r\n if(this.numbertab==2)\r\n {\r\n myrow.set('PartnerID',card.sections.tryGet('ArContractsUser')?.fields.get('SecondPartnerID'),DotNetType.Guid);\r\n myrow.set('PartnerExternalID',card.sections.tryGet('ArContractsUser')?.fields.get('SecondPartnerExternalID'),DotNetType.Int64);\r\n myrow.set('PartnerName',card.sections.tryGet('ArContractsUser')?.fields.get('SecondPartnerName'),DotNetType.String);\r\n } \r\n\r\n let partnersList = card.sections.tryGet(\"ArContractPartners\");\r\n if (isNullOrUndefined(partnersList)) return;\r\n \r\n let actualPartners = partnersList.rows.filter(\r\n r => r.state != CardRowState.Deleted && r.get(\"PartnerExternalID\")!=myrow.get(\"PartnerExternalID\"));\r\n\r\n let acuSection = card.sections.tryGet(\"ArContractsUser\");\r\n let contractKindID = acuSection!.fields.tryGet(\"ContractKindID\");\r\n \r\n if (contractKindID != null \r\n && (Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID)))\r\n {\r\n actualPartners = partnersList.rows.filter(\r\n r => r.state != CardRowState.Deleted && r.get(\"PartnerExternalID\")!=myrow.get(\"PartnerExternalID\") && r.get(\"RoleID\") != 2);\r\n }\r\n \r\n if(actualPartners.length == 1)\r\n {\r\n let row =actualPartners[0];\r\n if(row.get('PartnerExternalID')!=null)\r\n {\r\n myrow.set('PartnerRelatedID',row.get('PartnerID'),DotNetType.Guid);\r\n myrow.set('PartnerRelatedExternalID',row.get('PartnerExternalID'),DotNetType.Int64);\r\n myrow.set('PartnerRelatedName',row.get('PartnerName'),DotNetType.String);\r\n }\r\n } \r\n \r\n }\r\n \r\n private GetSum(card : Card, section : CardSection, typeid: number | null = null, isDelta: boolean | null = null)\r\n {\r\n let sum : number = 0.0; \r\n section.rows.forEach(row => {\r\n let amount: string | null = row.tryGet('Amount') as string | null;\r\n if (amount != null && row.state!=CardRowState.Deleted)\r\n {\r\n if (typeid == null || typeid == row.tryGet(\"TypeID\"))\r\n {\r\n sum = sum + Number.parseFloat(amount);\r\n }\r\n }\r\n if(isDelta == true && typeid == 0 && row.tryGet(\"TypeID\") == 0)\r\n {\r\n if(row.tryGet(\"ChangeArticleRowID\") && row.tryGet(\"ChangeArticleRowID\") != null && card.info.MainArticles!=null)\r\n {\r\n for (let mainRow of card.info.MainArticles) {\r\n if (mainRow.RowID == null ||mainRow.Amount == null){\r\n continue;\r\n }\r\n\r\n if(mainRow.RowID.$value == row.tryGet(\"ChangeArticleRowID\"))\r\n sum-=mainRow.Amount.$value;\r\n }\r\n }\r\n }\r\n });\r\n return sum;\r\n }\r\n\r\n private async CalculateAmountNotCRMContractAsync(card : Card, fieldName: string)\r\n {\r\n let sum : number = 0.0; \r\n let partnerSection = card.sections.tryGet('ArContractPartners');\r\n if (!partnerSection) return sum;\r\n\r\n let partnerRows = partnerSection.rows;\r\n let seller = partnerRows.find(x => x.tryGetField(\"RoleID\")!.$value == 1);\r\n let byer = partnerRows.find(x => x.tryGetField(\"RoleID\")!.$value == 0);\r\n let cedent = partnerRows.find(x => x.tryGetField(\"RoleID\")!.$value == 3);\r\n let assignee = partnerRows.find(x => x.tryGetField(\"RoleID\")!.$value == 4);\r\n\r\n if(seller && byer)\r\n {\r\n return await ArContractSharedHelper.GetNotCrmArticlesSumAmountAsync(card, seller, byer, fieldName);\r\n }\r\n\r\n if(cedent && assignee)\r\n {\r\n return await ArContractSharedHelper.GetNotCrmArticlesSumAmountAsync(card, cedent, assignee, fieldName); \r\n }\r\n\r\n return sum;\r\n }\r\n\r\n private async CalculateAmountCRMContractAsync(card : Card, fieldName: string)\r\n {\r\n let sum : number = 0.0; \r\n let partnerSection = card.sections.tryGet('ArContractPartners');\r\n if (!partnerSection) return sum;\r\n\r\n let partnerRows = partnerSection.rows;\r\n let seller = partnerRows.find(x => x.tryGetField(\"RoleID\")!.$value == 1);\r\n let byer = partnerRows.find(x => x.tryGetField(\"RoleID\")!.$value == 0);\r\n if (!seller || !byer) return sum; \r\n let sellerExtID = seller?.tryGetField(\"PartnerExternalID\")!.$value;\r\n let sellerEverBeenInPerimeter = seller != null &&\r\n (await PkClientHelper.CheckPartnerInPerimeterAsync(sellerExtID, PkAccreditationPerimeters.GkPIKPerimeter, true)); \r\n return await ArContractSharedHelper.GetCrmCurrentArticlesSumAmountAsync(card, sellerEverBeenInPerimeter, seller, byer, fieldName);\r\n }\r\n\r\n private async RecalcAmountByPartner(card : Card)\r\n { \r\n runInAction(async () => {\r\n let arContractsUser = card.sections.tryGet('ArContractsUser');\r\n let ArContractArticleIdpForPartner1 = card.sections.tryGet('ArContractArticleIdpForPartner1'); \r\n let ArContractCurrentArticleIdpForPartner1 = card.sections.tryGet('ArContractCurrentArticleIdpForPartner1'); \r\n let ArContractArticleIdpForPartner2 = card.sections.tryGet('ArContractArticleIdpForPartner2'); \r\n let ArContractCurrentArticleIdpForPartner2 = card.sections.tryGet('ArContractCurrentArticleIdpForPartner2'); \r\n let ArContractArticleIdp = card.sections.tryGet('ArContractArticleIdp'); \r\n\r\n if (!ArContractArticleIdpForPartner1\r\n || !ArContractCurrentArticleIdpForPartner1\r\n || !ArContractArticleIdpForPartner2 \r\n || !ArContractCurrentArticleIdpForPartner2 \r\n || !ArContractArticleIdp\r\n || !arContractsUser) \r\n {\r\n return;\r\n } \r\n\r\n // по первому\r\n let sum_amount = this.GetSum(card, ArContractArticleIdpForPartner1);\r\n arContractsUser.fields.set('InitialAmountByFirstPartner',sum_amount.toString().replace(',', '.'), DotNetType.Decimal);\r\n let sum_amount2 = this.GetSum(card, ArContractCurrentArticleIdpForPartner1); \r\n arContractsUser.fields.set('FinalAmountByFirstPartner', sum_amount2.toString().replace(',', '.'), DotNetType.Decimal); \r\n arContractsUser.fields.set('ChangeIDPByFirstPartner', (sum_amount2-sum_amount).toString().replace(',', '.'), DotNetType.Decimal); \r\n\r\n // по второму\r\n sum_amount = this.GetSum(card, ArContractArticleIdpForPartner2);\r\n arContractsUser.fields.set('InitialAmountBySecondPartner', sum_amount.toString().replace(',', '.'), DotNetType.Decimal);\r\n sum_amount2 = this.GetSum(card, ArContractCurrentArticleIdpForPartner2);\r\n arContractsUser.fields.set('FinalAmountBySecondPartner', sum_amount2.toString().replace(',', '.'), DotNetType.Decimal); \r\n arContractsUser.fields.set('ChangeIDPBySecondPartner', (sum_amount2-sum_amount).toString().replace(',', '.'), DotNetType.Decimal); \r\n\r\n this.RecalcVirtualAmountByPartner(card);\r\n\r\n // текущие суммы\r\n sum_amount = this.IsCRM(card)\r\n ? await this.CalculateAmountCRMContractAsync(card, \"Amount\")\r\n : await this.CalculateAmountNotCRMContractAsync(card, \"Amount\");\r\n\r\n // сумма текущая в рублях\r\n let sum_amountAll = this.IsCRM(card)\r\n ? await this.CalculateAmountCRMContractAsync(card, \"AmountAll\")\r\n : await this.CalculateAmountNotCRMContractAsync(card, \"AmountAll\");\r\n\r\n arContractsUser.fields.set('AmountCurrent', sum_amount.toString().replace(',', '.'), DotNetType.Decimal);\r\n arContractsUser.fields.set('CurrentSumInRub', sum_amountAll.toString().replace(',', '.'), DotNetType.Decimal);\r\n });\r\n }\r\n \r\n private RecalcVirtualAmountByPartner(card : Card)\r\n {\r\n let arContractsUser = card.sections.tryGet('ArContractsUser');\r\n let arContractVirtual = card.sections.tryGet(\"ArContractVirtual\");\r\n let adcSection = card.sections.tryGet(\"ArDocsConstructor\");\r\n let ArContractArticleIdpForPartner1 = card.sections.tryGet('ArContractArticleIdpForPartner1');\r\n let ArContractArticleIdpForPartner2 = card.sections.tryGet('ArContractArticleIdpForPartner2');\r\n\r\n if (!ArContractArticleIdpForPartner1\r\n || !ArContractArticleIdpForPartner2\r\n || !arContractsUser\r\n || !arContractVirtual\r\n || !adcSection)\r\n {\r\n return;\r\n }\r\n var isHistorical = PkContractUIHelper.HasGuidCrm(card)\r\n || arContractsUser.fields.tryGetField('ExtID') != null\r\n || adcSection.fields.tryGetField('CourtCasePaymentDocGuid1C') != null;\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n\r\n let isDraft = (arContractsUser.fields.tryGet(\"IsDraft\") != null && arContractsUser.fields.tryGet(\"IsDraft\") == true);\r\n let initialAmountOnCreationString: string | null = card.info.ParentCurrentAmmount?.$value as string | null;\r\n if (!isDraft)\r\n {\r\n initialAmountOnCreationString = arContractsUser.fields.tryGet(\"InitialAmountOnCreation\") as string | null;\r\n }\r\n\r\n if (!initialAmountOnCreationString) {\r\n initialAmountOnCreationString = \"0\";\r\n }\r\n\r\n let initialAmountOnCreation: number = Number.parseFloat(initialAmountOnCreationString);\r\n let changeIDPByFirstPartner: number, finalAmountByFirstPartner: number, \r\n changeIDPBySecondPartner: number, finalAmountBySecondPartner: number;\r\n\r\n //Для уступок не считаем\r\n let contractKindID = arContractsUser!.fields.tryGet(\"ContractKindID\");\r\n if (contractKindID != null \r\n && (Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID))) {\r\n changeIDPByFirstPartner = 0;\r\n finalAmountByFirstPartner = initialAmountOnCreation;\r\n\r\n changeIDPBySecondPartner = 0;\r\n finalAmountBySecondPartner = initialAmountOnCreation;\r\n }\r\n else {\r\n if (isDraft) {\r\n changeIDPByFirstPartner = \r\n this.GetSum(card,ArContractArticleIdpForPartner1, 0, true) as number\r\n + this.GetSum(card,ArContractArticleIdpForPartner1, 1, true) as number;\r\n finalAmountByFirstPartner = changeIDPByFirstPartner + initialAmountOnCreation;\r\n\r\n changeIDPBySecondPartner = \r\n this.GetSum(card, ArContractArticleIdpForPartner2, 0, true) as number\r\n + this.GetSum(card, ArContractArticleIdpForPartner2, 1, true) as number;\r\n finalAmountBySecondPartner = changeIDPBySecondPartner + initialAmountOnCreation;\r\n }\r\n else {\r\n changeIDPByFirstPartner = arContractsUser.fields.tryGet(\"FrozenChangeIDPByFirstPartner\", 0) as number;\r\n finalAmountByFirstPartner = arContractsUser.fields.tryGet(\"FrozenFinalAmountByFirstPartner\", 0) as number;\r\n\r\n changeIDPBySecondPartner = arContractsUser.fields.tryGet(\"FrozenChangeIDPBySecondPartner\", 0) as number;\r\n finalAmountBySecondPartner = arContractsUser.fields.tryGet(\"FrozenFinalAmountBySecondPartner\", 0) as number;\r\n }\r\n }\r\n\r\n // по первому\r\n arContractVirtual.fields.set('InitialAmountByFirstPartner', this.toFixedString(initialAmountOnCreation, 2), DotNetType.Decimal);\r\n arContractVirtual.setChanged(\"InitialAmountByFirstPartner\", false);\r\n arContractVirtual.fields.set('ChangeIDPByFirstPartner', this.toFixedString(changeIDPByFirstPartner, 2), DotNetType.Decimal);\r\n arContractVirtual.setChanged(\"ChangeIDPByFirstPartner\", false);\r\n arContractVirtual.fields.set('FinalAmountByFirstPartner', this.toFixedString(finalAmountByFirstPartner, 2), DotNetType.Decimal);\r\n arContractVirtual.setChanged(\"FinalAmountByFirstPartner\", false);\r\n\r\n //по второму\r\n arContractVirtual.fields.set('InitialAmountBySecondPartner', this.toFixedString(initialAmountOnCreation, 2), DotNetType.Decimal);\r\n arContractVirtual.setChanged(\"InitialAmountBySecondPartner\", false);\r\n arContractVirtual.fields.set('ChangeIDPBySecondPartner', this.toFixedString(changeIDPBySecondPartner, 2), DotNetType.Decimal);\r\n arContractVirtual.setChanged(\"ChangeIDPBySecondPartner\", false);\r\n arContractVirtual.fields.set('FinalAmountBySecondPartner', this.toFixedString(finalAmountBySecondPartner, 2), DotNetType.Decimal);\r\n arContractVirtual.setChanged(\"FinalAmountBySecondPartner\", false);\r\n }\r\n\r\n private toFixedString(value: number, fixed: number = 2)\r\n {\r\n return Number(value).toFixed(fixed).replace(',', '.');\r\n }\r\n\r\n /**\r\n * Работа с первоначальными суммами.\r\n */\r\n private WorkWithInitialAmount(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let arContractArticleIdpControl = context.model.controls.get('ContractArticleIdp') as GridViewModel;\r\n let ArContractArticleIdp = card.sections.tryGet(\"ArContractArticleIdpInitial\");\r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\"); \r\n if (!ArContractArticleIdp || !ArContractsUser || !arContractArticleIdpControl)\r\n {\r\n return;\r\n }\r\n arContractArticleIdpControl.rowInvoked.add(async e => {\r\n if (e.action != GridRowAction.Deleting) \r\n { \r\n if (!e.rowModel) return; \r\n \r\n let balanceLimit = e.rowModel.controlsBag.find(x => x.name == \"BalanceLimit\");\r\n let oldAmountWithOutNDS = e.rowModel.controlsBag.find(x => x.name == \"OldAmountWithoutVat\");\r\n let oldAmountAll = e.rowModel.controlsBag.find(x => x.name == \"OldAmount\");\r\n let oldAmountAllInRub = e.rowModel.controlsBag.find(x => x.name == \"OldAmountTotalRUB\");\r\n let isAdminAndTp = context.model.card.info.IsAdminAndTpRole;\r\n\r\n if(isAdminAndTp==null || isAdminAndTp.$value==false){\r\n \r\n if(e.row.get('Balance')==null || e.row.get('Balance')==0)\r\n {\r\n if (balanceLimit) {\r\n balanceLimit.controlVisibility = Visibility.Collapsed;\r\n }\r\n } \r\n\r\n if((e.row.get('OldAmountWithoutVat')==null || e.row.get('OldAmountWithoutVat')==0) && (e.row.get('OldAmount')==null || e.row.get('OldAmount')==0) && (e.row.get('OldAmountInRUB')==null || e.row.get('OldAmountInRUB')==0))\r\n {\r\n if (oldAmountWithOutNDS) {\r\n oldAmountWithOutNDS.controlVisibility = Visibility.Collapsed;\r\n }\r\n \r\n if (oldAmountAll) {\r\n oldAmountAll.controlVisibility = Visibility.Collapsed;\r\n }\r\n \r\n if (oldAmountAllInRub) {\r\n oldAmountAllInRub.controlVisibility = Visibility.Collapsed;\r\n } \r\n } \r\n }\r\n } \r\n if(e.action == GridRowAction.Opening)\r\n {\r\n //Отключим валидацию пока не было редактирования\r\n this.isNeedValidationArticle = false;\r\n }\r\n });\r\n\r\n var isHistorical = ArFileHelper.CheckIsHistorical(card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n \r\n //чтобы не было зацикливания при расчете сумм добавим флаги\r\n let isCalculateAmountWithoutVat = false;\r\n let isCalculateAmount = false;\r\n const a = async (e: CardFieldChangedEventArgs) => \r\n {\r\n if (e == null)\r\n {\r\n return;\r\n }\r\n\r\n const row = e.storage;\r\n //т.к изменяются поля то при закрытии нужна будет валидация\r\n this.isNeedValidationArticle = true;\r\n\r\n if (e.fieldName === \"Amount\"){\r\n let amountAll = this.GetAmountAll(e.fieldValue, context.model.card);\r\n row.set('AmountAll',amountAll.toString().replace(',', '.'), DotNetType.Decimal);\r\n } \r\n if (e.fieldName === \"Amount\"){\r\n if(isCalculateAmount == false)\r\n {\r\n if (e.fieldValue != null) {\r\n let vatRateID;\r\n if ((vatRateID = row.tryGet('VatRateID')) != null) {\r\n if (vatRateID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountDouble\"] = createTypedField(parseFloat(e.fieldValue), DotNetType.Double);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n \r\n const response = await CardService.instance.request(request);\r\n \r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n \r\n if (response.info) {\r\n isCalculateAmountWithoutVat = true;\r\n row.set('AmountWithoutVat', createTypedField(response.info.AmountWithoutVat.$value?.toString() ?? null , DotNetType.Decimal));\r\n }\r\n }\r\n }\r\n }else\r\n {\r\n row.set('AmountWithoutVat',null);\r\n }\r\n } \r\n isCalculateAmount = false; \r\n } \r\n if (e.fieldName === \"AmountWithoutVat\"){\r\n if(isCalculateAmountWithoutVat == false)\r\n {\r\n if (e.fieldValue != null) {\r\n let vatRateID;\r\n if ((vatRateID = row.tryGet('VatRateID')) != null) {\r\n if (vatRateID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountWithoutVat\"] = createTypedField(e.fieldValue.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n \r\n const response = await CardService.instance.request(request);\r\n \r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n \r\n if (response.info) {\r\n isCalculateAmount = true;\r\n row.set('Amount',response.info.Amount.$value?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n }\r\n }\r\n }else\r\n {\r\n row.set('Amount',null);\r\n } \r\n } \r\n isCalculateAmountWithoutVat = false; \r\n } \r\n if (e.fieldName === \"VatRateID\"){\r\n if (e.fieldValue !== null) {\r\n let Amount = row.tryGet('Amount');\r\n let AmountWithoutVat = row.tryGet('AmountWithoutVat');\r\n \r\n if (Amount != null)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountDouble\"] = createTypedField(parseFloat(Amount), DotNetType.Double);\r\n request.info[\"VATRateID\"] = createTypedField(e.fieldValue, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n isCalculateAmountWithoutVat = true;\r\n row.set('AmountWithoutVat', createTypedField(response.info.AmountWithoutVat.$value?.toString() ?? null, DotNetType.Decimal));\r\n }\r\n } \r\n else\r\n if (AmountWithoutVat != null) { \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountWithoutVat\"] = createTypedField(AmountWithoutVat.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(e.fieldValue, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n isCalculateAmount = true;\r\n row.set('Amount',response.info.Amount.$value?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n } \r\n } \r\n } \r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(ArContractArticleIdp, a);\r\n\r\n arContractArticleIdpControl.rowInitialized.add(e => {\r\n const context = arContractArticleIdpControl.cardModel.currentRow?.rowFormContext;\r\n if (context) {\r\n const origCloseFunc = context.close;\r\n context.close = function (...args: any[]) {\r\n e.cancel = false;\r\n return origCloseFunc.call(context, ...args);\r\n };\r\n }\r\n });\r\n arContractArticleIdpControl.rowValidating.add(e =>{\r\n \r\n if(e==null) return;\r\n this.CheckTypeOfSupplementaryAgreement(context.model.card);\r\n });\r\n arContractArticleIdpControl.rowInitializing.add(e => { \r\n \r\n this.AdaptPartnerListToJson(context.model);\r\n\r\n isCalculateAmountWithoutVat = false;\r\n isCalculateAmount = false;\r\n\r\n if(e.action==GridRowAction.Inserted)\r\n {\r\n e.row.set('TypeID',createTypedField(1,DotNetType.Int32));\r\n e.row.set('TypeName',createTypedField(\"Изменяющее\",DotNetType.String));\r\n e.row.set('VatRateID',createTypedField(6,DotNetType.Int32));\r\n e.row.set('VatRateCaption',createTypedField(\"НДС20\",DotNetType.String));\r\n e.row.set('VatRateValue',createTypedField(\"20\",DotNetType.Decimal));\r\n if (this.numbertab > 0)\r\n this.SetPartnerInArticle(card, e.row);\r\n }\r\n\r\n this.SetParameterMappingByPartner(context.model,e.row.get(\"PartnerExternalID\"));\r\n \r\n if (e.rowModel!=null && e.action!=GridRowAction.Deleting){\r\n let objectIdp = e.rowModel.controlsBag.find(x => x.name == \"Object\");\r\n if (objectIdp != null)\r\n {\r\n let pov = card.sections.get(\"ArContractVirtual\"); \r\n if (pov!=null && pov.fields.get(\"CategoryIsIDP\") == 1) \r\n objectIdp.isRequired = true;\r\n else\r\n objectIdp.isRequired=false;\r\n }\r\n }\r\n if (e.rowModel!=null && e.action==GridRowAction.Opening){\r\n let isAutoGenerated = e.row.get(\"AutoGenerated\");\r\n if(isAutoGenerated!=null && isAutoGenerated==true)\r\n {\r\n let canEdit = CdUIHelper.CheckCanEditTechnicalArticle(card, e.row);\r\n let techArticlesEditableFields = [\"Object\", \"Project\", \"ResidentialComplex\"]\r\n e.rowModel.controlsBag.forEach(control=>{\r\n if(control && control.name != null && techArticlesEditableFields.includes(control!.name!))\r\n return;\r\n if(!canEdit || control.name == \"CostItem\")\r\n control.isReadOnly = true; \r\n });\r\n }\r\n }\r\n }); \r\n arContractArticleIdpControl.rowInvoked.add(async e => {\r\n this.CopyRow=true; \r\n if(e.action == GridRowAction.Opening)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArCheckArticleUsageInAdditionalAgreement; \r\n request.info[\"RowID\"] = createTypedField(e.row.rowId, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful && response.info != null && response.info.isUsedInDS != null && response.info.isUsedInDS.$value == true) {\r\n this.CopyRow=false; \r\n }\r\n }\r\n if (e.action != GridRowAction.Deleting) \r\n { \r\n if (!e.rowModel) return; \r\n let costItem = e.rowModel.controlsBag.find(x => x.name == \"CostItem\");\r\n \r\n // инициализация \r\n if (costItem != null)\r\n {\r\n let ArContractsPartners = context.model.card.sections.tryGet('ArContractPartners');\r\n if(ArContractsPartners!=null)\r\n {\r\n costItem.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n } \r\n if (e.action == GridRowAction.Deleting) \r\n { \r\n let result = await showConfirm(\"Вы действительно хотите удалить статью БК?\");\r\n if (!result) {\r\n e.cancel = true;\r\n } else\r\n { \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArCheckEditArticleIDP;\r\n request.info[\"cardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n request.info[\"rowID\"] = createTypedField(e.row.rowId, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful && response.info !=null && response.info.isUsedInDS!=null && response.info.isUsedInDS.$value==true) {\r\n e.cancel=true;\r\n showError(\"Нельзя изменять строку, так как она выбрана в дополнительном соглашении\");\r\n }\r\n else\r\n {\r\n let rows = context.model.card.sections.tryGet('ArContractArticleIdp')!.rows; \r\n if(rows != null) \r\n rows.forEach(row =>\r\n {\r\n if(row.rowId==e.row.rowId)\r\n {\r\n if(row.state==CardRowState.Inserted)\r\n rows.remove(row); \r\n else\r\n row.state=CardRowState.Deleted;\r\n } \r\n }); \r\n\r\n this.CheckTypeOfSupplementaryAgreement(card, e.row.rowId);\r\n }\r\n let sum_amount : number = 0.0;\r\n if (ArContractArticleIdp) \r\n {\r\n ArContractArticleIdp.rows.forEach(row => {\r\n let amount = row.tryGetField('Amount');\r\n if (amount != null && row.state!=CardRowState.Deleted && e.row.rowId!=row.rowId)\r\n {\r\n sum_amount = sum_amount + Number(amount.$value || 0.0);\r\n }\r\n });\r\n let acuSection= context.model.card.sections.tryGet(\"ArContractsUser\");\r\n if (acuSection) {\r\n if (acuSection && acuSection.fields.get(\"IsFromKD\") == true\r\n && (acuSection!=null && acuSection.fields.get(\"IsPdcFromKC\") == false))\r\n {\r\n this.ChangeIsFromKD(context.model);\r\n }\r\n }\r\n\r\n }\r\n if (ArContractsUser)\r\n ArContractsUser.fields.set('InitialAmountIDP', sum_amount.toString(), DotNetType.Decimal);\r\n }\r\n } \r\n });\r\n ArContractArticleIdp.rows.collectionChanged.add(e => {\r\n if (isNullOrUndefined(e.added)) {\r\n return;\r\n }\r\n e.added.forEach(item => {\r\n item.fieldChanged.add(e1 => { \r\n if (e1.fieldName == 'Amount') {\r\n let sum_amount : number = 0.0;\r\n if (ArContractArticleIdp) {\r\n ArContractArticleIdp.rows.forEach(row => {\r\n let amount = row.tryGetField('Amount');\r\n if (amount != null && row.state!=CardRowState.Deleted)\r\n {\r\n sum_amount = sum_amount + Number(amount.$value || 0.0);\r\n }\r\n });\r\n }\r\n if (ArContractsUser)\r\n ArContractsUser.fields.set('InitialAmountIDP', sum_amount.toString(), DotNetType.Decimal);\r\n }\r\n });\r\n });\r\n let sum_amount : number = 0.0;\r\n if (ArContractArticleIdp) {\r\n ArContractArticleIdp.rows.forEach(row => {\r\n let amount = row.tryGetField('Amount');\r\n if (amount != null && row.state!=CardRowState.Deleted)\r\n {\r\n sum_amount = sum_amount + Number(amount.$value || 0.0);\r\n }\r\n });\r\n }\r\n if (ArContractsUser)\r\n ArContractsUser.fields.set('InitialAmountIDP', sum_amount.toString(), DotNetType.Decimal);\r\n });\r\n \r\n // Если поле Стаья связана со статьей ИДП, то поля Проект ИДП, Объект ИДП, \r\n // ЖК обязательны для добавления в табличную часть.\r\n arContractArticleIdpControl.rowEditorClosing.add(async e => {\r\n // Установка видимости блока \"Плановые расходы к перевыставлению на ремонтно-восстановительные работы\" \r\n this.SetVisibilityForArContractPlannedExpensesBlock(context, card);\r\n \r\n // TODO временно отключаем проверку аванса\r\n //let percentPrepayment = e.row.tryGet(\"PercentPrepayment\");\r\n // if(percentPrepayment != null && (percentPrepayment < 0 || percentPrepayment > 100))\r\n // {\r\n // e.cancel = true;\r\n // showError(\"Процент аванса должен быть больше или равен 0 и меньше или равен 100\");\r\n // }\r\n if(this.IsLocked(card) == false && this.isNeedValidationArticle == true)\r\n {\r\n //let amountPrepayment = e.row.tryGet(\"AmountPrepayment\");\r\n \r\n // if (amountPrepayment!=null && (amountPrepayment<0 || amountPrepayment > amount))\r\n // {\r\n // e.cancel = true;\r\n // showError(\"Сумма аванса не может быть меньше 0 и больше Суммы всего\");\r\n // }\r\n //let amount = e.row.tryGet(\"Amount\");\r\n this.CheckArticleAndStickerAmount(card, e); \r\n this.CheckExistsSticker(card, e, \"ArContractArticleStickersInitial\");\r\n\r\n let pov = card.sections.get(\"ArContractVirtual\"); \r\n if (pov!=null && pov.fields.get(\"CategoryIsIDP\") == 1)\r\n {\r\n if (e.row.getField(\"ObjectID\") == null)\r\n {\r\n e.cancel = true;\r\n showError('Поле \"Объект ИДП\" обязательно для заполнения!');\r\n }\r\n }\r\n if (e.row.getField(\"CostItemID\") == null)\r\n { \r\n e.cancel = true;\r\n showError('Поле \"Статья\" обязательно для заполнения!');\r\n \r\n }\r\n if (e.row.getField(\"VatRateID\") == null)\r\n { \r\n e.cancel = true;\r\n showError('Поле \"Ставка НДС\" обязательно для заполнения!');\r\n \r\n }\r\n if (e.row.getField(\"PartnerRelatedExternalID\") == null)\r\n { \r\n e.cancel = true;\r\n showError('Поле \"Контрагент\" обязательно для заполнения!');\r\n \r\n }\r\n }\r\n \r\n await this.CheckArticleExistsInParent(card, e.row);\r\n await this.CheckConfirmingArticleFields(card, e);\r\n\r\n if(e.cancel!=true)\r\n {\r\n if(this.IsLocked(card) == false)\r\n {\r\n \r\n if (this.CopyRow) {\r\n runInAction(() => \r\n {\r\n PkContractUIHelper.CopyArticleRow(card, e.row, 'ArContractArticleIdp');\r\n\r\n // копирование стикеров из перв. в текущие\r\n let arContractArticleStickersInitial = card.sections.tryGet('ArContractArticleStickersInitial');\r\n let arContractArticleStickers = card.sections.tryGet('ArContractArticleStickers');\r\n if (arContractArticleStickersInitial && arContractArticleStickers)\r\n {\r\n // очистим стикеры перед копированием\r\n PkContractUIHelper.ClearStickersSectionByParentRowID(arContractArticleStickers, e.row.rowId);\r\n for (let stickRow of arContractArticleStickersInitial.rows.filter(x => x.state != CardRowState.Deleted &&\r\n Guid.equals(x.parentRowId, e.row.rowId) && e.row.getField('Amount')?.$value != null)) \r\n {\r\n PkContractUIHelper.CopyArticleRow(card, stickRow, 'ArContractArticleStickers');\r\n } \r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /// \r\n /// Проверить изменились ли поля в уточняющей статье.\r\n /// \r\n private async CheckConfirmingArticleFields(card: Card, e: GridRowEventArgs){\r\n // Проверка при добавлении и открытии\r\n if (e.action == GridRowAction.Inserted || e.action == GridRowAction.Opening){\r\n // Проверяются только уточняющие статьи\r\n if (e.row?.tryGet(\"TypeID\") == 0){\r\n let changeArticleID = e.row.tryGet(\"ChangeArticleRowID\") as string | null;\r\n if(changeArticleID != null){\r\n\r\n const arContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n const arContractPartners = card.sections.tryGet(\"ArContractPartners\");\r\n\r\n if (!arContractsUser)\r\n {\r\n return;\r\n }\r\n\r\n let parentCardID = arContractsUser.fields.tryGet(\"ParentCardID\") as string | null;\r\n let contractKindID = arContractsUser.fields.tryGet(\"ContractKindID\") as string | null;\r\n let isIDP = arContractPartners?.rows.some(x => x.tryGet(\"ContractCategoryIsOIDP\") == true); // с признаком ИДП \r\n \r\n let partnerExternalID = e.row.tryGet(\"PartnerExternalID\") as Number | null;\r\n let partnerRelatedExternalID = e.row.tryGet(\"PartnerRelatedExternalID\") as Number | null;\r\n let objectID = e.row.tryGet(\"ObjectID\") as string | null;\r\n let costItemID = e.row.tryGet(\"CostItemID\") as string | null;\r\n let vatRateID = e.row.tryGet(\"VatRateID\") as Number | null;\r\n\r\n if (!(Guid.equals(contractKindID, TessaArContractKinds.CancellationAgreementKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.AdditionalAgreementKindTessaID))\r\n || !isIDP\r\n || !parentCardID\r\n || !partnerExternalID\r\n || !partnerRelatedExternalID\r\n || !costItemID)\r\n {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkContractCheckArticleExists;\r\n\r\n request.info[\"PartnerExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64);\r\n request.info[\"PartnerRelatedExternalID\"] = createTypedField(partnerRelatedExternalID, DotNetType.Int64);\r\n request.info[\"ObjectID\"] = createTypedField(objectID, DotNetType.Guid);\r\n request.info[\"CostItemID\"] = createTypedField(costItemID, DotNetType.Guid);\r\n request.info[\"VatRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n request.info[\"CardID\"] = createTypedField(parentCardID, DotNetType.Guid);\r\n\r\n let response = await CardService.instance.request(request);\r\n\r\n let rowID = response.validationResult.isSuccessful ? response.info?.RowID?.$value : null;\r\n \r\n if (!rowID && rowID != changeArticleID)\r\n {\r\n let confirm = await showConfirm(\"Выберите ДА - если в родительский документ вносится изменяющая статья. Добавить новую статью в договор?\\n`\"\r\n + \"Выберите НЕТ - если Контрагент, Объект ИДП, Статья затрат, Ставка НДС должны остаться как в Договоре\");\r\n if (!confirm){\r\n e.cancel = true;\r\n }\r\n else{\r\n e.row.set(\"TypeID\", createTypedField(1, DotNetType.Int32));\r\n e.row.set(\"TypeName\", createTypedField(\"Изменяющее\", DotNetType.String));\r\n e.row.set(\"ChangeArticleRowID\", null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async CheckArticleExistsInParent(card: Card, row: CardRow)\r\n {\r\n if (row.state != CardRowState.Inserted\r\n || row.tryGet(\"TypeID\") != 1)\r\n {\r\n return;\r\n }\r\n\r\n const arContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n const arContractPartners = card.sections.tryGet(\"ArContractPartners\");\r\n\r\n if (!arContractsUser\r\n || !arContractPartners)\r\n {\r\n return;\r\n }\r\n\r\n let parentCardID = arContractsUser.fields.tryGet(\"ParentCardID\") as string | null;\r\n let contractKindID = arContractsUser.fields.tryGet(\"ContractKindID\") as string | null;\r\n let contractTypeID = arContractsUser.fields.tryGet(\"ContractTypeID\") as Number | null;\r\n \r\n let isIDP = arContractPartners?.rows.some(x => x.tryGet(\"ContractCategoryIsOIDP\") == true); // с признаком ИДП \r\n\r\n let partnerExternalID = row.tryGet(\"PartnerExternalID\") as Number | null;\r\n let partnerRelatedExternalID = row.tryGet(\"PartnerRelatedExternalID\") as Number | null;\r\n let objectID = row.tryGet(\"ObjectID\") as string | null;\r\n let costItemID = row.tryGet(\"CostItemID\") as string | null;\r\n let vatRateID = row.tryGet(\"VatRateID\") as Number | null;\r\n\r\n if (!(Guid.equals(contractKindID, TessaArContractKinds.CancellationAgreementKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.AdditionalAgreementKindTessaID))\r\n || !(contractTypeID == ArContractTypes.Main\r\n || contractTypeID == ArContractTypes.Tariff)\r\n || !isIDP\r\n || !parentCardID\r\n || !partnerExternalID\r\n || !partnerRelatedExternalID\r\n || !objectID\r\n || !costItemID\r\n || !vatRateID)\r\n {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkContractCheckArticleExists;\r\n\r\n request.info[\"PartnerExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64);\r\n request.info[\"PartnerRelatedExternalID\"] = createTypedField(partnerRelatedExternalID, DotNetType.Int64);\r\n request.info[\"ObjectID\"] = createTypedField(objectID, DotNetType.Guid);\r\n request.info[\"CostItemID\"] = createTypedField(costItemID, DotNetType.Guid);\r\n request.info[\"VatRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n request.info[\"CardID\"] = createTypedField(parentCardID, DotNetType.Guid);\r\n\r\n let response = await CardService.instance.request(request);\r\n\r\n let rowID = response.validationResult.isSuccessful ? response.info.RowID?.$value : null;\r\n\r\n if (!rowID)\r\n {\r\n return;\r\n }\r\n\r\n const arContractArticleIdpInitial = card.sections.tryGet(\"ArContractArticleIdpInitial\");\r\n\r\n // если уже есть статья \r\n if (!arContractArticleIdpInitial || arContractArticleIdpInitial.rows.some(x => Guid.equals(x.tryGet(\"ChangeArticleRowID\"), rowID) && x.state != CardRowState.Deleted && !Guid.equals(x.rowId, row.rowId)))\r\n {\r\n return; \r\n }\r\n\r\n let confirm = await showConfirm(\"В родительский документ вносится изменяющая статья. Изменить сумму текущей статьи договора?\");\r\n\r\n if (confirm)\r\n {\r\n row.set(\"TypeID\", createTypedField(0, DotNetType.Int32));\r\n row.set(\"TypeName\", createTypedField(\"Уточняющее\", DotNetType.String));\r\n row.set(\"ChangeArticleRowID\", createTypedField(rowID, DotNetType.Guid));\r\n }\r\n }\r\n\r\n /**\r\n * Работа с текущими суммами.\r\n */\r\n private WorkWithInitialAmountCurrent(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let arContractArticleIdpVirtual = context.model.controls.get('ContractArticleIdpVirtualNew') as GridViewModel;\r\n let ArContractArticleIdp= card.sections.tryGet(\"ArContractArticleIdp\");\r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\"); \r\n if (!ArContractsUser || !arContractArticleIdpVirtual || !ArContractArticleIdp)\r\n {\r\n return;\r\n }\r\n\r\n arContractArticleIdpVirtual.rowInvoked.add(async e => {\r\n if (e.action != GridRowAction.Deleting) \r\n { \r\n if (!e.rowModel) return; \r\n \r\n let balanceLimit = e.rowModel.controlsBag.find(x => x.name == \"BalanceLimit\");\r\n let oldAmountWithOutNDS = e.rowModel.controlsBag.find(x => x.name == \"OldAmountWithoutVat\");\r\n let oldAmountAll = e.rowModel.controlsBag.find(x => x.name == \"OldAmount\");\r\n let oldAmountAllInRub = e.rowModel.controlsBag.find(x => x.name == \"OldAmountTotalRUB\");\r\n let isAdminAndTp = context.model.card.info.IsAdminAndTpRole;\r\n\r\n if(isAdminAndTp==null || isAdminAndTp.$value==false){\r\n \r\n if(e.row.get('Balance')==null || e.row.get('Balance')==0)\r\n {\r\n if (balanceLimit) {\r\n balanceLimit.controlVisibility = Visibility.Collapsed;\r\n }\r\n } \r\n\r\n if((e.row.get('OldAmountWithoutVat')==null || e.row.get('OldAmountWithoutVat')==0) && (e.row.get('OldAmount')==null || e.row.get('OldAmount')==0) && (e.row.get('OldAmountInRUB')==null || e.row.get('OldAmountInRUB')==0))\r\n {\r\n if (oldAmountWithOutNDS) {\r\n oldAmountWithOutNDS.controlVisibility = Visibility.Collapsed;\r\n }\r\n \r\n if (oldAmountAll) {\r\n oldAmountAll.controlVisibility = Visibility.Collapsed;\r\n }\r\n \r\n if (oldAmountAllInRub) {\r\n oldAmountAllInRub.controlVisibility = Visibility.Collapsed;\r\n } \r\n } \r\n }\r\n } \r\n });\r\n\r\n\r\n var isHistorical = ArFileHelper.CheckIsHistorical(card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n \r\n arContractArticleIdpVirtual.rowInitialized.add(e => {\r\n const context = arContractArticleIdpVirtual.cardModel.currentRow?.rowFormContext;\r\n if (context) {\r\n const origCloseFunc = context.close;\r\n context.close = function (...args: any[]) {\r\n e.cancel = false;\r\n return origCloseFunc.call(context, ...args);\r\n };\r\n }\r\n });\r\n \r\n //чтобы не было зацикливания при расчете сумм добавим флаги\r\n let isCalculateAmountWithoutVat = false;\r\n let isCalculateAmount = false;\r\n const a = async (e: CardFieldChangedEventArgs) => \r\n {\r\n if (e== null)\r\n {\r\n return;\r\n }\r\n\r\n const row = e.storage;\r\n \r\n if (e.fieldName === \"Amount\"){\r\n let amountAll = this.GetAmountAll(e.fieldValue, context.model.card);\r\n row.set('AmountAll',amountAll.toString().replace(',', '.'), DotNetType.Decimal);\r\n } \r\n if (e.fieldName === \"Amount\"){\r\n if(isCalculateAmount==false)\r\n {\r\n if (e.fieldValue != null) {\r\n let vatRateID;\r\n if ((vatRateID = row.tryGet('VatRateID')) != null) {\r\n if (vatRateID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountDouble\"] = createTypedField(parseFloat(e.fieldValue), DotNetType.Double);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n \r\n const response = await CardService.instance.request(request);\r\n \r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n \r\n if (response.info) {\r\n isCalculateAmountWithoutVat = true;\r\n row.set('AmountWithoutVat', createTypedField(response.info.AmountWithoutVat.$value?.toString() ?? null, DotNetType.Decimal));\r\n }\r\n }\r\n }\r\n }else\r\n {\r\n row.set('AmountWithoutVat',null);\r\n } \r\n }\r\n isCalculateAmount = false; \r\n } \r\n if (e.fieldName === \"AmountWithoutVat\"){\r\n if(isCalculateAmountWithoutVat == false){\r\n if (e.fieldValue != null) {\r\n let vatRateID;\r\n if ((vatRateID = row.tryGet('VatRateID')) != null) {\r\n if (vatRateID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountWithoutVat\"] = createTypedField(e.fieldValue.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n \r\n const response = await CardService.instance.request(request);\r\n \r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n \r\n if (response.info) {\r\n isCalculateAmount = true;\r\n row.set('Amount',response.info.Amount.$value?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n }\r\n }\r\n }else\r\n {\r\n row.set('Amount',null);\r\n } \r\n } \r\n isCalculateAmountWithoutVat = false; \r\n } \r\n if (e.fieldName === \"VatRateID\"){\r\n if (e.fieldValue !== null) {\r\n let Amount = row.tryGet('Amount');\r\n let AmountWithoutVat = row.tryGet('AmountWithoutVat');\r\n \r\n if (Amount != null){\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountDouble\"] = createTypedField(parseFloat(Amount), DotNetType.Double);\r\n request.info[\"VATRateID\"] = createTypedField(e.fieldValue, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n isCalculateAmountWithoutVat = true;\r\n row.set('AmountWithoutVat', createTypedField(response.info.AmountWithoutVat.$value?.toString() ?? null, DotNetType.Decimal));\r\n }\r\n } \r\n else\r\n if (AmountWithoutVat != null) { \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountWithoutVat\"] = createTypedField(AmountWithoutVat.toString(), DotNetType.Decimal);\r\n request.info[\"VATRateID\"] = createTypedField(e.fieldValue, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n isCalculateAmount = true;\r\n row.set('Amount',response.info.Amount.$value?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n } \r\n } \r\n } \r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(ArContractArticleIdp, a);\r\n\r\n arContractArticleIdpVirtual.rowInitializing.add(async e => {\r\n\r\n this.AdaptPartnerListToJson(context.model);\r\n\r\n if(e.action==GridRowAction.Inserted)\r\n {\r\n this.CopyFieldsBySelectedRow(e.row);\r\n e.row.set('TypeID',createTypedField(0,DotNetType.Int32));\r\n e.row.set('TypeName',createTypedField(\"Уточняющее\",DotNetType.String));\r\n // выполним заполнение стикеров в секцию arContractArticleStickers\r\n let arContractArticleStickers = context.model.card.sections.tryGet('ArContractArticleStickers');\r\n if (arContractArticleStickers) {\r\n await PkContractUIHelper.SetAndFillArticleStickerRowAsync(context, arContractArticleStickers, null, null, e.row.rowId, e.row.get(\"ChangeArticleRowID\"), true);\r\n }\r\n }\r\n\r\n this.SetParameterMappingByPartner(context.model,e.row.get(\"PartnerExternalID\"));\r\n\r\n if (e.rowModel!=null && e.action!=GridRowAction.Deleting){\r\n let objectIdp = e.rowModel.controlsBag.find(x => x.name == \"Object\");\r\n if (objectIdp != null)\r\n {\r\n let pov = card.sections.get(\"ArContractVirtual\"); \r\n if (pov!=null && pov.fields.get(\"CategoryIsIDP\") == 1) \r\n objectIdp.isRequired = true;\r\n else\r\n objectIdp.isRequired=false;\r\n }\r\n }\r\n });\r\n\r\n arContractArticleIdpVirtual.rowInvoked.add(async e =>{\r\n if (e.action != GridRowAction.Deleting) \r\n { \r\n if (!e.rowModel) return;\r\n let costItem = e.rowModel.controlsBag.find(x => x.name == \"CostItem\");\r\n \r\n // инициализация \r\n if (costItem != null)\r\n {\r\n let ArContractsPartners = context.model.card.sections.tryGet('ArContractPartners');\r\n if(ArContractsPartners!=null)\r\n {\r\n costItem.controlVisibility = Visibility.Visible;\r\n } \r\n }\r\n } \r\n if(this.CanEditArticleIDPCurrent!=true && e.rowModel!=null)\r\n {\r\n e.rowModel.controlsBag.forEach(control=>{\r\n control.isReadOnly = true; \r\n });\r\n }\r\n //e.cancel=true;\r\n this.CanEditArticleIDPCurrent=false; \r\n });\r\n \r\n arContractArticleIdpVirtual.rowEditorClosing.add(async e => {\r\n // TODO временно отключаем проверку аванса\r\n // let percentPrepayment = e.row.tryGet(\"PercentPrepayment\");\r\n // if(percentPrepayment != null && (percentPrepayment < 0 || percentPrepayment > 100))\r\n // {\r\n // e.cancel = true;\r\n // await showError(\"Процент аванса должен быть больше или равен 0 и меньше или равен 100\");\r\n // }\r\n // TODO временно отключаем проверку аванса\r\n //let amountPrepayment = e.row.tryGet(\"AmountPrepayment\");\r\n // if (amountPrepayment!=null && (amountPrepayment<0 || amountPrepayment > amount))\r\n // {\r\n // e.cancel = true;\r\n // await showError(\"Сумма аванса не может быть меньше 0 и больше Суммы всего\");\r\n // }\r\n \r\n //let amount = e.row.tryGet(\"Amount\");\r\n this.CheckArticleAndStickerAmount(card, e); \r\n this.CheckExistsSticker(card, e, \"ArContractArticleStickers\");\r\n\r\n if (e.row.getField(\"CostItemID\") == null) { \r\n e.cancel = true;\r\n await showError('Поля \"Статья\" обязательно для заполнения!'); \r\n }\r\n\r\n if (e.cancel != true && e.action == GridRowAction.Inserted && this.IsLocked(card) == false) {\r\n runInAction(() => {\r\n let ArContractArticleIdp = context.model.card.sections.tryGet('ArContractArticleIdpInitial');\r\n if (ArContractArticleIdp) {\r\n // копирование строки из текущих в первоначальные\r\n PkContractUIHelper.CopyArticleRow(card, e.row, 'ArContractArticleIdpInitial');\r\n\r\n let sum_amount: number = 0.0;\r\n ArContractArticleIdp.rows.forEach(row => {\r\n let amount = row.tryGetField('Amount');\r\n if (amount != null && row.state != CardRowState.Deleted) {\r\n sum_amount = sum_amount + Number(amount.$value || 0.0);\r\n }\r\n });\r\n\r\n if (ArContractsUser) \r\n {\r\n ArContractsUser.fields.set('InitialAmountIDP', sum_amount.toString(), DotNetType.Decimal);\r\n }\r\n\r\n // копирование стикеров из текущих в первоначальные\r\n let arContractArticleStickersInitial = card.sections.tryGet('ArContractArticleStickersInitial');\r\n let arContractArticleStickers = card.sections.tryGet('ArContractArticleStickers');\r\n if (arContractArticleStickersInitial && arContractArticleStickers)\r\n {\r\n // очистим стикеры перед копированием\r\n PkContractUIHelper.ClearStickersSectionByParentRowID(arContractArticleStickersInitial, e.row.rowId);\r\n for (let stickRow of arContractArticleStickers.rows.filter(x => x.state != CardRowState.Deleted &&\r\n Guid.equals(x.parentRowId, e.row.rowId) && e.row.getField('Amount')?.$value != null)) \r\n {\r\n PkContractUIHelper.CopyArticleRow(card, stickRow, 'ArContractArticleStickersInitial');\r\n }\r\n }\r\n }\r\n \r\n this.CheckTypeOfSupplementaryAgreement(card);\r\n });\r\n }\r\n\r\n await this.ReargeCurrentArticleIDP(context, context.model.card); \r\n await this.RecalcAmountByPartner(context.model.card);\r\n });\r\n }\r\n\r\n private CheckArticleAndStickerAmount(card: Card, e: GridRowEventArgs) {\r\n let amountWithoutVat = e.row.tryGet(\"AmountWithoutVat\");\r\n let partnerIdpList = card.sections.tryGet('ArContractPartners');\r\n let arContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (!partnerIdpList || !arContractsUser) {\r\n return;\r\n }\r\n\r\n let isIDP = partnerIdpList.rows.filter(\r\n r => r.state != CardRowState.Deleted && r.get('PartnerDepartmentID') != null).findIndex(x => x.get('ContractCategoryIsOIDP') == true) >= 0;\r\n \r\n if (!isIDP &&\r\n (arContractsUser.fields.tryGet(\"GuidCRM\") == null || arContractsUser.fields.tryGet(\"GuidCRM\") == '') &&\r\n arContractsUser.fields.tryGet(\"ContractTypeID\") == 0) {\r\n if (amountWithoutVat <= 0 && e.row.tryGet(\"TypeID\") == 1) {\r\n e.cancel = true;\r\n showError(\"Сумма без НДС должна быть больше 0\");\r\n }\r\n\r\n if (amountWithoutVat < 0 && e.row.tryGet(\"TypeID\") == 0) {\r\n e.cancel = true;\r\n showError(\"Сумма без НДС должна быть больше либо равна 0\");\r\n }\r\n }\r\n }\r\n \r\n private CheckExistsSticker(card: Card, e: GridRowEventArgs, stickerSection: string) { \r\n let stickers = card.sections.tryGet(stickerSection);\r\n if (!stickers) {\r\n return;\r\n }\r\n\r\n var IsNotAutoGenerated = true;\r\n if(e.row.get(\"AutoGenerated\")!=null && e.row.get(\"AutoGenerated\")==true)\r\n {\r\n IsNotAutoGenerated = false;\r\n }\r\n\r\n // если ДД - ИДП, то запретим ввод суммы (будем заполнять из стикеров)\r\n // и откроем доступ к стикерам\r\n if ( (PkClientHelper.GetFieldValue(card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false)\r\n && (PkClientHelper.GetFieldValue(card, \"ArContractsUser\", \"GuidCRM\") == null)\r\n && e.row.get(\"CostItemIdpItemCode\") != null\r\n && e.row.get(\"CostItemIdpItemCode\") != \"\"\r\n && IsNotAutoGenerated) {\r\n\r\n let isExists = stickers.rows.filter(\r\n r => r.state != CardRowState.Deleted && r.get('ParentRowID') != null).findIndex(x => x.get('ParentRowID') == e.row.rowId) >= 0;\r\n if (!isExists) {\r\n e.cancel = true;\r\n showError(\"Заполните стикерную часть\");\r\n }\r\n }\r\n }\r\n\r\n private CopyFieldsBySelectedRow(row: CardRow)\r\n {\r\n if(this.selectedRow==null) return;\r\n this.selectedRow.forEach((value, key) => {\r\n if(key != \"RowID\")\r\n {\r\n if(this.selectedRow==null) return;\r\n let temp = value;\r\n if(temp!=null)\r\n {\r\n if(key == \"MyArticleID\")\r\n row.set(key,createTypedField(temp,DotNetType.Guid));\r\n if(key == \"ChangeArticleRowID\")\r\n row.set(key,createTypedField(temp,DotNetType.Guid));\r\n if(key == \"Order\")\r\n row.set(key,createTypedField(temp,DotNetType.Int32));\r\n if(key == \"ProjectID\")\r\n row.set(key,createTypedField(temp,DotNetType.Guid));\r\n if(key == \"ProjectProjectID\")\r\n row.set(key,createTypedField(temp,DotNetType.Int32));\r\n if(key == \"ProjectName\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"ObjectID\")\r\n row.set(key,createTypedField(temp,DotNetType.Guid));\r\n if(key == \"ObjectObjectID\")\r\n row.set(key,createTypedField(temp,DotNetType.Int32));\r\n if(key == \"ObjectCode1c\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"ObjectNumber\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"ObjectName\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n\r\n \r\n if(key == \"AmountWithoutVat\")\r\n row.set(key,createTypedField(temp.toString(),DotNetType.Decimal));\r\n if(key == \"Amount\")\r\n row.set(key,createTypedField(temp.toString(),DotNetType.Decimal));\r\n if(key == \"PaymentTerm\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"PercentPrepayment\")\r\n row.set(key,createTypedField(temp.toString(),DotNetType.Decimal));\r\n if(key == \"AmountPrepayment\")\r\n row.set(key,createTypedField(temp.toString(),DotNetType.Decimal));\r\n if(key == \"VatRateID\")\r\n row.set(key,createTypedField(temp,DotNetType.Int32));\r\n if(key== \"VatRateCaption\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"VatRateValue\")\r\n row.set(key,createTypedField(temp.toString(), DotNetType.Decimal));\r\n if(key == \"StageName\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"AmountAll\")\r\n row.set(key,createTypedField(temp.toString(),DotNetType.Decimal));\r\n\r\n if(key == \"TypeID\")\r\n row.set(key,createTypedField(temp,DotNetType.Int32));\r\n if(key == \"TypeName\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"ResidentialComplexID\")\r\n row.set(key,createTypedField(temp,DotNetType.Guid));\r\n if(key == \"ResidentialComplexName\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"CostItemID\")\r\n row.set(key,createTypedField(temp,DotNetType.Guid));\r\n if(key == \"CostItemMdsID\")\r\n row.set(key,createTypedField(temp,DotNetType.Int64));\r\n if(key == \"CostItemName\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key== \"CostItemArticle\")\r\n row.set(key,createTypedField(temp,DotNetType.String)); \r\n if(key== \"CostItemIdpItemCode\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key== \"CostItemIsIncome\")\r\n row.set(key,createTypedField(temp,DotNetType.Boolean));\r\n\r\n if(key == \"AmountFact\")\r\n row.set(key,createTypedField(temp.toString(),DotNetType.Decimal));\r\n if(key == \"Balance\")\r\n row.set(key,createTypedField(temp.toString(),DotNetType.Decimal));\r\n if(key == \"PartnerID\")\r\n row.set(key,createTypedField(temp,DotNetType.Guid));\r\n if(key == \"PartnerExternalID\")\r\n row.set(key,createTypedField(temp,DotNetType.Int64));\r\n if(key == \"PartnerName\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n if(key == \"PartnerRelatedID\")\r\n row.set(key,createTypedField(temp,DotNetType.Guid));\r\n if(key == \"PartnerRelatedExternalID\")\r\n row.set(key,createTypedField(temp,DotNetType.Int64));\r\n if(key == \"PartnerRelatedName\")\r\n row.set(key,createTypedField(temp,DotNetType.String));\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * Отображение контрола \"Родительский документ\".\r\n */\r\n private VisibilityParentCardControl(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const contractParentCardControl = context.model.controls.get('ContractParentCardControl');\r\n const contractParentCardNumberControl = context.model.controls.get('ContractParentCardNumberControl');\r\n const ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (contractParentCardControl == null || ArContractsUser == null) return;\r\n let parentCardID = ArContractsUser.fields.tryGetField('ParentCardID');\r\n if (parentCardID == null) return;\r\n contractParentCardControl.controlVisibility = Visibility.Visible;\r\n if (contractParentCardNumberControl == null) return;\r\n contractParentCardNumberControl.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n /**\r\n * Отображение контролов в зависимости от типа документа\r\n */\r\n private VisibilityControlByType(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const ArKindOfAssignment = context.model.controls.get('ArKindOfAssignment');\r\n const ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (ArKindOfAssignment == null || ArContractsUser == null) return;\r\n let ContractKindID = ArContractsUser.fields.tryGetField('ContractKindID');\r\n if (ContractKindID != null && ContractKindID.$value.toLowerCase() == TessaArContractKinds.AssignmentKindTessaID)\r\n ArKindOfAssignment.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n /**\r\n * 3.7.1. Если КСД не передан в ТУС:\r\n * 3.7.1.1. Если нет родительского документа, то тип дополнительного соглашения = пустое значение(в договоре не заполняется).\r\n * 3.7.1.2. Если есть родительский документ, то тип дополнительного соглашения = Изменяющее.\r\n */\r\n private CheckTypeOfSupplementaryAgreement(card: Card, rowID : string = \"\")\r\n {\r\n let ArContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n if (ArContractsUser == null) {\r\n return;\r\n }\r\n\r\n let IsTransferToUS = ArContractsUser.fields.tryGetField('IsTransferToUS');\r\n if(IsTransferToUS != null && IsTransferToUS.$value == true) {\r\n return;\r\n }\r\n\r\n let ParentCardID = ArContractsUser.fields.tryGetField('ParentCardID');\r\n let dsTypeId = ArContractsUser.fields.tryGetField('TypeDSUnderIDPID');\r\n if (ParentCardID == null) {\r\n if (dsTypeId) {\r\n ArContractsUser.fields.set('TypeDSUnderIDPID',null);\r\n ArContractsUser.fields.set('TypeDSUnderIDPName',null);\r\n }\r\n return;\r\n }\r\n\r\n let acaii = card.sections.tryGet(\"ArContractArticleIdpInitial\");\r\n if (!acaii) {\r\n return;\r\n }\r\n\r\n let acaiiRows = acaii.rows.filter(_ => _.state != CardRowState.Deleted);\r\n if (rowID > '') {\r\n acaiiRows = acaiiRows.filter(_ => rowID !== _.rowId);\r\n }\r\n\r\n let notEmpty = acaiiRows.length > 0;\r\n let isChanging = notEmpty && acaiiRows.some(_ => _.get('TypeID') === 1);\r\n\r\n if (isChanging) {\r\n if (!dsTypeId || dsTypeId.$value != 1) {\r\n ArContractsUser.fields.set('TypeDSUnderIDPID',createTypedField(1, DotNetType.Int32));\r\n ArContractsUser.fields.set('TypeDSUnderIDPName',createTypedField('Изменяющее',DotNetType.String));\r\n }\r\n } else {\r\n let contractKindID = ArContractsUser.fields.tryGetField('ContractKindID');\r\n\r\n // если есть статьи или ДС или СоР\r\n if (notEmpty\r\n || Guid.equals(contractKindID?.$value, TessaArContractKinds.CancellationAgreementKindTessaID)\r\n || Guid.equals(contractKindID?.$value, TessaArContractKinds.AdditionalAgreementKindTessaID)) {\r\n if (!dsTypeId || dsTypeId.$value != 0) {\r\n ArContractsUser.fields.set('TypeDSUnderIDPID',createTypedField(0, DotNetType.Int32));\r\n ArContractsUser.fields.set('TypeDSUnderIDPName',createTypedField('Уточняющее',DotNetType.String));\r\n }\r\n } else {\r\n if (dsTypeId)\r\n {\r\n ArContractsUser.fields.set('TypeDSUnderIDPID',null);\r\n ArContractsUser.fields.set('TypeDSUnderIDPName',null);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Дата расторжения обязательна в соглашении о расторжении.\r\n */\r\n private DateCancelletionControlIsRequired(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const contractDateCancelletionControl = context.model.controls.get('ContractDateCancelletionControl');\r\n const ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (contractDateCancelletionControl == null || ArContractsUser == null) return;\r\n let contractKindID = ArContractsUser.fields.tryGetField('ContractKindID');\r\n if (contractKindID == null) return;\r\n if (Guid.equals(contractKindID.$value, TessaArContractKinds.CancellationAgreementKindTessaID) && !PkContractUIHelper.IsLocked(card))\r\n {\r\n contractDateCancelletionControl.isRequired = true;\r\n contractDateCancelletionControl.hasActiveValidation = true;\r\n contractDateCancelletionControl.validationFunc = (c) => {\r\n if (c.hasEmptyValue) {\r\n return 'Заполните поле \"Дата расторжения\"';\r\n }\r\n \r\n return null;\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Проверка параметра \"Причины, почему договор без ПДЦ из КЦ\".\r\n */\r\n private ReasonsWithoutPDCIDCancelletionControlIsRequired(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const ContractReasonsWithoutPDCIDCancelletionControl = context.model.controls.get('ContractReasonsWithoutPDCIDCancelletionControl');\r\n const ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (ContractReasonsWithoutPDCIDCancelletionControl == null || ArContractsUser == null) return;\r\n let contractKindID = ArContractsUser.fields.tryGetField('ContractKindID');\r\n let isPdcFromKC = ArContractsUser.fields.tryGetField('IsPdcFromKC');\r\n if (contractKindID == null || isPdcFromKC == null) return;\r\n if (Guid.equals(contractKindID.$value, TessaArContractKinds.ContractKindTessaID) \r\n && isPdcFromKC.$value == false && !PkContractUIHelper.IsLocked(card))\r\n {\r\n ContractReasonsWithoutPDCIDCancelletionControl.isRequired = true;\r\n ContractReasonsWithoutPDCIDCancelletionControl.hasActiveValidation = true;\r\n ContractReasonsWithoutPDCIDCancelletionControl.validationFunc = (c) => {\r\n if (c.hasEmptyValue) {\r\n return 'Заполните поле \"Причины почему договор без ПДЦ из КЦ\"';\r\n }\r\n \r\n return null;\r\n };\r\n }\r\n }\r\n \r\n /**\r\n * Дата расторжения - доступно на изменение только в соглашении о расторжении\r\n * и если договор не действующий и не исполнен\r\n */\r\n private EnableDateCancelletionControl(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let stateID = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n const contractDateCancelletionControl = context.model.controls.get('ContractDateCancelletionControl');\r\n const ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (contractDateCancelletionControl == null || ArContractsUser == null) return;\r\n let contractKindID = ArContractsUser.fields.tryGetField('ContractKindID');\r\n if (contractKindID == null) return;\r\n if (Guid.equals(contractKindID.$value, TessaArContractKinds.CancellationAgreementKindTessaID)\r\n && !PkContractUIHelper.IsLocked(card)\r\n && stateID != CdDocStates.Active.id\r\n && stateID != CdDocStates.Performance.id)\r\n {\r\n contractDateCancelletionControl.isReadOnly = false;\r\n }\r\n }\r\n private ChangeArticleIDPController(context: ICardUIExtensionContext, card: Card) {\r\n var ChangeArticleIDP = context.model.controls.get('ChangeArticleIDP');\r\n const ArContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (ChangeArticleIDP!=null && ArContractsUser!=null)\r\n {\r\n let contractKindID = ArContractsUser.fields.tryGetField('ContractKindID'); \r\n if (contractKindID!=null && Guid.equals(contractKindID.$value, TessaArContractKinds.ContractKindTessaID)) //Договор\r\n {\r\n ChangeArticleIDP.controlVisibility = Visibility.Collapsed;\r\n } \r\n else\r\n {\r\n var Button = ChangeArticleIDP as ButtonViewModel;\r\n Button.onClick = async () => {\r\n if(ArContractsUser.fields.tryGetField('ParentCardID')==null)\r\n {\r\n showError(\"Должен быть указан родительский договор\");\r\n return;\r\n }\r\n else\r\n { \r\n await this.AddChangeArticleLogicAsync(context); \r\n }\r\n }; \r\n }\r\n }\r\n }\r\n public async AddChangeArticleLogicAsync(context: ICardUIExtensionContext) {\r\n const refSection = \"PkArticleParentContract\";\r\n const parameters = this.GetParametersForArticleLogic(context);\r\n const ContractArticleIdpVirtualNew = context.model.controls.get('ContractArticleIdpVirtualNew') as GridViewModel;\r\n await showViewsDialog(\r\n refSection,\r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n let selectedItem = value;\r\n this.selectedRow=selectedItem.selectedRow ;\r\n // TODO доделать множественный выбор\r\n \r\n if (selectedItem != null && selectedItem.selectedRow != null) {\r\n this.CanEditArticleIDPCurrent=true;\r\n this._isReadOnlyStickers = false;\r\n await ContractArticleIdpVirtualNew.addRow()\r\n\r\n // TES-7917\r\n // Ошибка с отличными значениями при смене статьи на Изменяющую\r\n this.RearrangeArticleTypes(context.model.card);\r\n\r\n this._isReadOnlyStickers = true;\r\n this.CanEditArticleIDPCurrent=false;\r\n await this.ReargeArticleIDP(context, context.model.card);\r\n await this.ReargeCurrentArticleIDP(context, context.model.card); \r\n await this.RecalcAmountByPartner(context.model.card); \r\n }\r\n },\r\n parameters\r\n );\r\n\r\n\r\n }\r\n\r\n private RearrangeArticleTypes(card: Card){\r\n let initialSection = card.sections.tryGet(\"ArContractArticleIdpInitial\");\r\n let currentSection = card.sections.tryGet(\"ArContractArticleIdp\");\r\n if(initialSection == null || currentSection == null){\r\n return;\r\n }\r\n const initial = initialSection?.rows[initialSection.rows.length - 1];\r\n const current = currentSection?.rows[currentSection.rows.length - 1];\r\n initial.set(\"TypeID\", createTypedField(current.tryGet(\"TypeID\"), DotNetType.Int32));\r\n initial.set(\"TypeName\", createTypedField(current.tryGet(\"TypeName\"), DotNetType.String));\r\n initial.set(\"ChangeArticleRowID\", createTypedField(current.tryGet(\"ChangeArticleRowID\"), DotNetType.Guid));\r\n \r\n }\r\n\r\n // Получение параметров для представления\r\n public GetParametersForArticleLogic(context: ICardUIExtensionContext) {\r\n const parameters = Array();\r\n let paramAlias = \"CardID\";\r\n let paramCaption = \"ID\";\r\n let ArContractsUser = context.model.card.sections.tryGet('ArContractsUser');\r\n let value = ArContractsUser!.fields.tryGetField('ParentCardID');\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = paramAlias;\r\n parameterMetadata.caption = paramCaption;\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n const requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '',value?.$value)\r\n .asRequestParameter();\r\n\r\n parameters.push(requestParameter);\r\n \r\n let list = new Array();\r\n //let card = model.card;\r\n ///let pov = card.sections.get(\"PkPartnersVirtual\");\r\n let acai = context.model.card.sections.tryGet('ArContractArticleIdp');\r\n //if (isNullOrUndefined(partnersList)) return;\r\n \r\n if(acai!=null)\r\n {\r\n let actualAcai = acai.rows.filter(\r\n r => r.state != CardRowState.Deleted);\r\n actualAcai.forEach(row => { \r\n if (row.get(\"ChangeArticleRowID\") != null) \r\n list.push(row.get(\"ChangeArticleRowID\")); \r\n });\r\n let json = JSON.stringify(list);\r\n \r\n let parameterMetadata2 = new ViewParameterMetadata();\r\n parameterMetadata2.alias = \"ArticlesJson\";\r\n parameterMetadata2.caption = \"Исключать статьи\";\r\n parameterMetadata2.hidden = true;\r\n parameterMetadata2.dataType = DbType.String;\r\n parameterMetadata2.multiple = false;\r\n\r\n let requestParameter2 = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata2)\r\n .addCriteria(containsCriteriaOperator(), '',json)\r\n .asRequestParameter();\r\n\r\n parameters.push(requestParameter2); \r\n } \r\n\r\n return parameters;\r\n }\r\n /**\r\n * Поле Предел суммы доступно и обязательно если Тип договора = Рамочный или Тарифный.\r\n */\r\n private EnableAmountLimitControl(context: ICardUIExtensionContext, card: Card) {\r\n const amountLimitControl = context.model.controls.get('AmountLimitControl');\r\n const amountTotalControl = context.model.controls.get(\"AmountTotalControl\");\r\n const amountCurrentControl = context.model.controls.get(\"AmountCurrentControl\");\r\n const amountBeginningControl = context.model.controls.get(\"AmountBeginningControl\");\r\n\r\n const arContractsUser = card.sections.tryGet('ArContractsUser');\r\n if (amountLimitControl == null || arContractsUser == null) {\r\n return;\r\n }\r\n\r\n let contractTypeID = arContractsUser.fields.tryGetField('ContractTypeID');\r\n\r\n // Если вид документа не \"Договор\", то поле предел суммы не обязательно.\r\n var contractKindID = arContractsUser?.fields.get('ContractKindID');\r\n if (contractKindID != TessaArContractKinds.ContractKindTessaID) {\r\n amountLimitControl.isRequired = false;\r\n\r\n // Если Тип договора Рамочный и КСД это дополнительное соглашение или соглашение о расторжении,\r\n // то Предел суммы на год заблокировано и не обязательно для заполнения.\r\n if ((contractKindID == TessaArContractKinds.AdditionalAgreementKindTessaID || \r\n contractKindID == TessaArContractKinds.CancellationAgreementKindTessaID)\r\n && contractTypeID != null && contractTypeID.$value === 3) {\r\n amountLimitControl.isReadOnly = true;\r\n }\r\n \r\n arContractsUser.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'ContractTypeID') {\r\n if (e.fieldValue != null && e.fieldValue === 3\r\n && (contractKindID == TessaArContractKinds.AdditionalAgreementKindTessaID\r\n || contractKindID == TessaArContractKinds.CancellationAgreementKindTessaID)) { \r\n amountLimitControl.isReadOnly = true;\r\n }\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (contractTypeID != null) {\r\n if (contractTypeID.$value === 3) {\r\n if (amountTotalControl != null) amountTotalControl.isRequired = false;\r\n if (amountCurrentControl != null) amountCurrentControl.isRequired = false;\r\n if (amountBeginningControl != null) amountBeginningControl.isRequired = false;\r\n\r\n amountLimitControl.isRequired = true;\r\n amountLimitControl.isReadOnly = false;\r\n }else if (contractTypeID.$value === 4) {\r\n // Для тарифного поле Предел суммы на год должен быть заблокирован и не обязателен.\r\n amountLimitControl.isRequired = false;\r\n amountLimitControl.isReadOnly = true;\r\n } \r\n }\r\n\r\n arContractsUser.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'ContractTypeID') {\r\n if (e.fieldValue != null && e.fieldValue === 3) {\r\n if (amountTotalControl != null) amountTotalControl.isRequired = false;\r\n if (amountCurrentControl != null) amountCurrentControl.isRequired = false;\r\n if (amountBeginningControl != null) amountBeginningControl.isRequired = false;\r\n\r\n amountLimitControl.isRequired = true;\r\n amountLimitControl.isReadOnly = false;\r\n }\r\n else {\r\n if (amountTotalControl != null) amountTotalControl.isRequired = true;\r\n if (amountCurrentControl != null) amountCurrentControl.isRequired = true;\r\n if (amountBeginningControl != null) amountBeginningControl.isRequired = true;\r\n\r\n amountLimitControl.isRequired = false;\r\n amountLimitControl.isReadOnly = true;\r\n\r\n // Если выбрано значение, не равное Рамочный, то реквизит Предел суммы на год очищается.\r\n arContractsUser.fields.set('AmountLimit',createTypedField(\"0\", DotNetType.Decimal));\r\n }\r\n }\r\n });\r\n }\r\n\r\n private CheckAmountFromEDTask(card: Card)\r\n {\r\n const arContractsUser = card.sections.tryGet('ArContractsUser');\r\n\r\n if (arContractsUser)\r\n {\r\n arContractsUser.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'ContractTypeID') \r\n {\r\n if(tryGetFromInfo(card.info,\"IsFromEDTask\"))\r\n {\r\n if(card.info[\"IsFromEDTask\"] == true)\r\n {\r\n let amountValueFromEDTask = card.info[\"AmountValueFromEDTask\"];\r\n\r\n if(e.fieldValue != null && e.fieldValue === 3)\r\n {\r\n arContractsUser.fields.set('AmountLimit',createTypedField(amountValueFromEDTask?.toString() ?? null, DotNetType.Decimal));\r\n arContractsUser.fields.set('AmountBeginning',createTypedField(\"0\", DotNetType.Decimal));\r\n }\r\n else\r\n {\r\n arContractsUser.fields.set('AmountBeginning',createTypedField(amountValueFromEDTask?.toString() ?? null, DotNetType.Decimal));\r\n arContractsUser.fields.set('AmountLimit',createTypedField(\"0\", DotNetType.Decimal));\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Поле \"Контакты собственника\" должно быть доступно только, если категория договора \"Аренда юридических адресов.\r\n */\r\n private EnableContactsOwnerControl(context: ICardUIExtensionContext, card: Card)\r\n {\r\n const contactsOwnerControl = context.model.controls.get('ContactsOwnerControl');\r\n const arContractPartners = card.sections.tryGet('ArContractPartners');\r\n if (contactsOwnerControl == null || arContractPartners == null) return;\r\n\r\n contactsOwnerControl.controlVisibility = Visibility.Collapsed;\r\n\r\n arContractPartners.rows.forEach(row => {\r\n let contractCategoryExtID = row.tryGetField('ContractCategoryExtID');\r\n if (contractCategoryExtID != null)\r\n {\r\n if (contractCategoryExtID.$value != null && contractCategoryExtID.$value === 285) {\r\n contactsOwnerControl.controlVisibility = Visibility.Visible;\r\n contactsOwnerControl.isReadOnly = false;\r\n }\r\n }\r\n });\r\n arContractPartners.rows.collectionChanged.add(e => {\r\n if (isNullOrUndefined(e.storage)) {\r\n return;\r\n }\r\n e.storage.forEach(item => {\r\n item.fieldChanged.add(async e1 => {\r\n if (e1.fieldName === 'ContractCategoryExtID') {\r\n if (e1.fieldValue != null && e1.fieldValue === 285) {\r\n contactsOwnerControl.controlVisibility = Visibility.Visible;\r\n contactsOwnerControl.isReadOnly = false;\r\n }\r\n else {\r\n contactsOwnerControl.controlVisibility = Visibility.Collapsed;\r\n contactsOwnerControl.isReadOnly = true;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Установка видимости блока \"Плановые расходы к перевыставлению на ремонтно-восстановительные работы\" в\r\n * зависимости от наличия в договоре статьи 12.1.\r\n */\r\n private SetVisibilityForArContractPlannedExpensesBlock(context: ICardUIExtensionContext, card: Card)\r\n {\r\n var arContractPlannedExpensesBlock = context.model.blocks.get('ArContractPlannedExpensesBlock');\r\n const arContractArticleIdp = card.sections.tryGet('ArContractArticleIdpInitial');\r\n if (arContractPlannedExpensesBlock == null || arContractArticleIdp == null)\r\n {\r\n return;\r\n }\r\n\r\n let isArticle = false; // флаг наличия статьи\r\n\r\n arContractArticleIdp.rows.forEach(row => {\r\n let costItemMdsID: number = row.get('CostItemMdsID') || 0;\r\n if (costItemMdsID == 653) {\r\n isArticle = true;\r\n return;\r\n }\r\n });\r\n\r\n arContractPlannedExpensesBlock.blockVisibility = isArticle ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n\r\n /**\r\n * Установка видимости блока \"Плановые расходы к перевыставлению на ремонтно-восстановительные работы\" в\r\n * зависимости от наличия в договоре статьи 12.1.\r\n */\r\n private async SetVisibilityForConsolidatingLawyerBlockAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n var arContractConsolidatingLawyerBlock = context.model.blocks.get('ConsolidatingLawyerBlock');\r\n if (arContractConsolidatingLawyerBlock == null)\r\n {\r\n return;\r\n }\r\n\r\n let isVisible = tryGetFromInfo(card.info, \"showConsolidatingLawyer\", false);\r\n arContractConsolidatingLawyerBlock.blockVisibility = isVisible ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n\r\n /**Установка запрета редактирования всех секций кроме паспорта проекта и табличную часть и действия по перевыставлениям. \r\n * Запрет всем ролям и сотрудникам только для исторических документов. */\r\n private SetBlockControlsForHistoryContracts(context: ICardUIExtensionContext, card: Card)\r\n { \r\n if (this.IsLocked(card) == false)\r\n {\r\n return;\r\n }\r\n\r\n // таблица со сторонами\r\n const arContractPartnersTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n this.SetButtonUnderTableVisibility(arContractPartnersTable);\r\n\r\n // таблицы со статьями\r\n const arContractArticleIdp = CdUIHelper.GetUIControl(context, \"ContractArticleIdp\");\r\n const arContractArticleIdp1 = CdUIHelper.GetUIControl(context, \"ContractArticleIdp1\");\r\n const arContractArticleIdp2 = CdUIHelper.GetUIControl(context, \"ContractArticleIdp2\");\r\n\r\n this.SetButtonUnderTableVisibility(arContractArticleIdp);\r\n this.SetButtonUnderTableVisibility(arContractArticleIdp1);\r\n this.SetButtonUnderTableVisibility(arContractArticleIdp2);\r\n }\r\n\r\n /** Установка видимости кнопок под таблицей. */\r\n private SetButtonUnderTableVisibility(gridView: GridViewModel | null)\r\n {\r\n if (gridView == null)\r\n {\r\n return;\r\n }\r\n\r\n // скроем кнопки справа\r\n var conArticleIdpRightButtons = gridView.rightButtons;\r\n\r\n conArticleIdpRightButtons.forEach(iButton => {\r\n iButton.setVisibility(Visibility.Collapsed);\r\n });\r\n }\r\n\r\n /** Проверка договора на историчность. */\r\n private IsLocked(card: Card)\r\n {\r\n const section = card.sections.tryGet('ArContractsUser');\r\n let extID = section!.fields.tryGetField('ExtID');\r\n if (extID == null)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Обработчик табличного контрола с первоначальными суммами. */\r\n private async WorkWithArticlesInitialControlAsync(context: ICardUIExtensionContext) {\r\n const arContractArticleIdp = CdUIHelper.GetUIControl(context, \"ContractArticleIdp\");\r\n\r\n if (arContractArticleIdp === null || arContractArticleIdp === undefined){\r\n return;\r\n }\r\n\r\n arContractArticleIdp.rowInitialized.add(async e => \r\n { \r\n if(e.action != GridRowAction.Deleting)\r\n {\r\n // подписка на контрол со стикерами внутри\r\n if (e.rowModel != null) {\r\n let arArticleStickersTableControl = e.rowModel.controlsBag.find(x => x.name == \"ArArticleStickersTableControl\");\r\n \r\n // получим флаг разрешающий редактирование стикеров\r\n // TODO временно отключаем\r\n // let isAllowedEditSticker: boolean = tryGetFromInfo(context.card.info, \"isAllowedEditSticker\", false);\r\n \r\n if (arArticleStickersTableControl)\r\n {\r\n // Подписка на отображение контролов Excel стикерных статей.\r\n this.SubscribeOnArticleStickersControlsFromExcel(arArticleStickersTableControl as GridViewModel);\r\n }\r\n\r\n var IsNotAutoGenerated = true;\r\n if(e.row.get(\"AutoGenerated\")!=null && e.row.get(\"AutoGenerated\")==true)\r\n IsNotAutoGenerated = false;\r\n // если ДД - ИДП, то запретим ввод суммы (будем заполнять из стикеров)\r\n // и откроем доступ к стикерам\r\n if (arArticleStickersTableControl\r\n && (PkClientHelper.GetFieldValue(context.model.card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false)\r\n && (PkClientHelper.GetFieldValue(context.model.card, \"ArContractsUser\", \"GuidCRM\") == null)\r\n && IsNotAutoGenerated) {\r\n // if (isAllowedEditSticker) {\r\n PkContractUIHelper.ProhibitionEnteringAmountArticle(e, arArticleStickersTableControl);\r\n await this.SubscribeOnArticleStickersControlAsync(arArticleStickersTableControl as GridViewModel, e, context.model.card, \"ArContractArticleStickersInitial\", \"ArContractArticleIdpInitial\");\r\n // } \r\n \r\n // Расчет суммы по стикерам для статьи при открытии формы.\r\n await PkContractUIHelper.CalcAmountFromContractArticleStickersAsync(context.model.card, e.row.rowId, \"ArContractArticleStickersInitial\", \"ArContractArticleIdpInitial\");\r\n }\r\n\r\n if (arArticleStickersTableControl\r\n && !(PkClientHelper.GetFieldValue(context.model.card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false)) {\r\n\r\n arArticleStickersTableControl.isReadOnly = false;\r\n }\r\n }\r\n\r\n // Заполнение виртуального поля с ID указанных стикеров к текущей выбранной статье для передачи в маппинг представления.\r\n PkContractUIHelper.SetVirualArticleStickersFillIDs(context.model.card, e.row, \"ArContractArticleIdpInitial\", \"ArContractArticleStickersInitial\");\r\n\r\n // делаем поля кроме Аванса\\ условия оплаты\\ название этапа недоступными для изменения в статьях из ЕФС (АУД)\r\n let acuSection = context.model.card.sections.tryGet('ArContractsUser');\r\n if (acuSection && EfsAudMethodIds.includes(acuSection.fields.tryGet('MethodEmbroideryOnStickersID'))) {\r\n e.rowModel?.controlsBag\r\n .filter(c => c.name != null && !['StageNameArticleControl', 'AmountPrepaymentArticleControl', 'PercentPrepaymentArticleControl', 'PaymentTermArticleControl'].includes(c.name))\r\n .forEach(c => c.isReadOnly = true);\r\n }\r\n\r\n // Валидация выбора статьи БК в диалоговом окне если не указан объект с выводом ошибки и очисткой поля\r\n let costItem = e.rowModel!.controlsBag.find(x => x.name === 'CostItem') as AutoCompleteEntryViewModel;\r\n if (costItem) {\r\n costItem.valueSet.add((e1) => {\r\n let arContractArticleIdpInitial = context.model.card.sections.tryGet('ArContractArticleIdpInitial');\r\n if ((e.row.tryGetField(\"CostItemName\")?.$value ?? null) === e1.item.displayText &&\r\n (PkClientHelper.GetFieldValue(context.model.card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false) &&\r\n (e.row.tryGetField(\"ObjectObjectID\")?.$value ?? null) == null && arContractArticleIdpInitial) \r\n {\r\n arContractArticleIdpInitial?.rows.forEach(row => {\r\n if (row.rowId == e.row.rowId) {\r\n row.set(\"CostItemID\", null);\r\n row.set(\"CostItemArticle\", null);\r\n row.set(\"CostItemName\", null);\r\n row.set(\"CostItemMdsID\", null);\r\n row.set(\"CostItemIdpItemCode\", null);\r\n }\r\n });\r\n showError(\"Для добавления статьи необходимо заполнить объект ИДП\");\r\n }\r\n });\r\n }\r\n\r\n // Валидация выбора статьи БК в диалоговом окне если не указан объект\r\n e.row.fieldChanged.add(async e1 => \r\n { \r\n if (e1.fieldName == \"CostItemID\"\r\n && (PkClientHelper.GetFieldValue(context.model.card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false))\r\n {\r\n let objectExtID = e.row.tryGetField(\"ObjectObjectID\")?.$value ?? null;\r\n if (objectExtID != null) \r\n {\r\n let arContractArticleStickersInitial = context.model.card.sections.tryGet('ArContractArticleStickersInitial');\r\n if (arContractArticleStickersInitial) \r\n {\r\n // очистка стикеров\r\n PkContractUIHelper.ClearStickersSectionByParentRowID(arContractArticleStickersInitial, e.row.rowId);\r\n // очистим сумму\r\n e.row.set(\"Amount\", \"0\", DotNetType.Decimal);\r\n if (e1.fieldValue != null) \r\n {\r\n // выполним заполнение стикеров в секцию arContractArticleStickersInitial\r\n await PkContractUIHelper.SetAndFillArticleStickerRowAsync(context, arContractArticleStickersInitial, e1.fieldValue, objectExtID, e.row.rowId);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n // закрытие формы\r\n arContractArticleIdp.rowEditorClosed.add(e => {\r\n let arContractArticleStickersInitial = context.card.sections.tryGet(\"ArContractArticleStickersInitial\")\r\n if (arContractArticleStickersInitial == null) {\r\n return;\r\n }\r\n\r\n if (!e.cancel) {\r\n // удаляем пустые стикеры при закрытии (не для исторических)\r\n if (!ArFileHelper.CheckIsHistorical(context.card))\r\n {\r\n PkContractUIHelper.ClearStickersWhenFormClosed(arContractArticleStickersInitial);\r\n }\r\n }\r\n });\r\n\r\n arContractArticleIdp.rowEditorClosing.add(e => {\r\n let arContractArticleStickersInitial = context.card.sections.tryGet(\"ArContractArticleStickersInitial\")\r\n if (arContractArticleStickersInitial == null) {\r\n return;\r\n }\r\n\r\n if (!e.cancel && !PkContractUIHelper.CheckClarifyingStickersWhenFormClosed(arContractArticleStickersInitial)) {\r\n e.cancel = true;\r\n }\r\n });\r\n \r\n arContractArticleIdp.rowInvoked.add(async e => {\r\n if (e.rowModel != null) {\r\n let arArticleStickersTableControl = e.rowModel.controlsBag.find(x => x.name == \"ArArticleStickersTableControl\");\r\n if (arArticleStickersTableControl) {\r\n this.ArtilceStickersControlVisibilityOfAnalyticsStickers(context.model.card, e, arArticleStickersTableControl as GridViewModel);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /// \r\n /// Нужно ли блокировать таблицы стикеров для редактирования\r\n /// Открываем для редактирования контролы AmountStickerControl CostItemStickerControl NextRowButton\r\n /// \r\n private IsArticleTableControlReadonly(control: IControlViewModel){\r\n return !(control.name == \"AmountStickerControl\" || control.name == \"CostItemStickerControl\"|| control.name == \"NextRowButton\");\r\n }\r\n\r\n /** Подписка на изменение стикерных статей. */\r\n private async SubscribeOnArticleStickersControlAsync(\r\n arArticleStickersTableControl: GridViewModel, \r\n eMain: GridRowEventArgs, \r\n card: Card,\r\n stickerSectionName: string,\r\n articleSectionName: string) \r\n {\r\n let nextOpenRow: GridRowViewModel | undefined;\r\n let nextOpenRowBool = false;\r\n\r\n arArticleStickersTableControl.rowInitializing.add(e => \r\n {\r\n if (e.action != GridRowAction.Deleting) {\r\n // сделаем доступными для редактирования только ввод суммы и статьи\r\n if (e.rowModel != null) {\r\n e.rowModel.controlsBag.forEach(control => {\r\n control.isReadOnly = this.IsArticleTableControlReadonly(control);\r\n\r\n // отобразим контрол с текущей суммой стикера в родителе если он не пустой и он есть\r\n if (control.name == \"InitialAmountControl\") \r\n {\r\n control.controlVisibility = e.row.tryGetField(\"InitialAmount\")?.$value != null ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n });\r\n\r\n // ==== быстрый ввод стикеров ====\r\n const arContractArticleStickersInitial = card.sections.tryGet(stickerSectionName);\r\n if (!arContractArticleStickersInitial) {\r\n return;\r\n }\r\n\r\n // установка курсора в поле Сумма изменения\r\n let stickerAmountControl = e.rowModel?.controlsBag.find(x => x.name == \"AmountStickerControl\") as DecimalBoxViewModel;\r\n if (stickerAmountControl) {\r\n PkUIHelper.SetFocusInControlAndSelectText(stickerAmountControl);\r\n // подписка на нажаие клавишы Enter для поля Сумма изменения для открытия следующей строки\r\n stickerAmountControl.keyDown.add(async ee => {\r\n if (ee.event.key === 'Enter') {\r\n nextOpenRowBool = true;\r\n ee.control.isFocused = false;\r\n nextOpenRow = await PkUIHelper.NextRowButtonClickAsync(e, arContractArticleStickersInitial, arArticleStickersTableControl);\r\n }\r\n });\r\n }\r\n\r\n // подписка на кнопку Следующая строка\r\n let nextRowButton = e.rowModel.controlsBag.find(x => x.name == \"NextRowButton\") as ButtonViewModel;\r\n if (nextRowButton != null) {\r\n nextRowButton.onClick = async () => {\r\n nextOpenRowBool = true;\r\n nextOpenRow = await PkUIHelper.NextRowButtonClickAsync(e, arContractArticleStickersInitial, arArticleStickersTableControl);\r\n }\r\n }\r\n // ==== быстрый ввод стикеров ====\r\n }\r\n\r\n // Валидация выбора статьи БК в диалоговом окне если не указан объект\r\n e.row.fieldChanged.add(e1 => \r\n { \r\n if (e1.fieldName == \"CostItemID\" && e1.fieldValue != null && (eMain.row.tryGetField(\"ObjectID\")?.$value ?? null) == null\r\n && (PkClientHelper.GetFieldValue(card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false) == true)\r\n {\r\n e.row.set(\"CostItemMdsID\", null);\r\n e.row.set(\"CostItemIdpItemCode\", null);\r\n e.row.set(\"CostItemName\", null);\r\n e.row.set(\"CostItemID\", null);\r\n showError(\"Для добавления статьи необходимо заполнить объект ИДП\");\r\n }\r\n });\r\n\r\n // Заполнение виртуального поля с ID указанных стикеров к текущей выбранной статье для передачи в маппинг представления.\r\n PkContractUIHelper.SetVirualArticleStickersFillIDs(card, eMain.row, articleSectionName, stickerSectionName);\r\n }\r\n });\r\n\r\n arArticleStickersTableControl.rowInvoked.add(async e => \r\n {\r\n if (e.action == GridRowAction.Deleting) {\r\n if (e.row.get(\"ChangeStickerRowID\") != null) {\r\n await showMessage(\"Запрещено удалять стикеры полученные из родительского договора. При необходимости выставить сумму 0\");\r\n e.cancel = true;\r\n }\r\n else {\r\n const dialogResult = await showConfirm(\"Действительно удалить стикерную статью?\", \"Удаление стикерной статьи\");\r\n if (!dialogResult) {\r\n e.cancel = true;\r\n }\r\n else {\r\n // Расчет суммы по стикерам для статьи при закрытии формы по стикерам.\r\n await PkContractUIHelper.CalcAmountFromContractArticleStickersAsync(card, e.row.parentRowId, stickerSectionName, articleSectionName);\r\n }\r\n }\r\n if(e.cancel != true)\r\n {\r\n // Заполнение виртуального поля с ID указанных стикеров к текущей выбранной статье для передачи в маппинг представления.\r\n PkContractUIHelper.SetVirualArticleStickersFillIDs(card, eMain.row, articleSectionName, stickerSectionName, e.row.rowId);\r\n this.isNeedValidationArticle = true;\r\n }\r\n }\r\n\r\n // если на главной форме не заполнен объект\r\n if ((eMain.row.tryGetField(\"ObjectID\")?.$value ?? null) == null && (PkClientHelper.GetFieldValue(card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false) == true)\r\n {\r\n showError(\"Для добавления статьи необходимо заполнить объект ИДП\");\r\n e.cancel = true;\r\n }\r\n\r\n // если на главной форме не заполнена статья\r\n if ((eMain.row.tryGetField(\"CostItemID\")?.$value ?? null) == null && (PkClientHelper.GetFieldValue(card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false) == true)\r\n {\r\n showError(\"Для добавления стикерной статьи необходимо указать Статью бюджетного классификатора\");\r\n e.cancel = true;\r\n }\r\n });\r\n\r\n // подписка на закрытие\r\n arArticleStickersTableControl.rowEditorClosed.add(async e => { \r\n if (e.action != GridRowAction.Deleting) \r\n {\r\n if (nextOpenRow && nextOpenRowBool) {\r\n nextOpenRowBool = false;\r\n await arArticleStickersTableControl.editRow(nextOpenRow);\r\n }\r\n else {\r\n nextOpenRowBool = false;\r\n nextOpenRow = undefined;\r\n }\r\n }\r\n\r\n // Расчет суммы по стикерам для статьи при закрытии формы по стикерам.\r\n await PkContractUIHelper.CalcAmountFromContractArticleStickersAsync(card, e.row.parentRowId, stickerSectionName, articleSectionName);\r\n });\r\n \r\n arArticleStickersTableControl.rowEditorClosing.add(async e => { \r\n if (e.row.getField(\"CostItemID\") == null || e.row.getField(\"Amount\") == null)\r\n {\r\n e.cancel = true;\r\n await showError(\"Выберите стикерную статью и заполните сумму по ней\");\r\n }\r\n });\r\n }\r\n\r\n /** Подписка на отображение контролов Excel стикерных статей. */\r\n private async SubscribeOnArticleStickersControlsFromExcel(arArticleStickersTableControl: GridViewModel) {\r\n arArticleStickersTableControl.rowInitializing.add(async e => \r\n {\r\n if (e.action != GridRowAction.Deleting) {\r\n // если контрол заполненный из excel не пустой то отображаем его\r\n if (e.rowModel != null) {\r\n e.rowModel.controlsBag.forEach(control => {\r\n ArContractControlsWithField.StickerFormControlsFromExcel.forEach(controlFromExcel => {\r\n if (control.name == controlFromExcel.ControlName) {\r\n var valueField = e.row.getField(controlFromExcel.FieldName);\r\n control.controlVisibility = valueField != null ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Расчет видимости таблицы стикеров. Скрывается если флаг \"Только стикерный учет\". Становится видна если вносятся изменения в статьи.*/\r\n private async ArtilceStickersControlVisibilityOfAnalyticsStickers(card: Card, e: GridRowEventArgs, arArticleStickersTableControl: GridViewModel) {\r\n if (e.row.state != CardRowState.Inserted && PkClientHelper.GetFieldValue(card, \"ArContractsUser\", \"AnalyticsStickers\") == true) {\r\n arArticleStickersTableControl.controlVisibility = Visibility.Collapsed; \r\n \r\n // таймаут, чтобы сразу при открытии не стала видимой\r\n // + в вебе почему то при закрытии строк без редактирования, суммы помечаются как измененные. найти где баг\r\n setTimeout(() => { e.row.fieldChanged.add(async () => {\r\n arArticleStickersTableControl.controlVisibility = Visibility.Visible;\r\n });\r\n }, 1000); \r\n }\r\n }\r\n\r\n /** Обработчик табличного контрола с текущими суммами. */\r\n private async WorkWithArticlesCurrentControl(context: ICardUIExtensionContext) {\r\n const contractArticleIdpVirtualNew = CdUIHelper.GetUIControl(context, \"ContractArticleIdpVirtualNew\");\r\n\r\n if (contractArticleIdpVirtualNew === null || contractArticleIdpVirtualNew === undefined){\r\n return;\r\n }\r\n\r\n contractArticleIdpVirtualNew.rowInitialized.add(async e => \r\n { \r\n if(e.action != GridRowAction.Deleting)\r\n {\r\n // подписка на контрол со стикерами внутри\r\n if (e.rowModel != null) {\r\n let arArticleStickersTableControl = e.rowModel.controlsBag.find(x => x.name == \"ArArticleStickersTableControl\");\r\n \r\n if (arArticleStickersTableControl)\r\n {\r\n // Подписка на отображение контролов Excel стикерных статей.\r\n this.SubscribeOnArticleStickersControlsFromExcel(arArticleStickersTableControl as GridViewModel);\r\n //this.ArtilceStickersControlVisibilityOfAnalyticsStickers(context.model.card, e, arArticleStickersTableControl as GridViewModel);\r\n }\r\n\r\n var IsNotAutoGenerated = true;\r\n if(e.row.get(\"AutoGenerated\")!=null && e.row.get(\"AutoGenerated\")==true)\r\n IsNotAutoGenerated = false;\r\n // если ДД - ИДП, то запретим ввод суммы (будем заполнять из стикеров)\r\n // и откроем доступ к стикерам\r\n if (arArticleStickersTableControl\r\n && (PkClientHelper.GetFieldValue(context.model.card, \"ArContractVirtual\", \"CategoryIsIDP\") ?? false)\r\n && (PkClientHelper.GetFieldValue(context.model.card, \"ArContractsUser\", \"GuidCRM\") == null)\r\n && IsNotAutoGenerated) {\r\n PkContractUIHelper.ProhibitionEnteringAmountArticle(e, arArticleStickersTableControl, this._isReadOnlyStickers);\r\n await this.SubscribeOnArticleStickersControlAsync(arArticleStickersTableControl as GridViewModel, e, context.model.card, \"ArContractArticleStickers\", \"ArContractArticleIdp\");\r\n\r\n // Расчет суммы по стикерам для статьи при открытии формы.\r\n await PkContractUIHelper.CalcAmountFromContractArticleStickersAsync(context.model.card, e.row.rowId, \"ArContractArticleStickers\", \"ArContractArticleIdp\");\r\n }\r\n }\r\n }\r\n });\r\n\r\n // закрытие формы\r\n contractArticleIdpVirtualNew.rowEditorClosed.add(e => {\r\n let arContractArticleStickers = context.card.sections.tryGet(\"ArContractArticleStickers\")\r\n if (arContractArticleStickers == null) {\r\n return;\r\n }\r\n \r\n if (!e.cancel)\r\n {\r\n // удаляем пустые стикеры при закрытии (не для исторических)\r\n if (!ArFileHelper.CheckIsHistorical(context.card))\r\n {\r\n PkContractUIHelper.ClearStickersWhenFormClosed(arContractArticleStickers);\r\n }\r\n }\r\n });\r\n\r\n contractArticleIdpVirtualNew.rowEditorClosing.add(async e => {\r\n let arContractArticleStickers = context.card.sections.tryGet(\"ArContractArticleStickers\")\r\n if (arContractArticleStickers == null) {\r\n return;\r\n }\r\n\r\n if (!e.cancel && !PkContractUIHelper.CheckClarifyingStickersWhenFormClosed(arContractArticleStickers)) {\r\n e.cancel = true;\r\n }\r\n else{\r\n await this.CheckConfirmingArticleFields(context.card, e);\r\n }\r\n });\r\n\r\n contractArticleIdpVirtualNew.rowInvoked.add(async e => {\r\n if (e.rowModel != null) {\r\n let arArticleStickersTableControl = e.rowModel.controlsBag.find(x => x.name == \"ArArticleStickersTableControl\");\r\n if (arArticleStickersTableControl) {\r\n this.ArtilceStickersControlVisibilityOfAnalyticsStickers(context.model.card, e, arArticleStickersTableControl as GridViewModel);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private IsCRM(card: Card): boolean {\r\n return PkClientHelper.GetFieldValue(card, \"ArContractsUser\", \"GuidCRM\") != null && PkClientHelper.GetFieldValue(card, \"ArContractsUser\", \"GuidCRM\") != \"\";\r\n }\r\n\r\n /** Проверка для поля \"Условная единица\" */\r\n private async CheckCurrencyAndYeControlsAsync(context: ICardUIExtensionContext, card: Card) {\r\n const CurrencyRubID = 'acaabdfc-2c88-472f-a861-1813bfafe49d';\r\n let acuSection = card.sections.tryGet(\"ArContractsUser\");\r\n \r\n if (!acuSection)\r\n {\r\n return;\r\n }\r\n \r\n acuSection.fields.fieldChanged.add(e =>\r\n { \r\n if (e.fieldName == \"CurrencyID\" && e.fieldValue)\r\n { \r\n var isYe = PkClientHelper.GetFieldValue(card, \"ArContractsUser\", \"IsYE\") as boolean;\r\n if (Guid.equals(e.fieldValue, CurrencyRubID) && isYe)\r\n {\r\n showMessage(\"Выбранная валюта не может быть в условных единицах\");\r\n }\r\n\r\n var isYeControl = CdUIHelper.GetUIControl(context, \"IsYE\");\r\n if (isYeControl)\r\n {\r\n if (Guid.equals(e.fieldValue, CurrencyRubID))\r\n {\r\n isYeControl.isReadOnly = true;\r\n acuSection!.fields.set(\"IsYE\", createTypedField(false, DotNetType.Boolean));\r\n }\r\n else\r\n {\r\n isYeControl.isReadOnly = false;\r\n }\r\n } \r\n }\r\n\r\n if (e.fieldName == \"IsYE\" && e.fieldValue)\r\n {\r\n var currencyId = PkClientHelper.GetFieldValue(card, \"ArContractsUser\", \"CurrencyID\");\r\n if (Guid.equals(currencyId, CurrencyRubID) && e.fieldValue)\r\n {\r\n showMessage(\"Выбранная валюта не может быть в условных единицах\");\r\n //acuSection!.fields[\"IsYE\"] = false;\r\n acuSection!.fields.set(\"IsYE\", createTypedField(false, DotNetType.Boolean));\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Добавление возможности редактирования реквизитов \"Исполнитель\", \"Ответственный за расчеты\", \"Подписант\" по автоматизированным сторонам ДС */\r\n private async SetReadOnlyControlsInAdditionalAgreementKindAsync(context: ICardUIExtensionContext, card: Card) { \r\n let arContractsUser = card.sections.tryGet(\"ArContractsUser\");\r\n const ArContractPartnersTable = context.model.controls.get('ArContractPartnersTable') as GridViewModel;\r\n \r\n if (!arContractsUser || !ArContractPartnersTable)\r\n {\r\n return;\r\n }\r\n const contractKindID = arContractsUser?.fields.get('ContractKindID');\r\n if (contractKindID && (Guid.equals(contractKindID, TessaArContractKinds.AdditionalAgreementKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID)\r\n || Guid.equals(contractKindID, TessaArContractKinds.CancellationAgreementKindTessaID))){\r\n ArContractPartnersTable.rowInitialized.add(e => {\r\n \r\n let isPartnerControlsReadOnly = !e.row.tryGet('PartnerAutomated') ?? true;\r\n let PartnerPerformer = e.rowModel?.controlsBag.find(x => x.name == \"PartnerPerformer\");\r\n let PartnerAccountant = e.rowModel?.controlsBag.find(x => x.name == \"PartnerAccountant\");\r\n let PartnerSigned = e.rowModel?.controlsBag.find(x => x.name == \"PartnerSigned\");\r\n let PartnerDepartment = e.rowModel?.controlsBag.find(x => x.name == \"PartnerDepartment\"); \r\n \r\n PartnerPerformer!.isReadOnly = isPartnerControlsReadOnly;\r\n PartnerAccountant!.isReadOnly = isPartnerControlsReadOnly;\r\n PartnerSigned!.isReadOnly = isPartnerControlsReadOnly;\r\n PartnerDepartment!.isReadOnly = isPartnerControlsReadOnly; \r\n });\r\n }\r\n }\r\n\r\n /** Установка прав доступа к контролам */\r\n private async SetSelectTypeProcedureButtonVisibilityAsync(context: ICardUIExtensionContext) { \r\n var selectTenderButton = context.model.controls.get(\"SelectTypeProcedureButton\") as ButtonViewModel;\r\n let cardPermissions = context.model.card.permissions.resolver.getCardPermissions();\r\n let fieldPermissions = context.model.card.permissions.resolver.getFieldPermissions(\"ArContractsUser\",\"TypeProcedureID\");\r\n \r\n let visible = PermissionsSharedHelper.IsEditableField(cardPermissions, fieldPermissions);\r\n selectTenderButton.controlVisibility = visible ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n\r\n /** Обработка нажатия выбора для поля \"Тип процедуры\" */\r\n private async SelectTypeProcedureButtonControlAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let selectTenderButton = context.model.controls.get(\"SelectTypeProcedureButton\") as ButtonViewModel;\r\n selectTenderButton.onClick = async () => {\r\n let arContractsUserSection = card.sections.tryGet(\"ArContractsUser\");\r\n let arContractPartnersSection = card.sections.tryGet(\"ArContractPartners\");\r\n let arContractSectionVirtual = card.sections.tryGet(\"ArContractVirtual\");\r\n\r\n if(!arContractsUserSection || !arContractPartnersSection || !arContractSectionVirtual) return;\r\n\r\n var contractTypeID = arContractsUserSection.fields.get('ContractTypeID');\r\n var amountTotal = arContractsUserSection.fields.get('AmountTotal');\r\n var contractKindID = arContractsUserSection.fields.get('ContractKindID');\r\n var typeProcedureMappingData = arContractSectionVirtual.fields.get('TypeProcedureMappingData');\r\n var parentCardID = arContractsUserSection.fields.get('ParentCardID');\r\n\r\n if(arContractPartnersSection.rows.length < 2)\r\n {\r\n showError(\"Необходимо заполнить участников процесса.\");\r\n return;\r\n }\r\n \r\n if(contractTypeID == null)\r\n {\r\n showError(\"Необходимо заполнить тип договора.\");\r\n return; \r\n }\r\n\r\n if (!(contractTypeID == 3 || \r\n (contractTypeID == 0 && arContractPartnersSection.rows.some(x => x.get('ContractCategoryID') == \"BF8CD26E-3B5B-4281-9139-A5A98FACCE0C\"))))\r\n {\r\n if(amountTotal == null)\r\n {\r\n showError(\"Необходимо указать первоначальную сумму.\");\r\n return;\r\n }\r\n }\r\n\r\n const parameters = Array();\r\n\r\n if(card.id != null)\r\n {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = \"CardID\";\r\n parameterMetadata.caption = \"Код карточки\";\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n const requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', card.id)\r\n .asRequestParameter();\r\n \r\n parameters.push(requestParameter);\r\n }\r\n\r\n if(contractKindID != null)\r\n {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = \"ContractKind\";\r\n parameterMetadata.caption = \"Вид документа\";\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n const requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', contractKindID)\r\n .asRequestParameter();\r\n \r\n parameters.push(requestParameter);\r\n }\r\n\r\n if(typeProcedureMappingData != null)\r\n {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = \"TypeProcedureMappingData\";\r\n parameterMetadata.caption = \"Маппинг\";\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.String;\r\n parameterMetadata.multiple = false;\r\n\r\n const requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', typeProcedureMappingData)\r\n .asRequestParameter();\r\n \r\n parameters.push(requestParameter);\r\n }\r\n\r\n if(parentCardID != null)\r\n {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = \"ParentCardID\";\r\n parameterMetadata.caption = \"Родительский документ\";\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Guid;\r\n parameterMetadata.multiple = false;\r\n\r\n const requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', parentCardID)\r\n .asRequestParameter();\r\n \r\n parameters.push(requestParameter);\r\n } \r\n \r\n if(amountTotal != null)\r\n {\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = \"AmountTotal\";\r\n parameterMetadata.caption = \"Сумма всего в рублях\";\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.String;\r\n parameterMetadata.multiple = false;\r\n\r\n const requestParameter = new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', amountTotal)\r\n .asRequestParameter();\r\n \r\n parameters.push(requestParameter);\r\n } \r\n \r\n let selectedItem: SelectedValue | null = null;\r\n await showViewsDialog(\r\n \"PkProcedureType\",\r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n selectedItem = value;\r\n \r\n if (isNullOrUndefined(selectedItem)\r\n || isNullOrUndefined(selectedItem.selectedRow)){\r\n return;\r\n }\r\n \r\n let row = selectedItem.selectedRow;\r\n arContractsUserSection?.fields.set('TypeProcedureID', row.get(\"ProcedID\"), DotNetType.Guid);\r\n arContractsUserSection?.fields.set('TypeProcedureName', row.get(\"ProcedName\"), DotNetType.String);\r\n },\r\n parameters\r\n );\r\n }; \r\n }\r\n\r\n /** В ДС для доходной стороны запретить добавление статей */\r\n private async SetReadOnlyCostItemInAdditionalAgreementAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let contractKindID: guid | null = acuSection!.fields.get(\"ContractKindID\");\r\n \r\n let isNewContract:boolean = card.info.isNewContract?.$value;\r\n\r\n if (contractKindID != null \r\n && (Guid.equals(contractKindID, TessaArContractKinds.AdditionalAgreementKindTessaID))\r\n && isNewContract){\r\n \r\n let aContractPartners = card.sections.get('ArContractPartners');\r\n let sellerExtID = aContractPartners?.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 1)?.tryGet(\"PartnerExternalID\"); // продавец\r\n let buyerExtID = aContractPartners?.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 0)?.tryGet(\"PartnerExternalID\");; // покупатель\r\n \r\n let isIDP:boolean = aContractPartners?.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 1)?.tryGet(\"ContractCategoryIsOIDP\") ?? false;\r\n \r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractPartnerstInfoRequest;\r\n request.info[\"PartnerExternalID\"] = createTypedField(buyerExtID, DotNetType.Int64); \r\n \r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n return;\r\n }\r\n \r\n let isVgo:boolean = response.info[\"IsInPerimetr\"];\r\n\r\n let arContractArticleIdpControl = context.model.controls.get('ContractArticleIdp') as GridViewModel;\r\n arContractArticleIdpControl.rowInitializing.add(e => { \r\n if (e.action == GridRowAction.Inserted && e.row.tryGetField(\"PartnerExternalID\")?.$value == sellerExtID\r\n && !isIDP && isVgo) \r\n {\r\n e.row.set('CostItemID', createTypedField('b2d01595-1b58-45c3-9956-6f24f261e516', DotNetType.Guid));\r\n e.row.set('CostItemMdsID',createTypedField(64, DotNetType.Int64)); \r\n e.row.set('CostItemName',createTypedField(\"Техническая статья\", DotNetType.String));\r\n \r\n if (e.rowModel!.controls.has('CostItem')) {\r\n let costItemControl = e.rowModel!.controls.get('CostItem');\r\n costItemControl!.isReadOnly = true;\r\n } \r\n } \r\n }); \r\n }\r\n }\r\n\r\n private DiadocMarkEnable(context: ICardUIExtensionContext, cardModel: ICardModel)\r\n {\r\n let acpSection = cardModel.card.sections.tryGet(\"ArContractPartners\");\r\n if (acpSection)\r\n {\r\n this.SetDiadocMarkEnable(context, cardModel, acpSection);\r\n\r\n acpSection.rows.collectionChanged.add(_ =>\r\n {\r\n if (acpSection)\r\n this.SetDiadocMarkEnable(context, cardModel, acpSection);\r\n });\r\n }\r\n }\r\n\r\n private SetDiadocMarkEnable(context: ICardUIExtensionContext, cardModel: ICardModel, acpSection: CardSection)\r\n {\r\n let eDocumentBasedOnID: guid | null = null;\r\n let arContractsUserSection = cardModel.card.sections.tryGet(\"ArContractsUser\");\r\n if (arContractsUserSection) {\r\n eDocumentBasedOnID = arContractsUserSection.fields.get('EDocumentBasedOnID');\r\n }\r\n var partnersCount = acpSection.rows.filter(x => x.state != CardRowState.Deleted).length;\r\n let diadocSignControl = context.model.controls.get('DiadocSignControl');\r\n if (diadocSignControl) {\r\n diadocSignControl.isReadOnly = partnersCount == 2 && eDocumentBasedOnID == null ? false : true;\r\n }\r\n }\r\n\r\n private async CopyArticleInVgoAssignmentKindAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let acuSection = card.sections.tryGet(\"ArContractsUser\");\r\n let contractKindID = acuSection!.fields.tryGet(\"ContractKindID\");\r\n\r\n if (contractKindID != null \r\n && (Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID)))\r\n {\r\n \r\n let aContractPartners = card.sections.get('ArContractPartners');\r\n let cedentExtID = aContractPartners?.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 3)?.tryGet(\"PartnerExternalID\"); // цедент\r\n let assigneeExtID = aContractPartners?.rows.find(x => x.has('RoleID') && x.tryGet('RoleID') == 4)?.tryGet(\"PartnerExternalID\");; // цессионарий\r\n \r\n \r\n let isVgo:boolean = await this.GetArContractPartnerstInfoAutomatedAsync(cedentExtID) \r\n && await this.GetArContractPartnerstInfoAutomatedAsync(assigneeExtID);\r\n\r\n let arContractArticleIdpControl = context.model.controls.get('ContractArticleIdp') as GridViewModel;\r\n \r\n arContractArticleIdpControl.rowInitializing.add(e => { \r\n let extID = e.row.tryGetField(\"PartnerExternalID\")?.$value; \r\n if (e.action == GridRowAction.Inserted && (extID == cedentExtID || extID == assigneeExtID)) \r\n {\r\n let costItemID = extID == cedentExtID ? '1968e31e-2901-41d9-84f1-087e34a401e4' : '6707c9f0-e912-498c-bb6d-9babf7a3fae5';\r\n let costItemMdsID = extID == cedentExtID ? 16 : 167;\r\n let costItemName = extID == cedentExtID ? 'Доходы от уступки и погашения прав требований' : 'Расходы от уступки и погашения прав требований';\r\n\r\n e.row.set('CostItemID', createTypedField(costItemID, DotNetType.Guid));\r\n e.row.set('CostItemMdsID',createTypedField(costItemMdsID, DotNetType.Int64)); \r\n e.row.set('CostItemName',createTypedField(costItemName, DotNetType.String));\r\n \r\n if(extID == cedentExtID)\r\n {\r\n e.row.set(\"AutoGenerated\", createTypedField(true, DotNetType.Boolean));\r\n e.row.set(\"CostItemIsIncome\", createTypedField(true, DotNetType.Boolean));\r\n }\r\n\r\n if (e.rowModel!.controls.has('CostItem')) {\r\n let costItemControl = e.rowModel!.controls.get('CostItem');\r\n costItemControl!.isReadOnly = true;\r\n } \r\n } \r\n }); \r\n\r\n var arContractArticleIdpSection = card.sections.tryGet(\"ArContractArticleIdpInitial\");\r\n\r\n if(arContractArticleIdpSection && isVgo){\r\n arContractArticleIdpControl.rowEditorClosing.add(async e =>\r\n {\r\n let extID = e.row.tryGet(\"PartnerExternalID\");\r\n if (!e.cancel && e.action == GridRowAction.Inserted && (extID == cedentExtID || extID == assigneeExtID))\r\n { \r\n let row = e.row.clone();\r\n \r\n if(extID == cedentExtID)\r\n {\r\n row.set(\"CostItemID\", createTypedField('6707c9f0-e912-498c-bb6d-9babf7a3fae5', DotNetType.Guid));\r\n row.set(\"CostItemMdsID\", createTypedField(167, DotNetType.Int64));\r\n row.set(\"CostItemName\", createTypedField('Расходы от уступки и погашения прав требований', DotNetType.String));\r\n row.set(\"PartnerExternalID\", createTypedField(e.row.get(\"PartnerRelatedExternalID\"), DotNetType.Int64));\r\n row.set(\"PartnerName\", createTypedField(e.row.get(\"PartnerRelatedName\"), DotNetType.String));\r\n row.set(\"PartnerRelatedExternalID\", createTypedField(e.row.get(\"PartnerExternalID\"), DotNetType.Int64));\r\n row.set(\"PartnerRelatedName\", createTypedField(e.row.get(\"PartnerName\"), DotNetType.String)); \r\n }\r\n else if(extID == assigneeExtID)\r\n {\r\n row.set(\"CostItemID\", createTypedField('1968e31e-2901-41d9-84f1-087e34a401e4', DotNetType.Guid));\r\n row.set(\"CostItemMdsID\", createTypedField(16, DotNetType.Int64));\r\n row.set(\"CostItemName\", createTypedField('Доходы от уступки и погашения прав требований', DotNetType.String));\r\n row.set(\"PartnerExternalID\", createTypedField(e.row.get(\"PartnerRelatedExternalID\"), DotNetType.Int64));\r\n row.set(\"PartnerName\", createTypedField(e.row.get(\"PartnerRelatedName\"), DotNetType.String));\r\n row.set(\"PartnerRelatedExternalID\", createTypedField(e.row.get(\"PartnerExternalID\"), DotNetType.Int64));\r\n row.set(\"PartnerRelatedName\", createTypedField(e.row.get(\"PartnerName\"), DotNetType.String)); \r\n row.set(\"AutoGenerated\", createTypedField(true, DotNetType.Boolean));\r\n row.set(\"CostItemIsIncome\", createTypedField(true, DotNetType.Boolean));\r\n }\r\n\r\n row.rowId = Guid.newGuid();\r\n arContractArticleIdpSection!.rows.add(row);\r\n\r\n var arContractArticleIdp = card.sections.tryGet(\"ArContractArticleIdp\");\r\n let newRow = row.clone();\r\n newRow.rowId = Guid.newGuid();\r\n arContractArticleIdp?.rows.add(newRow);\r\n\r\n await this.ReargeArticleIDP(context, card);\r\n await this.ReargeCurrentArticleIDP(context, card);\r\n await this.RecalcAmountByPartner(card); \r\n } \r\n });\r\n }\r\n }\r\n }\r\n\r\n private async GetArContractPartnerstInfoAutomatedAsync(extID: any):Promise\r\n {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractPartnerstInfoRequest;\r\n request.info[\"PartnerExternalID\"] = createTypedField(extID, DotNetType.Int64); \r\n \r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n return false;\r\n }\r\n return response.info[\"Automated\"]?.$value ?? false;\r\n }\r\n\r\n // Общая логика доступности кнопки изменения статей.\r\n private SetReadOnlyChangeArticleIDPButtons(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let contractKindID: guid | null = acuSection!.fields.get(\"ContractKindID\");\r\n let stateID = card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n let changeArtileButton1 = CdUIHelper.GetUIControl(context, \"ChangeArticleIDP1\");\r\n let changeArtileButton2 = CdUIHelper.GetUIControl(context, \"ChangeArticleIDP2\"); \r\n\r\n // если это доп соглашение, то блокируем изменение, если состояние Действующий\r\n // или если IsParentFirstOrder = true (кто знает что это значит - допишите)\r\n // или если cпособ расшифровки на стикеры ЕФС (АУД) - там вообще нельзя статьи менять.\r\n if (contractKindID != null && Guid.equals(contractKindID, TessaArContractKinds.AdditionalAgreementKindTessaID)) { \r\n\r\n let methodEmbroideryOnStickersID = acuSection!.fields.tryGet(\"MethodEmbroideryOnStickersID\");\r\n let isReadOnly = (card.info.IsParentFirstOrder?.$value ?? false) || stateID == CdDocStates.Active.id || EfsAudMethodIds.includes(methodEmbroideryOnStickersID);\r\n changeArtileButton1!.isReadOnly = isReadOnly;\r\n changeArtileButton2!.isReadOnly = isReadOnly;\r\n }\r\n\r\n // ридонли в уступках, счет без договора, договор\r\n else if (contractKindID != null && (\r\n Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID) ||\r\n Guid.equals(contractKindID, TessaArContractKinds.AccountWithoutContractKindTessaID))) {\r\n changeArtileButton1!.isReadOnly = true;\r\n changeArtileButton2!.isReadOnly = true;\r\n }\r\n }\r\n\r\n /**Запрет редактирования таблицы Участники процесса. */\r\n private SetReadOnlyArContractPartnersInIntegrationsDoc(context: ICardUIExtensionContext, card: Card) {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let contractKindID: guid | null = acuSection!.fields.get(\"ContractKindID\");\r\n\r\n if(!this.IsArContractFromIntegrationsDoc(card)) { \r\n return;\r\n }\r\n\r\n let acptControl = context.model.controls.get(\"ArContractPartnersTable\") as GridViewModel;\r\n acptControl.isReadOnly = true;\r\n\r\n acptControl.rowInvoked.add(async e => {\r\n if (e.action != GridRowAction.Deleting) {\r\n var partnersKCKControl = e.rowModel!.controlsBag.find(x => x.name == \"PartnersKCKControl\");\r\n partnersKCKControl!.isReadOnly = true;\r\n\r\n var partnerRoleControl = e.rowModel!.controlsBag.find(x => x.name == \"PartnerRole\");\r\n partnerRoleControl!.isReadOnly = true;\r\n\r\n var partnerDepartmentControl = e.rowModel!.controlsBag.find(x => x.name == \"PartnerDepartment\");\r\n partnerDepartmentControl!.isReadOnly = true;\r\n\r\n var partnerPerformerControl = e.rowModel!.controlsBag.find(x => x.name == \"PartnerPerformer\");\r\n partnerPerformerControl!.isReadOnly = true;\r\n var partnerAccountantControl = e.rowModel!.controlsBag.find(x => x.name == \"PartnerAccountant\");\r\n partnerAccountantControl!.isReadOnly = true;\r\n\r\n var partnerSignedControl = e.rowModel!.controlsBag.find(x => x.name == \"PartnerSigned\");\r\n partnerSignedControl!.isReadOnly = true;\r\n\r\n if(!Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID)) {\r\n var contractCategoryControl = e.rowModel!.controlsBag.find(x => x.name == \"ContractCategoryControl\");\r\n contractCategoryControl!.isReadOnly = true;\r\n }\r\n }\r\n }); \r\n }\r\n\r\n private IsArContractFromIntegrationsDoc(card: Card) {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let contractKindID: guid | null = acuSection!.fields.get(\"ContractKindID\");\r\n let stateID = card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number; \r\n let isCanChangeContractor = card.info.isCanChangeContractor?.$value ?? true;\r\n let methodEmbroideryOnStickersID = acuSection?.fields.tryGet(\"MethodEmbroideryOnStickersID\");\r\n let stateCanModify = stateID == CdDocStates.Project.id || stateID == CdDocStates.Modification.id\r\n return Guid.equals(contractKindID, TessaArContractKinds.ContractKindTessaID) &&\r\n (this.IsCRM(card)\r\n || methodEmbroideryOnStickersID == PkMethodsEmbroideryOnStickersID.Excel\r\n || methodEmbroideryOnStickersID == PkMethodsEmbroideryOnStickersID.FromEsud\r\n || methodEmbroideryOnStickersID == PkMethodsEmbroideryOnStickersID.Script1To1\r\n || methodEmbroideryOnStickersID == PkMethodsEmbroideryOnStickersID.ConstructorOfActs\r\n || methodEmbroideryOnStickersID == PkMethodsEmbroideryOnStickersID.EFS \r\n || methodEmbroideryOnStickersID == PkMethodsEmbroideryOnStickersID.AUD && !stateCanModify\r\n || Guid.equals(acuSection?.fields.tryGet(\"ContractCategoryID\"), ArContractCategory.DocumentManagementAgreement) && !stateCanModify)\r\n || Guid.equals(contractKindID, TessaArContractKinds.AdditionalAgreementKindTessaID) && isCanChangeContractor \r\n || Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID) && isCanChangeContractor\r\n || Guid.equals(contractKindID, TessaArContractKinds.CancellationAgreementKindTessaID) && isCanChangeContractor\r\n || Guid.equals(contractKindID, TessaArContractKinds.AccountWithoutContractKindTessaID) && !stateCanModify\r\n }\r\n \r\n\r\n /// \r\n /// Проверка на соответствие условий\r\n /// 1. ПДЦ из КЦ\r\n /// 2. Документ из КД\r\n /// 3. Пользователь является автором, исполнителем или администратором\r\n /// 4. Состояние: проект или доработка\r\n /// \r\n private PdcFromKcDocumentFromKDAllowEditFields(card: Card) {\r\n let acu = card.sections.tryGet(\"ArContractsUser\");\r\n let acp = card.sections.tryGet(\"ArContractPartners\");\r\n let stateID = card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\");\r\n\r\n return (acu && acp\r\n // Проверка состояний\r\n && (stateID === CdDocStates.Project.id || stateID === CdDocStates.Modification.id)\r\n // Проверка флагов ПДЦ из КЦ и Документ из КД\r\n && (acu.fields.tryGet(\"IsFromKD\", false)\r\n || acu.fields.tryGet(\"IsPdcFromKC\", false))\r\n // Проверка пользователя\r\n && (userSession.isAdmin\r\n || card.createdById === userSession.UserID\r\n || acp.rows.some(x => x.tryGet(\"PerformerID\") === userSession.UserID)));\r\n }\r\n\r\n /** Запрет выбора типа процедуры, если выбран тип \"АНПТ (электронный)\". */\r\n private SetReadOnlyTypeProcedureControl(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let contractKindID: guid | null = acuSection!.fields.get(\"ContractKindID\"); \r\n let typeProcedureID = acuSection?.fields.tryGet(\"TypeProcedureID\");\r\n let tenderID = acuSection?.fields.tryGet(\"TenderID\");\r\n let stateID = card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n\r\n if (contractKindID != null \r\n && (\r\n (\r\n Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID) \r\n && tenderID)\r\n || (\r\n Guid.equals(contractKindID, TessaArContractKinds.ContractKindTessaID)\r\n && stateID != CdDocStates.Project.id\r\n && stateID != CdDocStates.Modification.id\r\n ))\r\n && Guid.equals(typeProcedureID, ArTypeProcedure.ANTPElectronic)){ \r\n\r\n let typeProcedureControl = CdUIHelper.GetUIControl(context, \"TypeProcedureControl\");\r\n \r\n if (typeProcedureControl)\r\n {\r\n typeProcedureControl.isReadOnly = true;\r\n }\r\n\r\n let selectTypeProcedureButton = CdUIHelper.GetUIControl(context, \"SelectTypeProcedureButton\"); \r\n\r\n if(selectTypeProcedureButton)\r\n {\r\n selectTypeProcedureButton.isReadOnly = true;\r\n } \r\n }\r\n\r\n // TES-8875 необходимо запретить редактирование полей \"Тип процедуры\", \"Тендер\" при наличие активного задания \"Подтверждение запуска процесса\"\r\n if (this.ExistsActiveConfirmStartProcessTask(context)) {\r\n var typeProcedureControl = CdUIHelper.GetUIControl(context, \"TypeProcedureControl\");\r\n var selectTypeProcedureButton = CdUIHelper.GetUIControl(context, \"SelectTypeProcedureButton\");\r\n var tenderControl = CdUIHelper.GetUIControl(context, \"TenderControl\");\r\n\r\n if (typeProcedureControl != null) {\r\n typeProcedureControl.isReadOnly = true;\r\n }\r\n\r\n if (selectTypeProcedureButton != null) {\r\n selectTypeProcedureButton.isReadOnly = true;\r\n }\r\n\r\n if (tenderControl != null) {\r\n tenderControl.isReadOnly = true;\r\n }\r\n }\r\n\r\n }\r\n\r\n private DocCommentValidation(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let docCommentControl = CdUIHelper.GetUIControl(context, \"DocCommentControl\");\r\n if (docCommentControl != null)\r\n {\r\n let maxLength = docCommentControl.maxLength;\r\n docCommentControl.validationFunc = (c) =>\r\n {\r\n let length = (c as TextBoxViewModel).text?.length ?? 0;\r\n if (length < maxLength)\r\n {\r\n return null;\r\n }\r\n else\r\n {\r\n return `Поле комментарий должно содержать не более ${maxLength} символов!`;\r\n }\r\n };\r\n\r\n let acuSections = card.sections.tryGet(\"ArContractsUser\");\r\n if (!acuSections)\r\n {\r\n return;\r\n }\r\n\r\n acuSections.fields.fieldChanged.add(e =>\r\n {\r\n if (e.fieldName == \"DocComment\")\r\n {\r\n if (docCommentControl) {\r\n docCommentControl.caption = `Комментарий ${docCommentControl?.text?.length}/512`;\r\n }\r\n if (docCommentControl?.text?.length != null) {\r\n if (docCommentControl.text.length >= maxLength) {\r\n docCommentControl.hasActiveValidation = true;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**Установка типа процедуры АНПТ (электронный) при замене сторон. */\r\n private SetANTPElectronicIfPartnerChanged(context: ICardUIExtensionContext, card: Card)\r\n {\r\n if(card.storeMode == CardStoreMode.Insert)\r\n {\r\n return;\r\n }\r\n \r\n let acuSection = card.sections.tryGet('ArContractsUser'); \r\n let buyerINN = card.sections.tryGet('ArContractPartners')?.rows.find(x => x.tryGet(\"RoleID\") == 0)?.tryGet(\"PartnerINN\");\r\n let sellerINN = card.sections.tryGet('ArContractPartners')?.rows.find(x => x.tryGet(\"RoleID\") == 1)?.tryGet(\"PartnerINN\");\r\n\r\n let arContractPartnersTable = context.model.controls.get(\"ArContractPartnersTable\") as GridViewModel;\r\n arContractPartnersTable.rowEditorClosed.add(async e => {\r\n if(e.cancel!=true)\r\n {\r\n let ArContractPartners = card.sections.tryGet('ArContractPartners');\r\n if(ArContractPartners!=null){\r\n let findrow = ArContractPartners.rows.find(x => x.rowId === e.row.rowId);\r\n //если в секции нет строки значит действие было отменено\r\n if(findrow!=null)\r\n {\r\n //Если редактировали существующего ка\r\n if (e.action == GridRowAction.Opening \r\n && (findrow.tryGet(\"RoleID\") == 1 && findrow.tryGet(\"PartnerINN\") != sellerINN\r\n || findrow.tryGet(\"RoleID\") == 0 && findrow.tryGet(\"PartnerINN\") != buyerINN)\r\n && (!Guid.equals(acuSection?.fields.tryGet(\"TypeProcedureID\"), ArTypeProcedure.WithoutTender))\r\n && acuSection?.fields.tryGet(\"TypeProcedureID\") != null)\r\n {\r\n acuSection?.fields.set(\"TypeProcedureID\", createTypedField(ArTypeProcedure.ANTPElectronic, DotNetType.Guid));\r\n acuSection?.fields.set(\"TypeProcedureName\", createTypedField(ArTypeProcedure.ANTPElectronicName, DotNetType.String)); \r\n\r\n await this.WorkWithTenderBuyersSellers(context);\r\n await this.AddSingleTenderAsync(card);\r\n this.SetReadOnlyTypeProcedureControl(context, card);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n } \r\n \r\n /** Добавить единственный доступный тендер. */\r\n private async AddSingleTenderAsync(card: Card)\r\n { \r\n let acuSection = card.sections.tryGet(\"ArContractsUser\");\r\n\r\n const pkTender = ViewService.instance.getByName('PkTender');\r\n const request = new TessaViewRequest(pkTender!.metadata);\r\n \r\n let creationDate = card.sections.tryGet(\"DocumentCommonInfo\")?.fields.tryGet(\"CreationDate\");\r\n if(creationDate)\r\n {\r\n const docDateParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('DocDate')!)\r\n .addCriteria(equalsCriteriaOperator(), '', creationDate)\r\n .asRequestParameter();\r\n request.values.push(docDateParam);\r\n }\r\n \r\n let buyers = card.sections.tryGet(\"ArTenderBuyersSellersVirtual\")?.fields.tryGet(\"Buyers\");\r\n if(buyers)\r\n {\r\n const buyersParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('Buyers')!)\r\n .addCriteria(equalsCriteriaOperator(), '', buyers)\r\n .asRequestParameter();\r\n request.values.push(buyersParam);\r\n }\r\n\r\n let sellers = card.sections.tryGet(\"ArTenderBuyersSellersVirtual\")?.fields.tryGet(\"Sellers\");\r\n if(sellers)\r\n {\r\n const sellersParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('Sellers')!)\r\n .addCriteria(equalsCriteriaOperator(), '', sellers)\r\n .asRequestParameter();\r\n request.values.push(sellersParam);\r\n }\r\n\r\n let docKind = acuSection?.fields.tryGet(\"ContractKindDocumentKind\");\r\n if(docKind)\r\n {\r\n const docKindParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('DocKind')!)\r\n .addCriteria(equalsCriteriaOperator(), '', docKind)\r\n .asRequestParameter();\r\n request.values.push(docKindParam);\r\n }\r\n\r\n let tenderProcedureTypeID = acuSection?.fields.tryGet(\"TypeProcedureID\");\r\n if(tenderProcedureTypeID)\r\n {\r\n const tenderProcedureTypeIDParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('TenderProcedureTypeID')!)\r\n .addCriteria(equalsCriteriaOperator(), '', tenderProcedureTypeID)\r\n .asRequestParameter();\r\n request.values.push(tenderProcedureTypeIDParam);\r\n }\r\n\r\n let cessionPartner1ExtID = card.sections.tryGet(\"ArContractNonpartyPartnerVirtual\")?.fields.tryGet(\"Partner1ExtID\");\r\n if(cessionPartner1ExtID)\r\n {\r\n const cessionPartner1ExtIDParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('CessionPartner1ExtID')!)\r\n .addCriteria(equalsCriteriaOperator(), '', cessionPartner1ExtID)\r\n .asRequestParameter();\r\n request.values.push(cessionPartner1ExtIDParam);\r\n }\r\n\r\n let cessionPartner2ExtID = card.sections.tryGet(\"ArContractNonpartyPartnerVirtual\")?.fields.tryGet(\"Partner2ExtID\");\r\n if(cessionPartner2ExtID)\r\n {\r\n const cessionPartner2ExtIDParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('CessionPartner2ExtID')!)\r\n .addCriteria(equalsCriteriaOperator(), '', cessionPartner2ExtID)\r\n .asRequestParameter();\r\n request.values.push(cessionPartner2ExtIDParam);\r\n }\r\n\r\n let cessionPartner2RoleName = card.sections.tryGet(\"ArContractNonpartyPartnerVirtual\")?.fields.tryGet(\"Partner2RoleName\");\r\n if(cessionPartner2RoleName)\r\n {\r\n const cessionPartner2RoleNameParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('CessionPartner2RoleName')!)\r\n .addCriteria(equalsCriteriaOperator(), '', cessionPartner2RoleName)\r\n .asRequestParameter();\r\n request.values.push(cessionPartner2RoleNameParam);\r\n }\r\n\r\n let fromKSDCreationDate = card.sections.tryGet(\"DocumentCommonInfo\")?.fields.tryGet(\"CreationDate\");\r\n if(fromKSDCreationDate)\r\n {\r\n const fromKSDParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('FromKSDCreationDate')!)\r\n .addCriteria(equalsCriteriaOperator(), '', fromKSDCreationDate)\r\n .asRequestParameter();\r\n request.values.push(fromKSDParam);\r\n }\r\n const isArchiveParam = new RequestParameterBuilder()\r\n .withMetadata(pkTender!.metadata.parameters.get('IsArchive')!)\r\n .addCriteria(equalsCriteriaOperator(), '', true)\r\n .asRequestParameter();\r\n request.values.push(isArchiveParam);\r\n \r\n let result = await pkTender!.getData(request); \r\n\r\n if (result.rows.length === 0)\r\n { \r\n acuSection?.fields.set(\"TenderID\", null);\r\n acuSection?.fields.set(\"TenderName\", null);\r\n\r\n // не выводим ошибку при создании (уступки)\r\n if (card.storeMode != CardStoreMode.Insert) {\r\n this.disableSaving = true;\r\n await showError(\"В договоре нельзя заменить стороны или роли, так как для новых участников договора не найден АНПТ\"); \r\n }\r\n }\r\n else \r\n {\r\n let res = result?.rows[0];\r\n acuSection?.fields.set(\"TenderID\", res[0], DotNetType.Guid);\r\n acuSection?.fields.set(\"TenderName\", res[3], DotNetType.String);\r\n this.disableSaving = false;\r\n }\r\n }\r\n\r\n /** Проставить тендер в новой уступке. */\r\n private async SetTenderInNewAssignmentAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n if(card.storeMode != CardStoreMode.Insert)\r\n {\r\n return;\r\n }\r\n\r\n let acuSection = card.sections.get(\"ArContractsUser\");\r\n let contractKindID: guid | null = acuSection!.fields.get(\"ContractKindID\");\r\n let typeProcedureID = acuSection?.fields.tryGet(\"TypeProcedureID\"); \r\n \r\n if (contractKindID != null \r\n && Guid.equals(contractKindID, TessaArContractKinds.AssignmentKindTessaID)\r\n && Guid.equals(typeProcedureID, ArTypeProcedure.ANTPElectronic))\r\n {\r\n await this.WorkWithTenderBuyersSellers(context);\r\n await this.AddSingleTenderAsync(card);\r\n this.SetReadOnlyTypeProcedureControl(context, card);\r\n }\r\n }\r\n\r\n /** Видимость кнопки \"Создать файл из КД\" */\r\n private async FromCDButtonControlVisibility(context: ICardUIExtensionContext) {\r\n const cdButton = context.model.controls.get(\"FromCDButtonControl\") as ButtonViewModel;\r\n if (!cdButton) return;\r\n\r\n let stateID = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\")?.fields.tryGet(\"StateID\") as number;\r\n if (!stateID) return;\r\n\r\n let isAdmin: boolean = await this.IsAdmin();\r\n if (isAdmin) {\r\n cdButton.isReadOnly = false;\r\n return;\r\n }\r\n if (stateID !== CdDocStates.Modification.Id && stateID !== CdDocStates.Project.Id) {\r\n cdButton.isReadOnly = true;\r\n return;\r\n }\r\n cdButton.isReadOnly = false;\r\n }\r\n\r\n /// \r\n /// Разрешить редактирование КСД созданных в ЕСУД\r\n /// TES-8640\r\n /// \r\n private AllowEditESUDDocs(context: ICardUIExtensionContext, session: IUserSession){\r\n if(PkContractUIHelper.HasExtID(context.card) && CdUIHelper.IsActiveOrFulfilled(context.card)){\r\n var docNumCtr = CdUIHelper.GetUIControlFromModel(context.model, \"DocNumberControl\");\r\n var docDateCtr = CdUIHelper.GetUIControlFromModel(context.model, \"DocDate\");\r\n var validityDateCtr = CdUIHelper.GetUIControlFromModel(context.model, \"DateValidityPeriodFrom\");\r\n var cancDateCtr = CdUIHelper.GetUIControlFromModel(context.model, \"ContractDateCancelletionControl\");\r\n var reasonsWhyNotPdcCtr = CdUIHelper.GetUIControlFromModel(context.model, \"ContractReasonsWithoutPDCIDCancelletionControl\");\r\n var reasonsWhyNotFromKDCtr = CdUIHelper.GetUIControlFromModel(context.model, \"ReasonWhyIsNotFromKDControl\");\r\n var currencyControlCtr = CdUIHelper.GetUIControlFromModel(context.model, \"CurrencyControl\");\r\n var amountBeginningCtr = CdUIHelper.GetUIControlFromModel(context.model, \"AmountBeginningControl\");\r\n var contractTypeCtr = CdUIHelper.GetUIControlFromModel(context.model, \"ContractTypeControl\");\r\n var isYECtr = CdUIHelper.GetUIControlFromModel(context.model, \"IsYE\");\r\n var subjectCtr = CdUIHelper.GetUIControlFromModel(context.model, \"Subject\");\r\n var commentCtr = CdUIHelper.GetUIControlFromModel(context.model, \"DocCommentControl\");\r\n var typeProcedureCtr = CdUIHelper.GetUIControlFromModel(context.model, \"TypeProcedureControl\");\r\n\r\n CdUIHelper.SetReadOnlyToControls(true, docDateCtr!, cancDateCtr!, validityDateCtr!, reasonsWhyNotFromKDCtr!, currencyControlCtr!, \r\n amountBeginningCtr!, contractTypeCtr!, isYECtr!, docNumCtr!, subjectCtr!, commentCtr!, typeProcedureCtr!, reasonsWhyNotPdcCtr!);\r\n\r\n if(!PkContractUIHelper.HasGuidCrm(context.card) && !PkContractUIHelper.IsCourtCase(context.card)){\r\n // Для администраторов\r\n if(session.isAdmin){\r\n CdUIHelper.SetReadOnlyToControls(false, docDateCtr!, cancDateCtr!, validityDateCtr!, \r\n reasonsWhyNotFromKDCtr!, currencyControlCtr!, amountBeginningCtr!, contractTypeCtr!, isYECtr!)\r\n }\r\n // Для авторов и исполнителей\r\n if(this.IsUserAuthorOrPerformer(context)){\r\n CdUIHelper.SetReadOnlyToControls(false, subjectCtr!, commentCtr!);\r\n let arContractPartnersTable = CdUIHelper.GetUIControl(context, \"ArContractPartnersTable\");\r\n if(arContractPartnersTable){\r\n arContractPartnersTable.rowInitializing.add(e => {\r\n if(e.row.getField(\"PartnerAutomated\")?.$value == true){\r\n var accountantCtr = CdUIHelper.GetUIControlFromModel(e?.rowModel!, \"PartnerAccountant\");\r\n CdUIHelper.SetReadOnlyToControls(false, accountantCtr!);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// \r\n /// Проверка, что пользователь является автором или исполнителем\r\n /// \r\n private IsUserAuthorOrPerformer(context: ICardUIExtensionContext){\r\n let card = context?.card;\r\n let acp = card?.sections.tryGet(\"ArContractPartners\");\r\n\r\n return (acp\r\n // Пользователь является автором\r\n && (card.createdById == userSession.UserID\r\n // Пользователь является исполнителем\r\n || acp.rows.some(x => x.tryGet(\"PerformerID\") == userSession.UserID)))\r\n }\r\n\r\n private ExistsActiveConfirmStartProcessTask(context: ICardUIExtensionContext): boolean {\r\n let card = context?.card;\r\n let section = card?.sections.tryGet(\"FdStageInstancesVirtual\");\r\n\r\n let res : boolean | undefined = (section && card.storeMode == CardStoreMode.Update\r\n && section.rows.some(x =>\r\n (x.tryGet(\"TaskTypeID\") == PkTaskTypes.ArMatrixConfirmStartProcessTypeID || x.tryGet(\"TaskTypeID\") == PkTaskTypes.ArMatrixConfirmVgoStartProcessTypeID)\r\n && x.tryGet(\"StateID\") == CdFdStages.Active));\r\n return res === true;\r\n }\r\n\r\n /**\r\n * Поле Сумма уступки доступно если договор из CRM.\r\n */\r\n private EnableAmountOfTheAssignmentControl(context: ICardUIExtensionContext, card: Card) {\r\n const amountOfTheAssignmentControl = context.model.controls.get('AmountOfTheAssignmentControl');\r\n if (amountOfTheAssignmentControl == null) {\r\n return;\r\n }\r\n CdUIHelper.SetConrolVisibility(amountOfTheAssignmentControl, PkContractUIHelper.HasGuidCrm(card));\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this.disposer) {\r\n this.disposer();\r\n this.disposer = null;\r\n }\r\n if (this._listener) {\r\n this._listener.stop();\r\n this._listener = null;\r\n }\r\n }\r\n}\r\n\r\nclass ObjectByArticle {\r\n constructor(\r\n public ObjectID: string | null,\r\n public PartnerExternalID: number | null,\r\n public PartnerRelatedExternalID: number | null,\r\n public Amount: number | null\r\n ) {}\r\n}\r\n\r\nclass PartnerForIsFromKD {\r\n constructor(\r\n public ContractCategoryGuid1C: string | null,\r\n public SignedID: string | null\r\n ) {}\r\n}\r\n\r\nclass ValuesForIsFromKD {\r\n constructor(\r\n public DocDate: Date | null,\r\n public DocNumber: string | null,\r\n public AmountBeginning: number | null,\r\n public AmountTotal: number | null,\r\n public IsFromKD: boolean | null,\r\n public IsPdcFromKc: boolean | null,\r\n public Partners: PartnerForIsFromKD[] | undefined,\r\n public ObjectByArticle: ObjectByArticle[] | undefined\r\n ) {}\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ArUIHelper } from 'src/pkScripts/UI/ArUIHelper';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\n\r\nexport class ArEDocumentUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArEDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n ArUIHelper.DocumentsIDPPartnersLogic(context);\r\n ArUIHelper.ContractSenderReceiverLogic(context);\r\n CdUIHelper.InitializeTableObjects(context);\r\n ChUIHelper.CalculateVATAmount(context);\r\n ArUIHelper.EditSenderHandle(context);\r\n ArUIHelper.EditReceiverHandle(context);\r\n ArUIHelper.EditContractHandle(context);\r\n ArUIHelper.DiadocDeleteLogic(context);\r\n ArUIHelper.PacketCardLogic(context);\r\n ArUIHelper.DiadocButtonLogic(context);\r\n ArUIHelper.ApproversHandle(context);\r\n ArUIHelper.ResponsibleExecutorsHandle(context);\r\n ArUIHelper.ResponsibleBookkeepersHandle(context);\r\n ArUIHelper.RequiredApproversHandle(context);\r\n ArUIHelper.SignerHandle(context);\r\n ArUIHelper.GoToPacketActionLogic(context);\r\n ArUIHelper.SetDiadocControlsVisibility(context.model);\r\n ArUIHelper.ArEDocumentConvertID(context);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArEDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n await ArUIHelper.ArEDocumentAndArActConvertKSD(context);\r\n await ArUIHelper.ArEDocumentAttachDocumentAsync(context);\r\n }\r\n}","\r\nimport { CardUIExtension, ICardUIExtensionContext, ICardModel, IFormViewModel, CardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType, Visibility, TypedField } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { GridViewModel, FileListViewModel, ButtonViewModel, GridRowAction, ControlViewModelBase, ContainerViewModel, getFileNameAndExtension } from 'tessa/ui/cards/controls';\r\nimport { UIButton, showConfirm, tryGetFromInfo, createCardModel, createCardFileSource, UIContext, createCardForm, createCardEditorModel } from 'tessa/ui';\r\nimport { IStorage, MapStorage } from 'tessa/platform/storage';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { openCard } from 'tessa/ui/uiHost';\r\nimport { reaction } from 'mobx';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { Card, CardRow } from 'tessa/cards';\r\nimport { FileContainer } from 'tessa/files';\r\nimport { ExtensionContainer, IExtensionExecutor } from 'tessa/extensions';\r\nimport { ArActUIExtension } from './ArActUIExtension';\r\nimport { ArEDocumentUIExtension } from './ArEDocumentUIExtension';\r\nimport { userSession } from 'common/utility';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\n\r\nexport class ArPacketVirtualUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n private _disposerSelectRow: Function | null = null;\r\n private packetCardsModels: ICardModel[];\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (!context.validationResult.isSuccessful ||\r\n context.model == null ||\r\n context.model.card == null ||\r\n context.model.card.typeId !== PkCardTypes.PkPacketVirtualTypeID) {\r\n return;\r\n }\r\n\r\n const packetCards = this.packetCardsModels!.map(x => x.card);\r\n\r\n await ArUIHelper.CheckIsDirectual(context, true, packetCards);\r\n await this.SetPacketCardsClientInfo(context.card);\r\n }\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null ||\r\n context.model.card.typeId !== PkCardTypes.PkPacketVirtualTypeID) {\r\n return;\r\n }\r\n\r\n let controls;\r\n let packetControl;\r\n let filesVisibleControl;\r\n let linkToDiadocControl;\r\n\r\n if ((controls = this.InitControls(context)) == null ||\r\n (packetControl = controls.packetControl) == null ||\r\n (filesVisibleControl = controls.filesVisibleControl) == null ||\r\n (linkToDiadocControl = controls.linkToDiadocControl) == null\r\n ) {\r\n return;\r\n }\r\n\r\n let cardTasks: TaskViewModel[] = [];\r\n const complectID = this.GetPacketComplectRowID(context.model);\r\n\r\n this.packetCardsModels = this.GetPacketCardsModelsFromServerInfo(\r\n context.model.card);\r\n\r\n this.InitComplect(context, complectID);\r\n this.InitButtons(context, packetControl, complectID);\r\n this.PacketCardLogic(context);\r\n this.InitTasks(context, packetControl, cardTasks);\r\n this.BindLinkButton(packetControl, linkToDiadocControl);\r\n this.EditPacketFieldsLogic(context.model);\r\n this.PacketSelectRowLogic(context, packetControl, cardTasks, filesVisibleControl);\r\n this.CombinePacketFiles(context.model);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n // подчищаем за собой\r\n if (this._disposerSelectRow) {\r\n this._disposerSelectRow();\r\n this._disposerSelectRow = null;\r\n }\r\n }\r\n\r\n /** Инициализация контролов. */\r\n private InitControls(context: ICardUIExtensionContext) {\r\n let packetControl = context.model.controls.get(\"PacketControl\") as GridViewModel;\r\n let filesVisibleControl;\r\n let filesHiddenControl;\r\n let linkToDiadocControl;\r\n\r\n if ((filesVisibleControl = context.model.controls.get(\"FilesVisibleControl\") as FileListViewModel) == null ||\r\n (filesHiddenControl = context.model.controls.get(\"FilesHiddenControl\") as FileListViewModel) == null ||\r\n (linkToDiadocControl = context.model.controls.get(\"LinkToDiadoc\") as ButtonViewModel) == null) {\r\n return false;\r\n }\r\n\r\n return {packetControl, filesVisibleControl, filesHiddenControl, linkToDiadocControl};\r\n }\r\n\r\n /** Инициализация комплекта. */\r\n private InitComplect(context: ICardUIExtensionContext, complectID: any) {\r\n const complectControl = CdUIHelper.GetUIControl(context, \"PacketComplectControl\");\r\n complectControl!.controlVisibility = complectID != null ? Visibility.Visible : Visibility.Collapsed;\r\n complectControl!.isReadOnly = !(complectID != null && userSession.isAdmin)\r\n }\r\n\r\n /** Инициализация кнопок. */\r\n private InitButtons(context: ICardUIExtensionContext, packetControl: GridViewModel, complectID: any) {\r\n // TODO скрытие стандартных кнопок в версии 3.3\r\n // packetControl.MoveUpDownButtonsVisibility = Visibility.Collapsed;\r\n let unckeckButton = new UIButton(\"Снять выделение\",\r\n async () => { this.UncheckButtonLogic(packetControl); },\r\n null,\r\n () => this.IsEnabledUncheckFunc(packetControl));\r\n\r\n packetControl.rightButtons.push(unckeckButton);\r\n\r\n // скрываем и не добавляем кнопки для комплекта без SysObjectID\r\n const isComplectWithoutSysObjectID = complectID != null && !this.IsExistsCardWithSysObjectID();\r\n packetControl.isCanAddRow = () => !isComplectWithoutSysObjectID;\r\n packetControl.isCanRemoveRow = () => !isComplectWithoutSysObjectID;\r\n if (isComplectWithoutSysObjectID) {\r\n return;\r\n }\r\n\r\n let decoupleButton = new UIButton(\"Разъединить\",\r\n async () => { this.DecoupleButtonLogic(context, packetControl); },\r\n null,\r\n () => this.IsEnabledDecoupleFunc(packetControl));\r\n\r\n packetControl.rightButtons.push(decoupleButton);\r\n\r\n packetControl.rowInvoked.add(e => {\r\n if (e.action === GridRowAction.Inserted) {\r\n ArUIHelper.AddButtonLogic(context, null);\r\n e.cancel = true;\r\n }\r\n else if (e.action === GridRowAction.Deleting) {\r\n this.RemoveButtonLogic(context, packetControl);\r\n }\r\n });\r\n }\r\n\r\n /** Инициализация заданий. */\r\n private InitTasks(context: ICardUIExtensionContext, packetControl: GridViewModel, cardTasks: TaskViewModel[]) {\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks != null) {\r\n for (let t of tasks) {\r\n cardTasks.push(t);\r\n }\r\n }\r\n let docList = this.GetSelectedDocs(packetControl);\r\n this.ChangeTasksVisible(cardTasks, tasks, docList);\r\n }\r\n\r\n /** Логика пакета документов. */\r\n private PacketCardLogic(context: ICardUIExtensionContext) {\r\n const section = context.model.card.sections.tryGet('PkPacketCompositionVirtual');\r\n if (section == null || section.rows == null || section.rows.length < 1) {\r\n const packetBlock = context.model.blocks.get('PacketBlock');\r\n if (packetBlock != null) {\r\n packetBlock.blockVisibility = Visibility.Collapsed;\r\n packetBlock.captionVisibility = Visibility.Collapsed;\r\n }\r\n return;\r\n }\r\n\r\n ArUIHelper.PacketControlLogic(context);\r\n ArUIHelper.PacketApprovementControlLogic(context.model);\r\n }\r\n\r\n /** Логика изменения выделения документов пакета. */\r\n private PacketSelectRowLogic(\r\n context: ICardUIExtensionContext,\r\n packetControl: GridViewModel,\r\n cardTasks: TaskViewModel[],\r\n filesVisibleControl: FileListViewModel) {\r\n if (this._disposerSelectRow == null) {\r\n this._disposerSelectRow = reaction(() => packetControl.selectedRows, () => {\r\n let docList = this.GetSelectedDocs(packetControl);\r\n let tasks = context.model.tryGetTasks();\r\n this.ChangeTasksVisible(cardTasks, tasks, docList);\r\n this.ChangeFilesVisible(filesVisibleControl, docList);\r\n this.ChangePacketCardFormVisible(context.model, docList);\r\n });\r\n }\r\n }\r\n\r\n /** Изменение видимости файлов. */\r\n private ChangeFilesVisible(filesVisibleControl: FileListViewModel, docList: Array) {\r\n for (let i = filesVisibleControl.files.length - 1; i > -1; i--) {\r\n const file = filesVisibleControl.files[i];\r\n if (!(docList.indexOf(file.model.info.DocID.$value) > -1)) {\r\n filesVisibleControl.removeFile(file);\r\n }\r\n }\r\n }\r\n\r\n /** Изменение видимости заданий. */\r\n private ChangeTasksVisible(cardTasks: TaskViewModel[], tasks: TaskViewModel[] | null, docList: Array) {\r\n if (tasks != null) {\r\n tasks.splice(0, tasks.length);\r\n\r\n const docListWithTask = this.GetTasksDocs(docList, cardTasks);\r\n\r\n for (let task of cardTasks) {\r\n let docIDs = (tryGetFromInfo(task!.taskModel!.cardTask!.info, \"DocID\") as TypedField[]).map(x => x.$value);\r\n if (docListWithTask.some(x => docIDs.indexOf(x) > -1)) {\r\n tasks.push(task);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Изменение видимости формы карточки документа пакета. */\r\n private ChangePacketCardFormVisible(model: ICardModel, docList: Array) {\r\n\r\n const documentInfoControl = CdUIHelper.GetUIControlFromModel(model, \"DocumentInfoControl\");\r\n\r\n if (documentInfoControl == null) {\r\n return;\r\n }\r\n\r\n if (docList.length === 1) {\r\n const packetCardModel = this.packetCardsModels.find(x => x.card.id === docList[0]);\r\n\r\n if (packetCardModel == null) {\r\n return;\r\n }\r\n\r\n documentInfoControl.form = packetCardModel.mainForm as IFormViewModel;\r\n documentInfoControl.block.blockVisibility = Visibility.Visible;\r\n }\r\n else {\r\n documentInfoControl.form.close();\r\n documentInfoControl.block.blockVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n /** Получение выделенных документов пакета. */\r\n private GetSelectedDocs(packetControl: GridViewModel) {\r\n let docList: Array = [];\r\n\r\n if (packetControl.selectedRows.length > 0) {\r\n docList = packetControl.selectedRows.map(t => t.row.get(\"DocID\"));\r\n }\r\n else {\r\n docList = packetControl.rows.map(t => t.row.get(\"DocID\"));\r\n }\r\n\r\n return docList;\r\n }\r\n\r\n /** Получение ID документов по заданиям. */\r\n private GetTasksDocs(docList: Array, cardTasks: TaskViewModel[]) {\r\n const tasksDocs: Array = [];\r\n\r\n for (let cardTask of cardTasks) {\r\n const taskDocs = (tryGetFromInfo(cardTask!.taskModel!.cardTask!.info, \"DocID\") as TypedField[]).map(x => x.$value);\r\n\r\n for (let taskDoc of taskDocs) {\r\n const docListIndex = docList.indexOf(taskDoc);\r\n const tasksDocsIndex = tasksDocs.indexOf(taskDoc);\r\n if (docListIndex > -1 && tasksDocsIndex === -1) {\r\n tasksDocs.push(taskDoc);\r\n }\r\n }\r\n }\r\n\r\n return tasksDocs;\r\n }\r\n\r\n /** Доступность кнопки снятия выделения строк. */\r\n private IsEnabledUncheckFunc(packetControl: GridViewModel) {\r\n return packetControl.selectedRows.length > 0;\r\n }\r\n\r\n /** Снятие выделения строк. */\r\n private UncheckButtonLogic(packetControl: GridViewModel) {\r\n for (let row of packetControl.rows) {\r\n row.isSelected = false;\r\n }\r\n }\r\n\r\n /** Доступность кнопки разъединения документа пакета. */\r\n private IsEnabledDecoupleFunc(packetControl: GridViewModel) {\r\n return packetControl.selectedRows.length > 1 &&\r\n packetControl.selectedRows.length !== packetControl.rows.length;\r\n }\r\n\r\n /** Логика разъединения документов пакета. */\r\n private async DecoupleButtonLogic(context: ICardUIExtensionContext, packetControl: GridViewModel) {\r\n const result = await showConfirm(\"Вы действительно хотите добавить \" + packetControl.selectedRows!.length + \" документа(ов) в новый пакет?\", \"Подтверждение\");\r\n if (!result) {\r\n return;\r\n }\r\n let uicontext = context.uiContext;\r\n let editor = uicontext.cardEditor;\r\n if (uicontext == null || editor == null) return;\r\n\r\n const requestInfo: IStorage = {\r\n 'DecouplePacet': createTypedField(true, DotNetType.Boolean),\r\n 'OldPacketID': createTypedField(context.model.card.id, DotNetType.Guid),\r\n };\r\n PkCommonHelper.AddListToInfo(requestInfo, \"DecoupleList\", packetControl.selectedRows.map(row => row.row.get(\"DocID\")), DotNetType.Guid);\r\n\r\n await editor.setOperationInProgress(async () => {\r\n await openCard({\r\n cardId: Guid.newGuid(),\r\n cardTypeId: PkCardTypes.PkPacketVirtualTypeID,\r\n cardTypeName: PkCardTypes.PkPacketVirtualTypeName,\r\n context: uicontext,\r\n info: requestInfo\r\n });\r\n\r\n await editor!.refreshCard(uicontext);\r\n });\r\n }\r\n\r\n /** Логика удаления документов пакета. */\r\n private RemoveButtonLogic(context: ICardUIExtensionContext, packetControl: GridViewModel) {\r\n if (context == null) {\r\n return;\r\n }\r\n\r\n let uiContext = context.uiContext;\r\n if (uiContext == null) {\r\n return;\r\n }\r\n\r\n let editor = uiContext.cardEditor;\r\n if (editor == null) {\r\n return;\r\n }\r\n\r\n const requestInfo: IStorage = {\r\n 'RemoveFromPacet': createTypedField(true, DotNetType.Boolean)\r\n };\r\n PkCommonHelper.AddListToInfo(requestInfo, \"DeletedList\", packetControl.selectedRows.map(row => row.row.get(\"DocID\")), DotNetType.Guid);\r\n\r\n editor.saveCard(uiContext, requestInfo);\r\n }\r\n\r\n /** Логика кнопки \"Открыть документы в диадок\". */\r\n private BindLinkButton(packetControl: GridViewModel, linkToDiadocControl: ButtonViewModel) {\r\n let urls = \"\";\r\n let list = packetControl.rows;\r\n\r\n if (list == null) {\r\n return;\r\n }\r\n\r\n urls = list.map(row => row.row.get(\"Url\")).filter(url => !PkCommonHelper.IsNullOrWhitespace(url))\r\n .reduce((current, url) => current + \",\" + url, \"\");\r\n if (!PkCommonHelper.IsNullOrWhitespace(urls)) {\r\n linkToDiadocControl.tooltip = urls;\r\n linkToDiadocControl.onClick = () => {\r\n this.ClickLinkToDiadoc(linkToDiadocControl);\r\n };\r\n linkToDiadocControl.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n linkToDiadocControl.onClick = null;\r\n linkToDiadocControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n /** Перейти в диадок. */\r\n private ClickLinkToDiadoc(buttonControlModel: ButtonViewModel) {\r\n let urls = buttonControlModel.tooltip;\r\n let parseUrls = urls.split(',');\r\n for (let url of parseUrls) {\r\n if (!PkCommonHelper.IsNullOrWhitespace(url))\r\n window.open(url);\r\n }\r\n }\r\n\r\n /** Получение ID комплекта. */\r\n private GetPacketComplectRowID(model: ICardModel) {\r\n const pkpivSection = model.card.sections.tryGet(\"PkPacketInfoVirtual\");\r\n if (pkpivSection == null) {\r\n return null;\r\n }\r\n return pkpivSection.fields.tryGet(\"ComplectID\");\r\n }\r\n\r\n /** Получение карточек пакета из инфо (передается с сервера) и создание моделей по ним. */\r\n private GetPacketCardsModelsFromServerInfo(card: Card) {\r\n\r\n const packetCardsModels = new Array();\r\n\r\n const packetCardsServerInfo: any | null = tryGetFromInfo(card.info, \"PacketCardsServerInfo\", null);\r\n\r\n if (packetCardsServerInfo == null) {\r\n return packetCardsModels;\r\n }\r\n\r\n for (const packetCardServerInfo of packetCardsServerInfo) {\r\n const packetCard = new Card(packetCardServerInfo);\r\n const packetCardSectionRows = this.GetSectionRowsFromServerInfo(packetCard.info);\r\n\r\n if (packetCardSectionRows == null) {\r\n continue;\r\n }\r\n\r\n const blockNames =\r\n [\r\n \"ArticlesIDP\",\r\n \"IdpBlock\",\r\n \"OhrBlock\",\r\n \"ObjectsBlock\"\r\n ];\r\n\r\n const controlNames =\r\n [\r\n \"Files\",\r\n \"btnCombineArActFiles\"\r\n ];\r\n\r\n const packetCardModel = this.CreateCardModel(\r\n packetCard,\r\n packetCardSectionRows,\r\n true,\r\n blockNames,\r\n false,\r\n controlNames);\r\n\r\n packetCardsModels.push(packetCardModel);\r\n }\r\n\r\n card.info[\"PacketCardsServerInfo\"] = null;\r\n\r\n return packetCardsModels;\r\n }\r\n\r\n /** Получение SectionRows из инфо с сервера. */\r\n private GetSectionRowsFromServerInfo(info: any) {\r\n const cardSectionRowsInfo: any | null =\r\n tryGetFromInfo(info, \"SectionRows\");\r\n\r\n if (cardSectionRowsInfo == null) {\r\n return null;\r\n }\r\n\r\n return new MapStorage(cardSectionRowsInfo);\r\n }\r\n\r\n /** Установка информации по карточкам, для передачи на сервер. */\r\n private async SetPacketCardsClientInfo(card: Card) {\r\n const packetCardsClientInfo = new Array>();\r\n\r\n for (const packetCardModel of this.packetCardsModels) {\r\n const packetCardStorage = packetCardModel.card.getStorage();\r\n packetCardsClientInfo.push(packetCardStorage);\r\n }\r\n\r\n card.info[\"PacketCardsClientInfo\"] = packetCardsClientInfo;\r\n }\r\n\r\n /** Логика изменения полей */\r\n private EditPacketFieldsLogic(model: ICardModel) {\r\n const pkpivSect = model.card.sections.tryGet(\"PkPacketInfoVirtual\");\r\n\r\n if (pkpivSect == null) {\r\n return;\r\n }\r\n\r\n pkpivSect.fields.fieldChanged.add((e) => {\r\n\r\n switch (e.fieldName) {\r\n case \"ContractID\":\r\n case \"ContractNameVirtual\":\r\n\r\n for (const packetCardModel of this.packetCardsModels) {\r\n\r\n const aaSect = packetCardModel.card.sections.tryGet(\"ArchiveAct\");\r\n\r\n if (aaSect == null) {\r\n continue;\r\n }\r\n\r\n if (e.fieldTypedValue == null) {\r\n aaSect.fields.set(e.fieldName, null);\r\n }\r\n else {\r\n aaSect.fields.set(e.fieldName, e.fieldTypedValue);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"ComplectID\":\r\n case \"ComplectName\":\r\n case \"ComplectRowID\":\r\n\r\n for (const packetCardModel of this.packetCardsModels) {\r\n\r\n const dciSect = packetCardModel.card.sections.tryGet(\"PkDiadocCommonInfo\");\r\n\r\n if (dciSect == null) {\r\n continue;\r\n }\r\n\r\n if (e.fieldTypedValue == null) {\r\n dciSect.fields.set(e.fieldName, null);\r\n }\r\n else {\r\n dciSect.fields.set(e.fieldName, e.fieldTypedValue);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /** Создаение модели карточки.. */\r\n public CreateCardModel(\r\n card: Card,\r\n sectionRows: MapStorage,\r\n showBlocks: boolean = true,\r\n blockNames: Array | null = null,\r\n showControls: boolean = true,\r\n controlNames: Array | null = null) {\r\n\r\n const isBlockNamesEmpty = blockNames == null || blockNames.length === 0;\r\n const isControlNamesEmpty = controlNames == null || controlNames.length === 0;\r\n\r\n // создание модели\r\n const model = createCardModel(card, sectionRows);\r\n\r\n // установка контейнера файлов\r\n model.fileContainer = new FileContainer(createCardFileSource(model, card));\r\n\r\n // создание формы\r\n const form = createCardForm(model);\r\n\r\n // установка формы в модель\r\n model.mainForm = form;\r\n\r\n // инициализация CardEditor (т.к. в UIContext.current он не задан)\r\n const cardEditor = createCardEditorModel();\r\n\r\n // инициализация UIContext\r\n const uiContext = new UIContext({ cardEditor: cardEditor });\r\n\r\n // инициализация контекста для расширений\r\n const cardUiExtensionContext = new CardUIExtensionContext(\r\n card,\r\n model,\r\n uiContext,\r\n cardEditor.dialogName,\r\n cardEditor.toolbar,\r\n cardEditor.bottomToolbar,\r\n cardEditor.bottomDialogButtons);\r\n\r\n // получение списка расширений\r\n const uiExtensionExecuters = this.GetExtensionsByCardTypeID(card.typeId);\r\n\r\n // инициализация расширений\r\n model.executeInContext(() =>\r\n uiExtensionExecuters.forEach(x =>\r\n x.execute('initialized', cardUiExtensionContext)));\r\n\r\n // скрытие блоков\r\n for (const block of model.blocks) {\r\n if ((showBlocks && !isBlockNamesEmpty && blockNames!.indexOf(block[1].name as string) < 0) ||\r\n (!showBlocks && (isBlockNamesEmpty || blockNames!.indexOf(block[1].name as string) >= 0))) {\r\n block[1].blockVisibility = Visibility.Collapsed;\r\n continue;\r\n }\r\n\r\n // скрытие контролов\r\n for (const control of block[1].controls) {\r\n if ((showControls && !isControlNamesEmpty && controlNames!.indexOf(control.name as string) < 0) ||\r\n (!showControls && (isControlNamesEmpty || controlNames!.indexOf(control.name as string) >= 0))) {\r\n control.controlVisibility = Visibility.Collapsed;\r\n continue;\r\n }\r\n\r\n // запрет добавления / удаления строк для веба (до версии 3.3?)\r\n const gridView = control as GridViewModel;\r\n if (gridView.rows != null) {\r\n gridView.isReadOnly = true;\r\n }\r\n }\r\n }\r\n\r\n return model;\r\n }\r\n\r\n /** Получение расширений по типу карточки.. */\r\n private GetExtensionsByCardTypeID(cardTypeID: string) {\r\n const extensions = new Array();\r\n if (cardTypeID === PkCardTypes.ArActTypeID) {\r\n extensions.push(ExtensionContainer.instance.resolveExecutor(ArActUIExtension));\r\n }\r\n else if (cardTypeID === PkCardTypes.ArEDocumentTypeID) {\r\n extensions.push(ExtensionContainer.instance.resolveExecutor(ArEDocumentUIExtension));\r\n }\r\n return extensions;\r\n }\r\n\r\n /** Содержит ли пакет карточки с заполненным SysObjectId.. */\r\n private IsExistsCardWithSysObjectID(): boolean {\r\n for (const packetCardModel of this.packetCardsModels) {\r\n const pksmiSection = packetCardModel.card.sections.tryGet(\"PkServiceMessageInfo\");\r\n\r\n if (pksmiSection == null) {\r\n continue;\r\n }\r\n\r\n if (pksmiSection.fields.tryGet(\"SysObjectId\") != null) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Привязка логики к кнопке.*/\r\n private CombinePacketFiles(model: ICardModel) {\r\n const btnCombineArPacketFiles = CdUIHelper.GetUIControlFromModel(model, \"btnCombineArPacketFiles\");\r\n\r\n if (isNullOrUndefined(btnCombineArPacketFiles)) {\r\n return;\r\n }\r\n\r\n btnCombineArPacketFiles.onClick = async () => {\r\n btnCombineArPacketFiles.isReadOnly = true;\r\n\r\n const fileName = tryGetFromInfo(model.card.info, \"ExportedFileName\");\r\n\r\n const filteredFiles = model.card.files.filter(f =>\r\n getFileNameAndExtension(f.name).ext.indexOf(\"pdf\") !== -1 &&\r\n f.categoryId === ChFileCategories.Primary.id);\r\n\r\n await ArUIHelper.SaveCombinedFilesAsync(model, filteredFiles, fileName);\r\n\r\n btnCombineArPacketFiles.isReadOnly = false;\r\n };\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { DateTimeViewModel, LabelViewModel } from 'tessa/ui/cards/controls';\r\nimport { reaction } from 'mobx';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\n\r\nexport class ChAssignmentUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkAssignmentTypeID)) {\r\n return;\r\n }\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n if (context.model.card.sections.tryGet('PkDocumentCommonInfo') == null) return;\r\n\r\n const datePicker = context.model.controls.get(\"ExecutionDateControl\") as DateTimeViewModel;\r\n if (datePicker == null) {\r\n return;\r\n }\r\n\r\n const label = context.model.controls.get(\"VerificationExecutionDateLabel\") as LabelViewModel;\r\n if (label == null) {\r\n return;\r\n }\r\n\r\n this._disposer = reaction(() => datePicker.selectedDate, date => {\r\n let dateCheck = new Date();\r\n dateCheck.setDate(dateCheck.getDate());\r\n if (date != null && date.toDate().setHours(0, 0, 0, 0) < dateCheck.setHours(0, 0, 0, 0)) {\r\n label.text = \"Срок исполнения не может быть раньше текущей даты.\";\r\n }\r\n else {\r\n label.text = \"\";\r\n }\r\n });\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\n\r\nexport class ChIncommingUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkIncomingTypeID)) {\r\n return;\r\n }\r\n\r\n // Инициализация полей\r\n ChUIHelper.IncomingControlInitialization(context);\r\n\r\n // При изменении организации\r\n ChUIHelper.CheckVGOPartners(context);\r\n\r\n //Кастомное фио\r\n ChUIHelper.CheckFIOControl(context);\r\n\r\n // Связка ЮЛ и адресатов\r\n ChUIHelper.BindingDepartmentWithAddressees(context, this._disposer);\r\n\r\n // Связка полей \"дело\" и \"дело верхнего уровня\"\r\n ChUIHelper.BundleCaseTopLevelCase(context);\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n // Проверка возможности добавления контрагента \"на лету\"\r\n ChUIHelper.CanAddPartnerPermission(context);\r\n\r\n // При изменении вида документа ИЛИ флага Обращение контрагента/клиента\r\n ChUIHelper.ChangesInUIWhenKindChangingIncomingDoc(context);\r\n\r\n // При изменении сделки или договора\r\n ChUIHelper.ChangesInUIWhenDealOrContractIsChanging(context);\r\n\r\n // При изменении договора\r\n ChUIHelper.ChangesInUIWhenContractIsChanging(context);\r\n\r\n // Расчет суммы НДС, при изменении Суммы или Ставки НДС\r\n ChUIHelper.CalculateVATAmount(context);\r\n\r\n // Заполнение поля Назначение платежа\r\n ChUIHelper.ChangesInUIWhenContractOrVATRateChangingIncomingDoc(context);\r\n\r\n //Скрытие отображение полей Виновник,Сумма\r\n ChUIHelper.ChangingFlagsCulpritInIncomingDoc(context);\r\n\r\n // Изменение во входящем документе при изменении флага \"Добавить расчетный счет\"\r\n ChUIHelper.ChangesCreateAnBankAccount(context);\r\n\r\n //Автозаполнение поля ФИО если клиент основной\r\n //ChUIHelper.ChangesFIObyPartner(context);\r\n \r\n //Копирование поля номер\r\n ChUIHelper.CheckClickOnCopyButton(context);\r\n\r\n //Скрытие отображение поля тема\r\n ChUIHelper.CheckSubjectConrol(context);\r\n\r\n // Подписываемся на кнопку Вложить ответ для карточек ВГО\r\n ChUIHelper.IncomingPutAnswerButtonOnClick(context);\r\n\r\n //Скрытие отображение поля номер исходящего (только для вго)\r\n ChUIHelper.ControllerNumberConrol(context);\r\n \r\n // Заполняем Email для оповещения клиента\r\n ChUIHelper.InitIncomingEmailFilling(context);\r\n\r\n // Заполняем ТЧ участники дела контрагнетами, исходя из поля Договор\r\n ChUIHelper.FillCourtContractPartner(context);\r\n\r\n // Заполнение данных по умолчанию по судебным ВХ\r\n ChUIHelper.FillCourtDefaultFields(context);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\n\r\nexport class PkClientDocumentUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkClientDocumentTypeID)) {\r\n return;\r\n }\r\n \r\n // Таблица \"Объект\"\r\n ChUIHelper.InitializeTableObjects(context);\r\n \r\n // При изменении полей\r\n ChUIHelper.ChangesFieldsInClientDocument(context); \r\n \r\n //При изменении сделки или договора\r\n ChUIHelper.ChangesInUIWhenDealOrContractIsChangingInClientDocument(context);\r\n\r\n //Открыть пакет\r\n ChUIHelper.PacketCardLogic(context);\r\n \r\n ChUIHelper.CheckAutocompliteDealOrContract(context);\r\n\r\n // При изменении договора\r\n ChUIHelper.ChangesInUIWhenContractIsChanging(context);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid , createTypedField, DotNetType} from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { GridViewModel, FileListViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { UIContext } from 'tessa/ui';\r\nimport { reaction } from 'mobx';\r\nimport { openCard, createCard } from 'tessa/ui/uiHost';\r\n\r\nexport class PkClientPacketUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n private _disposerSelectRow: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkClientPacketVirtualTypeID)) {\r\n return;\r\n }\r\n\r\n let controls;\r\n let packetControl;\r\n let filesVisibleControl;\r\n \r\n if ((controls = this.InitControls(context)) == null ||\r\n (packetControl = controls.packetControl) == null ||\r\n (filesVisibleControl = controls.filesVisibleControl) == null\r\n ) {\r\n return;\r\n }\r\n \r\n this.PacketCardLogic(context,packetControl); \r\n this.PacketSelectRowLogic(packetControl, filesVisibleControl, this._disposerSelectRow);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n // подчищаем за собой\r\n if (this._disposerSelectRow) {\r\n this._disposerSelectRow();\r\n this._disposerSelectRow = null;\r\n }\r\n }\r\n\r\n private InitControls(context: ICardUIExtensionContext) {\r\n let packetControl = context.model.controls.get(\"ClientPacketControl\") as GridViewModel;\r\n let filesVisibleControl;\r\n let filesHiddenControl;\r\n\r\n if ((filesVisibleControl = context.model.controls.get(\"FilesVisibleControl\") as FileListViewModel) == null ||\r\n (filesHiddenControl = context.model.controls.get(\"FilesHiddenControl\") as FileListViewModel) == null)\r\n {\r\n return false;\r\n }\r\n\r\n return {packetControl, filesVisibleControl, filesHiddenControl};\r\n }\r\n\r\n private PacketCardLogic(context: ICardUIExtensionContext, packetControl: GridViewModel) {\r\n if (packetControl != null) {\r\n packetControl.rowInvoked.add(async e => {\r\n if(e.action == GridRowAction.Opening)\r\n {\r\n let cardId = e.row.get(\"DocID\");\r\n await openCard({\r\n cardId: cardId\r\n }); \r\n e.cancel = true;\r\n }\r\n if(e.action == GridRowAction.Inserted)\r\n {\r\n e.cancel = true;\r\n var editor = context.uiContext.cardEditor;\r\n if(editor!=null)\r\n editor.setOperationInProgress(async () =>\r\n {\r\n let info={};\r\n let pkcpSection = context.model.card.sections.tryGet('PkClientPacketInfoVirtual');\r\n if (pkcpSection != null)\r\n { \r\n if(pkcpSection.fields.get(\"PartnerKCKID\")!=null) \r\n info[\"PartnerKCKID\"]=createTypedField(pkcpSection.fields.get(\"PartnerKCKID\"), DotNetType.Guid); \r\n if(pkcpSection.fields.get(\"PartnerKCKExternalID\")!=null) \r\n info[\"PartnerKCKExternalID\"]=createTypedField(pkcpSection.fields.get(\"PartnerKCKExternalID\"), DotNetType.Int64); \r\n info[\"PartnerKCKName\"]=pkcpSection.fields.get(\"PartnerKCKName\");\r\n info[\"PartnerKCKGuidCRM\"]=pkcpSection.fields.get(\"PartnerKCKGuidCRM\");\r\n if(pkcpSection.fields.get(\"DealID\")!=null) \r\n info[\"DealID\"]=createTypedField(pkcpSection.fields.get(\"DealID\"), DotNetType.Guid);\r\n info[\"DealNumber\"]=pkcpSection.fields.get(\"DealNumber\");\r\n info[\"DealGuid1C\"]=pkcpSection.fields.get(\"DealGuid1C\");\r\n if(pkcpSection.fields.get(\"ContractID\")!=null)\r\n info[\"ContractID\"]=createTypedField(pkcpSection.fields.get(\"ContractID\"), DotNetType.Guid);\r\n info[\"ContractNumberVirtual\"]=pkcpSection.fields.get(\"ContractNumberVirtual\");\r\n if(pkcpSection.fields.get(\"ContractExtID\")!=null)\r\n info[\"ContractExtID\"]=createTypedField(pkcpSection.fields.get(\"ContractExtID\"), DotNetType.Int64); \r\n if(context.model.card.id!=null) \r\n info[\"PacketID\"]= createTypedField(context.model.card.id, DotNetType.Guid); \r\n }\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkClientDocumentTypeID,\r\n saveCreationRequest: false,\r\n context : UIContext.current,\r\n info: info \r\n }); \r\n\r\n if(editor!=null)\r\n await editor.close(true); \r\n }); \r\n }\r\n \r\n });\r\n }\r\n\r\n let pkcpSection = context.model.card.sections.tryGet('PkClientPacketInfoVirtual');\r\n if (pkcpSection != null){\r\n this.InsertTable(context); \r\n pkcpSection.fields.fieldChanged.add( e => {\r\n //context.model.card.removeChanges(false);\r\n if (e.fieldName == \"ContractID\")\r\n { \r\n if (e.fieldValue != null)\r\n {\r\n this.ClearTable(context);\r\n this.InsertTable(context, e.fieldValue);\r\n }\r\n else\r\n {\r\n this.ClearTable(context);\r\n this.InsertTable(context);\r\n }\r\n }\r\n if(pkcpSection!=null)\r\n {\r\n pkcpSection.clearChanges();\r\n if(e.fieldName == \"ContractExtID\")\r\n window.setInterval(function(){if(pkcpSection!=null) pkcpSection.clearChanges();}, 100);\r\n }\r\n //if(e.fieldName == \"ContractExtID\")\r\n //context.\r\n \r\n });\r\n }\r\n }\r\n private InsertTable(context: ICardUIExtensionContext,ContractID? : guid)\r\n {\r\n let rows = context.model.card.sections.tryGet('PkClientPacketAllVirtual')!.rows; \r\n if(rows == null) {return;}\r\n rows.forEach(row =>\r\n {\r\n if(ContractID==null || row.tryGet(\"ContractID\")==ContractID)\r\n {\r\n let newRow = context.model.card.sections.tryGet('PkClientPacketVirtual')!.rows.add(); \r\n newRow.setFrom(row);\r\n }\r\n });\r\n }\r\n private ClearTable(context: ICardUIExtensionContext)\r\n {\r\n let rows = context.model.card.sections.tryGet('PkClientPacketVirtual')!.rows; \r\n if(rows == null) {return;} \r\n rows.clear(); \r\n }\r\n private PacketSelectRowLogic(packetControl: GridViewModel,\r\n filesVisibleControl: FileListViewModel, disposer: Function | null) {\r\n if (disposer == null) {\r\n disposer = reaction(() => packetControl.selectedRows, () => {\r\n let docList = this.GetSelectedDocs(packetControl);\r\n //let tasks = context.model.tryGetTasks();\r\n //this.ChangeTasksVisible(cardTasks, tasks, docList);\r\n this.ChangeFilesVisible(filesVisibleControl, docList);\r\n });\r\n }\r\n }\r\n private ChangeFilesVisible(filesVisibleControl: FileListViewModel, docList: Array) {\r\n for (let i = filesVisibleControl.files.length - 1; i > -1; i--) {\r\n const file = filesVisibleControl.files[i];\r\n if (!(docList.indexOf(file.model.info.DocID.$value) > -1)) {\r\n filesVisibleControl.removeFile(file);\r\n }\r\n }\r\n }\r\n private GetSelectedDocs(packetControl: GridViewModel) {\r\n let docList: any[] = [];\r\n\r\n if (packetControl.selectedRows.length > 0) {\r\n docList = packetControl.selectedRows.map(t => t.row.get(\"DocID\"));\r\n }\r\n else {\r\n docList = packetControl.rows.map(t => t.row.get(\"DocID\"));\r\n }\r\n\r\n return docList;\r\n}\r\n}\r\n \r\n","\r\nimport { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { Card } from 'tessa/cards';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { createCard } from 'tessa/ui/uiHost';\r\nimport { LoadingOverlay } from 'tessa/ui';\r\nimport { IStorage } from 'tessa/platform/storage';\r\n\r\nexport class ChInternalDocumentUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkInternalDocumentationTypeID)) {\r\n return;\r\n }\r\n\r\n // Связка ЮЛ и подписанта\r\n ChUIHelper.BindingDepartmentWithSigner(context, this._disposer);\r\n\r\n // Связка полей \"дело\" и \"дело верхнего уровня\"\r\n ChUIHelper.BundleCaseTopLevelCase(context);\r\n\r\n // Скрытие варианта завершения \"Документ подписан\"\r\n ChUIHelper.HideDocumentSigned(context);\r\n\r\n // Скрытие флага \"Для регистрации в УДО\"\r\n ChUIHelper.HideShowUDORegistrationFlag(context);\r\n\r\n ArUIHelper.DiadocButtonLogic(context);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext)\r\n {\r\n \r\n let card: Card;\r\n if (context == null ||\r\n (card = context.card) == null)\r\n {\r\n return;\r\n }\r\n\r\n if (card.typeId != PkCardTypes.PkInternalDocumentationTypeID){\r\n return;\r\n }\r\n\r\n await this.confirmOrderAsync(context);\r\n }\r\n\r\n\r\n public async confirmOrderAsync(context: ICardUIExtensionContext)\r\n {\r\n \r\n let card: Card;\r\n if (context == null ||\r\n (card = context.card) == null)\r\n {\r\n return;\r\n }\r\n\r\n // получаем завершаемое задание с необходимым вариантом завершения\r\n var completedTask = context.card.tasks.find(x =>\r\n x.optionId == PkFdProcessHelper.PkPrepareOrder);\r\n\r\n // если задание не завершалось с таким вариантом завершения\r\n if (completedTask == null)\r\n {\r\n return;\r\n }\r\n\r\n const info: IStorage = {};\r\n info[\"confirmOrderBaseCardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: PkCardTypes.RdndTypeID,\r\n cardTypeName: PkCardTypes.RdndTypeName,\r\n context: context.uiContext,\r\n info: info,\r\n });\r\n });\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext, IFormViewModel } from 'tessa/ui/cards';\r\nimport { Guid, Visibility } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { ArUIHelper, PkArticle } from '../ArUIHelper';\r\nimport { PkArticles } from '../PkArticles';\r\nimport { ButtonForCopyingRows } from 'src/pkScripts/Helpers/PkClientHelper';\r\nimport { TabControlViewModel } from 'tessa/ui/cards/controls';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { tryGetFromInfo } from 'tessa/ui';\r\nimport { PkAccreditationPerimeters } from 'src/pkScripts/Helpers/PkAccreditationPerimeters';\r\nimport { PkLetterCreditKinds } from 'src/pkScripts/Helpers/PkLetterCreditKinds';\r\n\r\nexport class ChLetterCreditUIExtension extends CardUIExtension {\r\n idpPkArticle: PkArticle;\r\n ohrPkArticle: PkArticle;\r\n articles: PkArticles;\r\n public tabs: TabControlViewModel;\r\n public copy: IFormViewModel[];\r\n\r\n public constructor() {\r\n super();\r\n let articles = [\"ArArticleIDPListVirtual\", \"ArArticleOHRListVirtual\"];\r\n this.idpPkArticle = new PkArticle(\"ArArticleIDPList\", articles);\r\n this.ohrPkArticle = new PkArticle(\"ArArticleOHRList\", articles);\r\n this.articles = new PkArticles(articles);\r\n }\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkLetterCreditTypeID)) {\r\n return;\r\n }\r\n\r\n this.tabs = CdUIHelper.GetUIControl(context, \"ArticlesTabs\") as TabControlViewModel;\r\n this.copy = this.tabs.tabs.slice();\r\n\r\n ChUIHelper.FillRegionCityAndProject(context);\r\n ChUIHelper.SetContractReadOnly(context);\r\n ChUIHelper.EditContractForPkLetterCredit(context);\r\n ArUIHelper.EditTableArticlesIdpHandle(context);\r\n this.idpPkArticle.Initialized(context);\r\n ChUIHelper.ClearFieldsWhenSomeOtherFieldsChanged(context);\r\n ChUIHelper.ChangesInUIWhenPrepaymentChanging(context);\r\n ChUIHelper.CalculateVATAmount(context);\r\n ChUIHelper.ChangesInUIWhenKindChanging(context, this.copy);\r\n ChUIHelper.ControlInitialization(context, this.copy);\r\n ChUIHelper.ChangesInUIWhenContractOrVATRateChangingLetterCreditDoc(context);\r\n ButtonForCopyingRows.Initialized(context, \"ArticlesOHRVirtual\", \"ArArticleOHRListVirtual\");\r\n ArUIHelper.InitArticlesTabsSwitchingForLetterCredit(context, context.model.card);\r\n this.articles.Initialized(context);\r\n this.ohrPkArticle.Initialized(context);\r\n this.InitializeContractWithRecipientVisiability(context);\r\n }\r\n\r\n private InitializeContractWithRecipientVisiability(context: ICardUIExtensionContext) {\r\n // При загрузке карточки\r\n this.SetContractWithRecipientVisiability(context, context.model);\r\n\r\n // При изменении поля\r\n let card = context.card;\r\n let pkLetterCreditInfo = card.sections.get(\"PkLetterCreditInfo\");\r\n if (pkLetterCreditInfo) {\r\n pkLetterCreditInfo!.fields.fieldChanged.add(async (args) => {\r\n if ([\"PartnerKCKExternalID\", \"ContractorKCKExternalID\", \"KindID\"].some(l => l == args.fieldName) == false) {\r\n return;\r\n }\r\n\r\n let senderExtId = pkLetterCreditInfo!.fields.tryGet(\"PartnerKCKExternalID\");\r\n let recipientExtId = pkLetterCreditInfo!.fields.tryGet(\"ContractorKCKExternalID\");\r\n let kindId = pkLetterCreditInfo!.fields.tryGet(\"KindID\");\r\n if (args.fieldName == \"PartnerKCKExternalID\") {\r\n senderExtId = args.fieldValue;\r\n }\r\n\r\n if (args.fieldName == \"ContractorKCKExternalID\") {\r\n recipientExtId = args.fieldValue;\r\n }\r\n\r\n if (args.fieldName == \"KindID\") {\r\n kindId = args.fieldValue;\r\n }\r\n\r\n\r\n let receiverInPerimetr = false;\r\n let senderOrganizationInPerimetr = false;\r\n let isPayment = [PkLetterCreditKinds.PaymentToTheSupplierID, PkLetterCreditKinds.PaymentForServicesID].includes(kindId);\r\n\r\n if (isPayment){\r\n senderOrganizationInPerimetr = await CdUIHelper.CheckPartnerInPerimeterAsync(\r\n senderExtId,\r\n PkAccreditationPerimeters.GkPIKPerimeter);\r\n\r\n receiverInPerimetr = await CdUIHelper.CheckPartnerInPerimeterAsync(\r\n recipientExtId,\r\n PkAccreditationPerimeters.GkPIKPerimeter);\r\n }\r\n\r\n card.info[\"IsContractWithRecipientVisible\"] =\r\n (receiverInPerimetr || senderOrganizationInPerimetr) && isPayment;\r\n // IsContractWithRecipientVisible\r\n this.SetContractWithRecipientVisiability(context, context.model);\r\n });\r\n }\r\n }\r\n\r\n private SetContractWithRecipientVisiability(context: ICardUIExtensionContext, model: ICardModel) {\r\n let isContractWithRecipientVisible =\r\n tryGetFromInfo(context.card.info, \"IsContractWithRecipientVisible\", false);\r\n\r\n let letterReceiverContractControl = model.controls.get(\"LetterReceiverContractControl\");\r\n if (!letterReceiverContractControl) {\r\n return;\r\n }\r\n\r\n letterReceiverContractControl.controlVisibility =\r\n isContractWithRecipientVisible ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n\r\n public contextInitialized(context: ICardUIExtensionContext) {\r\n ChUIHelper.SendNotification(context);\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\n\r\nexport class ChMemoUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkMemoTypeID)) {\r\n return;\r\n }\r\n\r\n // Связка ЮЛ и типа СЗ.\r\n ChUIHelper.BindingDepartmentWithMemoType(context, this._disposer);\r\n\r\n // Связка ЮЛ и подписанта\r\n ChUIHelper.BindingDepartmentWithSigner(context, this._disposer);\r\n\r\n // Связка полей \"дело\" и \"дело верхнего уровня\"\r\n ChUIHelper.BundleCaseTopLevelCase(context);\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n // Таблица авансовые затраты\r\n ChUIHelper.InitializeExpenses(context);\r\n\r\n // Скрытие варианта завершения \"Документ подписан\"\r\n ChUIHelper.HideDocumentSigned(context);\r\n\r\n // При изменении типа СЗ\r\n ChUIHelper.ChangesInUIWhenMemoTypeIsChanging(context);\r\n\r\n ChUIHelper.InitializeExpensesTable(context);\r\n \r\n ChUIHelper.SetBusinessTripsTableLocic(context.model);\r\n }\r\n\r\n\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n \r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkMemoTypeID)) {\r\n return;\r\n }\r\n\r\n // TES-8851: проверка неактуальная\r\n // await ChUIHelper.ValidateBusinessTrip(context);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid, Visibility, hasFlag } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ValidationResult, ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { userSession } from 'common/utility';\r\nimport { CardFilesInfo, PkCardHelper } from 'src/pkScripts/Helpers/PkCardHelper';\r\nimport { CdDSSHelper } from 'src/cdScripts/Helpers/CdDSSHelper';\r\nimport { CdDssCspType } from 'src/cdScripts/Helpers/CdDssCspType';\r\nimport { createCard, openCard } from 'tessa/ui/uiHost';\r\nimport { ControlViewModelBase, GridRowAction, GridViewModel, TextBoxViewModel, GridRowEventArgs} from 'tessa/ui/cards/controls';\r\nimport { PkOutgoingKinds } from 'src/pkScripts/helpers/PkOutgoingKinds';\r\nimport { Card, CardTaskAction, CardRow, CardRowState, CardStoreMode, CardPermissionFlags, CardSection } from 'tessa/cards';\r\nimport { ChTaskTypes } from 'src/pkScripts/Helpers/ChTaskTypes';\r\nimport { CdFdProcessHelper } from 'src/cdScripts/Helpers/CdFdProcessHelper';\r\nimport { showLoadingOverlay, showNotEmpty, tryGetFromInfo } from 'tessa/ui';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { IStorage, IStorageArray } from 'tessa/platform/storage';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { PkOutgoingReceivingMethods } from 'src/pkScripts/Helpers/PkOutgoingReceivingMethods';\r\nimport { DefaultCompletionOptions } from 'src/cdScripts/Helpers/DefaultCompletionOptions';\r\nimport { showError } from 'tessa/ui';\r\nimport { reaction } from 'mobx';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { CdFdTaskTypes } from 'src/cdScripts/Helpers/CdFdTaskTypes';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\n\r\nexport class ChOutgoingUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkOutgoingTypeID)) {\r\n return;\r\n }\r\n\r\n // Инициализация полей\r\n ChUIHelper.OutgoingControlInitialization(context);\r\n\r\n // Покажем контролы если карточка ВГО\r\n ChUIHelper.IncomingVisibilityControlsVgo(context);\r\n\r\n // При изменении организации\r\n ChUIHelper.CheckVGOPartners(context);\r\n\r\n // Связка ЮЛ и подписанта\r\n ChUIHelper.BindingDepartmentWithSigner(context, this._disposer);\r\n\r\n // Связка полей \"дело\" и \"дело верхнего уровня\"\r\n ChUIHelper.BundleCaseTopLevelCase(context);\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n // Проверка возможности добавления контрагента \"на лету\"\r\n // ChUIHelper.CanAddPartnerPermission(context, cardRepository);\r\n\r\n // При изменении флага Обращение контрагента/клиента\r\n ChUIHelper.ChangesInUIWhenKindChangingOutgoingDoc(context);\r\n\r\n // При изменении типа отправки сохраняем карточку, чтобы отозвать процесс инициализации согласования\\подписания\r\n ChUIHelper.ChangesInUIWhenReceivingMethodChangingOutgoingDocAsync(context);\r\n\r\n // Скрытие варианта завершения \"Документ подписан\"\r\n ChUIHelper.HideDocumentSigned(context, true);\r\n\r\n //При изменении организации заполнение поля Email\r\n ChUIHelper.CheckChangesPartnersEmail(context);\r\n\r\n await ChUIHelper.SetReadOnlyStatusForClaimHoldingAmountAsync(context);\r\n\r\n // Скрытие полей в зависимости от типа исходящего\r\n await ChUIHelper.HideOrganizationFieldsByType(context);\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n if (pkoSection != null) {\r\n pkoSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"TypeID\" || e.fieldName === \"ClaimTypeID\")\r\n {\r\n this.SetOrganizationCaption(context);\r\n await ChUIHelper.HideOrganizationFieldsByType(context);\r\n ChUIHelper.ClearClaimFieldsByType(context);\r\n }\r\n\r\n if (e.fieldName === \"TypeDocumentKind\" && pkoSection?.fields.tryGet(\"TypeID\") === PkOutgoingKinds.PowerOfAttorneyRevocationId) {\r\n if (pkoSection) {\r\n pkoSection.fields.set(\"Subject\", e.fieldValue, DotNetType.String)\r\n }\r\n }\r\n });\r\n }\r\n\r\n //ArUIHelper.DiadocButtonLogic(context);\r\n ArUIHelper.DiadocButtonLogicWithPkDiadocInfo(context);\r\n\r\n // При добавлении нового файла\r\n ChUIHelper.WrkWithATemplate(context);\r\n\r\n this.RevocationListControlLogic(context);\r\n\r\n // устанавливаем логику для заданий\r\n this.SetTasksLogic(context);\r\n this.SetOrganizationCaption(context);\r\n this.SetARFOTableLogic(context);\r\n this.SetClaimPerformersTableLogic(context);\r\n this.SetClaimContractControlLogic(context);\r\n this.SetOrganizationClaimLogic(context);\r\n this.HideClaimResponseFields(context);\r\n // // устанавливаем логику таблички \"Отправления\"\r\n // this.SetEnvelopesControlLogic(context);\r\n }\r\n\r\n HideClaimResponseFields(context: ICardUIExtensionContext) {\r\n let responseFieldVisibility = context.card.taskHistory.some(x => x.typeId == CdFdTaskTypes.PkProcessIncomingResponseTypeID) ||\r\n context.card.tasks.some(x => x.typeId == CdFdTaskTypes.PkProcessIncomingResponseTypeID) ? Visibility.Visible : Visibility.Collapsed;\r\n let culpritResponse = context.model.controls.get('CulpritResponse');\r\n if (culpritResponse != null)\r\n {\r\n culpritResponse.controlVisibility = responseFieldVisibility;\r\n }\r\n let claimHoldingAmount = context.model.controls.get('ClaimHoldingAmount');\r\n if (claimHoldingAmount != null)\r\n {\r\n claimHoldingAmount.controlVisibility = responseFieldVisibility;\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkOutgoingTypeID)) {\r\n return;\r\n }\r\n\r\n // подписываем файлы\r\n await this.SignFilesAsync(context);\r\n\r\n // отправка через Почту России\r\n await this.SendByRussianPostProcessAsync(context);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n\r\n public SignedInfo: string = \"\";\r\n\r\n /** Открывать доверенности из списка отзыва по клику вместо редактирования. \r\n * Также обновление формы доверенности при ручном создании отзыва через правое меню для корректной работы Fd-процесса отзыва\r\n */\r\n private RevocationListControlLogic(context: ICardUIExtensionContext) {\r\n const refsTable = context.model.controls.get(\"RevocationList\") as GridViewModel;\r\n\r\n // обработка открытия строки\r\n if (refsTable != null) {\r\n this.ChangeRevocationListEditLogic(refsTable);\r\n this.ChangeCredentialsText(refsTable, context.model, this._disposer);\r\n }\r\n\r\n const refsSection = context.model.card.sections.tryGet('ArPowerOfAttorneyRevocationList');\r\n const mainSection = context.model.card.sections.tryGet('PkOutgoing');\r\n \r\n if (refsSection != null && mainSection != null) {\r\n this.ChangeRevocationListCollectionEditLogic(refsSection, mainSection);\r\n }\r\n }\r\n\r\n /** Добавление ПФ. */\r\n private async AddPrintFormsAsync(\r\n context: ICardUIExtensionContext) {\r\n // проверяем наличие ошибок в контексте\r\n if (!context.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n // инициализируем объект для подписания файлов карточки\r\n const cardFilesInfo = await CardFilesInfo.CreateAsync(\r\n context.card,\r\n context.fileContainer,\r\n userSession.UserID);\r\n\r\n // если не требуется добавление ПФ\r\n if (!cardFilesInfo.PrintFormsInfo.IsNeedAddPrintForms) {\r\n return;\r\n }\r\n\r\n // способ установки штампа\r\n const inserModeID: number = 0;\r\n\r\n // добавление файлов печатных форм\r\n const addPrintFormsResult = await ArUIHelper.AddPrintFormsAsync(\r\n Array.of(cardFilesInfo),\r\n inserModeID,\r\n this.SignedInfo,\r\n false,\r\n true);\r\n\r\n // проверяем результат валидации\r\n if (!addPrintFormsResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при формировании печатных форм.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n addPrintFormsResult.build().toString());\r\n\r\n // отменяем сохранение карточки\r\n context.cancel = true;\r\n }\r\n }\r\n\r\n /** Подписать файлы железным сертом. */\r\n private async SignByStickAsync(context: ICardUIExtensionContext) {\r\n console.log(\"Подписываем железным сертом\");\r\n // инициализируем объект для подписания файлов карточки\r\n const cardFilesInfo = await CardFilesInfo.CreateAsync(\r\n context.card,\r\n context.fileContainer,\r\n userSession.UserID);\r\n\r\n this.SignedInfo = \"Подписан ЭЦП в системе Tessa\";\r\n // подписываем железным\r\n let vr = await ArUIHelper.SignFilesAsync(\r\n Array.of(cardFilesInfo),\r\n context.model.edsProvider);\r\n return vr;\r\n }\r\n\r\n /** Подписать сертом. */\r\n private async SignFilesAsync(context: ICardUIExtensionContext) {\r\n\r\n if ((await PkCardHelper.OutgoingNeedSigningAsync(context.card)) == false) {\r\n return;\r\n }\r\n\r\n let vrc = await this.SignByDssAsync(context);\r\n let vrs: ValidationResultBuilder = new ValidationResultBuilder();\r\n if (vrc.isSuccessful == false) {\r\n vrs = await this.SignByStickAsync(context);\r\n }\r\n\r\n if (vrc.isSuccessful == false && vrs!.isSuccessful == false) {\r\n this.UpsateSigningState(context, \"Failed\");\r\n context.validationResult.add(ValidationResultType.Info,\r\n \"Уважаемый пользователь! У Вас отсутствует возможность электронного подписания.\");\r\n return;\r\n }\r\n\r\n this.UpsateSigningState(context, \"Signed\");\r\n // добавляем ПФ\r\n await this.AddPrintFormsAsync(context);\r\n }\r\n\r\n\r\n /** Подписать файлы через дсс. */\r\n private async SignByDssAsync(context: ICardUIExtensionContext) {\r\n // инициаризируем результат валидации\r\n let validationResult = new ValidationResultBuilder();\r\n const departmentID = PkCardHelper.GetDepartmentID(context.card);\r\n\r\n // получаем данные по сертификату КЭП по сотруднику\r\n const userCertInfo = await CdDSSHelper.GetUserCertInfoAsync(\r\n userSession.UserID,\r\n undefined,\r\n departmentID,\r\n undefined,\r\n false,\r\n CdDssCspType.Qualified);\r\n\r\n // инициализируем объект для подписания файлов карточки\r\n const cardFilesInfo = await CardFilesInfo.CreateAsync(\r\n context.card,\r\n context.fileContainer,\r\n userSession.UserID);\r\n\r\n // если удалось получить данные по сертификату КЭП по сотруднику\r\n if (userCertInfo?.ExternalUserGuid != null ||\r\n userCertInfo?.EmployeeGuid1C != null) {\r\n // подписываем файлы через DSS\r\n validationResult = await ArUIHelper.SignFilesByDssAsync(\r\n Array.of(cardFilesInfo),\r\n userCertInfo.ExternalUserGuid,\r\n userCertInfo.EmployeeGuid1C,\r\n CdDssCspType.Qualified);\r\n this.SignedInfo = \"Подписан квалифицированной электронной подписью в системе Tessa\";\r\n }\r\n else {\r\n validationResult.add(ValidationResultType.Error, \"Не удалось получить ExternalUserGuid или EmployeeGuid1C для сотрудника\");\r\n }\r\n\r\n return validationResult;\r\n }\r\n\r\n /** Обновляем состояние по подписанию*/\r\n public UpsateSigningState(context: ICardUIExtensionContext, state: string) {\r\n let card = context.card;\r\n let pkOutgoing = card.sections.get(\"PkOutgoing\");\r\n if (!pkOutgoing) {\r\n return;\r\n }\r\n\r\n pkOutgoing.fields.set(\"SigningState\", state, DotNetType.String);\r\n }\r\n\r\n /** Обработка варианта завершения \"Отправить Почтой России\". */\r\n private async SendByRussianPostProcessAsync(\r\n context: ICardUIExtensionContext) {\r\n // получаем карточку\r\n const card = context.card;\r\n\r\n // проверяем завершается ли задание \"Передача контрагенту\" с вариантом \"Отправить Почтой России\"\r\n if (!card.tasks.some(x =>\r\n x.action == CardTaskAction.Complete &&\r\n Guid.equals(x.typeId, ChTaskTypes.PkSendToContractorTypeID) &&\r\n Guid.equals(x.optionId, CdFdProcessHelper.PkSendByRussianPost))) {\r\n // если нет, то выходим\r\n return;\r\n }\r\n\r\n // отменяем сохранение карточки,\r\n // т.к. кнопка должна вести на открытие или создание карточки конверта\r\n context.cancel = true;\r\n\r\n // получаем секции\r\n const dciSection = card.sections.tryGet(\"DocumentCommonInfo\");\r\n const pkdciSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n\r\n // проверяем\r\n if (dciSection == null ||\r\n pkdciSection == null) {\r\n return;\r\n }\r\n\r\n // получаем список связанных ссылок\r\n const references = await this.GetReferencesInfoAsync(card.id);\r\n\r\n // проверяем\r\n if (references == null) {\r\n // формируем ошибку\r\n var validationResult = ValidationResult.fromText(\r\n \"Не удалось получить ссылки на карточку для определения связанного конверта.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору.\",\r\n ValidationResultType.Error);\r\n\r\n // отображаем ошибку\r\n await showNotEmpty(validationResult);\r\n\r\n // выходим\r\n return;\r\n }\r\n\r\n // получаем первую ссылку на конверт (она должна быть одна)\r\n const enelopeReference = references.find(x => \r\n Guid.equals(x.DocumentTypeID, PkCardTypes.PkEnvelopeTypeID));\r\n\r\n // если ссылка есть\r\n if (enelopeReference?.DocumentID != null) {\r\n await showLoadingOverlay(async () => {\r\n // открываем карточку конверта в новой вкладке\r\n await openCard({\r\n cardId: enelopeReference.DocumentID,\r\n cardTypeId: PkCardTypes.PkEnvelopeTypeID\r\n });\r\n }, \"Открывается карточка\");\r\n }\r\n\r\n // если ссылки нет\r\n else {\r\n await showLoadingOverlay(async () => {\r\n // создаем новую карточку конверта\r\n await createCard({\r\n cardTypeId: PkCardTypes.PkEnvelopeTypeID,\r\n info: {\r\n // устанавливаем данные в Info\r\n ReferenceID: createTypedField(card.id, DotNetType.Guid),\r\n ReferenceCardTypeID: createTypedField(card.typeId, DotNetType.Guid),\r\n ReferenceCardTypeCaption: createTypedField(card.typeCaption, DotNetType.String),\r\n ReferenceCreationDate: dciSection.fields.tryGetField(\"CreationDate\"),\r\n ReferenceSubject: dciSection.fields.tryGetField(\"Subject\"),\r\n ReferenceFullNumber: dciSection.fields.tryGetField(\"FullNumber\"),\r\n ReferenceSecondaryFullNumber: dciSection.fields.tryGetField(\"SecondaryFullNumber\"),\r\n ReferenceStateName: pkdciSection.fields.tryGetField(\"StateName\"),\r\n EnvelopeInfo: this.GetEnvelopeInfo(context.model),\r\n RecipientInfo: this.GetRecipientInfo(context.model)\r\n }});\r\n }, \"Создаётся карточка\");\r\n }\r\n }\r\n\r\n /** Получение связанных с карточкой ссылок. */\r\n private async GetReferencesInfoAsync(\r\n cardID: string) {\r\n // инициализируем реквест\r\n const request = new CardRequest();\r\n request.cardId = cardID;\r\n request.requestType = PkRequestTypes.PkGetReferencesInfo;\r\n\r\n // получаем ответ\r\n const response = await CardService.instance.request(request);\r\n\r\n // проверяем\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n\r\n // получаем данные из ответа\r\n const referencesInfoStorage = tryGetFromInfo(response.info, \"ReferencesInfo\");\r\n\r\n // проверяем\r\n if (referencesInfoStorage == null) {\r\n return null;\r\n }\r\n\r\n // возвращаем список ссылок, преобразуя их в объекты класса\r\n return referencesInfoStorage.map(x => {\r\n return { \r\n DocumentID: x.DocumentID as string,\r\n DocumentTypeID: x.DocumentTypeID as string\r\n }\r\n });\r\n }\r\n\r\n private async CheckCurrentUserIsDeputy (userID: guid, userDeputyID: guid) {\r\n let check = false;\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCheckDeputyUsers;\r\n request.info[\"UserID\"] = createTypedField(userID, DotNetType.Guid);\r\n request.info[\"UserDeputyID\"] = createTypedField(userDeputyID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.isSuccessful == true) {\r\n check = response.info.CheckDeputy.$value;\r\n }\r\n return check;\r\n\r\n }\r\n\r\n /** Получение информации по конверту. */\r\n private GetEnvelopeInfo(\r\n model: ICardModel) {\r\n // получаем карточку\r\n var card = model.card;\r\n\r\n // получаем секции\r\n const pkdciSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n const dciSection = card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n // проверяем и получаем секции\r\n if (pkdciSection == null ||\r\n dciSection == null) {\r\n return null;\r\n }\r\n\r\n // инициализируем данные по конверту\r\n const envelopeInfo: IStorage = {\r\n DepartmentID: dciSection.fields.tryGetField(\"DepartmentID\"),\r\n DepartmentName: dciSection.fields.tryGetField(\"DepartmentName\"),\r\n SenderID: pkdciSection.fields.tryGetField(\"PerformerID\"),\r\n SenderName: pkdciSection.fields.tryGetField(\"PerformerName\"),\r\n SenderDepartmentID: pkdciSection.fields.tryGetField(\"PerformerDepartmentID\"),\r\n SenderOrganizationID: dciSection.fields.tryGetField(\"DepartmentID\"),\r\n SenderOrganizationName: dciSection.fields.tryGetField(\"DepartmentName\")\r\n };\r\n\r\n // возвращаем данные по конверту\r\n return envelopeInfo;\r\n }\r\n\r\n /** Получение информации по получателю. */\r\n private GetRecipientInfo(\r\n model: ICardModel) {\r\n // получаем карточку\r\n const card = model.card;\r\n\r\n // получаем контролы\r\n const partnersControl = CdUIHelper.GetUIControlFromModel(model, \"PartnersControl\");\r\n const canAddPartnersControl = CdUIHelper.GetUIControlFromModel(model, \"CanAddPartnersControl\");\r\n const receiverKCKControl = CdUIHelper.GetUIControlFromModel(model, \"ReceiverKCKControl\");\r\n const addreseeControl = CdUIHelper.GetUIControlFromModel(model, \"AddreseeControl\");\r\n const userFioOutgoingControl = CdUIHelper.GetUIControlFromModel(model, \"UserFioOutgoingControl\");\r\n const additionalEmailsForPartnersControl = CdUIHelper.GetUIControlFromModel(model, \"AdditionalEmailsForPartnersControl\");\r\n\r\n // проверяем контролы\r\n if (partnersControl == null ||\r\n canAddPartnersControl == null ||\r\n receiverKCKControl == null ||\r\n addreseeControl == null ||\r\n userFioOutgoingControl == null ||\r\n additionalEmailsForPartnersControl == null) {\r\n return null;\r\n }\r\n\r\n // получаем секции\r\n const pkdciSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n const pkcpSection = card.sections.tryGet(\"PkChanceryPartners\");\r\n const pkorkSection = card.sections.tryGet(\"PkOutgoingReceiverKCK\");\r\n const pkaSection = card.sections.tryGet(\"PkAddressees\");\r\n const pkoSection = card.sections.tryGet(\"PkOutgoing\");\r\n\r\n // проверяем и получаем секции\r\n if (pkdciSection == null ||\r\n pkcpSection == null ||\r\n pkorkSection == null ||\r\n pkaSection == null ||\r\n pkoSection == null) {\r\n return null;\r\n }\r\n\r\n // инициализируем данные по получателю\r\n const recipientInfo: IStorage = {};\r\n\r\n // если отображается контрол \"Организация\" в карточке\r\n if (partnersControl.controlVisibility == Visibility.Visible ||\r\n canAddPartnersControl.controlVisibility == Visibility.Visible) {\r\n // тогда получаем первую строку из секции PkChanceryPartners\r\n const firstOrganization = pkcpSection.rows.length > 0 ? pkcpSection.rows[0] : null;\r\n\r\n // и устанавливаем данные по получателю\r\n recipientInfo.OrganizationID = firstOrganization?.tryGetField(\"PartnerID\");\r\n recipientInfo.OrganizationExternalID = firstOrganization?.tryGetField(\"PartnerExternalID\");\r\n recipientInfo.OrganizationName = firstOrganization?.tryGetField(\"PartnerName\");\r\n }\r\n\r\n // иначе если отображется контрол \"Получатель\"\r\n else if (receiverKCKControl.controlVisibility == Visibility.Visible) {\r\n // тогда получаем первую строку из секции PkOutgoingReceiverKCK\r\n const firstOrganization = pkorkSection.rows.length > 0 ? pkorkSection.rows[0] : null;\r\n\r\n // и устанавливаем данные по получателю\r\n recipientInfo.OrganizationID = firstOrganization?.tryGetField(\"PartnerID\");\r\n recipientInfo.OrganizationExternalID = firstOrganization?.tryGetField(\"PartnerExternalID\");\r\n recipientInfo.OrganizationName = firstOrganization?.tryGetField(\"PartnerName\");\r\n }\r\n\r\n // если отображается контрол \"Адресат\"\r\n if (addreseeControl.controlVisibility == Visibility.Visible) {\r\n // тогда получаем первую строку из секции PkAddressees\r\n const firstAddresse = pkaSection.rows.length > 0 ? pkaSection.rows[0] : null;\r\n\r\n // и устанавливаем данные по получателю\r\n recipientInfo.ContactPerson = firstAddresse?.tryGetField(\"AddresseeName\");\r\n }\r\n\r\n // иначе если отображется контрол \"ФИО\"\r\n else if (userFioOutgoingControl.controlVisibility == Visibility.Visible) {\r\n // устанавливаем данные по получателю\r\n recipientInfo.ContactPerson = pkdciSection.fields.tryGetField(\"PartnersContacts\");\r\n }\r\n\r\n // если отображается контрол \"Email\"\r\n if (additionalEmailsForPartnersControl.controlVisibility == Visibility.Visible) {\r\n // устанавливаем данные по получателю\r\n recipientInfo.ContactEmail = pkoSection.fields.tryGetField(\"AdditionalEmailsForPartners\");\r\n }\r\n\r\n // возвращаем данные по получателю\r\n return recipientInfo;\r\n }\r\n\r\n /** Установка логики в заданиях. */\r\n private SetTasksLogic(\r\n context: ICardUIExtensionContext) {\r\n // получаем задания\r\n const tasks = context.model.tryGetTasks();\r\n if (tasks == null) {\r\n return;\r\n }\r\n const pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n const typeID = pkoSection?.fields.tryGet(\"TypeID\");\r\n // пробегаемся по заданиям\r\n for (const task of tasks) {\r\n // при инциализации формы\r\n this.SetSendToContractorTaskLogic(task, context.model.card);\r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(e => {\r\n this.SetSendToContractorTaskLogic(e.task, context.model.card);\r\n });\r\n \r\n // скрытие кнопки \"Документ подписан\"\r\n this.HideAskAboutDocumentAction(task, typeID);\r\n\r\n task.workspaceChanged.add(e => {\r\n this.HideAskAboutDocumentAction(e.task, typeID);\r\n });\r\n\r\n // скрытие кнопки \"Нет ответа\"\r\n this.HideNoAnswerAction(task, context.model.card, typeID);\r\n\r\n task.workspaceChanged.add(e => {\r\n this.HideNoAnswerAction(e.task, context.model.card, typeID);\r\n});\r\n }\r\n }\r\n /** Скрытие кнопки \"Задать вопрос по документу\". */\r\n private async HideAskAboutDocumentAction(\r\n task: TaskViewModel,\r\n documentKindID: string) {\r\n // нам нужно скрыть кнопку только в тех видах,\r\n // в которых пропускается этап подписания куратором\r\n if (documentKindID != PkOutgoingKinds.ClaimId) {\r\n return;\r\n }\r\n\r\n // получаем все кнопки\r\n const actions = task.taskWorkspace.actions;\r\n if (actions == null) {\r\n return;\r\n }\r\n\r\n // получаем все дополнительные кнопки\r\n const additionalActions = task.taskWorkspace.additionalActions;\r\n if (additionalActions == null) {\r\n return;\r\n }\r\n\r\n // удаляем кнопки\r\n for (let i = actions.length - 1; i >= 0; i--) {\r\n const action = actions[i];\r\n\r\n if (action.completionOption == null ||\r\n !Guid.equals(action.completionOption.id, PkFdProcessHelper.DocumentIsSigned)) {\r\n continue;\r\n }\r\n\r\n actions.splice(i, 1);\r\n }\r\n\r\n // удаляем дополнительные кнопки\r\n for (let i = additionalActions.length - 1; i >= 0; i--) {\r\n const additionalAction = additionalActions[i];\r\n\r\n if (additionalAction.completionOption == null ||\r\n !Guid.equals(additionalAction.completionOption.id, PkFdProcessHelper.DocumentIsSigned)) {\r\n continue;\r\n }\r\n\r\n additionalActions.splice(i, 1);\r\n }\r\n }\r\n\r\n private async HideNoAnswerAction(\r\n task: TaskViewModel,\r\n card: Card,\r\n documentKindID: string) {\r\n if (documentKindID != PkOutgoingKinds.ClaimId) {\r\n return;\r\n }\r\n var responseTask = card.tasks.find(x => x.typeId == CdFdTaskTypes.PkProcessIncomingResponseTypeID)\r\n if (!responseTask)\r\n return;\r\n if (responseTask?.plannedQuants && responseTask?.plannedQuants <= 0)\r\n return;\r\n // получаем все кнопки\r\n const actions = task.taskWorkspace.actions;\r\n if (actions == null) {\r\n return;\r\n }\r\n\r\n // получаем все дополнительные кнопки\r\n const additionalActions = task.taskWorkspace.additionalActions;\r\n if (additionalActions == null) {\r\n return;\r\n }\r\n\r\n // удаляем кнопки\r\n for (let i = actions.length - 1; i >= 0; i--) {\r\n const action = actions[i];\r\n\r\n if (action.completionOption == null ||\r\n !Guid.equals(action.completionOption.id, PkFdProcessHelper.PkNoAnswer)) {\r\n continue;\r\n }\r\n\r\n actions.splice(i, 1);\r\n }\r\n\r\n // удаляем дополнительные кнопки\r\n for (let i = additionalActions.length - 1; i >= 0; i--) {\r\n const additionalAction = additionalActions[i];\r\n\r\n if (additionalAction.completionOption == null ||\r\n !Guid.equals(additionalAction.completionOption.id, PkFdProcessHelper.PkNoAnswer)) {\r\n continue;\r\n }\r\n\r\n additionalActions.splice(i, 1);\r\n }\r\n }\r\n /** Установка логики модели задания \"Передача контрагенту\". */\r\n private SetSendToContractorTaskLogic(\r\n task: TaskViewModel,\r\n card: Card)\r\n {\r\n // только в заданиях типа \"Передача контрагенту\"\r\n if (!Guid.equals(task.taskModel.cardType?.id, ChTaskTypes.PkSendToContractorTypeID)) {\r\n return;\r\n }\r\n\r\n // получаем секции\r\n const pkdciSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n\r\n // проверяем секции\r\n if (pkdciSection == null) {\r\n return;\r\n }\r\n\r\n // получаем данные\r\n const receivingMethodID = pkdciSection.fields.tryGet(\"ReceivingMethodID\") as Number | null;\r\n\r\n // получаем ID варианта завершения для скрытия\r\n // либо \"Завершить\", либо \"Отправить Почтой России\"\r\n // в зависимости от значения в поле \"Способ отправления\"\r\n const hideCompletionOptionID =\r\n receivingMethodID == PkOutgoingReceivingMethods.RussianPost ||\r\n receivingMethodID == PkOutgoingReceivingMethods.RussianPostWithEmail\r\n ? DefaultCompletionOptions.Complete\r\n : CdFdProcessHelper.PkSendByRussianPost;\r\n\r\n // получаем все кнопки\r\n const actions = task.taskWorkspace.actions;\r\n if (actions == null) {\r\n return;\r\n }\r\n\r\n // удаляем кнопки\r\n for (let i = actions.length - 1; i >= 0; i--) {\r\n const action = actions[i];\r\n\r\n if (!Guid.equals(action.completionOption?.id, hideCompletionOptionID)) {\r\n continue;\r\n }\r\n\r\n actions.splice(i, 1);\r\n }\r\n\r\n // получаем все дополнительные кнопки\r\n const additionalActions = task.taskWorkspace.additionalActions;\r\n if (additionalActions == null) {\r\n return;\r\n }\r\n\r\n // удаляем дополнительные кнопки\r\n for (let i = additionalActions.length - 1; i >= 0; i--) {\r\n const additionalAction = additionalActions[i];\r\n\r\n if (!Guid.equals(additionalAction.completionOption?.id, hideCompletionOptionID)) {\r\n continue;\r\n }\r\n\r\n additionalActions.splice(i, 1);\r\n }\r\n }\r\n \r\n private ChangeRevocationListEditLogic(refsTable: GridViewModel) {\r\n refsTable.rowInitializing.add(async e => {\r\n if (e.action == GridRowAction.Opening) {\r\n let cardId = e.row.get(\"DocumentID\");\r\n await openCard({\r\n cardId: cardId,\r\n });\r\n e.cancel = true;\r\n } \r\n });\r\n }\r\n \r\n private ChangeCredentialsText(refsTable: GridViewModel, model: ICardModel, disposer: Function | null) {\r\n const credentialsTextControl = model.controls.get('CredentialsTextControl') as TextBoxViewModel; \r\n if (!credentialsTextControl) return;\r\n \r\n if (disposer == null) {\r\n disposer = reaction(() => refsTable.selectedRows, async () => {\r\n \r\n if (refsTable.selectedRows.length > 0) { \r\n let selectedRow = refsTable.selectedRows[0]; \r\n let poaID : string = selectedRow.row.tryGetField(\"DocumentID\")?.$value;\r\n\r\n if (!!poaID) {\r\n const credentialTextVirtualSection = model.card.sections.tryGet('ArPowerOfAttorneyVirtual');\r\n \r\n if (credentialTextVirtualSection == null) return;\r\n\r\n credentialTextVirtualSection.fields.set(\"CredentialsText\", await this.GetPoACredentialsTextByID(poaID as string | null), DotNetType.String);\r\n }\r\n }\r\n\r\n credentialsTextControl.controlVisibility = refsTable.selectedRows.length > 0 ? Visibility.Visible : Visibility.Collapsed;\r\n });\r\n }\r\n }\r\n\r\n \r\n private async ChangeRevocationListCollectionEditLogic(refsSection: CardSection, mainSection: CardSection) {\r\n // Для уже имеющихся в момент открытия строк карточки\r\n refsSection.rows.forEach(row =>{\r\n row.stateChanged.add(async e =>{\r\n if (e.newState == CardRowState.Deleted) {\r\n await this.UpdateRevocationPoAFormAfterRemovingPoA(refsSection, mainSection, [e.row]);\r\n }\r\n });\r\n });\r\n\r\n refsSection.rows.collectionChanged.add(async e => {\r\n if (e.added) { \r\n e.added.forEach(async item => {\r\n item.fieldChanged.add(async e1 => {\r\n if (e1.fieldName === 'DocumentFormID' && e1.fieldValue !== undefined) {\r\n mainSection.fields.set('POAFormID', e1.fieldValue)\r\n };\r\n if (e1.fieldName === 'DocumentFormName' && e1.fieldValue !== undefined) {\r\n mainSection.fields.set('POAFormName', e1.fieldValue)\r\n }; \r\n });\r\n });\r\n }\r\n \r\n if (e.removed) {\r\n await this.UpdateRevocationPoAFormAfterRemovingPoA(refsSection, mainSection, e.removed);\r\n } \r\n });\r\n }\r\n\r\n private async UpdateRevocationPoAFormAfterRemovingPoA(refsSection: CardSection, mainSection: CardSection, removedRows: CardRow[])\r\n {\r\n const firstExistedRow = refsSection.rows.filter(row => removedRows.indexOf(row) === -1).find(row => row.state != CardRowState.Deleted);\r\n if (!!firstExistedRow)\r\n {\r\n mainSection.fields.set('POAFormID', firstExistedRow.get(\"DocumentFormID\"));\r\n mainSection.fields.set('POAFormName', firstExistedRow.get(\"DocumentFormName\"));\r\n }\r\n else\r\n {\r\n mainSection.fields.set('POAFormID', null);\r\n mainSection.fields.set('POAFormName', null);\r\n }\r\n }\r\n \r\n private async GetPoACredentialsTextByID(poaID: string | null): Promise {\r\n\r\n if (!poaID) {\r\n return null;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArPOAGetCredentialsTextRequest;\r\n request.info[\"CardID\"] = createTypedField(poaID as string, DotNetType.Guid);\r\n\r\n let response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n\r\n if (!response.info.credentialsText) {\r\n return null;\r\n }\r\n\r\n return response.info.credentialsText.$value as string;\r\n }\r\n\r\n /// \r\n /// Наименование контрола в зависимости от типа исх.\r\n /// \r\n private SetOrganizationCaption(context: ICardUIExtensionContext)\r\n {\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n let isCustomerRequest = pkoSection?.fields.tryGet(\"CustomerRequest\", false);\r\n const isClaim = pkoSection?.fields.tryGet(\"TypeID\") == PkOutgoingKinds.ClaimId;\r\n let objectsSection = context.card.sections.tryGet(\"PkObjectList\");\r\n let documentCommonInfoSection = context.card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n if (pkoSection && documentCommonInfoSection && objectsSection && pkoSection.fields.tryGet('TypeID') == PkOutgoingKinds.ClaimId)\r\n {\r\n let claimContractControl = context.model.controls.get('ClaimContractControl');\r\n if (claimContractControl != null)\r\n {\r\n const isDepartmentEmpty = documentCommonInfoSection?.fields.tryGet(\"DepartmentID\") == null;\r\n const isOneObject = objectsSection.rows.filter(x => x.state !== CardRowState.Deleted).length == 1;\r\n claimContractControl.isReadOnly = !isOneObject || pkoSection.fields.tryGet(\"PartnerKCKExternalID\") == null || isDepartmentEmpty;\r\n }\r\n }\r\n let partnerCulpritControl = context.model.controls.get('PartnerCulpritControl');\r\n if (partnerCulpritControl != null && isClaim) \r\n {\r\n if (isCustomerRequest)\r\n {\r\n partnerCulpritControl.caption = \"Получатель-виновник\";\r\n }\r\n else\r\n {\r\n partnerCulpritControl.caption = \"Организация-виновник\";\r\n }\r\n }\r\n }\r\n /// \r\n /// По организации.\r\n /// \r\n private SetOrganizationClaimLogic(context: ICardUIExtensionContext)\r\n {\r\n const pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n let pkoSectionChange = context.model.card.sections.tryGet('PkOutgoing');\r\n let objectsSection = context.card.sections.tryGet(\"PkObjectList\");\r\n let pkOutgoingVirtual = context.card.sections.tryGet(\"PkOutgoingVirtual\");\r\n let documentCommonInfo = context.card.sections.tryGet(\"DocumentCommonInfo\");\r\n \r\n if (objectsSection && pkOutgoingVirtual)\r\n {\r\n const objsList = objectsSection.rows.filter(x => x.state !== CardRowState.Deleted);\r\n let objectIds: string = '';\r\n if (objsList && !(objsList.length == 0)) \r\n {\r\n objectIds = objsList\r\n .map(r => '\"' + r.getField(\"ObjectID\")?.$value + '\"')\r\n .filter((v, i, a) => a.indexOf(v) == i)\r\n .join(',');\r\n pkOutgoingVirtual.fields.set('ObjectsJsonForView', (!objectIds || objectIds.length === 0) ? null : '[' + objectIds + ']', DotNetType.String);\r\n pkOutgoingVirtual.clearChanges();\r\n } else\r\n {\r\n pkOutgoingVirtual.fields.set('ObjectsJsonForView', null, DotNetType.String);\r\n pkOutgoingVirtual.clearChanges();\r\n }\r\n }\r\n pkoSection?.fields.fieldChanged.add(async e =>{\r\n if (e.fieldName === \"PartnerKCKExternalID\")\r\n {\r\n let contractControl = context.model.controls.get('ClaimContractControl');\r\n if (contractControl)\r\n {\r\n const isOneObject = objectsSection?.rows.filter(x => x.state !== CardRowState.Deleted).length == 1;\r\n const isDepartmentEmpty = documentCommonInfo?.fields.tryGet(\"DepartmentID\") == null;\r\n contractControl.isReadOnly = !isOneObject || e.fieldValue == null || isDepartmentEmpty;\r\n }\r\n pkoSectionChange?.fields.set(\"ContractID\", null);\r\n pkoSectionChange?.fields.set(\"ContractExtID\", null);\r\n pkoSectionChange?.fields.set(\"ContractNumberVirtual\", null);\r\n pkoSectionChange?.fields.set(\"ClaimAmount\", null);\r\n pkoSectionChange?.fields.set(\"AdditionalEmailsForPartners\", null);\r\n }\r\n }); \r\n documentCommonInfo?.fields.fieldChanged.add(async e =>{\r\n if (e.fieldName === \"DepartmentID\")\r\n {\r\n let contractControl = context.model.controls.get('ClaimContractControl');\r\n if (contractControl)\r\n {\r\n const isOneObject = objectsSection?.rows.filter(x => x.state !== CardRowState.Deleted).length == 1;\r\n const isCulpritEmpty = pkoSection?.fields.tryGet(\"PartnerKCKExternalID\") == null;\r\n contractControl.isReadOnly = !isOneObject || e.fieldValue == null || isCulpritEmpty;\r\n }\r\n pkoSectionChange?.fields.set(\"ContractID\", null);\r\n pkoSectionChange?.fields.set(\"ContractExtID\", null);\r\n pkoSectionChange?.fields.set(\"ContractNumberVirtual\", null);\r\n pkoSectionChange?.fields.set(\"ClaimAmount\", null);\r\n pkoSectionChange?.fields.set(\"AdditionalEmailsForPartners\", null);\r\n }\r\n });\r\n }\r\n\r\n\r\n /// \r\n /// Логика работы таблицы АРФО.\r\n /// \r\n private async SetARFOTableLogic(context: ICardUIExtensionContext)\r\n {\r\n const isProhibitModify = hasFlag(context.model.card.permissions.resolver\r\n .getSectionPermissions(\"PkOutgoing​ARFO\"), CardPermissionFlags.ProhibitModify);\r\n const arfoTable = CdUIHelper.GetUIControl(context, \"ARFOTable\");\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n let receiverKCKSection = context.model.card.sections.tryGet('PkOutgoingReceiverKCK');\r\n let chanceryPartnersSection = context.model.card.sections.tryGet('PkChanceryPartners');\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n let arfoSection = context.model.card.sections.tryGet('PkOutgoingARFO');\r\n if (arfoTable === null || arfoTable === undefined || pkoSection == null || receiverKCKSection == null || chanceryPartnersSection == null || isProhibitModify){\r\n return;\r\n }\r\n let card = context.card;\r\n arfoTable.rowAdding.add(async e => \r\n {\r\n let partnerExternalID = pkoSection?.fields.tryGet(\"PartnerKCKExternalID\");\r\n if (partnerExternalID == null)\r\n {\r\n let isCustomerRequest = pkoSection?.fields.tryGet(\"CustomerRequest\", false);\r\n let partner = isCustomerRequest ? receiverKCKSection?.rows[0] : chanceryPartnersSection?.rows[0];\r\n partnerExternalID = partner?.tryGet(\"PartnerExternalID\")\r\n }\r\n if (partnerExternalID == null)\r\n {\r\n await showError(\"Сперва нужно заполнить организацию-виновника!\");\r\n e.cancel = true;\r\n return;\r\n }\r\n const contractID = pkoSection?.fields.tryGet(\"ContractID\");\r\n if(contractID == null)\r\n {\r\n await showError(\"Сперва нужно заполнить договор с виновником!\");\r\n e.cancel = true;\r\n return;\r\n }\r\n const departmentID = dciSection?.fields.tryGet(\"DepartmentID\");\r\n if (departmentID == null)\r\n {\r\n await showError(\"Сперва нужно заполнить Юридическое лицо!\");\r\n e.cancel = true;\r\n return;\r\n }\r\n });\r\n arfoTable.rowInitializing.add(async e => {\r\n if (e.action !== GridRowAction.Deleting) {\r\n if (e.rowModel == null) {\r\n return;\r\n }\r\n e.row.fieldChanged.clear();\r\n e.row.fieldChanged.add(async e1 =>\r\n {\r\n if (e1.fieldName == \"ARFOID\" && e1.fieldValue != null)\r\n {\r\n this.DeleteChildRows(card, e, \"PkOutgoingARFOCulprit\",\"ParentARFORowID\");\r\n const arfoID = e1.fieldValue;\r\n let partnerExternalID = pkoSection?.fields.tryGet(\"PartnerKCKExternalID\");\r\n const contractID = pkoSection?.fields.tryGet(\"ContractID\");\r\n if (partnerExternalID == null)\r\n {\r\n let isCustomerRequest = pkoSection?.fields.tryGet(\"CustomerRequest\", false);\r\n let partner = isCustomerRequest ? receiverKCKSection?.rows[0] : chanceryPartnersSection?.rows[0];\r\n partnerExternalID = partner?.tryGet(\"PartnerExternalID\")\r\n }\r\n e.row.set(\"CulpritExternalID\", partnerExternalID, DotNetType.Int64); \r\n e.row.set(\"CulpritName\", pkoSection?.fields.tryGet(\"PartnerKCKName\"), DotNetType.String); \r\n e.row.set(\"CulpritID\", pkoSection?.fields.tryGet(\"PartnerKCKID\"), DotNetType.Guid); \r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkOutgoingGetCulpritInfos;\r\n request.info[\"ArfoID\"] = createTypedField(arfoID, DotNetType.Guid);\r\n request.info[\"PartnerExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64);\r\n request.info[\"ContractID\"] = createTypedField(contractID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n if (response.validationResult.isSuccessful) {\r\n const culpritInfoStorage = tryGetFromInfo(response.info, \"Result\");\r\n\r\n if (culpritInfoStorage == null) {\r\n return null;\r\n }\r\n\r\n culpritInfoStorage.forEach(culprit => {\r\n const newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"ParentARFORowID\", e.row.rowId, DotNetType.Guid);\r\n newRow.parentRowId = e.row.rowId;\r\n newRow.set(\"Amount\", culprit.Amount?.$value, DotNetType.Decimal);\r\n newRow.set(\"KeySectionNERID\", culprit.NERID?.$value, DotNetType.Guid);\r\n newRow.set(\"KeySectionNERName\", culprit.NERName?.$value, DotNetType.String);\r\n newRow.state = CardRowState.Inserted;\r\n card.sections.tryGet(\"PkOutgoingARFOCulprit\")?.rows!.push(newRow);\r\n \r\n });\r\n }\r\n }\r\n else if (e1.fieldName == \"ARFOID\" && e1.fieldValue == null)\r\n {\r\n this.DeleteChildRows(card, e, \"PkOutgoingARFOCulprit\",\"ParentARFORowID\");\r\n }\r\n else if (e1.fieldName == \"ARFOAmount\" && e1.fieldValue != null)\r\n {\r\n let arfoAmount = e1.fieldValue.toString();\r\n e.row.set(\"ARFOAmount\", arfoAmount, DotNetType.Decimal);\r\n }\r\n });\r\n }\r\n });\r\n arfoTable.rowValidating.add(e => {\r\n let arfoId = e.row.get(\"ARFOID\");\r\n if (arfoSection?.rows.find(x => x.state != CardRowState.Deleted && x.tryGet(\"ARFOID\") == arfoId && x.rowId != e.row.rowId) != null)\r\n {\r\n e.validationResult.add(ValidationResultType.Error,\"Введена дублирующая запись таблицы.\")\r\n }\r\n if (arfoId == null){\r\n e.validationResult.add(ValidationResultType.Error,\"Необходимо заполнить поле \\\"Номер АРФО\\\".\");\r\n }\r\n let culpritID = e.row.get(\"CulpritID\");\r\n if (culpritID == null){\r\n e.validationResult.add(ValidationResultType.Error,\"Необходимо заполнить поле \\\"Виновник\\\".\");\r\n }\r\n });\r\n }\r\n private DeleteChildRows(card: Card, e: GridRowEventArgs, sectionName: string, parentFieldRowIDName : string )\r\n {\r\n let section = card.sections.tryGet(sectionName)\r\n let rowsToDelete = section?.rows.filter(x => x.get(parentFieldRowIDName) == e.row.rowId);\r\n rowsToDelete!.forEach(row => {\r\n if (row.state == CardRowState.Inserted)\r\n {\r\n section?.rows.remove(row);\r\n }\r\n else\r\n {\r\n row.state = CardRowState.Deleted;\r\n }\r\n });\r\n } \r\n private async SetClaimPerformersTableLogic(context: ICardUIExtensionContext)\r\n {\r\n const claimPerformersTable = CdUIHelper.GetUIControl(context, \"ClaimPerformersTable\");\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n let objectsSection = context.model.card.sections.tryGet('PkObjectList');\r\n let claimPerformersSection = context.model.card.sections.tryGet('PkOutgoingClaimPerformers');\r\n if (claimPerformersTable === null || claimPerformersTable === undefined || pkoSection == null || dciSection == null || objectsSection == null){\r\n return;\r\n }\r\n let card = context.card;\r\n claimPerformersTable.rowAdding.add(async e => {\r\n const departmentID = dciSection?.fields.tryGet(\"DepartmentID\");\r\n if (departmentID == null)\r\n {\r\n await showError(\"Сперва нужно заполнить Юридическое лицо!\");\r\n e.cancel = true;\r\n return;\r\n }\r\n const objectsList = objectsSection?.rows.filter(r => r.state != CardRowState.Deleted);\r\n if (!objectsList || objectsList.length == 0)\r\n {\r\n await showError(\"Сперва нужно заполнить таблицу объектов!\");\r\n e.cancel = true;\r\n return;\r\n }\r\n });\r\n\r\n claimPerformersTable.rowInitializing.add(async e => {\r\n if (e.action !== GridRowAction.Deleting) {\r\n if (e.rowModel == null) {\r\n return;\r\n }\r\n\r\n const pkOutgoingVirtual = card.sections.tryGet(\"PkOutgoingVirtual\");\r\n const pkObjectListSection = card.sections.tryGet(\"PkObjectList\");\r\n const dciSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n \r\n if (!pkOutgoingVirtual || !pkObjectListSection || !dciSection){\r\n return;\r\n }\r\n\r\n if (e.action == GridRowAction.Inserted || e.row.tryGet(\"ObjectID\") == null)\r\n {\r\n let obj = pkObjectListSection.rows.find(x => x.state != CardRowState.Deleted)\r\n e.row.set(\"ObjectID\", obj?.tryGet(\"ObjectID\"), DotNetType.Guid); \r\n e.row.set(\"ObjectName\", obj?.tryGet(\"ObjectName\"), DotNetType.String); \r\n }\r\n let checkDeputy = await this.CheckCurrentUserIsDeputy(userSession.UserID, dciSection.fields.tryGet(\"PerformerID\"));\r\n let isDeedAmountReadOnly = (checkDeputy || userSession.UserID == dciSection.fields.tryGet(\"PerformerID\"))\r\n && (card.tasks.some(x => x.typeId == CdFdTaskTypes.PkProcessIncomingResponseTypeID) ||\r\n (card.taskHistory.some(x => x.typeId == CdFdTaskTypes.PkProcessIncomingResponseTypeID \r\n && !Guid.equals(x.optionId, PkFdProcessHelper.PkReasonedRefusal)) \r\n && card.tasks.some(x => x.typeId == CdFdTaskTypes.PkReworkTaskTypeID))) ? false : true;\r\n \r\n let deedAmountControl = e.rowModel.controls.get('DeedAmountControl');\r\n if (deedAmountControl != null)\r\n {\r\n deedAmountControl.isReadOnly = isDeedAmountReadOnly;\r\n }\r\n\r\n const objectsList = pkObjectListSection.rows.filter(r => r.state != CardRowState.Deleted);\r\n let objectIds: string = '';\r\n if (objectsList && !(objectsList.length == 0)) \r\n {\r\n objectIds = objectsList\r\n .map(r => '\"' + r.getField(\"ObjectID\")?.$value + '\"')\r\n .filter((v, i, a) => a.indexOf(v) == i)\r\n .join(',');\r\n pkOutgoingVirtual.fields.set('ObjectsJsonForView', (!objectIds || objectIds.length === 0) ? null : '[' + objectIds + ']', DotNetType.String);\r\n pkOutgoingVirtual.clearChanges();\r\n } else\r\n {\r\n pkOutgoingVirtual.fields.set('ObjectsJsonForView', null, DotNetType.String);\r\n pkOutgoingVirtual.clearChanges();\r\n }\r\n let claimPerformersContractControl= e.rowModel?.controlsBag.find(x => x.name ==\"ClaimPerformersContractControl\");\r\n let actControl= e.rowModel?.controlsBag.find(x => x.name ==\"ClaimPerformersActControl\");\r\n let actCostItemControl= e.rowModel?.controlsBag.find(x => x.name ==\"ActCostItemControl\");\r\n\r\n let isNotAllowModify = (context.model.card.permissions.cardPermissions & CardPermissionFlags.AllowModify)==0;\r\n let actCostItemReadOnly = (userSession.UserID == dciSection.fields.tryGet(\"PerformerID\")\r\n && dciSection.fields.tryGet(\"StateID\")== CdDocStates.Project.id\r\n && e.row.tryGetField(\"ActID\") != null\r\n && !context.card.tasks.some(x => x.typeId == CdFdTaskTypes.PkProcessIncomingResponseTypeID)\r\n && !context.card.taskHistory.some(x => x.typeId == CdFdTaskTypes.PkProcessIncomingResponseTypeID)) ? false : true;\r\n \r\n if (actCostItemControl != null)\r\n {\r\n actCostItemControl.isReadOnly = actCostItemReadOnly;\r\n }\r\n\r\n if (e.action == GridRowAction.Inserted) {\r\n if (claimPerformersContractControl) {\r\n claimPerformersContractControl.isReadOnly = e.row.tryGetField(\"PartnerID\")!.$value == null || isNotAllowModify;\r\n }\r\n if (actControl) {\r\n actControl.isReadOnly = e.row.tryGetField(\"ContractID\")!.$value == null || isNotAllowModify;\r\n }\r\n }\r\n e.row.fieldChanged.clear();\r\n e.row.fieldChanged.add(async e1 =>\r\n {\r\n if (e1.fieldName == \"PartnerID\") {\r\n \r\n claimPerformersContractControl!.isReadOnly = e1.fieldValue == null;\r\n e.row.set(\"ContractID\", null);\r\n e.row.set(\"ContractNumberVirtual\", null);\r\n e.row.set(\"ContractExtID\", null);\r\n }\r\n\r\n if (e1.fieldName == \"ContractID\") {\r\n actControl!.isReadOnly = e1.fieldValue == null\r\n e.row.set(\"ActID\", null);\r\n e.row.set(\"ActSecondaryFullNumber\", null);\r\n }\r\n\r\n if (e1.fieldName == \"ActID\") {\r\n actCostItemControl!.isReadOnly = e1.fieldValue == null\r\n e.row.set(\"ActCostItemID\", null);\r\n e.row.set(\"ActCostItemName\", null);\r\n e.row.set(\"ActCostItemAmount\", null);\r\n }\r\n\r\n if (e1.fieldName == \"ActCostItemAmount\" && e1.fieldValue != null) {\r\n let actCostItemAmountStr = e1.fieldValue.toString();\r\n e.row.set(\"ActCostItemAmount\", actCostItemAmountStr, DotNetType.Decimal);\r\n }\r\n });\r\n }\r\n });\r\n claimPerformersTable.rowValidating.add(e => {\r\n let partnerID = e.row.get(\"PartnerID\");\r\n if (partnerID == null){\r\n e.validationResult.add(ValidationResultType.Error,\"Необходимо заполнить поле \\\"Исполнитель\\\".\");\r\n }\r\n let contractID = e.row.get(\"ContractID\");\r\n if (contractID == null){\r\n e.validationResult.add(ValidationResultType.Error,\"Необходимо заполнить поле \\\"Договор\\\".\");\r\n }\r\n let actID = e.row.get(\"ActID\");\r\n if (actID == null){\r\n e.validationResult.add(ValidationResultType.Error,\"Необходимо заполнить поле \\\"Акт\\\".\");\r\n }\r\n\r\n let deedAmountControl = e.rowModel.controls.get('DeedAmountControl');\r\n \r\n if (deedAmountControl != null && deedAmountControl?.isReadOnly == false)\r\n {\r\n let deedAmount = e.row.get(\"DeedAmount\");\r\n let sum = e.row.get(\"ActCostItemAmount\");\r\n if (deedAmount == null)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Необходимо заполнить поле \\\"Сумма зачета по акту\\\".\")\r\n\r\n }\r\n else if (deedAmount < 0)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Поле \\\"Сумма зачета по акту\\\" не должно быть отрицательно.\")\r\n\r\n }\r\n else if (Number(sum) < Number(deedAmount))\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Поле \\\"Сумма зачета по акту\\\"(\" + deedAmount + \") не должно быть больше \\\"Суммы статьи из акта\\\" (\"+ sum +\").\")\r\n }\r\n }\r\n if (claimPerformersSection?.rows.find(x => x.state != CardRowState.Deleted\r\n && x.tryGet(\"PartnerID\") == partnerID \r\n && x.tryGet(\"ContractID\") == contractID\r\n && x.tryGet(\"ActID\") == actID \r\n && x.rowId != e.row.rowId) != null)\r\n {\r\n e.validationResult.add(ValidationResultType.Error,\"Введена дублирующая запись таблицы.\")\r\n }\r\n });\r\n\r\n claimPerformersTable.rowEditorClosed.add(e =>{\r\n if (e.row.hasChanges())\r\n {\r\n let sum = claimPerformersSection?.rows.map(x => x.get(\"DeedAmount\") ?? 0.0).reduce((sum, current) => Number(sum) + Number(current), 0.0);\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n pkoSection?.fields.set(\"ClaimHoldingAmount\", sum.toString().replace(',', '.'), DotNetType.Decimal);\r\n }\r\n });\r\n }\r\n private async SetClaimContractControlLogic(context: ICardUIExtensionContext)\r\n {\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n let outgoingARFOCulprit = context.model.card.sections.tryGet('PkOutgoingARFOCulprit');\r\n let outgoingARFO = context.model.card.sections.tryGet('PkOutgoingARFO');\r\n let outgoingClaimPerformers = context.model.card.sections.tryGet('PkOutgoingClaimPerformers');\r\n let objectsSection = context.card.sections.tryGet(\"PkObjectList\");\r\n let documentCommonInfoSection = context.card.sections.tryGet(\"DocumentCommonInfo\");\r\n let objects = CdUIHelper.GetUIControl(context, \"Objects\");\r\n\r\n const isProhibitModify = hasFlag(context.model.card.permissions.resolver\r\n .getSectionPermissions(\"PkOutgoing\"), CardPermissionFlags.ProhibitModify);\r\n if (pkoSection && documentCommonInfoSection && objectsSection && pkoSection.fields.tryGet('TypeID') == PkOutgoingKinds.ClaimId)\r\n {\r\n let claimContractControl = context.model.controls.get('ClaimContractControl');\r\n if (claimContractControl != null)\r\n {\r\n const isDepartmentEmpty = documentCommonInfoSection?.fields.tryGet(\"DepartmentID\") == null;\r\n const isOneObject = objectsSection.rows.filter(x => x.state !== CardRowState.Deleted).length == 1;\r\n claimContractControl.isReadOnly = isProhibitModify || !isOneObject || pkoSection.fields.tryGet(\"PartnerKCKExternalID\") == null || isDepartmentEmpty;\r\n }\r\n }\r\n\r\n if (pkoSection == null || outgoingARFOCulprit == null || outgoingARFO == null || outgoingClaimPerformers == null){\r\n return;\r\n }\r\n\r\n objects?.rowInitialized.add(e => { \r\n if(e.action == GridRowAction.Inserted)\r\n {\r\n e.row.fieldChanged.add(() => {\r\n pkoSection?.fields.set(\"ContractID\", null);\r\n pkoSection?.fields.set(\"ContractExtID\", null);\r\n pkoSection?.fields.set(\"ContractNumberVirtual\", null);\r\n pkoSection?.fields.set(\"ClaimAmount\", null);\r\n });\r\n }\r\n });\r\n\r\n context.model.card.sections.get(\"PkObjectList\")?.rows.forEach(row => {\r\n row.fieldChanged.add(() => {\r\n pkoSection?.fields.set(\"ContractID\", null);\r\n pkoSection?.fields.set(\"ContractExtID\", null);\r\n pkoSection?.fields.set(\"ContractNumberVirtual\", null);\r\n pkoSection?.fields.set(\"ClaimAmount\", null);\r\n });\r\n });\r\n \r\n pkoSection.fields.fieldChanged.add(async (e) => {\r\n \r\n if (e.fieldName == \"ContractID\")\r\n {\r\n ClearContractLinkedFields();\r\n }\r\n });\r\n\r\n function ClearContractLinkedFields() {\r\n if (context.card.storeMode == CardStoreMode.Insert) {\r\n outgoingClaimPerformers?.rows.clear();\r\n outgoingARFOCulprit?.rows.clear();\r\n outgoingARFO?.rows.clear();\r\n }\r\n else {\r\n outgoingClaimPerformers?.rows.forEach(r => {\r\n if (r.state == CardRowState.Inserted)\r\n {\r\n outgoingClaimPerformers?.rows.remove(r);\r\n }\r\n else\r\n {\r\n r.state = CardRowState.Deleted;\r\n }\r\n });\r\n outgoingARFOCulprit?.rows.forEach(r => {\r\n if (r.state == CardRowState.Inserted)\r\n {\r\n outgoingARFOCulprit?.rows.remove(r);\r\n }\r\n else\r\n {\r\n r.state = CardRowState.Deleted;\r\n }\r\n });\r\n outgoingARFO?.rows.forEach(r => {\r\n if (r.state == CardRowState.Inserted)\r\n {\r\n outgoingARFO?.rows.remove(r);\r\n }\r\n else\r\n {\r\n r.state = CardRowState.Deleted;\r\n }\r\n });\r\n }\r\n let pkoSection = context.model.card.sections.tryGet('PkOutgoing');\r\n pkoSection?.fields.set(\"ClaimAmount\", null);\r\n }\r\n }\r\n}","import { CardGetMethod, CardGetMode, CardRow, CardRowState, CardSection } from \"tessa/cards\";\r\nimport { CardGetRequest, CardService } from \"tessa/cards/service\";\r\nimport { createTypedField, DotNetType, Guid } from \"tessa/platform\";\r\nimport { ValidationResultType } from \"tessa/platform/validation\";\r\nimport { ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { ArHelper } from \"./ArHelper\";\r\n\r\nexport class ArPoAApproversCacheHelper {\r\n\r\n public approversCheckingStatus : ApproversCheckingStatus = ApproversCheckingStatus.None;\r\n\r\n private approverToAuthorityBindings : ApproverToAuthorityBinding[];\r\n\r\n private context : ICardUIExtensionContext;\r\n private additionalApproversPOASection : CardSection;\r\n private addingInProgress : boolean = false;\r\n\r\n public async InitializeAsync (context: ICardUIExtensionContext, arCredentialListPOASection : CardSection | undefined, arAdditionalApproversPOASection: CardSection | undefined) {\r\n if (arCredentialListPOASection === undefined) {\r\n context.validationResult.add(ValidationResultType.Error, 'Секция полномочий не определена!');\r\n return;\r\n }\r\n\r\n if (arAdditionalApproversPOASection === undefined) {\r\n context.validationResult.add(ValidationResultType.Error, 'Секция доп. согласующих не определена!');\r\n return;\r\n }\r\n\r\n this.context = context;\r\n\r\n this.additionalApproversPOASection = arAdditionalApproversPOASection;\r\n\r\n this.approverToAuthorityBindings = new Array();\r\n\r\n arCredentialListPOASection.rows?.filter(r => r.state != CardRowState.Deleted).forEach(async row => {\r\n const authorityId = row.tryGetField('CredentialRefID');\r\n\r\n if (authorityId == null) return;\r\n if (authorityId?.$value == null) return;\r\n\r\n await this.AddAsync(authorityId.$value);\r\n });\r\n }\r\n\r\n public async AddAsync(authorityId) {\r\n if (!!this.approverToAuthorityBindings.find(item => item.authorityID == authorityId.$value))\r\n {\r\n return;\r\n }\r\n\r\n const newApprovers = await this.getAdditionalApproversByAuthorityIDAsync(authorityId);\r\n\r\n this.approverToAuthorityBindings = this.approverToAuthorityBindings.concat(newApprovers);\r\n\r\n this.approverToAuthorityBindings.forEach(item => {\r\n if (!!this.additionalApproversPOASection.rows.find(row1 => row1.get('UserID') as DotNetType.Guid === item.userID))\r\n return;\r\n \r\n this.addingInProgress = true;\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set('UserID', createTypedField(item.userID, DotNetType.Guid));\r\n newRow.set(\"UserName\", createTypedField(item.userName, DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n this.additionalApproversPOASection.rows.push(newRow);\r\n this.addingInProgress = false;\r\n })\r\n }\r\n\r\n public AddingInProgress() : boolean {\r\n return this.addingInProgress;\r\n }\r\n\r\n public ContainsApprover(approverId: DotNetType.Guid) {\r\n return this.approverToAuthorityBindings.find(item => item.userID === approverId) !== undefined;\r\n }\r\n\r\n public async RemoveAsync(authorityId) {\r\n if (this.approverToAuthorityBindings.find(item => item.authorityID === authorityId as DotNetType.Guid) === undefined)\r\n {\r\n return;\r\n }\r\n\r\n const approversIDsToDelete = new Set(this.approverToAuthorityBindings.filter(item => item.authorityID === authorityId as DotNetType.Guid).map(x => x.userID));\r\n this.approverToAuthorityBindings = this.approverToAuthorityBindings.filter(item => item.authorityID !== authorityId as DotNetType.Guid);\r\n const actualApproversIds = new Set(this.approverToAuthorityBindings.map(x => x.userID));\r\n const actualApproversIDsToDelete = new Set ([...approversIDsToDelete].filter(item => !actualApproversIds.has(item)));\r\n\r\n for (let i = this.additionalApproversPOASection.rows.length - 1; i >= 0; i--)\r\n {\r\n const row = this.additionalApproversPOASection.rows[i];\r\n const rowUserId = row.tryGetField('UserID') as DotNetType.Guid | undefined;\r\n\r\n if (rowUserId === undefined || row.state == CardRowState.Deleted)\r\n continue;\r\n\r\n if (actualApproversIDsToDelete.has(rowUserId['$value']))\r\n {\r\n await ArHelper.RemoveRowFromCollectionSection(this.context.card.storeMode, this.additionalApproversPOASection, row);\r\n }\r\n }\r\n }\r\n\r\n private async getAdditionalApproversByAuthorityIDAsync (authorityId : DotNetType.Guid): Promise {\r\n let resultArray : ApproverToAuthorityBinding[] = new Array();\r\n\r\n const getRequest = new CardGetRequest();\r\n getRequest.cardId = authorityId;\r\n getRequest.getMode = CardGetMode.ReadOnly;\r\n getRequest.method = CardGetMethod.Default;\r\n\r\n const getResponse = await CardService.instance.get(getRequest);\r\n if (!getResponse.validationResult.isSuccessful) {\r\n this.context.validationResult.add(getResponse.validationResult);\r\n return resultArray;\r\n }\r\n\r\n const arAdditionalApproversSection = getResponse.card.sections.getOrAdd('ArAdditionalApprovers');\r\n const arCredentialSection = getResponse.card.sections.getOrAdd('ArCredential');\r\n\r\n // добавляем согласующего Вице-президента из полномочия в Доп. согласующие доверенности\r\n if (arCredentialSection != null)\r\n {\r\n var vicePresidentID = arCredentialSection.fields.tryGet('VicePresidentID') as DotNetType.Guid | undefined;\r\n if (vicePresidentID !== null && vicePresidentID !== undefined)\r\n {\r\n let newApprover = new ApproverToAuthorityBinding();\r\n newApprover.authorityID = authorityId;\r\n newApprover.userID = vicePresidentID;\r\n newApprover.userName = arCredentialSection.fields.tryGet('VicePresidentName') as DotNetType.String;\r\n\r\n resultArray.push(newApprover);\r\n }\r\n }\r\n\r\n // добавляем иных доп. согласующих из полномочия в Доп. согласующие доверенности\r\n if (arAdditionalApproversSection != null)\r\n {\r\n arAdditionalApproversSection.rows.forEach(row => {\r\n var userID = row.tryGet('UserID') as DotNetType.Guid | undefined;\r\n\r\n if (userID !==null && userID !== undefined)\r\n {\r\n let newApprover = new ApproverToAuthorityBinding();\r\n newApprover.authorityID = authorityId;\r\n newApprover.userID = userID;\r\n newApprover.userName = row.tryGet('UserName') as DotNetType.String;\r\n \r\n resultArray.push(newApprover);\r\n }\r\n })\r\n }\r\n\r\n return resultArray;\r\n }\r\n\r\n}\r\n\r\nexport class ApproverToAuthorityBinding {\r\n authorityID: DotNetType.Guid;\r\n userID: DotNetType.Guid;\r\n userName: DotNetType.String;\r\n}\r\n\r\nexport enum ApproversCheckingStatus {\r\n OnAddingChecking,\r\n OnRemovingChecking,\r\n None\r\n}","export class PkRdndKind{\r\n /// \r\n /// О назначении представителя лица, осуществляющего подготовку проектной документации\r\n /// \r\n public static PreparationOfConstructionDocumentation = \"B29D7703-FD65-42BD-A561-004932065094\";\r\n\r\n /// \r\n /// О назначении лица, осуществляющего подписание рабочей документации\r\n /// \r\n public static SigningOfConstructionDocumentation = \"A90B2F44-350F-4F0B-80B6-10D8E791F994\";\r\n\r\n /// \r\n /// Другое\r\n /// \r\n public static Other = \"02E3EED8-3758-43DB-AC5C-1FC775BA8104\";\r\n\r\n /// \r\n /// О назначении ответственного специалиста, по осуществлению геодезического контроля\r\n /// \r\n public static SpecialistOfGeodeticControl = \"749B3C9A-99AF-4221-BFED-5D89D998A18D\";\r\n\r\n /// \r\n /// О назначении представителя лица, выполняющего работы, подлежащие освидетельствованию\r\n /// \r\n public static PerformingWorkSubjectToExamination = \"3C70CB9C-B30A-4D97-AA7E-6D1727BA3ACF\";\r\n\r\n /// \r\n /// О назначении представителя лица, осуществляющего строительство\r\n /// \r\n public static ConstrationRepresentative = \"64438FD3-6CA4-4896-88DF-82A31F3F66D8\";\r\n\r\n /// \r\n /// О назначении представителя застройщика(технического заказчика, эксплуатирующей организации или регионального оператора) по вопросам строительного контроля\r\n /// \r\n public static RegardingConstructionCon = \"08D227FA-4146-428F-9B23-B6F5714BBE26\";\r\n\r\n /// \r\n /// О назначении ответственного за выдачу рабочей документации «в производство работ»\r\n /// \r\n public static IssueOfWorkingDocumentation = \"35A9C17C-FD84-4510-A779-D854BF84A291\";\r\n\r\n /// \r\n /// О назначении представителя иных лиц(эксплуатирующая организация)\r\n /// \r\n public static OperatingOrganization = \"7A31979D-70F5-4079-8A2F-E5EE13D8EA51\";\r\n\r\n /// \r\n /// О назначении представителя лица, осуществляющего строительство, по вопросам строительного контроля(специалист по организации строительства)\r\n /// \r\n public static ConstractionRepresentativeOfIssuesOfCostructionControl = \"D690D0AE-20C8-424D-8899-F6D1BF055C56\";\r\n\r\n /// \r\n /// О назначении ООО «ПИК-Комфорт» управляющей и эксплуатирующей организацией\r\n /// \r\n public static PIKComfortAsManagementAndOperationgOrganization = \"3837aa1e-8fd4-4deb-8253-6fd71949bc9f\";\r\n\r\n /// \r\n /// О назначении ответственных за ОТ, ПБ и электробезопасность\r\n /// \r\n public static ResponsibleForOT_PB_ElectricalSafety = \"7b9e9fec-9dea-4d6c-a516-f6b5d3212067\";\r\n\r\n /// \r\n /// О принятии к учету ОС\r\n /// \r\n public static AcceptionForCountingOS = \"318067f3-93a1-426f-a225-c22f52a303f2\";\r\n\r\n /// \r\n /// О принятии к учету ПО\r\n /// \r\n public static AcceptionForCountingPO = \"d4b36740-d8d8-458a-9140-2b2465099f49\";\r\n\r\n /// \r\n /// О проведении инвентаризации\r\n /// \r\n public static Inventory = \"a74f56f3-a45c-4eab-8dc8-f0410efb5b62\";\r\n\r\n /// \r\n /// О сносe объектов капитального строительства\r\n /// \r\n public static DemolitionOfCapitalConstruction = \"0fc2e721-548f-4d94-bda2-48129f553a95\";\r\n\r\n /// \r\n /// О списании задолженности\r\n /// \r\n public static WriteOffRelief = \"58b81f3c-fff0-475b-ae26-81794f1068d0\";\r\n\r\n /// \r\n /// О списании затрат\r\n /// \r\n public static WriteOffExpenses = \"5722221c-9b80-4094-8f78-513c3b989b55\";\r\n\r\n /// \r\n /// О списании ОС\r\n /// \r\n public static WriteOffOs = \"493c0654-735d-4c2f-8c41-e12a71cbc3da\";\r\n\r\n /// \r\n /// Об утверждении списка подотчетных лиц\r\n /// \r\n public static ListOfCountablePersons = \"047d72b4-66c2-4df8-8656-94be4aa383b3\";\r\n\r\n /// \r\n /// О создании склада и установлении материальной ответственности\r\n /// \r\n public static OnWarehouseFormationAndMaterialPartEstablishment = \"9034442e-c0f6-474a-8bb1-70a416dcc721\";\r\n\r\n /// \r\n /// О создании обособленного подразделения\r\n /// \r\n public static OnCreationOfSeparateDivision = \"370a0327-c0bf-404a-b96d-59106eced878\";\r\n\r\n /// \r\n /// О временном исполнении обязанностей Генерального директора\r\n /// \r\n public static OnTemporaryDutyOfGeneralDirector = \"f2f463de-1730-461d-bb63-bc2ec9b5b236\";\r\n\r\n /// \r\n /// О создании комиссии\r\n /// \r\n public static OnEstablishmentOfCommission = \"dc93bfda-0aa8-45fd-9356-a05b2e87f904\";\r\n\r\n /// \r\n /// О простое на производстве\r\n /// \r\n public static AboutProductionDowntime = \"9fc7881b-0f49-4e2d-b8e4-384ad0c695ce\";\r\n\r\n /// \r\n /// О списании ТМЦ\r\n /// \r\n public static AboutWriteoffGoodsAndMaterials = \"8e57e3d3-3db1-4603-bb0c-3b0aae63564a\";\r\n\r\n /// \r\n /// О назначении Главного бухгалтера\r\n /// \r\n public static OnAppointmentOfTheChiefAccountant = \"d189d35e-b65a-4ebf-a83a-4bdf0771dc59\";\r\n\r\n /// \r\n /// О вступлении в должность руководителя\r\n /// \r\n public static AboutBecomingManager = \"7b439aae-d9c8-470d-8025-ab94b359c52f\";\r\n\r\n /// \r\n /// О назначении ответственного за обеспечение пожарной безопасности\r\n /// \r\n public static OnAppointmentOfResponsibleForEnsuringFireSafety = \"ddc6a679-0bd6-494c-9699-f239c9cf0ba9\";\r\n\r\n /// \r\n /// О введении в действие штатного расписания\r\n /// \r\n public static AboutTheIntroductionOfStaffingTable = \"db840162-06a4-4e85-9c89-593cce4b5079\";\r\n\r\n /// \r\n /// Об утверждении перечня материально ответственных лиц\r\n /// \r\n public static OnApprovalOfListMateriallyResponsiblePersons = \"e0e0c667-4591-4ea3-ae4e-7f27944e2725\";\r\n\r\n /// \r\n /// О назначении ответственных лиц (общий)\r\n /// \r\n public static OnTheAppointmentOfResponsiblePersonsGeneral = \"5e32cd20-9899-408e-9509-bd588997d042\";\r\n\r\n /// \r\n /// О создании Рабочей Группы\r\n /// \r\n public static OnTheEstablishmentOfWorkingGroup = \"99dc85b7-0585-4ac0-bd48-1aaff6ccc0ce\";\r\n\r\n /// \r\n /// Виды ОРД, для которых отображение полей и валидация выплоняется так, как если бы вид ОРД был не выбран\r\n /// \r\n public static GetKindsWithoutEdApprovers: string[] = \r\n [\r\n PkRdndKind.Other,\r\n PkRdndKind.PIKComfortAsManagementAndOperationgOrganization,\r\n PkRdndKind.ResponsibleForOT_PB_ElectricalSafety,\r\n PkRdndKind.AcceptionForCountingOS,\r\n PkRdndKind.AcceptionForCountingPO,\r\n PkRdndKind.Inventory,\r\n PkRdndKind.DemolitionOfCapitalConstruction,\r\n PkRdndKind.WriteOffRelief,\r\n PkRdndKind.WriteOffExpenses,\r\n PkRdndKind.WriteOffOs,\r\n PkRdndKind.ListOfCountablePersons\r\n ]\r\n /// \r\n /// Виды ОРД, для которых выполняется валидация полей \"Назначенные сотрудники\" и \"Объект\"\r\n /// \r\n public static GetKindsWithEdApprovers: string[] = \r\n [\r\n PkRdndKind.SpecialistOfGeodeticControl,\r\n PkRdndKind.PIKComfortAsManagementAndOperationgOrganization,\r\n PkRdndKind.ResponsibleForOT_PB_ElectricalSafety,\r\n PkRdndKind.RegardingConstructionCon,\r\n PkRdndKind.PreparationOfConstructionDocumentation,\r\n PkRdndKind.ConstrationRepresentative,\r\n PkRdndKind.ConstractionRepresentativeOfIssuesOfCostructionControl,\r\n PkRdndKind.OnEstablishmentOfCommission\r\n ]\r\n}","export class PkRdndTypes {\r\n\r\n /// \r\n /// Приказ\r\n /// \r\n public static Order = 0;\r\n\r\n /// \r\n /// Распоряжение\r\n /// \r\n public static Directive = 1;\r\n\r\n /// \r\n /// Распорядительное письмо\r\n /// \r\n public static ManagementLetter = 2;\r\n\r\n /// \r\n /// Протокол\r\n /// \r\n public static Protocol = 3;\r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel, IControlViewModel } from 'tessa/ui/cards';\r\nimport { Guid, Visibility, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { Card, CardSection, CardRow, CardRowState } from 'tessa/cards';\r\nimport { PkExecutiveDocumentationHelper } from 'src/pkScripts/Helpers/PkExecutiveDocumentationHelper';\r\nimport { PkRdndKind } from 'src/pkScripts/Helpers/PkRdndKinds';\r\nimport { PkRdndTypes } from 'src/pkScripts/Helpers/PkRdndTypes';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\n\r\nexport class ChRdndUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n let card: Card;\r\n if (context.model == null ||\r\n (card = context.model.card) == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.RdndTypeID)) {\r\n return;\r\n }\r\n\r\n // Связка ЮЛ и подписанта\r\n ChUIHelper.BindingDepartmentWithSigner(context, this._disposer);\r\n\r\n // Связка полей \"дело\" и \"дело верхнего уровня\"\r\n ChUIHelper.BundleCaseTopLevelCase(context);\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n // Скрытие варианта завершения \"Документ подписан\"\r\n ChUIHelper.HideDocumentSigned(context);\r\n\r\n // Показ флага \"Для регистрации в УДО\"\r\n ChUIHelper.HideShowUDORegistrationFlag(context);\r\n\r\n ArUIHelper.DiadocButtonLogic(context);\r\n\r\n this.UnhideEdFieldMain(context);\r\n this.UpdateAcquaintanceAcquainted(card);\r\n this.FillThemeField(card);\r\n }\r\n\r\n // Показать поле \"Список назначенных сотрудников\" #22327\r\n private UnhideEdFieldMain(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n this.UnhideEdFieldLogic(context, card);\r\n\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (!pdciSection) return;\r\n pdciSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'RDNDTypeID' && pdciSection) {\r\n this.UnhideEdFieldLogic(context, card);\r\n }\r\n });\r\n\r\n let rdndSection: CardSection | undefined = card.sections.tryGet('PkRDNDInfo');\r\n if (!rdndSection) return;\r\n rdndSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'KindID' && rdndSection) {\r\n this.UnhideEdFieldLogic(context, card);\r\n }\r\n });\r\n }\r\n\r\n private UnhideEdFieldLogic(context: ICardUIExtensionContext, card: Card) {\r\n let model: ICardModel | undefined = context.model;\r\n let hasType: Boolean = false;\r\n let hasKind: Boolean = false;\r\n let hasRdKind: Boolean = false;\r\n let hasOnEstablishmentOfCommission: Boolean = false;\r\n\r\n let pdciSection: CardSection | undefined = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n let rdndSection: CardSection | undefined = card.sections.tryGet(\"PkRDNDInfo\");\r\n if (!pdciSection || !rdndSection) return;\r\n let rdndTypeID: number | undefined = pdciSection.fields.tryGet('RDNDTypeID');\r\n let rdndKindID: guid | undefined = rdndSection.fields.tryGet('KindID');\r\n if (rdndTypeID === PkRdndTypes.Order || rdndTypeID === PkRdndTypes.Directive \r\n || rdndTypeID === PkRdndTypes.ManagementLetter\r\n || rdndTypeID === PkRdndTypes.Protocol) {\r\n hasType = true;\r\n }\r\n if (rdndKindID) {\r\n if (PkRdndKind.GetKindsWithEdApprovers.find(x => Guid.equals(rdndKindID, x)) != null)\r\n hasKind = true;\r\n hasRdKind =\r\n // @ts-ignore\r\n rdndKindID === PkExecutiveDocumentationHelper.GetRoles()[7].GuidID ||\r\n rdndKindID === PkRdndKind.SigningOfConstructionDocumentation.toLowerCase() ||\r\n rdndKindID === PkRdndKind.RegardingConstructionCon.toLowerCase();\r\n\r\n hasOnEstablishmentOfCommission = rdndKindID === PkRdndKind.OnEstablishmentOfCommission;\r\n }\r\n\r\n let rdndKindControl: IControlViewModel | undefined = model.controls.get('RDNDKindControl');\r\n let edApprovers: IControlViewModel | undefined = model.controls.get('EdApprovers');\r\n let rdCiphers: IControlViewModel | undefined = model.controls.get('RdCiphers');\r\n if (!rdndKindControl || !edApprovers || !rdCiphers) return;\r\n if (hasType && hasKind) {\r\n rdndKindControl.controlVisibility = Visibility.Visible;\r\n edApprovers.controlVisibility = Visibility.Visible;\r\n rdCiphers.controlVisibility = hasRdKind ? Visibility.Visible : Visibility.Collapsed;\r\n\r\n edApprovers.caption = hasOnEstablishmentOfCommission ? \"Список членов комиссии\" : \"Список назначенных сотрудников\";\r\n } else if (hasType && !hasKind) {\r\n rdndKindControl.controlVisibility = Visibility.Visible;\r\n edApprovers.controlVisibility = Visibility.Collapsed;\r\n rdCiphers.controlVisibility = Visibility.Collapsed;\r\n } else {\r\n rdndKindControl.controlVisibility = Visibility.Collapsed;\r\n edApprovers.controlVisibility = Visibility.Collapsed;\r\n rdCiphers.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n // Автозаполнение списка ознакомления на основании списка назначенных сотрудников #25547 п.2\r\n private UpdateAcquaintanceAcquainted(card: Card) {\r\n let rndSection: CardSection | undefined = card.sections.tryGet('PkEdRdndApprovers');\r\n if (!rndSection) return;\r\n rndSection.rows.collectionChanged.add(e => {\r\n if (!e) return;\r\n let paaSection: CardSection | undefined = card.sections.tryGet('PkAcquaintanceAcquainted');\r\n let palSection: CardSection | undefined = card.sections.tryGet('PkAcquaintanceList');\r\n if (!paaSection || !palSection || !rndSection) return;\r\n for (let i = 0; i < rndSection.rows.length; i++) {\r\n let row: CardRow = rndSection.rows[i];\r\n let userID = row.tryGetField('UserID');\r\n let userName = row.tryGetField('UserName');\r\n if (!userID || !userName) continue;\r\n\r\n if (row.state === CardRowState.Modified ||\r\n row.state === CardRowState.Inserted) {\r\n let hasUser: boolean = false;\r\n for (let j = 0; j < paaSection.rows.length; j ++) {\r\n let rowAcquaintanceAcquainted: CardRow = paaSection.rows[j];\r\n let acquaintedID = rowAcquaintanceAcquainted.tryGetField('AcquaintedID');\r\n if (!acquaintedID) continue;\r\n if (acquaintedID.$value === userID.$value) {\r\n hasUser = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!hasUser) {\r\n let rowAcquaintanceList = new CardRow();\r\n rowAcquaintanceList.rowId = Guid.newGuid();\r\n rowAcquaintanceList.set(\"Comment\", createTypedField(null, DotNetType.String));\r\n rowAcquaintanceList.state = CardRowState.Inserted;\r\n\r\n let rowAcquaintanceAcquainted = new CardRow();\r\n rowAcquaintanceAcquainted.rowId = Guid.newGuid();\r\n rowAcquaintanceAcquainted.set(\"AcquaintanceUsersRowID\", createTypedField(rowAcquaintanceList.rowId, DotNetType.Guid));\r\n rowAcquaintanceAcquainted.set(\"AcquaintedID\", userID);\r\n rowAcquaintanceAcquainted.set(\"AcquaintedName\", userName);\r\n rowAcquaintanceAcquainted.state = CardRowState.Inserted;\r\n\r\n palSection.rows.push(rowAcquaintanceList);\r\n paaSection.rows.push(rowAcquaintanceAcquainted);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Предзаполнение темы автоматически из вида ОРД #25547 п.3\r\n private FillThemeField(card: Card) {\r\n let rndSection: CardSection | undefined = card.sections.tryGet('PkRDNDInfo');\r\n if (!rndSection) return;\r\n rndSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'KindName') {\r\n let dciSection: CardSection | undefined = card.sections.tryGet('DocumentCommonInfo');\r\n if (!dciSection) return;\r\n if (dciSection.fields.has('Subject')) {\r\n dciSection.fields.set('Subject', createTypedField(e.fieldValue, DotNetType.String));\r\n }\r\n }\r\n });\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { Guid } from \"tessa/platform\";\r\nimport { number } from \"prop-types\";\r\n\r\nexport class PkExecutiveDocumentationHelper {\r\n public static GetRoles() {\r\n let roles = [{GuidID: Guid, IntID: number}];\r\n //@ts-ignore\r\n roles[1] = {IntID: 1, GuidID: '3c70cb9c-b30a-4d97-aa7e-6d1727ba3acf'}; // Представитель лица, выполнившего работы, подлежащие освидетельствованию\r\n //@ts-ignore\r\n roles[2] = {IntID: 2, GuidID: '64438fd3-6ca4-4896-88df-82a31f3f66d8'}; // Представитель лица, осуществляющего строительство\r\n //@ts-ignore\r\n roles[3] = {IntID: 3, GuidID: 'd690d0ae-20c8-424d-8899-f6d1bf055c56'}; // Представитель лица, осуществляющего строительство, по вопросам строительного контроля (специалист по организации строительства)\r\n //@ts-ignore\r\n roles[4] = {IntID: 4, GuidID: 'b29d7703-fd65-42bd-a561-004932065094'}; // Представитель лица, осуществляющего подготовку проектной документации\r\n //@ts-ignore\r\n roles[5] = {IntID: 5, GuidID: '08d227fa-4146-428f-9b23-b6f5714bbe26'}; // Представитель застройщика (технического заказчика, эксплуатирующей организации или регионального оператора) по вопросам строительного контроля\r\n //@ts-ignore\r\n roles[6] = {IntID: 6, GuidID: '7a31979d-70f5-4079-8a2f-e5ee13d8ea51'}; // Представители иных лиц (эксплуатирующая организация)\r\n //@ts-ignore\r\n roles[7] = {IntID: 7, GuidID: '35a9c17c-fd84-4510-a779-d854bf84a291'}; // О назначении ответственного за выдачу рабочей документации «в производство работ»\r\n\r\n return roles;\r\n }\r\n}","export class DocumentKind {\r\n\r\n static UpdComplectID = \"63b0dd64-fe3e-49a4-b0da-39d2bd5d0f85\";\r\n static BuildingPermitID = \"3bf6e626-0134-4176-969c-2b13bf872442\";\r\n static BuildingPermitName = \"Разрешение на строительство\";\r\n\r\n }","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { DocumentKind } from 'src/pkScripts/Helpers/DocumentKind';\r\nimport { CdCommonHelper } from 'src/cdScripts/Helpers/CdCommonHelper';\r\n\r\nexport class PkPdFillNumberDateUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArActTypeID)) {\r\n return;\r\n }\r\n\r\n let aaSection = context.model.card.sections.tryGet('ArchiveAct');\r\n if (aaSection == null) return;\r\n let dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (dciSection == null) return;\r\n if (aaSection.fields.tryGetField(\"DocumentKindID\") === undefined) return;\r\n if (aaSection.fields.tryGetField(\"InvoiceDate\") === undefined) return;\r\n if (aaSection.fields.tryGetField(\"InvoiceNumber\") === undefined) return;\r\n if (aaSection.fields.tryGetField(\"ActDate\") === undefined) return;\r\n if (dciSection.fields.tryGetField(\"FullNumber\") === undefined) return;\r\n\r\n aaSection.fields.fieldChanged.add(e => {\r\n if (aaSection == null) return;\r\n if (dciSection == null) return;\r\n if (e.fieldName === \"DocumentKindID\") {\r\n let id = e.fieldValue;\r\n if (id === DocumentKind.UpdComplectID) {\r\n CdCommonHelper.SetValueToSectionField(aaSection, \"InvoiceDate\", aaSection.fields.tryGet(\"ActDate\"), DotNetType.DateTime);\r\n CdCommonHelper.SetValueToSectionField(aaSection, \"InvoiceNumber\", dciSection.fields.tryGet(\"FullNumber\"), DotNetType.String);\r\n }\r\n }\r\n if (e.fieldName === \"ActDate\") {\r\n if (aaSection.fields.tryGet(\"DocumentKindID\") === DocumentKind.UpdComplectID) {\r\n CdCommonHelper.SetValueToSectionField(aaSection, \"InvoiceDate\", aaSection.fields.tryGet(\"ActDate\"), DotNetType.DateTime);\r\n CdCommonHelper.SetValueToSectionField(aaSection, \"InvoiceNumber\", dciSection.fields.tryGet(\"FullNumber\"), DotNetType.String);\r\n }\r\n }\r\n });\r\n dciSection.fields.fieldChanged.add(e => {\r\n if (aaSection == null) return;\r\n if (dciSection == null) return;\r\n if (e.fieldName === \"FullNumber\") {\r\n if (aaSection.fields.tryGet(\"DocumentKindID\") === DocumentKind.UpdComplectID) {\r\n CdCommonHelper.SetValueToSectionField(aaSection, \"InvoiceDate\", aaSection.fields.tryGet(\"ActDate\"), DotNetType.DateTime);\r\n CdCommonHelper.SetValueToSectionField(aaSection, \"InvoiceNumber\", dciSection.fields.tryGet(\"FullNumber\"), DotNetType.String);\r\n }\r\n }\r\n });\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\n\r\nexport class PkProtocolTenderUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkProtocolTenderTypeID)) {\r\n return;\r\n }\r\n\r\n // Связка ЮЛ и адресатов\r\n ChUIHelper.BindingDepartmentWithAddressees(context, this._disposer);\r\n\r\n // Связка полей \"дело\" и \"дело верхнего уровня\"\r\n ChUIHelper.BundleCaseTopLevelCase(context);\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n // Проверка возможности добавления контрагента \"на лету\"\r\n ChUIHelper.CanAddPartnerPermission(context);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","export class PkDecorationHelper {\r\n /// \r\n /// Task type identifier for \"PkFlatDecorationType\": {09C4B18D-883C-44C6-B4C5-91E88DB4518E}.\r\n /// \r\n static PkFlatDecorationTypeID = \"09C4B18D-883C-44C6-B4C5-91E88DB4518E\";\r\n\r\n /// \r\n /// Task type name for \"PkFlatDecorationType\".\r\n /// \r\n static PkFlatDecorationTypeName = \"Тип отделки квартир\";\r\n\r\n /// \r\n /// Task type identifier for \"PkMOPDecorationType\": {C425F443-6C2F-43C8-9524-F3BC3BCDF3CB}.\r\n /// \r\n static PkMOPDecorationTypeID = \"C425F443-6C2F-43C8-9524-F3BC3BCDF3CB\";\r\n\r\n /// \r\n /// Task type name for \"PkMOPDecorationType\".\r\n /// \r\n static PkMOPDecorationTypeName = \"Тип отделки МОП\";\r\n\r\n /// \r\n /// Task type identifier for \"PkPantryDecorationType\": {00C99012-34B5-4407-B9C1-57C38BCC37A5}.\r\n /// \r\n static PkPantryDecorationTypeID = \"00C99012-34B5-4407-B9C1-57C38BCC37A5\";\r\n\r\n /// \r\n /// Task type name for \"PkPantryDecorationType\".\r\n /// \r\n static PkPantryDecorationTypeName = \"Тип отделки кладовых\";\r\n }","import { CardUIExtension, ICardUIExtensionContext, IControlViewModel } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { Card, CardRow, CardRowState, CardSection } from 'tessa/cards';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { ChRequestTypes } from 'src/pkScripts/Helpers/ChRequestTypes';\r\nimport { showError, showNotEmpty } from 'tessa/ui';\r\nimport { PkDecorationHelper } from 'src/pkScripts/helpers/PkDecorationHelper';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\n\r\nexport class PkProtocolUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n private _isAllowed: boolean = true;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkProtocolTypeID)) {\r\n return;\r\n }\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n // Таблица \"Поручения\" || Видимость таблицы/контрола \"Участники\"\r\n ChUIHelper.FillingUpAssignmentTable(context);\r\n\r\n // Формирование темы\r\n ChUIHelper.ThemeCreation(context, this._disposer);\r\n\r\n // Скрытие таблицы \"Согласования\"\r\n let patSection = context.model.card.sections.tryGet('PkApprovalTable');\r\n let approvalTable = context.model.controls.get('ApprovalTable');\r\n if (patSection != null && patSection.rows.length > 0) {\r\n if (approvalTable != null) approvalTable.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n if (approvalTable != null) approvalTable.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n // Скрытие коллекции \"Участники\"\r\n let pSection = context.model.card.sections.tryGet('Performers');\r\n let membersCollection = context.model.controls.get('MembersCollection');\r\n if (pSection != null && pSection.rows.length > 0) {\r\n if (membersCollection != null) membersCollection.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n if (membersCollection != null) membersCollection.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n let decorationTypes = context.model.card.sections.tryGet(\"PkProtocolDecorationTypes\");\r\n\r\n if (!decorationTypes) {\r\n return;\r\n }\r\n if (decorationTypes.rows.length === 0) {\r\n let row = new CardRow();\r\n\r\n row.rowId = Guid.newGuid();\r\n\r\n row.set(\"DecorationID\", PkDecorationHelper.PkFlatDecorationTypeID, DotNetType.Guid);\r\n row.set(\"DecorationName\", PkDecorationHelper.PkFlatDecorationTypeName, DotNetType.String);\r\n row.set(\"Comment\", null, DotNetType.String);\r\n\r\n row.state = CardRowState.Inserted;\r\n decorationTypes.rows.push(row);\r\n\r\n row.rowId = Guid.newGuid();\r\n\r\n row.set(\"DecorationID\", PkDecorationHelper.PkMOPDecorationTypeID, DotNetType.Guid);\r\n row.set(\"DecorationName\", PkDecorationHelper.PkMOPDecorationTypeName, DotNetType.String);\r\n row.set(\"Comment\", null, DotNetType.String);\r\n\r\n row.state = CardRowState.Inserted;\r\n decorationTypes.rows.push(row);\r\n\r\n row.rowId = Guid.newGuid();\r\n\r\n row.set(\"DecorationID\", PkDecorationHelper.PkPantryDecorationTypeID, DotNetType.Guid);\r\n row.set(\"DecorationName\", PkDecorationHelper.PkPantryDecorationTypeName, DotNetType.String);\r\n row.set(\"Comment\", null, DotNetType.String);\r\n\r\n row.state = CardRowState.Inserted;\r\n decorationTypes.rows.push(row);\r\n }\r\n let decorationTypesTable = context.model.controls.get(\"DecorationTypesTable\") as GridViewModel;\r\n\r\n if (!decorationTypesTable) {\r\n return;\r\n }\r\n\r\n let pkSection = context.card.sections.tryGet(\"PkDocumentCommonInfo\")!;\r\n if (!pkSection) {\r\n return;\r\n }\r\n\r\n let stateID = pkSection.fields.tryGetField(\"StateID\")?.$value;\r\n\r\n if (!stateID) {\r\n stateID = 0;\r\n }\r\n\r\n if (context.model.card.created != null) {\r\n let request = new CardRequest;\r\n request.requestType = ChRequestTypes.PkProtocolGetRole,\r\n request.cardId = context.model.card.id,\r\n request.info[\"StateID\"] = createTypedField(stateID, DotNetType.Int32);\r\n\r\n let response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n if (response.validationResult.isSuccessful) {\r\n this._isAllowed = response.info.Allowed!.$value;\r\n }\r\n }\r\n\r\n decorationTypesTable.isReadOnly = !this._isAllowed;\r\n decorationTypesTable.addButton.setVisibility(Visibility.Collapsed);\r\n decorationTypesTable.removeButton.setVisibility(Visibility.Collapsed);\r\n\r\n decorationTypesTable.rowInitializing.add (async e => {\r\n if (!e.row || !e.rowModel) {\r\n return;\r\n }\r\n\r\n let comm = e.rowModel.controls.get('Comment') as IControlViewModel;\r\n let cont1 = e.rowModel.controls.get('Control1') as IControlViewModel;\r\n\r\n comm.isReadOnly = !this._isAllowed;\r\n cont1.isReadOnly = !this._isAllowed;\r\n\r\n let b = false;\r\n e.row.fieldChanged.add(async e => {\r\n if (e.fieldName === \"Comment\") {\r\n if (e.fieldValue) {\r\n if ((e.fieldValue as DotNetType.String).length > 255) {\r\n if (!b) {\r\n b = true;\r\n await showError(\"Превышена допустимая длина комментария. Слишком большое сообщение будет обрезано.\");\r\n }\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n if (this._isAllowed) {\r\n decorationTypesTable.rowValidating.add (async e2 => {\r\n let str = e2.row.get(\"Comment\") as DotNetType.String;\r\n if (str && str.length > 255) {\r\n e2.row.set(\"Comment\", str.substring(0, 255), DotNetType.String);\r\n e2.row.state = CardRowState.Modified;\r\n }\r\n });\r\n }\r\n }\r\n\r\n public saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkProtocolTypeID)) {\r\n return;\r\n }\r\n\r\n let stateID = context.model.card.sections.get(\"PkDocumentCommonInfo\")?.[\"StateID\"] as Number;\r\n\r\n\r\n if (context.validationResult.isSuccessful &&\r\n stateID !== CdDocStates.Irrelevant as Number &&\r\n stateID !== CdDocStates.Approval as Number &&\r\n this._isAllowed) {\r\n try {\r\n let section = context.card.sections.tryGet(\"PkProtocolDecorationTypesTypes\")!;\r\n let section2 = context.card.sections.get(\"PkProtocolDecorationTypes\");\r\n\r\n if (!section || !section2) {\r\n return;\r\n }\r\n\r\n if (section.rows.length === 0) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Необходимо заполнить типы отделки\");\r\n return;\r\n }\r\n\r\n let decorationTypesToFill: any[] = [];\r\n\r\n section2.rows.forEach(row => {\r\n let rowCount = this.rowExists(section, row.tryGet(\"RowID\"));\r\n let decorationID = (row.get(\"DecorationID\") as DotNetType.Guid).toLowerCase();\r\n if (rowCount === 0) {\r\n decorationTypesToFill.push(row);\r\n }\r\n else {\r\n if (rowCount > 1 &&\r\n (decorationID === PkDecorationHelper.PkMOPDecorationTypeID.toLowerCase() ||\r\n decorationID === PkDecorationHelper.PkPantryDecorationTypeID.toLowerCase())) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"В поле \\\"\" + row.tryGet(\"DecorationName\") + \"\\\" должно быть только одно значение.\");\r\n return;\r\n }\r\n }\r\n });\r\n\r\n if (decorationTypesToFill.length > 0) {\r\n decorationTypesToFill.forEach(row => {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Необходимо заполнить значение для типа отделки: \" + row.tryGet(\"DecorationName\"));\r\n });\r\n }\r\n }\r\n catch {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Ошибка при проверке типов отделки\");\r\n }\r\n }\r\n\r\n if (context.validationResult.isSuccessful &&\r\n stateID !== CdDocStates.Irrelevant as Number &&\r\n stateID !== CdDocStates.Approval as Number) {\r\n try { \r\n if (!this.CheckAllApproversFilled(context.model.card))\r\n {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Необходимо заполнить все строки в таблице 'Согласования'\");\r\n }\r\n } catch {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Ошибка при проверке заполнения списка согласующих\");\r\n }\r\n }\r\n }\r\n\r\n private CheckAllApproversFilled(card: Card): boolean {\r\n var approvalTable = card.sections.get(\"PkApprovalTable\");\r\n if (approvalTable) {\r\n approvalTable.rows.forEach(row => {\r\n if (row.tryGet(\"UserID\") === undefined || row.tryGet(\"UserID\") === null) {\r\n return false;\r\n }\r\n });\r\n }\r\n return true;\r\n }\r\n\r\n private rowExists(sect: CardSection, rowID: DotNetType.Guid): Number {\r\n let b = 0;\r\n\r\n sect.rows.forEach(row => {\r\n if (row.tryGet(\"ProtocolDecorationTypeRowID\") === rowID &&\r\n row.tryGet(\"DecorationTypeID\") != null &&\r\n row.state != CardRowState.Deleted) {\r\n b ++;\r\n }\r\n });\r\n\r\n return b;\r\n }\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChStaticRoles } from 'src/pkScripts/Helpers/ChStaticRoles';\r\nimport { CardRow, CardRowState } from 'tessa/cards';\r\n\r\nexport class PkSzAdresseeFillAndReadonly extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkMemoTypeID)) {\r\n return;\r\n }\r\n\r\n let pkdciSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pkdciSection == null) return;\r\n let pkaSection = context.model.card.sections.tryGet('PkAddressees');\r\n if (pkaSection == null) return;\r\n\r\n let addreseeControl = context.model.controls.get('AddreseeControl');\r\n if (addreseeControl == null) return;\r\n\r\n let pkMemoInfo = context.model.card.sections.get(\"PkMemoInfo\");\r\n let kindId = pkMemoInfo!.fields.tryGet(\"KindID\");\r\n\r\n if (pkdciSection.fields.get(\"MemoTypeID\") === 10)\r\n addreseeControl.isReadOnly = true;\r\n else{\r\n addreseeControl.isReadOnly = kindId == null;\r\n }\r\n\r\n pkdciSection.fields.fieldChanged.add(e => {\r\n if (pkaSection == null) return;\r\n if (addreseeControl == null) return;\r\n if (e.fieldName === \"MemoTypeID\") {\r\n let id = e.fieldValue; // context.Model.Card.Sections[\"PkDocumentCommonInfo\"].Fields.Get(\"MemoTypeID\");\r\n if (id === 10) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n\r\n row.set(\"Order\", createTypedField(0, DotNetType.Int32));\r\n row.set(\"AddresseeDepartmentID\", createTypedField(Guid.newGuid(), DotNetType.Guid));\r\n row.set(\"AddresseeID\", createTypedField(ChStaticRoles.ElectronicApplicationForPass, DotNetType.Guid));\r\n row.set(\"AddresseeName\", createTypedField(\"Адресат электронной заявки на пропуск\", DotNetType.String));\r\n\r\n row.state = CardRowState.Inserted;\r\n for (let row of pkaSection.rows) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n pkaSection.rows.push(row);\r\n addreseeControl.isReadOnly = true;\r\n }\r\n else {\r\n addreseeControl.isReadOnly = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType, Visibility } from 'tessa/platform';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { PkClientHelper } from '../../Helpers/PkClientHelper';\r\nimport { CardSection } from 'tessa/cards';\r\nimport { PkRequestTypes } from '../../Helpers/PkRequestTypes';\r\nimport { CardService, CardRequest } from 'tessa/cards/service';\r\nimport { showNotEmpty, tryGetFromInfo } from 'tessa/ui';\r\nimport { CdCommonHelper } from 'src/cdScripts/Helpers/CdCommonHelper';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\n\r\nexport class PkWorkOrderUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n private async FillRegionCityAndProjectAsync(objectSection: CardSection, workOrderSection: CardSection, objectId) {\r\n if (objectId == null) {\r\n objectSection.fields.set(\"RegionID\", null);\r\n objectSection.fields.set(\"RegionName\", null);\r\n objectSection.fields.set(\"CityID\", null);\r\n objectSection.fields.set(\"CityName\", null);\r\n objectSection.fields.set(\"ProjectID\", null);\r\n objectSection.fields.set(\"ProjectName\", null);\r\n objectSection.fields.set(\"ObjectName\", null);\r\n objectSection.fields.set(\"ObjectPlaceID\", null);\r\n objectSection.fields.set(\"ObjectPlaceLivingComplex\", null);\r\n objectSection.fields.set(\"ProjectManagerID\", null);\r\n objectSection.fields.set(\"ProjectManagerName\", null);\r\n return;\r\n }\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetRdDivisionRoleProperties;\r\n request.info[\"FieldID\"] = createTypedField(objectId, DotNetType.Guid);\r\n request.info[\"FieldRoleType\"] = createTypedField(0, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n let requestPG = new CardRequest();\r\n requestPG.requestType = PkRequestTypes.GetRdDivisionRoleProperties;\r\n requestPG.info[\"FieldID\"] = createTypedField(objectId, DotNetType.Guid);\r\n requestPG.info[\"FieldRoleType\"] = createTypedField(4, DotNetType.Int32);\r\n\r\n const responsePG = await CardService.instance.request(requestPG);\r\n await showNotEmpty(responsePG.validationResult.build());\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n objectSection.fields.set(\"RegionID\", null);\r\n objectSection.fields.set(\"RegionName\", null);\r\n objectSection.fields.set(\"CityID\", null);\r\n objectSection.fields.set(\"CityName\", null);\r\n objectSection.fields.set(\"ProjectID\", null);\r\n objectSection.fields.set(\"ProjectName\", null);\r\n objectSection.fields.set(\"ObjectName\", null);\r\n objectSection.fields.set(\"ObjectPlaceID\", null);\r\n objectSection.fields.set(\"ObjectPlaceLivingComplex\", null);\r\n objectSection.fields.set(\"ProjectManagerID\", null);\r\n objectSection.fields.set(\"ProjectManagerName\", null);\r\n return;\r\n }\r\n\r\n CdCommonHelper.SetFieldToSection(objectSection, \"RegionID\", response.info.RegionID);\r\n CdCommonHelper.SetFieldToSection(objectSection, \"RegionName\", response.info.RegionName);\r\n CdCommonHelper.SetFieldToSection(objectSection, \"CityID\", response.info.CityID);\r\n CdCommonHelper.SetFieldToSection(objectSection, \"CityName\", response.info.CityName);\r\n CdCommonHelper.SetFieldToSection(objectSection, \"ProjectID\", response.info.ProjectID);\r\n CdCommonHelper.SetFieldToSection(objectSection, \"ProjectName\", response.info.ProjectName);\r\n CdCommonHelper.SetFieldToSection(objectSection, \"ObjectPlaceID\", response.info.ResidentialComplexID);\r\n CdCommonHelper.SetFieldToSection(objectSection, \"ObjectPlaceLivingComplex\", response.info.ResidentialComplexName);\r\n\r\n if (!responsePG.validationResult.isSuccessful) {\r\n return;\r\n }\r\n if (responsePG.info.ProjectManagerID && responsePG.info.ProjectManagerID !== Guid.empty) {\r\n CdCommonHelper.SetFieldToSection(workOrderSection, \"ProjectManagerID\", responsePG.info.ProjectManagerID);\r\n CdCommonHelper.SetFieldToSection(workOrderSection, \"ProjectManagerName\", responsePG.info.ProjectManagerName);\r\n }\r\n }\r\n\r\n private async SetControlsVisibilityAsync(model: ICardModel, contractorKCKExternalID: DotNetType.Int64) {\r\n let department = model.controls.get(\"Department\")!;\r\n let executor = model.controls.get(\"Executor\")!;\r\n let preliminaryCost = model.controls.get(\"PreliminaryCost\")!;\r\n let subContractorCost = model.controls.get(\"SubContractorCost\")!;\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.CheckWorkOrderContractor,\r\n request.info[\"ContractorKCKExternalID\"] = createTypedField(contractorKCKExternalID, DotNetType.Int64);\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n if (tryGetFromInfo(response.info, \"Exists\")) {\r\n department.isRequired = true;\r\n department.controlVisibility = Visibility.Visible;\r\n executor.controlVisibility = Visibility.Visible;\r\n preliminaryCost.controlVisibility = Visibility.Visible;\r\n subContractorCost.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n department.controlVisibility = Visibility.Collapsed;\r\n executor.controlVisibility = Visibility.Collapsed;\r\n preliminaryCost.controlVisibility = Visibility.Collapsed;\r\n subContractorCost.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n private SetSubContractorCostVisibilityAsync(model: ICardModel, subContractorKCKExternalID: DotNetType.Int64) {\r\n let subContractorCostControl = model.controls.get(\"SubContractorCost\")!;\r\n //subContractorCostControl.isReadOnly = subContractorKCKExternalID === null;\r\n subContractorCostControl.controlVisibility = (subContractorKCKExternalID == null) ? Visibility.Collapsed : Visibility.Visible;\r\n\r\n }\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkWorkOrderTypeID)) {\r\n return;\r\n }\r\n\r\n PkClientHelper.SetReadonlyContractWhileFieldIsNull(\r\n context.model,\r\n context.model.card,\r\n \"PkWorkOrder\",\r\n \"Contract\",\r\n \"ContractorKCKExternalID\",\r\n \"CustomerExternalID\",\r\n null,\r\n null,\r\n \"Contract\");\r\n\r\n let pkrpSection = context.model.card.sections.tryGet('PkRdProperties');\r\n if (pkrpSection != null) {\r\n pkrpSection.fields.fieldChanged.add(async e => {\r\n if (pkrpSection == null) return;\r\n let workOrderSection = context.model.card.sections.tryGet('PkWorkOrder');\r\n if (workOrderSection == null) return;\r\n if (e.fieldName === \"ObjectID\") {\r\n let objectId = pkrpSection.fields.tryGet(\"ObjectID\");\r\n await this.FillRegionCityAndProjectAsync(pkrpSection, workOrderSection, objectId);\r\n }\r\n });\r\n }\r\n\r\n let workOrderSection = context.model.card.sections.tryGet('PkWorkOrder')!;\r\n if (workOrderSection) {\r\n await this.SetControlsVisibilityAsync(context.model, workOrderSection.fields.tryGet(\"ContractorKCKExternalID\"));\r\n this.SetSubContractorCostVisibilityAsync(context.model, workOrderSection.fields.tryGet(\"SubContractorKCKExternalID\"));\r\n workOrderSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"ContractorKCKExternalID\") {\r\n let contractorKCKExternalID = workOrderSection.fields.tryGet(\"ContractorKCKExternalID\");\r\n await this.SetControlsVisibilityAsync(context.model, contractorKCKExternalID);\r\n }\r\n if (e.fieldName === \"SubContractorKCKExternalID\") {\r\n let subContractorKCKExternalID = workOrderSection.fields.tryGet(\"SubContractorKCKExternalID\");\r\n this.SetSubContractorCostVisibilityAsync(context.model, subContractorKCKExternalID);\r\n }\r\n });\r\n }\r\n}\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n \r\n if (context.model.controls.has(\"Department\")\r\n && context.model.controls.get(\"Department\")!.controlVisibility == Visibility.Visible\r\n && context.model.card.sections.has(\"PkWorkOrder\")\r\n && context.model.card.sections.get(\"PkWorkOrder\")!.fields.tryGet(\"DepartmentID\") == null) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n 'Необходимо заполнить структурное подразделение.');\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType } from 'tessa/platform';\r\nimport { showConfirm } from 'tessa/ui';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { Card } from 'tessa/cards';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\n\r\nexport class ArActSavingUIExtension extends CardUIExtension {\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null ||\r\n context.model.card.typeId !== PkCardTypes.ArActTypeID) {\r\n return;\r\n }\r\n\r\n await ArUIHelper.CheckIsDirectual(context, false, new Array(context.card));\r\n await this.CheckSameCardExists(context);\r\n await ArUIHelper.ArEDocumentAndArActConvertKSD(context);\r\n await ArUIHelper.ArEDocumentAttachDocumentAsync(context);\r\n }\r\n\r\n // Проверка наличия похожей карточки\r\n // Через подтверждение, а не через Warning по причине возможной передачи в cdw.\r\n private async CheckSameCardExists(context: ICardUIExtensionContext) {\r\n // проверяем секции\r\n const aaSection = context.model.card.sections.tryGet('ArchiveAct');\r\n const dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n const pkDocumentCommonInfo = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n\r\n if (aaSection == null || dciSection == null\r\n || pkDocumentCommonInfo == null)\r\n return;\r\n\r\n // получаем необходимые поля из карточки\r\n const senderKCKExternalID = aaSection.fields.get('SenderKCKExternalID');\r\n const receiverKCKExternalID = aaSection.fields.get('ReceiverKCKExternalID');\r\n const actDate = aaSection.fields.get('ActDate');\r\n const docKindID = aaSection.fields.get('DocumentKindID');\r\n const contractId = aaSection.fields.get('ContractID');\r\n const amount = dciSection.fields.get('Amount');\r\n const fullNumber = dciSection.fields.get('FullNumber');\r\n const stateId = pkDocumentCommonInfo.fields.tryGet('StateID');\r\n\r\n // выходим, если стороны не заданы\r\n if (senderKCKExternalID == null || receiverKCKExternalID == null) return;\r\n\r\n // создаем запрос\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetSameArDocuments;\r\n request.cardId = context.card.id;\r\n request.info['SenderKCKExternalID'] = createTypedField(senderKCKExternalID, DotNetType.Int64);\r\n request.info['ReceiverKCKExternalID'] = createTypedField(receiverKCKExternalID, DotNetType.Int64);\r\n if (actDate != null)\r\n request.info['ActDate'] = createTypedField(actDate, DotNetType.DateTime);\r\n if (docKindID != null)\r\n request.info['DocumentKindID'] = createTypedField(docKindID, DotNetType.Guid);\r\n if (amount != null)\r\n request.info['Amount'] = createTypedField(amount.toString(), DotNetType.Decimal);\r\n if (fullNumber != null)\r\n request.info['FullNumber'] = createTypedField(fullNumber, DotNetType.String);\r\n if (contractId != null)\r\n request.info['ContractID'] = createTypedField(contractId, DotNetType.Guid);\r\n if (stateId != null)\r\n request.info['stateId'] = createTypedField(stateId, DotNetType.Int32);\r\n\r\n // отправляем запрос и получаем ответ\r\n const response = await CardService.instance.request(request);\r\n const isSameDocumentExists = response.info != null && response.info.IsSameDocumentExists != null ? response.info.IsSameDocumentExists.$value : null;\r\n\r\n // если похожий документ найден - выводим сообщение с подтверждением\r\n if (isSameDocumentExists === true) {\r\n const message = response.info!.SameDocumentsMessage.$value\r\n + \"Вы уверены, что хотите сохранить карточку?\";\r\n\r\n if (await showConfirm(message) !== true) context.cancel = true;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { CardRow, CardSection, CardRowState } from 'tessa/cards';\r\n\r\nexport class PkRecevingDocumentsFromDiadocPluginSettingsUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null || context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkRecevingDocumentsFromDiadocPluginSettings)) {\r\n return;\r\n }\r\n\r\n const includedTagsListSection = context.model.card.sections.getOrAdd('PkRecevingDocumentsFromDiadocPluginIncludedTagsList');\r\n const excludedTagsListSection = context.model.card.sections.getOrAdd('PkRecevingDocumentsFromDiadocPluginExcludedTagsList');\r\n const includedTagsSection = context.model.card.sections.getOrAdd('PkRecevingDocumentsFromDiadocPluginDocKindSettingsIncludedTags');\r\n const excludedTagsSection = context.model.card.sections.getOrAdd('PkRecevingDocumentsFromDiadocPluginDocKindSettingsExcludedTags');\r\n\r\n includedTagsListSection.rows.forEach(inculdedTagsRow => {\r\n this.SetActionForFieldChanged(inculdedTagsRow, includedTagsSection, includedTagsListSection);\r\n });\r\n\r\n excludedTagsListSection.rows.forEach(exculdedTagsRow => {\r\n this.SetActionForFieldChanged(exculdedTagsRow, excludedTagsSection, excludedTagsListSection);\r\n });\r\n\r\n includedTagsListSection.rows.collectionChanged.add(e => {\r\n e.added.forEach(addedRow => {\r\n this.SetActionForFieldChanged(addedRow, includedTagsSection, includedTagsListSection);\r\n });\r\n });\r\n\r\n excludedTagsListSection.rows.collectionChanged.add(e => {\r\n e.added.forEach(addedRow => {\r\n this.SetActionForFieldChanged(addedRow, excludedTagsSection, excludedTagsListSection);\r\n });\r\n });\r\n }\r\n\r\n /// Установка действия при изменении поля в строке тегов\r\n private SetActionForFieldChanged(row: CardRow, tagsSection: CardSection, tagsListSection: CardSection) {\r\n row.fieldChanged.add(() => {\r\n const tagsRow = tagsSection.rows.filter(x => x.rowId === row.parentRowId)[0];\r\n this.SetTagsText(tagsRow, tagsListSection);\r\n });\r\n }\r\n\r\n // Установка строки тегов\r\n private SetTagsText(tagsRow: CardRow, tagsListSection: CardSection) {\r\n const filteredRows = tagsListSection.rows\r\n .filter(x => x.state !== CardRowState.Deleted && x.parentRowId === tagsRow.rowId)\r\n .map(x => \"\\\"\" + x.tryGet(\"Tag\") + \"\\\"\");\r\n const textTags = filteredRows.join(\"; \");\r\n tagsRow.set(\"TagsText\", textTags, DotNetType.String);\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, IFormViewModel } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\n\r\nexport class ChInstructionUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.InstructionTypeID)) {\r\n return;\r\n }\r\n\r\n ChUIHelper.HideReaders(context);\r\n\r\n ChUIHelper.InitializeTableInstructionHistory(context);\r\n\r\n (context.model.forms as IFormViewModel[]).splice(context.model.forms.findIndex(x => x.name === \"Листы согласования\"), 1);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, Visibility } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ControlViewModelBase, CheckBoxViewModel } from 'tessa/ui/cards/controls';\r\nimport { showConfirm } from 'tessa/ui';\r\nimport { CardStoreMode } from 'tessa/cards';\r\n\r\nexport class ArUnitsOfDiadocUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArUnitsOfDiadocTypeID)) {\r\n return;\r\n }\r\n\r\n this.SetControlsVisibility(context);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArUnitsOfDiadocTypeID)) {\r\n return;\r\n }\r\n\r\n await this.IsUseAgreementLogic(context);\r\n }\r\n\r\n /** Установка видимости контролов */\r\n private SetControlsVisibility(context: ICardUIExtensionContext) {\r\n const arudSection = context.card.sections.tryGet(\"ArUnitsOfDiadoc\");\r\n if (arudSection == null ||\r\n !arudSection.fields.has(\"DiadocDepartmentParentID\"))\r\n return;\r\n\r\n const diadocDepartmantParentID = arudSection.fields.tryGet(\"DiadocDepartmentParentID\");\r\n const isBox = diadocDepartmantParentID == null;\r\n\r\n const extIDControl = CdUIHelper.GetUIControl(context, \"UnitExtIDControl\");\r\n const diadocDepartmentParentControl = CdUIHelper.GetUIControl(context, \"UnitDiadocDepartmentParentControl\");\r\n const departmentControl = CdUIHelper.GetUIControl(context, \"UnitDepartmentControl\");\r\n const serviceUserControl = CdUIHelper.GetUIControl(context, \"UnitServiceUserControl\");\r\n const lastSynchDateControl = CdUIHelper.GetUIControl(context, \"UnitLastSynchDateControl\");\r\n const isDownloadEnableControl = CdUIHelper.GetUIControl(context, \"UnitIsDownloadEnableControl\");\r\n\r\n const boxControlsVisibility = isBox\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n\r\n const departmentControlsVisibility = isBox\r\n ? Visibility.Collapsed\r\n : Visibility.Visible;\r\n\r\n if (extIDControl != null) extIDControl.controlVisibility = departmentControlsVisibility;\r\n if (diadocDepartmentParentControl != null) diadocDepartmentParentControl.controlVisibility = departmentControlsVisibility;\r\n if (departmentControl != null) departmentControl.controlVisibility = boxControlsVisibility;\r\n if (serviceUserControl != null) serviceUserControl.controlVisibility = boxControlsVisibility;\r\n if (lastSynchDateControl != null) lastSynchDateControl.controlVisibility = boxControlsVisibility;\r\n if (isDownloadEnableControl != null) isDownloadEnableControl.controlVisibility = boxControlsVisibility;\r\n }\r\n\r\n /** Логика галочки \"Использование согласования\" */\r\n private async IsUseAgreementLogic(context: ICardUIExtensionContext) {\r\n if (context.card.storeMode === CardStoreMode.Insert)\r\n return;\r\n\r\n const arudSection = context.card.sections.tryGet(\"ArUnitsOfDiadoc\");\r\n if (arudSection == null ||\r\n !arudSection.fields.has(\"IsUseAgreement\") ||\r\n !arudSection.isChanged(\"IsUseAgreement\"))\r\n return;\r\n\r\n const isUseAgreement: boolean = arudSection.fields.get(\"IsUseAgreement\");\r\n if (!isUseAgreement)\r\n return;\r\n\r\n const isUseAgreementControl = CdUIHelper.GetUIControl(context, \"UnitIsUseAgreementControl\");\r\n if (isUseAgreementControl == null)\r\n return;\r\n\r\n const message =\r\n \"Галочка \\\"Использование согласования\\\" также будет включена по дочерним подразделениям.\\n\" +\r\n \"Документы текущего подразделения и всех дочерних добавятся в очередь на синхронизацию.\\n\" +\r\n \"Вы уверены, что хотите продолжить?\";\r\n\r\n const result = await showConfirm(message, \"Предупреждение\");\r\n\r\n if (!result) {\r\n isUseAgreementControl.isChecked = false;\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n context.card.info[\"UpdateIsUseAgreementChildUnits\"] = true;\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { CheckBoxViewModel, GridViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { showConfirm } from 'tessa/ui';\r\nimport { CardStoreMode } from 'tessa/cards';\r\nimport { openCard } from 'tessa/ui/uiHost';\r\n\r\nexport class ArUsersOfDiadocUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArUserOfDiadocTypeID)) {\r\n return;\r\n }\r\n\r\n this.UnitsTableLogic(context);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArUserOfDiadocTypeID)) {\r\n return;\r\n }\r\n\r\n await this.IsSyncBoxesEnableLogic(context);\r\n }\r\n\r\n /** Логика спика ящиков */\r\n private UnitsTableLogic(context: ICardUIExtensionContext) {\r\n const unitsControl = CdUIHelper.GetUIControl(context, \"UnitsControl\");\r\n\r\n if (unitsControl == null)\r\n return;\r\n\r\n unitsControl.rowInitializing.add(async (e) => {\r\n if (e.action !== GridRowAction.Opening)\r\n return;\r\n\r\n e.cancel = true;\r\n\r\n const unitID = e.row.tryGet(\"UnitID\");\r\n\r\n if (unitID == null)\r\n return;\r\n\r\n await openCard({cardId: unitID});\r\n });\r\n }\r\n\r\n /** Логика галочки \"Синхронизация ящиков\" */\r\n private async IsSyncBoxesEnableLogic(context: ICardUIExtensionContext) {\r\n if (context.card.storeMode === CardStoreMode.Insert)\r\n return;\r\n\r\n const arusdSection = context.card.sections.tryGet(\"ArUsersOfDiadoc\");\r\n if (arusdSection == null ||\r\n !arusdSection.fields.has(\"IsSyncBoxesEnabled\") ||\r\n !arusdSection.isChanged(\"IsSyncBoxesEnabled\"))\r\n return;\r\n\r\n const isSyncBoxesEnable: boolean = arusdSection.fields.get(\"IsSyncBoxesEnabled\");\r\n if (isSyncBoxesEnable)\r\n return;\r\n\r\n const isSyncBoxesEnabletControl = CdUIHelper.GetUIControl(context, \"UserIsSyncBoxesEnabledControl\");\r\n if (isSyncBoxesEnabletControl == null)\r\n return;\r\n\r\n const message =\r\n \"Снятие галочки \\\"Синхронизация ящиков\\\" приведет к удалению пользователя из синхронизированных ящиков.\\n\" +\r\n \"Вы уверены, что хотите продолжить?\";\r\n\r\n const result = await showConfirm(message, \"Предупреждение\");\r\n\r\n if (!result) {\r\n isSyncBoxesEnabletControl.isChecked = false;\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n context.card.info[\"RemoveUserFromBoxes\"] = true;\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { IFile, FileContainerChangedEventArgs, FileContainer } from 'tessa/files';\r\nimport { showMessage } from 'tessa/ui';\r\nimport { CardFileState } from 'tessa/cards';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { GridViewModel, FileListViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { userSession } from 'common/utility';\r\n\r\nexport class PkPersonalRoleUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n private _curentRowID: string | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n if (context == null ||\r\n (model = context.model) == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.PersonalRoleTypeID)) {\r\n return;\r\n }\r\n\r\n this.InitializePkLegalEntitiesControl(model);\r\n this.InitializeModelFilesHandle(model);\r\n this.SetSendFilesAsAttachmentsToNotificationsReadOnly(model);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n if (context == null ||\r\n (model = context.model) == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.PersonalRoleTypeID)) {\r\n return;\r\n }\r\n\r\n this.SetFilesInfo(model, context);\r\n }\r\n\r\n /** Инициализация файлов в карточке. */\r\n private InitializeModelFilesHandle(model: ICardModel) {\r\n // чистим файлы по фильтру\r\n this.FilterFiles(model, null);\r\n\r\n // подписываемся на событие проверки файлов в контейнере\r\n model.fileContainer.containerFileChanged.add(async (e) => {\r\n await this.FileContainerItemCheckingAsync(model, e);\r\n });\r\n }\r\n\r\n /** Обработка события проверки файла при добавлении или удалении. */\r\n private async FileContainerItemCheckingAsync(model: ICardModel, e: FileContainerChangedEventArgs) {\r\n // логика при добавлении файлов\r\n if (e.added != null) {\r\n // выходим, если файл уже добавлялся\r\n if (e.added.options[\"FilterID\"] !== undefined) {\r\n return;\r\n }\r\n\r\n // устанавливаем параметры в Options\r\n e.added.options[\"FilterID\"] = this._curentRowID;\r\n\r\n // получаем флаг отмены\r\n const isCancel =\r\n !this.ValidateCategoryFile(e.fileContainer, e.added) ||\r\n !(await this.ValidateCertFileAsync(e.added));\r\n\r\n // отменяем добавление файла\r\n if (isCancel) {\r\n // удаляем файл из списка\r\n await e.fileContainer.removeFile(e.added, true);\r\n e.fileContainer.source.notifyRemoved(e.added);\r\n }\r\n\r\n // находим файл в карточке\r\n const cardFile = model.card.files.find(x => x.rowId === e.added?.id);\r\n\r\n // переносим Options в файл (иначе не сохраняются)\r\n if (cardFile != null) {\r\n cardFile.options = JSON.stringify(e.added.options);\r\n }\r\n\r\n return;\r\n }\r\n }\r\n\r\n /** Проверка и валидация файла с категорией \"Сертификаты DSS\". */\r\n private ValidateCategoryFile(fileContainer: FileContainer, file: IFile): boolean {\r\n // проверяем файл на категорию \"Сертификаты DSS\"\r\n if (file.category == null ||\r\n (file.category.id !== ChFileCategories.DssCertificates.id &&\r\n file.category.id !== ChFileCategories.NepCertificates.id)) {\r\n // валидация успешна, если файл не имеет такую категорию\r\n return true;\r\n }\r\n\r\n // получаем файлы связанные с контролом (по FilterID),\r\n // в котором находится текущий файл,\r\n // а также фильтруем их по категории добавляемого файла\r\n const filteredFiles = fileContainer.files.filter(x =>\r\n x.id !== file.id &&\r\n x.options[\"FilterID\"] === this._curentRowID &&\r\n x.category?.id === file.category?.id);\r\n\r\n // если такие файлы есть - валидация неуспешна, выводим ошибку\r\n if (filteredFiles.length > 0) {\r\n showMessage(\"Нельзя добавить больше 1 сертификата в выбранную категорию.\", \"Добавление сертификата\");\r\n return false;\r\n }\r\n\r\n // валидация успешна\r\n return true;\r\n }\r\n\r\n /** Проверка и валидация файла с категорией \"Сертификаты DSS\". */\r\n private async ValidateCertFileAsync(file: IFile): Promise {\r\n // проверяем файл на категорию \"Сертификаты DSS\"\r\n if (file.category == null ||\r\n (file.category.id !== ChFileCategories.DssCertificates.id &&\r\n file.category.id !== ChFileCategories.NepCertificates.id)) {\r\n // валидация успешна, если файл не имеет такую категорию\r\n return true;\r\n }\r\n\r\n // получаем контент файла в виде base64 строки\r\n const fileContentString = await PkCommonHelper.GetBase64String(file.lastVersion.content as Blob);\r\n\r\n // инициализируем запрос\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CheckCertificate;\r\n request.info[\"ContentString\"] = createTypedField(fileContentString, DotNetType.String);\r\n\r\n // отправляем запрос\r\n const response = await CardService.instance.request(request);\r\n\r\n // проверяем ответ\r\n if (!response.validationResult.isSuccessful) {\r\n showMessage(\"Не удалось распознать сертификат.\", \"Добавление сертификата\");\r\n return false;\r\n }\r\n\r\n // получаем данные из ответа\r\n const certSerialNumber = response.info[\"CertSerialNumber\"].$value as string;\r\n\r\n // устанавливаем данные в Info\r\n file.info[\"CertSerialNumber\"] = certSerialNumber;\r\n file.info[\"ContentString\"] = fileContentString;\r\n\r\n // устанавливаем данные в Options\r\n file.options[\"CertSerialNumber\"] = certSerialNumber;\r\n\r\n // валидация успешна\r\n return true;\r\n }\r\n\r\n /** Инициализация таблички \"Организации\". */\r\n private InitializePkLegalEntitiesControl(model: ICardModel) {\r\n const pkLegalEntitiesControl = CdUIHelper\r\n .GetUIControlFromModel(model, \"PkLegalEntitiesControl\");\r\n\r\n if (pkLegalEntitiesControl == null) {\r\n return;\r\n }\r\n\r\n pkLegalEntitiesControl.rowInitializing.add((e) => {\r\n this.FilterFiles(e.rowModel!, e.row.rowId);\r\n this._curentRowID = e.row.rowId;\r\n });\r\n\r\n pkLegalEntitiesControl.rowEditorClosed.add(() => {\r\n this.FilterFiles(model, null);\r\n this._curentRowID = null;\r\n });\r\n\r\n pkLegalEntitiesControl.rowInvoked.add((e) => {\r\n if (e.action === GridRowAction.Deleting) {\r\n this.DeletingFiles(model, e.row.rowId);\r\n }\r\n });\r\n }\r\n\r\n /** Установка фильтра файлов. */\r\n private FilterFiles(model: ICardModel, filterID: string | null) {\r\n // получаем файловый контрол из модели\r\n const modelFileControl = CdUIHelper\r\n .GetUIControlFromForm(model.mainForm!, \"Files\");\r\n\r\n // выходим, если контрол не найден\r\n if (modelFileControl == null) {\r\n return;\r\n }\r\n\r\n // устанавливаем фильтр для файлов\r\n for (let i = modelFileControl.files.length - 1; i > -1; i--) {\r\n const file = modelFileControl.files[i];\r\n if (!(filterID == null &&\r\n !file.model.options[\"FilterID\"] ||\r\n file.model.options[\"FilterID\"] === filterID)) {\r\n modelFileControl.removeFile(file);\r\n }\r\n }\r\n }\r\n\r\n /** Удаление файлов. */\r\n private DeletingFiles(model: ICardModel, filterID: string | null) {\r\n // получаем файлы, которые связаны с фильтром\r\n const filteredFiles = model.card.files.filter(x => {\r\n // получаем файл из контейнера\r\n const containerFile = model.fileContainer.files.find(y => y.id === x.rowId);\r\n\r\n // проверяем фильтр из Options\r\n return containerFile!.options[\"FilterID\"] === filterID;\r\n });\r\n\r\n // удаляем файлы из карточки\r\n for (const file of filteredFiles) {\r\n file.state = CardFileState.Deleted;\r\n }\r\n }\r\n\r\n /** Установка Info файлов. */\r\n private SetFilesInfo(model: ICardModel, context: ICardUIExtensionContext) {\r\n for (const cardFile of context.card.files.filter(x => x.state !== CardFileState.Deleted)) {\r\n // получаем файл из контейнера\r\n const containerFile = model.fileContainer.files.find(x => x.id === cardFile.rowId);\r\n\r\n // устанавливаем данные в Info\r\n cardFile.info[\"CertSerialNumber\"] = containerFile!.info[\"CertSerialNumber\"];\r\n cardFile.info[\"ContentString\"] = containerFile!.info[\"ContentString\"];\r\n }\r\n }\r\n\r\n /** Установка флага SendFilesAsAttachmentsToNotifications на вкладке Почтовые уведомления в состояние ReadOnly = false. */\r\n private SetSendFilesAsAttachmentsToNotificationsReadOnly(model: ICardModel) { \r\n if (!userSession.isAdmin) {\r\n return;\r\n }\r\n const control = model.controls.get('SendFilesAsAttachmentsToNotifications'); \r\n if (control) control.isReadOnly = false;\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { ButtonForCopyingRows } from 'src/pkScripts/Helpers/PkClientHelper';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class PkRequestForMaterialsUIExtension extends CardUIExtension {\r\n\r\n private _disposers: (Function|null)[] | null = [];\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.PkRequestForMaterialsTypeID)) {\r\n return;\r\n }\r\n this._disposers!.push(ButtonForCopyingRows.Initialized(context, \"RequestForMaterialsItems\", \"PkRequestForMaterialsItems\",\"Number\"));\r\n this._disposers!.push(ButtonForCopyingRows.Initialized(context, \"RequestForMaterialsSupplies\", \"PkRequestForMaterialsSupplies\",\"Number\"));\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposers) {\r\n this._disposers.forEach(element => {\r\n element!();\r\n element = null;\r\n });\r\n ;\r\n this._disposers = null;\r\n }\r\n}\r\n}","export class PkDepartmentHelper\r\n{ \r\n /// Бухгалтер ОХР. \r\n static OXRAccountant = \"981d56fb-9a36-4f0e-a0b4-9338ef1cfdf4\";\r\n\r\n /// Бухгалтеры сопровождения. \r\n static EscortAccountants = \"d4a5d599-040d-4245-8b3e-0fefc89c9f5c\";\r\n\r\n /// Вице-президент подразделения. \r\n static DivisionVicePresident =\"4c54c45d-6221-46dd-90c6-8d92153158d9\";\r\n\r\n /// Генеральный директор. \r\n static GeneralDirector = \"2699177d-be07-42cb-8b23-e913b59f4bd9\";\r\n\r\n /// Глава подразделения. \r\n static HeadOfDepartment = \"e9de8b1c-2bb4-4037-92be-e204aa1eb3a8\";\r\n\r\n /// Исполнители центра регистрации. \r\n static RegistrationCenterExecutors = \"be370c27-3f76-4dfa-a634-8a3b6e6300a2\";\r\n\r\n /// Регистратор структурного подразделения. \r\n static RegistrarOfAStructuralUnit = \"b46fc62b-a9a0-42dc-821c-bddc11589797\";\r\n\r\n /// СотрудникУДО. \r\n static UDOEmployee = \"7d201bc5-891b-4625-a42a-09284a6d2445\";\r\n\r\n // Читатели структурного подразделения\r\n static ReadersOfTheStructuralUnit = \"1c42bc53-a486-4bd0-b4fc-e050bcfd6bb5\";\r\n\r\n /// Ответственные за распределение документа. \r\n static ResponsibleByDispatchDocument = \"5149ce39-cc6d-458e-bfff-d1b44f93be71\"; \r\n}","import { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { showNotEmpty } from 'tessa/ui';\r\nimport { CardRowState, CardRow, CardSection, CardStoreMode, Card } from 'tessa/cards';\r\nimport { ChRequestTypes } from '../Helpers/ChRequestTypes';\r\n\r\nexport class ArHelper {\r\n\r\n public static KCKPartnerGPMFSExtID = 49340;\r\n public static async ClearArticlesOHR(context: ICardUIExtensionContext) {\r\n if (context.model.card.sections.get(\"ArArticleOHRListVirtual\") != null) {\r\n const arArticleOhrListVirtual = context.model.card.sections.get(\"ArArticleOHRListVirtual\");\r\n if (arArticleOhrListVirtual!.rows.length > 0) {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, arArticleOhrListVirtual!);\r\n }\r\n }\r\n }\r\n\r\n public static async ClearCollectionSection(storeMode: CardStoreMode, section: CardSection) {\r\n for (let row of section.rows.filter(x => x.state != CardRowState.Deleted)) {\r\n ArHelper.RemoveRowFromCollectionSection(storeMode, section, row)\r\n }\r\n }\r\n\r\n public static async RemoveRowFromCollectionSection(storeMode: CardStoreMode, section: CardSection, row: CardRow) {\r\n if (storeMode == CardStoreMode.Update && row.state != CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n else {\r\n section.rows.remove(row);\r\n }\r\n }\r\n\r\n public static async FillArticlesOHR(context: ICardUIExtensionContext, contractID: string) {\r\n const arArticleOhrListVirtual = context.model.card.sections.tryGet('ArArticleOHRListVirtual');\r\n if (arArticleOhrListVirtual == null) return;\r\n\r\n // Удаление существующих виртуальных записей в таблице Статьи затрат ИДП\r\n ArHelper.ClearArticlesOHR(context);\r\n\r\n const request = new CardRequest();\r\n request.requestType = ChRequestTypes.ArActContractArticleOhr;\r\n if (contractID == null) request.info[\"ContractID\"] = null;\r\n else request.info[\"ContractID\"] = createTypedField(contractID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n let amount = 0;\r\n if (response.info!.ArticleOhrInfo!) {\r\n for (let article of response.info.ArticleOhrInfo) {\r\n // if (article.IsCostItem && article.IsCostItem.$value && article.ArticleOHRID == null)\r\n // {\r\n // continue;\r\n // }\r\n\r\n let rowVirtual = new CardRow();\r\n rowVirtual.rowId = Guid.newGuid();\r\n\r\n rowVirtual.set('ArticleID', article.ArticleID);\r\n rowVirtual.set('ArticleName', article.ArticleName);\r\n rowVirtual.set('HierarchicalCode', article.HierarchicalCode);\r\n rowVirtual.set('Amount', createTypedField(amount?.toString() ?? null, DotNetType.Decimal));\r\n rowVirtual.set('VAT', null);\r\n rowVirtual.set('VATRateID', null);\r\n rowVirtual.set('VATRateCaption', null);\r\n rowVirtual.set('ActivityKindID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterExtID', null);\r\n rowVirtual.set('FinancialResponsibilityCenterName', null);\r\n rowVirtual.set('ActivityKindName', null);\r\n rowVirtual.set('AmountVAT', null);\r\n\r\n\r\n rowVirtual.set('ObjectOtherID', null);\r\n rowVirtual.set('ObjectOtherExtID', null);\r\n rowVirtual.set('ObjectOtherName', null);\r\n rowVirtual.set('ObjectOtherFullName', null);\r\n rowVirtual.set('ObjectOtherCode1c', null);\r\n rowVirtual.set('ObjectOtherLivingComplex', null);\r\n rowVirtual.set('ObjectOtherAddressPost', null);\r\n\r\n rowVirtual.set('ObjectID', null);\r\n rowVirtual.set('ObjectExtID', null);\r\n rowVirtual.set('ObjectName', null);\r\n rowVirtual.set('ObjectFullName', null);\r\n rowVirtual.set('ObjectCode1c', null);\r\n rowVirtual.set('ObjectLivingComplex', null);\r\n rowVirtual.set('ObjectAddressPost', null);\r\n\r\n rowVirtual.set('AmountAdvance', createTypedField(\"0.00\", DotNetType.Decimal));\r\n rowVirtual.set('SumToPay', createTypedField(\"0.00\", DotNetType.Decimal));\r\n\r\n rowVirtual.state = CardRowState.Inserted;\r\n arArticleOhrListVirtual.rows.push(rowVirtual);\r\n }\r\n }\r\n }\r\n\r\n // Обновление сумм в статьях (если статья 1)\r\n public static UpdateArticleAmounts(card: Card) {\r\n var sections = [\"ArArticleIDPList\", \"ArArticleOHRList\"];\r\n for (let section of sections) {\r\n const arArticleIdpList = card.sections.tryGet(section);\r\n const arArticleIdpListVirtual = card.sections.tryGet(section + 'Virtual');\r\n const dciSect = card.sections.tryGet('DocumentCommonInfo');\r\n const aaSect = card.sections.tryGet('ArchiveAct');\r\n\r\n if (arArticleIdpList == null ||\r\n arArticleIdpListVirtual == null ||\r\n dciSect == null ||\r\n aaSect == null)\r\n continue;\r\n\r\n let arArticleIdpListRows = arArticleIdpList.rows.filter(x => x.state !== CardRowState.Deleted);\r\n let arArticleIdpListVirtualRows = arArticleIdpListVirtual.rows.filter(x => x.state !== CardRowState.Deleted);\r\n\r\n if (arArticleIdpListRows.length == 1 && arArticleIdpListVirtualRows.length == 1)\r\n {\r\n let articleIdpRow = arArticleIdpListRows[0];\r\n let articleIdpRowVirtual = arArticleIdpListVirtualRows[0];\r\n\r\n const amount = dciSect.fields.getField(\"Amount\");\r\n const amountVat = aaSect.fields.getField(\"VATAmount\");\r\n articleIdpRowVirtual.set(\"Amount\", amount!);\r\n articleIdpRowVirtual.set(\"AmountVAT\", amountVat!);\r\n \r\n // В статьях ОХР в реальную секцию данные копируются на сервере\r\n if (section != \"ArArticleOHRList\"){\r\n articleIdpRow.set(\"Amount\", amount!);\r\n articleIdpRow.set(\"AmountVAT\", amountVat!);\r\n }\r\n else{\r\n articleIdpRowVirtual.set(\"SumToPay\", amount != null ? amount : createTypedField(\"0.00\", DotNetType.Decimal));\r\n } \r\n } \r\n }\r\n }\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext, IFormViewModel } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType, createTypedField, Visibility, DbType } from 'tessa/platform';\r\nimport { Card, CardGetMethod, CardGetMode, CardRow, CardRowsListener, CardRowState, CardSection } from 'tessa/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { AutoCompleteEntryViewModel, AutoCompleteTableViewModel, AutoCompleteValueEventArgs, ButtonViewModel, CheckBoxViewModel, FileListViewModel, GridRowAction, GridRowEventArgs, GridRowViewModel, GridViewModel, TabControlViewModel } from 'tessa/ui/cards/controls';\r\nimport { openCard, showViewsDialog } from 'tessa/ui/uiHost';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { showConfirm, showError, showNotEmpty, tryGetFromInfo } from 'tessa/ui';\r\nimport { CardGetRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { reaction } from 'mobx';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { PkDepartmentHelper } from 'src/pkScripts/Helpers/PkDepartmentHelper';\r\nimport { ArHelper } from 'src/pkScripts/helpers/ArHelper';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { IValidationResultBuilder, ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { ApproversCheckingStatus, ArPoAApproversCacheHelper } from 'src/pkScripts/Helpers/ArPoAApproversCacheHelper';\r\nimport { userSession } from 'common/utility';\r\nimport { ECMRequestTypes } from 'src/comfortScripts/helpers/ECMRequestTypes';\r\nimport { CdStaticRoles } from 'src/cdScripts/Helpers/CdStaticRoles';\r\nimport { ArFileHelper } from 'src/pkScripts/Helpers/ArFileHelper';\r\nimport { RequestParameter, ViewParameterMetadata, isNullCriteriaOperator } from 'tessa/views/metadata';\r\nimport { RequestParameterBuilder } from 'tessa/views';\r\nimport { CdCommonHelper } from 'src/cdScripts/Helpers/CdCommonHelper';\r\nimport { PkClientHelper } from 'src/pkScripts/Helpers/PkClientHelper';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\n\r\nexport class ArPowerOfAttorneyUIExtension extends CardUIExtension {\r\n\r\n private disposer: Function | null = null;\r\n private _listener: CardRowsListener | null;\r\n private _approversCacheHelper: ArPoAApproversCacheHelper | null;\r\n private _isUserPoAAdmin: boolean | null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)) {\r\n return;\r\n }\r\n\r\n if (this._listener) {\r\n this._listener.stop();\r\n }\r\n\r\n context.model.card.info[\"IsUserPoAAdmin\"] = this._isUserPoAAdmin = await PkCommonHelper.CheckCurrentUserInRole(CdStaticRoles.PoAAdminRoleID) === true; // проверка на админа доверок в UI карточки для последующего использования, например, в тайлах, где почему-то не отрабатывает раньше отрисовки тайла\r\n\r\n // Работа с таблицами \"Полномочия доверенности\" и \"Определение сумм по видам документов\".\r\n await this.WorkWithCredentials(context, context.model.card);\r\n\r\n // Связка предприятие-подразделения-автор.\r\n CdUIHelper.GroupEnterpriseLogic(context);\r\n\r\n // Обработчик выбора организации\r\n await this.ArPowerOfAttorneyFieldChangedHandlers(context.model);\r\n\r\n // Валидация периода действия доверенности (не более 3-х лет).\r\n await this.PeriodLogic(context);\r\n\r\n // Обработка открытия виртуальной карточки ПартнерыКСК.\r\n await this.PartnerKckOpenCardHandler(context.model);\r\n \r\n // Обработка изменения формы доверенности\r\n await this.PoAFormChangedHandler(context.model.card, context.model);\r\n\r\n // Логика работы с доверенными лицами. Выбор из 3-х справочников pkUsers pkKCKPartners arExternal_individuals\r\n await this.ConfidantsDictionaryNameHandler(context.model.card, context.model);\r\n\r\n await ArUIHelper.DiadocButtonLogicWithPkDiadocInfo(context);\r\n\r\n const btnCreate = CdUIHelper.GetUIControl(context, \"FromCDButtonControl\");\r\n\r\n if (!btnCreate){\r\n return;\r\n }\r\n\r\n await this.changeButtonVisibilityForPowerOfAttorney(btnCreate, context.card);\r\n\r\n this.FilesFromDCUIInteractionLogic(context);\r\n\r\n await this.AddMachineReadableTypeIDChangedHandler(context.model);\r\n\r\n await this.AddTaxCodeUIHandler(context.model);\r\n\r\n await this.HideXmlAndZipByConditionsAsync(context);\r\n\r\n await this.SetMachineReadableVersionDropDownVisibilityAsync(context.model, this._isUserPoAAdmin, context.model.card.sections.tryGet('ArPowerOfAttorney')?.fields.tryGet('MachineReadableTypeID'));\r\n \r\n await this.PoAVersionChangedHandlerAsync(context);\r\n }\r\n \r\n /** Работа с таблицами \"Полномочия доверенности\" и \"Определение сумм по видам документов\". */\r\n private async WorkWithCredentials(context: ICardUIExtensionContext, card: Card) { \r\n const arCredentialListTable = context.model.controls.get('ArCredentialListTable') as GridViewModel;\r\n if (arCredentialListTable == null) {\r\n return;\r\n }\r\n \r\n // инициализация подписок для работы с подтаблицами\r\n this.CredentialSelectRowLogic(card, arCredentialListTable, context, this.disposer);\r\n\r\n // инициализация подписок на изменение таблицы полномочий\r\n await this.CredentialListChangesHandler(card, arCredentialListTable, context);\r\n } \r\n\r\n private async CredentialListChangesHandler(card: Card, arCredentialListTable: GridViewModel, context: ICardUIExtensionContext)\r\n {\r\n let arPowerOfAttorneySection = card.sections.tryGet('ArPowerOfAttorney');\r\n let arCredentialListPOASection = card.sections.tryGet('ArCredentialList');\r\n let arAdditionalApproversPOASection = card.sections.tryGet('ArAdditionalApprovers');\r\n let arCredentialsMachineReadableListSection = card.sections.tryGet('ArCredentialsMachineReadableList');\r\n\r\n this._approversCacheHelper = new ArPoAApproversCacheHelper();\r\n await this._approversCacheHelper.InitializeAsync(context, arCredentialListPOASection, arAdditionalApproversPOASection);\r\n\r\n if (!arCredentialListPOASection || !arAdditionalApproversPOASection || !arPowerOfAttorneySection || !arCredentialsMachineReadableListSection) return;\r\n\r\n arCredentialListTable.rowInvoked.add(async e => {\r\n if (e.action == GridRowAction.Opening) {\r\n let cardId = e.row.get(\"CredentialRefID\");\r\n await openCard({\r\n cardId: cardId,\r\n });\r\n e.cancel = true;\r\n return;\r\n } \r\n\r\n if (e.action == GridRowAction.Inserted){\r\n await this.CheckExclusivityAsync(arCredentialListPOASection!, e);\r\n await this.AddCredentialOnMachineReadableFreeFormat(e, arCredentialListPOASection!, arPowerOfAttorneySection!); \r\n } \r\n });\r\n\r\n arCredentialListTable.rowValidating.add(async e => {\r\n await this.CheckNewCredentialExclusivityAsync(arCredentialListPOASection!, e.row, e.validationResult);\r\n });\r\n\r\n // при добавлении\\удалении полномочия, расчитываем вице-президента и доп. согласующих\r\n arCredentialListPOASection.rows.collectionChanged.add(async e => {\r\n if (e.added) { \r\n e.added.forEach(async item => {\r\n item.fieldChanged.add(async e1 => {\r\n if (e1.fieldName === 'CredentialRefID' && e1.fieldValue !== null && e1.fieldValue !== undefined) {\r\n await this._approversCacheHelper?.AddAsync(e1.fieldValue);\r\n };\r\n\r\n await this.FillMachineReadableCredentialsAsync(context, arPowerOfAttorneySection, arCredentialListPOASection, arCredentialsMachineReadableListSection); \r\n });\r\n });\r\n }\r\n \r\n if (e.removed) {\r\n e.removed.forEach(async (row) => {\r\n if (arAdditionalApproversPOASection && arPowerOfAttorneySection) {\r\n await this.UpdateRelatedInfoOnCredentialsDeleted(row, context, arCredentialsMachineReadableListSection!, arPowerOfAttorneySection, arCredentialListPOASection);\r\n\r\n } \r\n });\r\n }\r\n });\r\n\r\n // Для уже имеющихся в момент открытия строк карточки\r\n arCredentialListPOASection.rows.forEach(row =>{\r\n row.stateChanged.add(async e =>{\r\n if (e.newState == CardRowState.Deleted) {\r\n await this.UpdateRelatedInfoOnCredentialsDeleted(e.row, context, arCredentialsMachineReadableListSection!, arPowerOfAttorneySection!, arCredentialListPOASection);\r\n }\r\n });\r\n });\r\n\r\n arAdditionalApproversPOASection.rows.collectionChanged.add(async e => {\r\n if (e.added \r\n && this._approversCacheHelper !== undefined \r\n && this._approversCacheHelper !== null \r\n && !this._approversCacheHelper.AddingInProgress()\r\n && this._approversCacheHelper.approversCheckingStatus === ApproversCheckingStatus.None) {\r\n this._approversCacheHelper.approversCheckingStatus = ApproversCheckingStatus.OnAddingChecking;\r\n for(let index = e.added.length -1; index >= 0; index--) {\r\n const row = e.added[index];\r\n if (this._approversCacheHelper?.ContainsApprover(row.get('UserID'))) {\r\n showError(`Пользователь ${row.get('UserName')} уже добавлен в список. Повторное добавление недопустимо.`);\r\n await ArHelper.RemoveRowFromCollectionSection(context.card.storeMode, arAdditionalApproversPOASection as CardSection, row);\r\n }\r\n };\r\n this._approversCacheHelper.approversCheckingStatus = ApproversCheckingStatus.None;\r\n }\r\n\r\n if (e.removed\r\n && this._approversCacheHelper !== undefined\r\n && this._approversCacheHelper !== null\r\n && this._approversCacheHelper.approversCheckingStatus === ApproversCheckingStatus.None) {\r\n this._approversCacheHelper.approversCheckingStatus = ApproversCheckingStatus.OnRemovingChecking;\r\n for (let index = e.removed.length -1; index >= 0; index--) {\r\n const row = e.removed[index];\r\n if (this._approversCacheHelper?.ContainsApprover(row.get('UserID'))) {\r\n showError(`Пользователь ${row.get('UserName')} добавлен в одном из полномочий доверенности. Нельзя удалить вручную.`);\r\n e.storage.add(row);\r\n } \r\n };\r\n this._approversCacheHelper.approversCheckingStatus = ApproversCheckingStatus.None;\r\n }\r\n })\r\n }\r\n private async UpdateRelatedInfoOnCredentialsDeleted(row: CardRow, context: ICardUIExtensionContext, arCredentialsMachineReadableListSection: CardSection, arPowerOfAttorneySection: CardSection, arCredentialListPOASection: CardSection | undefined) {\r\n await this._approversCacheHelper?.RemoveAsync(row.get('CredentialRefID'));\r\n await ArHelper.ClearCollectionSection(context.model.card.storeMode, arCredentialsMachineReadableListSection);\r\n await this.FillMachineReadableCredentialsAsync(context, arPowerOfAttorneySection, arCredentialListPOASection, arCredentialsMachineReadableListSection); \r\n }\r\n\r\n private async CheckNewCredentialExclusivityAsync(arCredentialListPOASection : CardSection, row: CardRow, validationResult: IValidationResultBuilder) { \r\n let otherRows = arCredentialListPOASection.rows.filter(x => x.state != CardRowState.Deleted && x.rowId != row.rowId && x.get('CredentialRefID') != null);\r\n\r\n return this.IsDuplicateConstraintPassed(row, otherRows, validationResult) \r\n && this.IsExclusiveConstraintPassed(row, otherRows, validationResult) \r\n && this.IsByKindConstraintPassed(row, otherRows, validationResult);\r\n }\r\n\r\n private IsDuplicateConstraintPassed(row: CardRow, otherRows: CardRow[], validationResult: IValidationResultBuilder) {\r\n let refID = row.get(\"CredentialRefID\");\r\n\r\n if (otherRows.some(x => x.get(\"CredentialRefID\") === refID))\r\n {\r\n validationResult.add(ValidationResultType.Error, \"Выбранное полномочие уже добавлено.\"); \r\n return false; \r\n }\r\n\r\n return true;\r\n }\r\n\r\n \r\n private IsExclusiveConstraintPassed(row: CardRow, otherRows: CardRow[], validationResult: IValidationResultBuilder) {\r\n let isExclusive = row.get(\"CredentialRefIsExclusive\");\r\n \r\n if (isExclusive == true && otherRows.length > 0)\r\n {\r\n validationResult.add(ValidationResultType.Error, \"Выбранное полномочие имеет ограничение. В доверенности не может быть других полномочий. Необходимо удалить все прочие полномочия из таблицы.\"); \r\n return false; \r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n private IsByKindConstraintPassed(row: CardRow, otherRows: CardRow[], validationResult: IValidationResultBuilder) {\r\n let kindIsExclusive = row.get(\"CredentialRefKindIsExclusive\");\r\n let kindID = row.get(\"CredentialRefKindID\");\r\n \r\n if (kindIsExclusive == true && otherRows.length > 0 && otherRows.some(r => !Guid.equals(r.get(\"CredentialRefKindID\"), kindID)))\r\n {\r\n validationResult.add(ValidationResultType.Error, \"Выбранные полномочия несовместимы по Виду полномочий. Если необходимо добавить данное полномочие, удалите предыдущее.\");\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private async CheckExclusivityAsync(arCredentialListPOASection : CardSection, gridRow: GridRowEventArgs) { \r\n let rows = arCredentialListPOASection.rows.filter(x => x.state != CardRowState.Deleted);\r\n if (rows.some(x => x.get(\"CredentialRefIsExclusive\") === true)) {\r\n showError(\"В карточке выбрано Полномочие с ограничением. Для добавления нового полномочия необходимо удалить предыдущее\");\r\n gridRow.cancel = true;\r\n }\r\n }\r\n\r\n private async FillMachineReadableCredentialsAsync(context: ICardUIExtensionContext,\r\n arPowerOfAttorneySection : CardSection | undefined,\r\n arCredentialListPOASection : CardSection | undefined,\r\n arCredentialsMachineReadableListSection: CardSection | undefined) {\r\n arCredentialListPOASection?.rows?.filter(r => r.state != CardRowState.Deleted).forEach(async r => {\r\n let credentialRefIdField = r.tryGetField('CredentialRefID');\r\n if (credentialRefIdField == null) return;\r\n if (credentialRefIdField?.$value == null) return;\r\n \r\n // получаем карточки полномочий, чтобы собрать доп. согласующих и вице-президента\r\n const getRequest = new CardGetRequest();\r\n getRequest.cardId = credentialRefIdField?.$value;\r\n getRequest.getMode = CardGetMode.ReadOnly;\r\n getRequest.method = CardGetMethod.Default;\r\n\r\n const getResponse = await CardService.instance.get(getRequest);\r\n if (!getResponse.validationResult.isSuccessful) {\r\n context.validationResult.add(getResponse.validationResult);\r\n return;\r\n }\r\n\r\n const arCredentialSection = getResponse.card.sections.tryGet('ArCredential');\r\n const mrcSection = getResponse.card.sections.tryGet('ArMRCToCredentials');\r\n \r\n // добавляем МЧД из полномочия в Доп. согласующие доверенности\r\n if (!!arCredentialSection && !!mrcSection) { \r\n\r\n let mrcTypeID = arCredentialSection.fields.get(\"MachineReadableCredentialTypeID\");\r\n let mrcTypeName = arCredentialSection.fields.get(\"MachineReadableCredentialTypeName\");\r\n\r\n if (arPowerOfAttorneySection && mrcTypeID) {\r\n arPowerOfAttorneySection!.fields.set(\"MachineReadableTypeID\", createTypedField(mrcTypeID, DotNetType.Int32));\r\n arPowerOfAttorneySection!.fields.set(\"MachineReadableTypeName\", createTypedField(mrcTypeName, DotNetType.String));\r\n } \r\n \r\n mrcSection.rows.forEach(row => {\r\n\r\n let mrcID = row.tryGetField(\"MachineReadableCredentialID\");\r\n let mrcCode = row.tryGetField(\"MachineReadableCredentialCode\");\r\n let mrcName = row.tryGetField(\"MachineReadableCredentialName\");\r\n\r\n if (!mrcID) {\r\n return;\r\n }\r\n\r\n if (arCredentialsMachineReadableListSection) {\r\n\r\n let existedIDs : string[] = arCredentialsMachineReadableListSection.rows?.filter(row => row.state !== CardRowState.Deleted).map(row => row.tryGetField(\"CredentialMachineReadableID\")!.$value as string);\r\n\r\n if (!!existedIDs && existedIDs.includes(mrcID?.$value)) {\r\n return;\r\n }\r\n \r\n let newRow = new CardRow(); \r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"CredentialMachineReadableID\", createTypedField(mrcID.$value, DotNetType.Guid));\r\n newRow.set(\"CredentialMachineReadableCode\", createTypedField(mrcCode?.$value, DotNetType.String));\r\n newRow.set(\"CredentialMachineReadableName\", createTypedField(mrcName?.$value, DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n arCredentialsMachineReadableListSection!.rows.push(newRow);\r\n }\r\n });\r\n }\r\n \r\n });\r\n }\r\n\r\n /** Работа с таблицами \"Полномочия доверенности\" и \"Определение сумм по видам документов\". */\r\n private CredentialSelectRowLogic(card: Card, masterControl: GridViewModel, context: ICardUIExtensionContext, disposer: Function | null) {\r\n let selectedItemRowId;\r\n const attorneyLimitsTabControl = context.model.controls.get('AttorneyLimits') as TabControlViewModel; \r\n if (!attorneyLimitsTabControl) return;\r\n const documentAmountsLimitsTab = attorneyLimitsTabControl.tabs.find(t => t.name == \"DocumentAmountsLimits\");\r\n const partnersLimitsTab = attorneyLimitsTabControl.tabs.find(t => t.name == \"PartnersLimits\");\r\n const arAmountByDocKindsTable = documentAmountsLimitsTab?.cardModel.controls.get('ArAmountByDocKindsTable') as GridViewModel;\r\n const partnerTable = partnersLimitsTab?.cardModel.controls.get('KCKPartnersTable') as GridViewModel;\r\n \r\n if(!partnerTable || !arAmountByDocKindsTable || !documentAmountsLimitsTab || !partnersLimitsTab) return;\r\n \r\n // копируем вкладки, чтобы их динамически добавлять-удалять, потому что visibility не работает в 3.5\r\n this._copyAttorneyLimitsTabs = attorneyLimitsTabControl.tabs.slice();\r\n if (disposer == null) {\r\n disposer = reaction(() => masterControl.selectedRows, () => {\r\n \r\n selectedItemRowId = masterControl.selectedRow?.rowId;\r\n if (masterControl.selectedRows.length > 0) { \r\n let selectedRow = masterControl.selectedRows[0];\r\n this.AttorneyLimitsVisibility(selectedRow, attorneyLimitsTabControl);\r\n this.InitializeTableByParentRowID(card,'ArAmountByDocKindsVirtual','ArAmountsByDocKinds',selectedItemRowId);\r\n this.InitializeTableByParentRowID(card,'ArKCKPartnerVirtual','ArKCKPartnersList',selectedItemRowId);\r\n }\r\n else { \r\n\r\n // Если значение не выделено, то очищаем таблицы\r\n if (card.sections.tryGet(\"ArAmountByDocKindsVirtual\")?.rows?.length ?? 0 > 0) {\r\n card.sections.tryGet(\"ArAmountByDocKindsVirtual\")?.rows?.clear();\r\n }\r\n if (card.sections.tryGet(\"ArKCKPartnerVirtual\")?.rows?.length ?? 0 > 0) {\r\n card.sections.tryGet(\"ArKCKPartnerVirtual\")?.rows?.clear();\r\n }\r\n this.AttorneyLimitsVisibility(null, attorneyLimitsTabControl);\r\n }\r\n });\r\n }\r\n\r\n // При добавлении в виртуальную добавляем и в реальную с подпиской на изменение полей \r\n this.VirtualTableChangeHandler(partnerTable, 'ArKCKPartnersList', context, card, masterControl, 'PartnerID');\r\n this.VirtualTableChangeHandler(arAmountByDocKindsTable, 'ArAmountsByDocKinds', context, card, masterControl, 'DocKindDocumentKind'); \r\n }\r\n\r\n private async InitializeTableByParentRowID(card: Card, virtualTableName: string, parentTableName: string, rowID: guid) {\r\n this.ClearTable(card, virtualTableName);\r\n let rows = card.sections.tryGet(parentTableName)?.rows.filter(r => r.state !== CardRowState.Deleted);\r\n if(rows == null) {\r\n return;\r\n }\r\n \r\n rows.forEach(item => {\r\n if (item.get('CredentialRowID') == rowID) {\r\n let clone = item.clone();\r\n let row = card.sections.tryGet(virtualTableName)?.rows.add(clone);\r\n row!.fieldChanged.add(async(f) => {\r\n if (f.fieldName != \".state\")\r\n item.set(f.fieldName, f.fieldValue);\r\n })\r\n }\r\n });\r\n }\r\n \r\n private async VirtualTableChangeHandler(table: GridViewModel, realSectionName: string, context: ICardUIExtensionContext, card: Card, masterControl: GridViewModel, fieldName: string) {\r\n table.rowEditorClosed.add(async(e) => { \r\n if(e.row.getField(fieldName) != null && e.action == GridRowAction.Inserted) {\r\n let rows = context.card.tryGetSections()?.tryGet(realSectionName)?.rows;\r\n if(rows == null) return;\r\n if(!rows.some(g => g.rowId == e.row.rowId)) {\r\n let cardRow = e.row.clone();\r\n cardRow.state = CardRowState.Inserted;\r\n rows.add(cardRow); \r\n e.row!.fieldChanged.add(async(f) => {\r\n if (f.fieldName != \"CredentialRowID\" && f.fieldName != \".state\") {\r\n let cRow = context.card.tryGetSections()?.tryGet(realSectionName)?.rows?.find(r => r.rowId == e.row.rowId);\r\n if (cRow)\r\n cRow.set(f.fieldName, f.fieldValue);\r\n }\r\n \r\n }); \r\n } \r\n }\r\n })\r\n \r\n table.rowInvoked.add(async(e) => {\r\n let selectedItemRowId = masterControl.selectedRow?.rowId;\r\n if (e.action == GridRowAction.Deleting) {\r\n await this.RemoveFromGeneralTable(card, e.row.rowId, realSectionName);\r\n }\r\n\r\n if (e.action == GridRowAction.Inserted) {\r\n e.row.set(\"CredentialRowID\", selectedItemRowId, DotNetType.Guid);\r\n }\r\n })\r\n }\r\n \r\n private async RemoveFromGeneralTable(card: Card, rowID: guid, realTableName: string) {\r\n let section = card.sections.tryGet(realTableName);\r\n if (!section) return;\r\n let row = section!.rows!.find(x => Guid.equals(x.rowId, rowID)); \r\n if (row) { \r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n if (row.state !== CardRowState.Deleted) {\r\n section.rows.remove(row); \r\n }\r\n }\r\n }\r\n\r\n /** Логика работы с доверенными лицами */\r\n private async ConfidantsDictionaryNameHandler(card: Card, model: ICardModel) {\r\n const arConfidants = card.sections.tryGet('ArConfidants');\r\n if (arConfidants == null) return;\r\n\r\n const arPowerOfAttorney = card.sections.tryGet('ArPowerOfAttorney');\r\n if (arPowerOfAttorney == null) return;\r\n\r\n let confidantListControl = model.controls.get('ConfidantListControl') as AutoCompleteTableViewModel;\r\n confidantListControl.valueSet.add(async (e) => {\r\n if (confidantListControl.items.length >= 2) {\r\n\r\n let multipleConfidantsAreAllowed : string = this.CheckMultipleConfidantsAreAllowed(arPowerOfAttorney);\r\n\r\n // Ограничение на одно доверенное лицо для ненотариальных доверенностей\r\n if (multipleConfidantsAreAllowed === 'none') {\r\n arConfidants.rows.splice(arConfidants.rows.length - 1, 1);\r\n showError('Доверенным лицом может быть указано только одно физическое или юридическое лицо.');\r\n }\r\n else if (await this.CheckMultipleLegalConfidants(multipleConfidantsAreAllowed, arConfidants))\r\n {\r\n arConfidants.rows.splice(arConfidants.rows.length - 1, 1);\r\n showError('Только одно юридическое лицо может быть указано доверенным лицом.');\r\n }\r\n else {\r\n let allUsedDictionaries = arConfidants.rows.filter(row => row.state !== CardRowState.Deleted).map(row => row.tryGetField('UserDictionaryName')?.$value);\r\n let uniqueDictionaries = [...new Set(allUsedDictionaries)];\r\n if (uniqueDictionaries.length > 1) {\r\n arConfidants.rows.splice(arConfidants.rows.length - 1, 1);\r\n showError('Доверенными лицами могут быть указаны либо только физические лица, либо только юридические.');\r\n }\r\n }\r\n }\r\n let dictionaryName = e.item.columnValues[3];\r\n switch (dictionaryName) {\r\n case 'KCKPartners':\r\n arPowerOfAttorney.fields.set('isKckPartner', createTypedField(true, DotNetType.Boolean));\r\n break;\r\n case 'PKUsers':\r\n arPowerOfAttorney.fields.set('isUsers', createTypedField(true, DotNetType.Boolean));\r\n break;\r\n case 'External_Individuals':\r\n arPowerOfAttorney.fields.set('isExternalIndividuals', createTypedField(true, DotNetType.Boolean));\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n confidantListControl.valueDeleted.add( () => {\r\n if (confidantListControl.items.length === 0) {\r\n this.ResetViewsForConfidants(arPowerOfAttorney);\r\n }\r\n });\r\n\r\n // на случай, когда доверенные чистятся из внешнего источника (например, при смене формы)\r\n arConfidants.rows.collectionChanged.add(() => {\r\n if (arConfidants.rows.filter(row => row.state !== CardRowState.Deleted).length === 0) {\r\n this.ResetViewsForConfidants(arPowerOfAttorney);\r\n }\r\n });\r\n }\r\n\r\n private ResetViewsForConfidants(poaSection: CardSection) {\r\n poaSection.fields.set('isKckPartner', null);\r\n poaSection.fields.set('isUsers', null);\r\n poaSection.fields.set('isExternalIndividuals', null);\r\n }\r\n\r\n\r\n\r\n /** Валидация периода действия доверенности (не более 3-х лет). */\r\n private async PeriodLogic(context: ICardUIExtensionContext) {\r\n let card = context.model.card;\r\n const archiveAct = card.sections.tryGet('ArchiveAct');\r\n if (archiveAct == null) return;\r\n \r\n archiveAct.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"PeriodFrom\" || e.fieldName === \"PeriodTo\") {\r\n if (e.fieldValue != null) {\r\n if (archiveAct.fields.tryGet('PeriodFrom') == null) {\r\n return;\r\n }\r\n\r\n if (e.fieldName === \"PeriodFrom\") {\r\n await this.ShowPeriodFromWarningMessageByConditionASync(card);\r\n let periodFrom = new Date(e.fieldValue);\r\n\r\n if (e.fieldValue != null && archiveAct.fields.get('PeriodTo') == null) {\r\n periodFrom.setDate(periodFrom.getDate() + 364);\r\n archiveAct.fields.set('PeriodTo', this.ConvertDateToString(periodFrom), DotNetType.DateTime);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n /** Обработчик партнера кск.*/\r\n private async ArPowerOfAttorneyFieldChangedHandlers(model: ICardModel) { \r\n let vatRateSection = model.controls.get('VATRate');\r\n const arPowerOfAttorney = model.card.sections.tryGet('ArPowerOfAttorney');\r\n if (arPowerOfAttorney == null) return;\r\n\r\n if (vatRateSection)\r\n {\r\n if (arPowerOfAttorney.fields.tryGet('PowerOfAttorneyFormID') == 0)\r\n {\r\n vatRateSection.isReadOnly = false;\r\n }\r\n else\r\n {\r\n vatRateSection.isReadOnly = true;\r\n }\r\n }\r\n \r\n arPowerOfAttorney.fields.fieldChanged.add( async e => {\r\n if (e.fieldName === \"PrincipalOrganizationExternalID\") {\r\n await this.PrincipalOrganization(model.card, e.fieldValue);\r\n }\r\n\r\n // При смене ведущей доверенности очищается таблица полномочий\r\n if (e.fieldName == \"LeadingDocumentID\")\r\n {\r\n let arCredentialList = model.card.sections.get(\"ArCredentialList\");\r\n let arAmountsByDocKinds = model.card.sections.get(\"ArAmountsByDocKinds\");\r\n let arKCKPartnersList = model.card.sections.get(\"ArKCKPartnersList\");\r\n if (arCredentialList)\r\n ArHelper.ClearCollectionSection(model.card.storeMode, arCredentialList);\r\n if (arAmountsByDocKinds)\r\n ArHelper.ClearCollectionSection(model.card.storeMode, arAmountsByDocKinds);\r\n if (arKCKPartnersList)\r\n ArHelper.ClearCollectionSection(model.card.storeMode, arKCKPartnersList);\r\n }\r\n\r\n if (e.fieldName == \"PowerOfAttorneyFormID\" && e.fieldValue != null && vatRateSection)\r\n {\r\n if (e.fieldValue == 0)\r\n {\r\n vatRateSection.isReadOnly = false;\r\n }\r\n else\r\n {\r\n vatRateSection.isReadOnly = true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private async PrincipalOrganization(card:Card, value: number) {\r\n let archiveActSection = card.sections.tryGet(\"ArchiveAct\");\r\n let arPowerOfAttorneySection = card.sections.tryGet(\"ArPowerOfAttorney\");\r\n if (arPowerOfAttorneySection) {\r\n arPowerOfAttorneySection.fields.set(\"LeadingDocumentID\", null);\r\n arPowerOfAttorneySection.fields.set(\"LeadingDocumentNumber\", null);\r\n arPowerOfAttorneySection.fields.set(\"LeadingDocumentFullNumber\", null);\r\n arPowerOfAttorneySection.fields.set(\"LeadingDocumentRegNumber\", null);\r\n arPowerOfAttorneySection.fields.set(\"LeadingDocumentRegDate\", null);\r\n }\r\n\r\n if (archiveActSection) {\r\n if (value == null)\r\n {\r\n archiveActSection.fields.set(\"SignerID\", null);\r\n archiveActSection.fields.set(\"SignerName\", null);\r\n }\r\n else\r\n {\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetDepartmentRolesRoleUsersID; \r\n let depRoles = [PkDepartmentHelper.GeneralDirector, PkDepartmentHelper.HeadOfDepartment, PkDepartmentHelper.DivisionVicePresident].map(x => createTypedField(x, DotNetType.String));\r\n request.info[\"Roles\"] = depRoles;\r\n request.info[\"ExtID\"] = createTypedField(value, DotNetType.Int64);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n } \r\n \r\n const roles = response.info.RoleUsers;\r\n if (roles != null && roles.length > 0)\r\n {\r\n let signer = roles.find(x => x.RoleID.$value == PkDepartmentHelper.GeneralDirector && x.UserID != null);\r\n if (signer == null)\r\n {\r\n signer = roles.find(x => x.RoleID.$value == PkDepartmentHelper.HeadOfDepartment && x.UserID != null);\r\n }\r\n\r\n if (signer == null)\r\n {\r\n signer = roles.find(x => x.RoleID.$value == PkDepartmentHelper.DivisionVicePresident && x.UserID != null);\r\n }\r\n\r\n if (signer != null) {\r\n archiveActSection.fields.set(\"SignerID\", signer.UserID.$value, DotNetType.Guid);\r\n archiveActSection.fields.set(\"SignerName\", signer.UserName.$value, DotNetType.String);\r\n } \r\n }\r\n \r\n else {\r\n archiveActSection.fields.set(\"SignerID\", null);\r\n archiveActSection.fields.set(\"SignerName\", null);\r\n } \r\n }\r\n } \r\n }\r\n\r\n private ConvertDateToString(currentDate: Date) {\r\n let result = currentDate.getFullYear() + \"-\" +\r\n this.ConvertTwoSymbols(currentDate.getMonth() + 1) + \"-\" +\r\n this.ConvertTwoSymbols(currentDate.getDate()) + \"T\" +\r\n currentDate.toLocaleTimeString() + \"Z\";\r\n return result;\r\n }\r\n\r\n private ConvertTwoSymbols(value) {\r\n if (value.toString().length === 1) {\r\n value = \"0\" + value;\r\n }\r\n return value;\r\n }\r\n\r\n /** Обработка открытия виртуальной карточки ПартнерыКСК. */\r\n private async PartnerKckOpenCardHandler(model: ICardModel) {\r\n const arConfidants = model.card.sections.tryGet('ArConfidants');\r\n if (arConfidants == null) return;\r\n\r\n let confidantListControl = model.controls.get('ConfidantListControl') as AutoCompleteTableViewModel;\r\n confidantListControl.openRefAction = async (i) => {\r\n let arPowerOfAttorney = model.card.sections.tryGet('ArPowerOfAttorney');\r\n if (arPowerOfAttorney!.fields.get(\"isUsers\")) {\r\n const info = {};\r\n await openCard({\r\n cardId: confidantListControl.items![i].reference,\r\n info: info\r\n });\r\n }\r\n else {\r\n let partnerExternalID = confidantListControl.items![i].columnValues[2]; //\"UserExternalID\";\r\n if (partnerExternalID) {\r\n const infoDict: IStorage = {\r\n 'ExternalID': createTypedField(partnerExternalID, DotNetType.Int64)\r\n };\r\n await openCard({\r\n cardId: Guid.newGuid(),\r\n cardTypeId: CdCardTypes.PkKCKPartnerTypeID,\r\n info: infoDict\r\n });\r\n } else {\r\n const info = {};\r\n await openCard({\r\n cardId: confidantListControl.items![i].reference,\r\n info: info\r\n });\r\n }\r\n }\r\n \r\n };\r\n\r\n const arPowerOfAttorney = model.card.sections.tryGet('ArPowerOfAttorney');\r\n if (arPowerOfAttorney == null) return;\r\n\r\n let partnerKckControl = model.controls.get('PartnerKckControl') as AutoCompleteEntryViewModel;\r\n partnerKckControl.openRefAction = async () => {\r\n let partnerExternalID = arPowerOfAttorney.fields.get(\"PrincipalOrganizationExternalID\");\r\n if (partnerExternalID) {\r\n const infoDict: IStorage = {\r\n 'ExternalID': createTypedField(partnerExternalID, DotNetType.Int64)\r\n };\r\n await openCard({\r\n cardId: Guid.newGuid(),\r\n cardTypeId: CdCardTypes.PkKCKPartnerTypeID,\r\n info: infoDict\r\n });\r\n }\r\n };\r\n }\r\n\r\n private PoAFormChangedHandler(card: Card, model: ICardModel) {\r\n const isWithoutSignatureCheckBox = model.controls.get('LoadedWIthoutSignatureExample') as CheckBoxViewModel;\r\n this.ChangeWithoutSignatureCheckBoxByConditionsAsync(card, isWithoutSignatureCheckBox);\r\n\r\n let refsControl = model.controls.get('PoAFormControl') as AutoCompleteEntryViewModel;\r\n\r\n refsControl.valueSet.add((e) => {\r\n this.ClearConfidantsByCondition(card, e, 'form');\r\n \r\n this.ChangeWithoutSignatureCheckBoxByConditionsAsync(card, isWithoutSignatureCheckBox);\r\n });\r\n\r\n refsControl.valueDeleted.add((e) => {\r\n this.ClearConfidantsByCondition(card, e, 'form');\r\n \r\n this.ChangeWithoutSignatureCheckBoxByConditionsAsync(card, isWithoutSignatureCheckBox);\r\n });\r\n\r\n refsControl.keyDown.add((e) => {\r\n if (refsControl.item?.displayText === 'Нотариальная') {\r\n const confidantsSection = card.sections.tryGet('ArConfidants');\r\n \r\n if (confidantsSection === undefined || confidantsSection.rows.filter(row => row.state !== CardRowState.Deleted).length < 2) {\r\n return;\r\n }\r\n\r\n showError('Только нотариальные доверенности могут иметь больше одного доверенного лица! Пожалуйста, удалите лишние доверенные лица перед сменой формы.');\r\n e.event.preventDefault();\r\n e.event.stopPropagation();\r\n }\r\n \r\n })\r\n }\r\n\r\n ChangeWithoutSignatureCheckBoxByConditionsAsync(card: Card, isWithoutSignatureCheckBox: CheckBoxViewModel) {\r\n if (!isWithoutSignatureCheckBox) {\r\n return;\r\n }\r\n\r\n const poaSection = card.sections.tryGet('ArPowerOfAttorney')\r\n if (!poaSection) {\r\n return;\r\n }\r\n\r\n const formId = poaSection.fields.get('PowerOfAttorneyFormID');\r\n\r\n if (!formId || formId === 0) {\r\n isWithoutSignatureCheckBox.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n\r\n const pkdcSection = card.sections.tryGet('PkDocumentCommonInfo')\r\n if (!pkdcSection) {\r\n return;\r\n }\r\n\r\n const stateId = pkdcSection.fields.get('StateID');\r\n\r\n const prohibitedStatesArray = [CdDocStates.CurrentVersion.id, CdDocStates.Recalled.id, CdDocStates.Expired.id];\r\n\r\n if (stateId === null \r\n || stateId === undefined\r\n || prohibitedStatesArray.includes(stateId)) {\r\n isWithoutSignatureCheckBox.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n\r\n isWithoutSignatureCheckBox.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n private ClearConfidantsByCondition(card: Card, e: AutoCompleteValueEventArgs, cleaningCase: string): void {\r\n const clearingMessage : string = 'Выбранная форма или МЧД версия доверенности не может иметь больше одного доверенного лица! Список доверенных лиц очищен.';\r\n\r\n let stringToMatch : string;\r\n\r\n switch (cleaningCase) {\r\n case 'form':\r\n stringToMatch = 'Нотариальная';\r\n break;\r\n case 'version':\r\n stringToMatch = '003';\r\n break;\r\n default:\r\n throw new Error('Отсутствует валидный параметр для функции проверки очистки списка доверенных лиц!');\r\n }\r\n\r\n if (e.item.displayText !== stringToMatch) {\r\n const confidantsSection = card.sections.tryGet('ArConfidants');\r\n \r\n if (confidantsSection === undefined || confidantsSection.rows.filter(row => row.state !== CardRowState.Deleted).length < 2) {\r\n return;\r\n }\r\n\r\n ArHelper.ClearCollectionSection(card.storeMode, confidantsSection);\r\n showError(clearingMessage);\r\n return;\r\n }\r\n }\r\n\r\n private _copyAttorneyLimitsTabs: IFormViewModel[];\r\n\r\n private AttorneyLimitsVisibility(selectedRow: GridRowViewModel | null, tabControl: TabControlViewModel) { \r\n if (selectedRow == null) {\r\n tabControl.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n let row = selectedRow!.row; \r\n let amountsTabVisible : boolean = row.tryGetField(\"CredentialRefIsAmountLimited\")?.$value; \r\n let partnersTabVisible : boolean = row.tryGetField(\"CredentialRefIsPartnersLimited\")?.$value; \r\n tabControl.controlVisibility = (partnersTabVisible || amountsTabVisible) ? Visibility.Visible : Visibility.Collapsed;\r\n let tabs = tabControl.tabs as IFormViewModel[]; \r\n \r\n // костыль, нужно сменить вкладку, чтобы итоговая выбранная вкладка была другой, иначе видимость вкладок обновляется только после клика на них\r\n if (tabControl.selectedTab == this._copyAttorneyLimitsTabs[1])\r\n tabControl.selectedTab = this._copyAttorneyLimitsTabs[0];\r\n if (tabControl.selectedTab == this._copyAttorneyLimitsTabs[0])\r\n tabControl.selectedTab = this._copyAttorneyLimitsTabs[1]; \r\n\r\n tabs.splice(0,2); \r\n if (amountsTabVisible) \r\n tabs.push(this._copyAttorneyLimitsTabs[0]);\r\n if (partnersTabVisible) \r\n tabs.push(this._copyAttorneyLimitsTabs[1]); \r\n\r\n let tabsLength = tabControl.tabs?.length;\r\n if (tabsLength > 0) {\r\n if (amountsTabVisible) {\r\n console.debug(tabControl.selectedTab?.tabCaption);\r\n tabControl.selectedTab = this._copyAttorneyLimitsTabs[0];\r\n } \r\n \r\n if (partnersTabVisible) {\r\n console.debug(tabControl.selectedTab?.tabCaption);\r\n tabControl.selectedTab = this._copyAttorneyLimitsTabs[1]; \r\n }\r\n \r\n tabControl.notifyUpdateValidation(); \r\n } \r\n }\r\n \r\n private async ClearTable(card: Card, virtualTableName : string) {\r\n let rows = card.sections.tryGet(virtualTableName)!.rows; \r\n if(rows == null) {return;} \r\n rows.clear(); \r\n }\r\n\r\n \r\n\r\n private async changeButtonVisibilityForPowerOfAttorney(button : ButtonViewModel, card : Card) {\r\n // Всегда недоступна в исторических\r\n let typeSection;\r\n let typeId;\r\n if ( (typeSection = card.sections.tryGet(\"ArPowerOfAttorney\")) != null \r\n && (typeId = typeSection.fields.tryGet(\"PowerOfAttorneyTypeID\")) != null\r\n && typeId == 2)\r\n {\r\n button.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n // Администратор доверенностей видит кнопку всегда\r\n const request = new CardRequest();\r\n request.requestType = ECMRequestTypes.PkIsUserBelongsToRole;\r\n request.info['UserID'] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info['RoleID'] = createTypedField(CdStaticRoles.PoAAdminRoleID, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.isSuccessful && response.info.IsUserBelongsToRole.$value)\r\n {\r\n button.controlVisibility = Visibility.Visible;\r\n return;\r\n }\r\n\r\n // Если состояние определено и не \"На доработке\" или \"Проект\"\r\n let stateSection;\r\n let stateId: number | null;\r\n let commonInfoSection;\r\n let authorId;\r\n if ( (stateSection = card.sections.tryGet(\"PkDocumentCommonInfo\")) != null \r\n && (stateId = stateSection.fields.tryGet(\"StateID\")) != null\r\n && (stateId != CdDocStates.Rework.id && stateId != CdDocStates.Project.id))\r\n {\r\n button.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n else if ((commonInfoSection = card.sections.tryGet(\"DocumentCommonInfo\")) != null\r\n && (authorId = commonInfoSection.fields.tryGet(\"AuthorID\")) != null\r\n && Guid.equals(userSession.UserID, authorId))\r\n {\r\n button.controlVisibility = Visibility.Visible;\r\n return;\r\n }\r\n\r\n button.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n private FilesFromDCUIInteractionLogic(context: ICardUIExtensionContext) {\r\n context.model.fileContainer.containerFileChanged.add(async (e) => \r\n {\r\n if (e.added != null && !ArFileHelper.IsFsButtonCanExecute(context.card)) \r\n {\r\n showError(\"Запрещено добавлять файлы вручную! Если нужно добавить файл в нотариальной доверенности перед отправкой на согласование, пожалуйста, обновите карточку (F5) и добавьте файл перед отправкой на согласование.\");\r\n await e.fileContainer.removeFile(e.added, true);\r\n e.fileContainer.source.notifyRemoved(e.added);\r\n }\r\n });\r\n }\r\n\r\n private async AddMachineReadableTypeIDChangedHandler(model: ICardModel) {\r\n const arPowerOfAttorneySection = model.card.sections.tryGet('ArPowerOfAttorney');\r\n if (arPowerOfAttorneySection == null) return;\r\n\r\n let mrTypeId: number | null = arPowerOfAttorneySection.fields.tryGet(\"MachineReadableTypeID\");\r\n this.SetMachineReadableFreeFormatCheckBoxVisibility(model, mrTypeId);\r\n\r\n arPowerOfAttorneySection.fields.fieldChanged.add(async (e) => {\r\n if (e.fieldName == \"MachineReadableTypeID\") {\r\n this.SetMachineReadableFreeFormatCheckBoxVisibility(model, e.fieldValue);\r\n arPowerOfAttorneySection!.fields.set(\"MachineReadableFreeFormat\", createTypedField(null, DotNetType.Boolean));\r\n await this.ShowPeriodFromWarningMessageByConditionASync(model.card);\r\n\r\n if (!e.fieldValue) {\r\n arPowerOfAttorneySection!.fields.set(\"MachineReadableVersionID\", null);\r\n arPowerOfAttorneySection!.fields.set(\"MachineReadableFreeFormat\", null); \r\n }\r\n\r\n await this.SetMachineReadableVersionDropDownVisibilityAsync(model, this._isUserPoAAdmin!, e.fieldValue)\r\n }\r\n });\r\n }\r\n\r\n\r\n private SetMachineReadableFreeFormatCheckBoxVisibility(model: ICardModel, mrTypeId: number | null) {\r\n let mrFreeFormatControlModel = model.controls.get(\"MachineReadableFreeFormatCheckBox\") as CheckBoxViewModel;\r\n\r\n if (!mrFreeFormatControlModel) {\r\n return;\r\n }\r\n\r\n // 1 - B2B, 0 - B2G\r\n mrFreeFormatControlModel.controlVisibility = !!mrTypeId && isFinite(mrTypeId) && mrTypeId === 1 ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n\r\n private async AddCredentialOnMachineReadableFreeFormat(e: GridRowEventArgs, arCredentialListPOASection: CardSection, arPoaSection: CardSection) {\r\n\r\n if (e.cancel) {\r\n return;\r\n }\r\n\r\n const mrFreeFormat = arPoaSection.fields.get(\"MachineReadableFreeFormat\");\r\n if (!mrFreeFormat)\r\n {\r\n return;\r\n }\r\n\r\n\r\n let refSection = \"ArCredential\";\r\n let nameParamList : RequestParameter[] = [];\r\n\r\n // представление выводим с параметром типа полномочия МЧД, равным пустому значению\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = 'MachineReadableCredentialType';\r\n parameterMetadata.caption = 'Тип полномочия МЧД';\r\n parameterMetadata.hidden = true;\r\n parameterMetadata.dataType = DbType.Int16;\r\n parameterMetadata.multiple = false;\r\n\r\n nameParamList = [new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(isNullCriteriaOperator())\r\n .asRequestParameter()];\r\n\r\n await showViewsDialog(\r\n refSection, \r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n let selectedItem = value;\r\n\r\n if (selectedItem == null\r\n || !selectedItem.selectedRow) {\r\n e.cancel = true;\r\n return;\r\n }\r\n \r\n let selectedRow = selectedItem.selectedRow;\r\n if (selectedRow == null) {\r\n e.cancel = true;\r\n return;\r\n }\r\n\r\n const keysToUpdate:ReadonlyMap = new Map([\r\n [\"CredentialRefID\", DotNetType.Guid],\r\n [\"CredentialRefName\", DotNetType.String],\r\n [\"CredentialRefIsAmountLimited\", DotNetType.Boolean],\r\n [\"CredentialRefCanSign\", DotNetType.Boolean],\r\n [\"CredentialRefCredentialsText\", DotNetType.String],\r\n [\"CredentialRefIsPartnersLimited\", DotNetType.Boolean],\r\n [\"CredentialRefIsExclusive\", DotNetType.Boolean],\r\n [\"CredentialRefKindIsExclusive\", DotNetType.Boolean],\r\n [\"CredentialRefKindID\", DotNetType.Guid],\r\n [\"CredentialRefKindName\", DotNetType.String]\r\n ]);\r\n\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n\r\n\r\n selectedRow.forEach((value, key) => {\r\n if (!key.startsWith(\"Authority\")) {\r\n return;\r\n }\r\n\r\n const typedKeyToUpdate = GetMatchKeyByParentKey(key, keysToUpdate);\r\n if (!!typedKeyToUpdate) {\r\n CdCommonHelper.SetValueToRowField(row, typedKeyToUpdate[0], value, typedKeyToUpdate[1]);\r\n }\r\n });\r\n \r\n e.cancel = true;\r\n\r\n const validationResult = new ValidationResultBuilder();\r\n await this.CheckNewCredentialExclusivityAsync(arCredentialListPOASection!, row, validationResult);\r\n if (!validationResult.isSuccessful) {\r\n await showNotEmpty(validationResult.build());\r\n return;\r\n }\r\n\r\n row.state = CardRowState.Inserted;\r\n arCredentialListPOASection.rows.push(row);\r\n \r\n\r\n function GetMatchKeyByParentKey(parentKey : string, childrenKeysCollection : ReadonlyMap) : [string, DotNetType] | undefined\r\n {\r\n const modifiedKey = parentKey.replace(\"Authority\", \"CredentialRef\");\r\n\r\n if (childrenKeysCollection.has(modifiedKey)) {\r\n return [modifiedKey, childrenKeysCollection.get(modifiedKey)!];\r\n }\r\n\r\n return undefined;\r\n }\r\n }, \r\n nameParamList\r\n );\r\n }\r\n\r\n \r\n private async AddTaxCodeUIHandler(model: ICardModel) {\r\n const arPowerOfAttorneySection = model.card.sections.tryGet('ArPowerOfAttorney');\r\n if (arPowerOfAttorneySection == null) return;\r\n\r\n let mrTypeId: number | null = arPowerOfAttorneySection.fields.tryGet(\"MachineReadableTypeID\");\r\n this.SetFinanceTaxLinkControlVisibility(model, mrTypeId);\r\n\r\n arPowerOfAttorneySection.fields.fieldChanged.add(async (e) => {\r\n if (e.fieldName == \"MachineReadableTypeID\" || e.fieldName == \"PrincipalOrganizationExternalID\") {\r\n if (e.fieldName == \"MachineReadableTypeID\") {\r\n this.SetFinanceTaxLinkControlVisibility(model, e.fieldValue);\r\n }\r\n }\r\n });\r\n }\r\n\r\n SetFinanceTaxLinkControlVisibility(model: ICardModel, mrTypeId: number | null) {\r\n let financeTaxLinkControlModel = model.controls.get(\"FinanceTaxLink\") as AutoCompleteEntryViewModel;\r\n\r\n if (!financeTaxLinkControlModel) {\r\n return;\r\n }\r\n\r\n // 1 - B2B, 0 - B2G\r\n financeTaxLinkControlModel.controlVisibility = mrTypeId === 0 ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n \r\n private async HideXmlAndZipByConditionsAsync(context: ICardUIExtensionContext) {\r\n if (await PkClientHelper.IsUserInRoleAsync(userSession.UserID, CdStaticRoles.CanWatchXmlInMachineReadablePoA)) {\r\n return;\r\n }\r\n\r\n let allFilesControlViewModel;\r\n\r\n if ((allFilesControlViewModel = context.model.controls.get(\"Files\") as FileListViewModel) == null) {\r\n return;\r\n }\r\n\r\n const regex : RegExp = /(?:\\.xml)|(?:\\.zip)$/;\r\n\r\n for (let i = allFilesControlViewModel.files.length - 1; i >= 0; i--) {\r\n const file = allFilesControlViewModel.files[i];\r\n if (regex.test(file.model.name)) {\r\n allFilesControlViewModel.removeFile(file);\r\n }\r\n }\r\n }\r\n\r\n private async SetMachineReadableVersionDropDownVisibilityAsync(model: ICardModel, _isUserPoAAdmin: boolean, machineReadableID: any) {\r\n let refsControl = model.controls.get(\"MachineReadableVersion\") as AutoCompleteEntryViewModel;\r\n \r\n if (!refsControl) {\r\n return;\r\n }\r\n\r\n refsControl.controlVisibility = _isUserPoAAdmin === true && machineReadableID !== undefined && machineReadableID !== null ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n \r\n private async PoAVersionChangedHandlerAsync(context: ICardUIExtensionContext) {\r\n let refsControl = context.model.controls.get(\"MachineReadableVersion\") as AutoCompleteEntryViewModel;\r\n \r\n if (!refsControl){\r\n return;\r\n }\r\n\r\n const card = context.model.card;\r\n\r\n \r\n refsControl.valueSet.add((e) => {\r\n this.ClearConfidantsByCondition(card, e, 'version');\r\n });\r\n\r\n refsControl.valueDeleted.add((e) => {\r\n this.ClearConfidantsByCondition(card, e, 'version');\r\n });\r\n }\r\n \r\n private CheckMultipleConfidantsAreAllowed(arPowerOfAttorney: CardSection): string {\r\n \r\n let formId = arPowerOfAttorney.fields.tryGet('PowerOfAttorneyFormID');\r\n var versionName = arPowerOfAttorney.fields.tryGet('MachineReadableVersionName');\r\n\r\n if (formId !== 0 && versionName !== '003')\r\n return 'none';\r\n\r\n if (versionName === '003') {\r\n return 'individuals';\r\n }\r\n\r\n return 'all';\r\n }\r\n\r\n private async ShowPeriodFromWarningMessageByConditionASync(card: Card) {\r\n \r\n const archiveAct = card.sections.tryGet('ArchiveAct');\r\n const arPowerOfAttorney = card.sections.tryGet('ArPowerOfAttorney');\r\n\r\n if (archiveAct == null\r\n || arPowerOfAttorney == null\r\n || arPowerOfAttorney.fields.tryGet('MachineReadableTypeID') == null) {\r\n return;\r\n }\r\n\r\n let periodFrom = archiveAct.fields.tryGet('PeriodFrom');\r\n\r\n if (periodFrom == null) {\r\n return;\r\n }\r\n\r\n let periodFromFromSettings = tryGetFromInfo(card.info, \"PeriodFromCalculatedBySettings\", null);\r\n\r\n if (!!periodFromFromSettings) {\r\n let typedPeriodFromFromSettings = new Date(periodFromFromSettings);\r\n\r\n if (typedPeriodFromFromSettings.setHours(0, 0, 0, 0) > new Date(periodFrom).setHours(0, 0, 0, 0)) {\r\n if(!await showConfirm('Установленная дата \"Действует с\" отличается от условий настроечной таблицы. Изменение даты \"Действует с\" может повлечь подписание данной доверенности в несоответствующий срок. \\n\\nВы действительно хотите изменить дату начала действия доверенности?',\r\n 'Предупреждение')){\r\n archiveAct.fields.set('PeriodFrom', this.ConvertDateToString(typedPeriodFromFromSettings), DotNetType.DateTime);\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n \r\n private async CheckMultipleLegalConfidants(multipleConfidantsAreAllowed: string, confidantsSection: CardSection) : Promise {\r\n var rowsToCheck = confidantsSection.rows.filter(row => row.state !== CardRowState.Deleted && row.tryGetField('UserDictionaryName')?.$value == 'KCKPartners');\r\n if(multipleConfidantsAreAllowed !== 'individuals' || rowsToCheck.length <= 1){\r\n return false;\r\n }\r\n\r\n var idsToCheck : object[] = rowsToCheck.map(row => createTypedField(row.tryGetField('UserID')?.$value, DotNetType.Guid));\r\n \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCheckMultipleKCKLegalsInListRequest;\r\n request.info['ListOfIDs'] = idsToCheck;\r\n \r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful || response.info.HasMoreThanOneLegal.$value)\r\n {\r\n return true;\r\n }\r\n\r\n return false\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this.disposer) {\r\n this.disposer();\r\n this.disposer = null;\r\n }\r\n if (this._listener) {\r\n this._listener.stop();\r\n this._listener = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { ArCompleteOptions } from 'src/pkScripts/Helpers/ArCompleteOptions';\r\nimport { ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { CardFilesInfo, PkCardHelper } from 'src/pkScripts/Helpers/PkCardHelper';\r\nimport { userSession } from 'common/utility';\r\nimport { CdDssCspType } from 'src/cdScripts/Helpers/CdDssCspType';\r\nimport { CdDSSHelper } from 'src/cdScripts/Helpers/CdDSSHelper';\r\n\r\nexport class PkInnerDocumentUIExtension extends CardUIExtension {\r\n public initialized(context: ICardUIExtensionContext) {\r\n let model = context.model;\r\n let card = context.model.card;\r\n if (model == null ||\r\n card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkInnerDocumentTypeID)) {\r\n return;\r\n }\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n ChUIHelper.CalculateVATAmount(context);\r\n\r\n ArUIHelper.DiadocButtonLogic(context);\r\n\r\n // Скрытие/открытие варианта завершения \"Перейти в Диадок\"\r\n ArUIHelper.InitVisiabilityOfSigningOptionsAsync(context);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkInnerDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n // подписываем файлы\r\n await this.SignFilesAsync(context);\r\n }\r\n\r\n public SignedInfo: string = \"\";\r\n /** Подписание файлов. */\r\n private async SignFilesAsync(context: ICardUIExtensionContext) {\r\n // получаем завершаемое задание с необходимым вариантом завершения\r\n const completedTask = context.card.tasks.find(x =>\r\n x.optionId === PkFdProcessHelper.SignWithEDS ||\r\n x.optionId === ArCompleteOptions.PkSignDSS ||\r\n Guid.equals(x.optionId, ArCompleteOptions.PkSign));\r\n\r\n\r\n // если задание не завершалось с таким вариантом завершения\r\n if (completedTask == null) {\r\n return;\r\n }\r\n\r\n console.log(completedTask.optionId);\r\n // инициаризируем результат валидации\r\n let validationResult = new ValidationResultBuilder();\r\n\r\n // инициализируем объект для подписания файлов карточки\r\n const cardFilesInfo = await CardFilesInfo.CreateAsync(\r\n context.card,\r\n context.fileContainer,\r\n userSession.UserID);\r\n\r\n // если был выбран вариант завершения \"Подписать с ЭЦП\"\r\n if (completedTask.optionId === PkFdProcessHelper.SignWithEDS) {\r\n // подписываем файлы с выбором сертификата\r\n validationResult = await ArUIHelper.SignFilesAsync(\r\n Array.of(cardFilesInfo),\r\n context.model.edsProvider);\r\n this.SignedInfo = \"Подписан ЭЦП в системе Tessa\";\r\n }\r\n\r\n // если был выбран вариант завершения \"Подписать ДСС\"\r\n else if (completedTask.optionId === ArCompleteOptions.PkSignDSS) {\r\n // получаем ID подразделения\r\n const departmentID = PkCardHelper.GetDepartmentID(context.card);\r\n\r\n // получаем данные по сотруднику для подписания КЭП-ом\r\n const userCertInfo = await CdDSSHelper.GetUserCertInfoAsync(\r\n userSession.UserID,\r\n undefined,\r\n departmentID,\r\n undefined,\r\n false,\r\n CdDssCspType.Qualified);\r\n\r\n // если удалось получить данные по сертификату КЭП по сотруднику\r\n if (userCertInfo?.ExternalUserGuid != null ||\r\n userCertInfo?.EmployeeGuid1C != null) {\r\n // подписываем файлы через DSS\r\n validationResult = await ArUIHelper.SignFilesByDssAsync(\r\n Array.of(cardFilesInfo),\r\n userCertInfo.ExternalUserGuid,\r\n userCertInfo.EmployeeGuid1C,\r\n CdDssCspType.Qualified);\r\n this.SignedInfo = \"Подписан квалифицированной электронной подписью в системе Tessa\";\r\n }\r\n else {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Не удалось получить данные по текущему сотруднику для подписания КЭП-ом.\");\r\n }\r\n }\r\n\r\n validationResult = await this.SignWithoutType(context, cardFilesInfo);\r\n\r\n // проверяем результат валидации\r\n if (!validationResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n validationResult.build().toString());\r\n\r\n // отменяем сохранение карточки\r\n context.cancel = true;\r\n }\r\n\r\n // добавляем ПФ\r\n await this.AddPrintFormsAsync(context, cardFilesInfo);\r\n }\r\n\r\n\r\n /** Добавление ПФ. */\r\n private async AddPrintFormsAsync(\r\n context: ICardUIExtensionContext,\r\n cardFilesInfo: CardFilesInfo) {\r\n // проверяем наличие ошибок в контексте\r\n if (!context.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n // если не требуется добавление ПФ\r\n if (!cardFilesInfo.PrintFormsInfo.IsNeedAddPrintForms) {\r\n return;\r\n }\r\n\r\n // способ установки штампа\r\n const inserModeID: number = 0;\r\n\r\n // добавление файлов печатных форм\r\n const addPrintFormsResult = await ArUIHelper.AddPrintFormsAsync(\r\n Array.of(cardFilesInfo),\r\n inserModeID,\r\n this.SignedInfo,\r\n false,\r\n true);\r\n\r\n // проверяем результат валидации\r\n if (!addPrintFormsResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при формировании печатных форм.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n addPrintFormsResult.build().toString());\r\n\r\n // отменяем сохранение карточки\r\n context.cancel = true;\r\n }\r\n }\r\n\r\n\r\n /** Если выбрали просто подписать.*/\r\n // По идее, изменяемая часть тут - это this.GetDepartmentID(context.card), и PkCardHelper.IsNeedSigningAsync.\r\n public async SignWithoutType(context: ICardUIExtensionContext, cardFilesInfo: CardFilesInfo):\r\n Promise {\r\n\r\n // получаем завершаемое задание с необходимым вариантом завершения\r\n const completedTask = context.card.tasks.find(x =>\r\n Guid.equals(x.optionId, ArCompleteOptions.PkSign));\r\n if (completedTask == null) {\r\n return new ValidationResultBuilder();\r\n }\r\n\r\n // получаем ID подразделения\r\n const departmentID = PkCardHelper.GetDepartmentID(context.card);\r\n\r\n // получаем данные по сертификату КЭП по сотруднику\r\n const userCertInfo = await CdDSSHelper.GetUserCertInfoAsync(\r\n userSession.UserID,\r\n undefined,\r\n departmentID,\r\n undefined,\r\n false,\r\n CdDssCspType.Qualified);\r\n\r\n // если удалось получить данные по сертификату КЭП по сотруднику\r\n if (userCertInfo?.ExternalUserGuid != null ||\r\n userCertInfo?.EmployeeGuid1C != null) {\r\n this.SignedInfo = \"Подписан квалифицированной электронной подписью в системе Tessa\";\r\n // подписываем файлы через DSS\r\n return await ArUIHelper.SignFilesByDssAsync(\r\n Array.of(cardFilesInfo),\r\n userCertInfo.ExternalUserGuid,\r\n userCertInfo.EmployeeGuid1C,\r\n CdDssCspType.Qualified);\r\n }\r\n\r\n this.SignedInfo = \"Подписан ЭЦП в системе Tessa\";\r\n // подписываем железным\r\n return await ArUIHelper.SignFilesAsync(\r\n Array.of(cardFilesInfo),\r\n context.model.edsProvider);\r\n }\r\n}","export class CdSignDssMessagesInfoState {\r\n public ID: number;\r\n\r\n public Name: string;\r\n\r\n public Caption: string;\r\n\r\n constructor(\r\n id: number,\r\n name: string,\r\n caption: string\r\n ) {\r\n this.ID = id;\r\n this.Name = name;\r\n this.Caption = caption;\r\n }\r\n\r\n /** Не отправлено. */\r\n static NotSended = new CdSignDssMessagesInfoState(0, \"Qualified\", \"Не отправлено\");\r\n\r\n /** Отправлено. */\r\n static Sended = new CdSignDssMessagesInfoState(1, \"Sended\", \"Отправлено\");\r\n\r\n /** Получен ответ. */\r\n static ResponseReceived = new CdSignDssMessagesInfoState(2, \"ResponseReceived\", \"Получен ответ\");\r\n\r\n /** Завершено. */\r\n static Completed = new CdSignDssMessagesInfoState(3, \"Completed\", \"Завершено\");\r\n\r\n /** Ошибка при отправке. */\r\n static SendingError = new CdSignDssMessagesInfoState(4, \"SendingError\", \"Ошибка при отправке\");\r\n\r\n /** Ошибка при получении. */\r\n static ReceivingError = new CdSignDssMessagesInfoState(5, \"ReceivingError\", \"Ошибка при получении\");\r\n\r\n /** Ошибка при обработке. */\r\n static CompletingError = new CdSignDssMessagesInfoState(6, \"CompletingError\", \"Ошибка при обработке\");\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ArUIHelper } from 'src/pkScripts/UI/ArUIHelper';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { TessaPersonnelDocumentKinds } from 'src/pkScripts/Helpers/PkPrimaryDocsHelper';\r\nimport { ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { CardFilesInfo } from 'src/pkScripts/Helpers/PkCardHelper';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { CardRemoveChangesDeletedHandling, prohibitAllPermissions } from 'tessa/cards';\r\nimport { FileContainerPermissions, FilePermissions } from 'tessa/files';\r\nimport { showNotEmpty, tryGetFromInfo } from 'tessa/ui';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\nimport { userSession } from 'common/utility';\r\nimport { CdDssCspType } from 'src/cdScripts/Helpers/CdDssCspType';\r\nimport { CdSignDssMessagesInfoState } from 'src/cdScripts/Helpers/CdSignDssMessagesInfoState';\r\n\r\nexport class PkPersonnelDocumentUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkPersonnelDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n // установка логики пакета\r\n ArUIHelper.PersonnelPacketCardLogic(context);\r\n\r\n // установка логики заданий\r\n await this.SetTasksLogicAsync(context);\r\n\r\n // обработка результата DSS-подписания\r\n await this.ProcessDssSigningInfoAsync(context);\r\n\r\n // блокировка карточки\r\n await this.BlockCardAsync(context);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkPersonnelDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n // инициализируем объект для подписания файлов карточки\r\n const cardFilesInfo = await CardFilesInfo.CreateAsync(\r\n context.card,\r\n context.fileContainer,\r\n userSession.UserID,\r\n true);\r\n\r\n // подписываем файлы\r\n await this.SignFilesAsync(context, cardFilesInfo);\r\n\r\n // добавляем ПФ\r\n await this.AddPrintFormsAsync(context, cardFilesInfo);\r\n }\r\n\r\n /** Подписание файлов. */\r\n private async SignFilesAsync(\r\n context: ICardUIExtensionContext,\r\n cardFilesInfo: CardFilesInfo) {\r\n // если не требуется добавление ПФ\r\n if (!cardFilesInfo.SigningInfo.IsNeedSigning) {\r\n return;\r\n }\r\n\r\n // подписание файлов\r\n const signingResult = await ArUIHelper.SignFilesByGroupsAsync(\r\n Array.of(cardFilesInfo),\r\n context.model.edsProvider);\r\n\r\n // проверяем результат валидации\r\n if (!signingResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n signingResult.build().toString());\r\n\r\n // отменяем сохранение карточки\r\n context.cancel = true;\r\n }\r\n\r\n // проверяем указан ли флаг подписания через DSS,\r\n // а также наличие флага NoFilesToSign (нашлись ли файлы для подписания)\r\n if (cardFilesInfo.SigningInfo.IsNeedDssSigning &&\r\n !tryGetFromInfo(cardFilesInfo.Card.info, \"NoFilesToSign\", false)) {\r\n // отменяем изменения по карточке\r\n // (задание не завершится, и карточка обновится)\r\n context.card.removeChanges(CardRemoveChangesDeletedHandling.ResetToNone);\r\n }\r\n }\r\n\r\n /** Добавление ПФ. */\r\n private async AddPrintFormsAsync(\r\n context: ICardUIExtensionContext,\r\n cardFilesInfo: CardFilesInfo) {\r\n // проверяем наличие ошибок в контексте\r\n if (!context.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n // если не требуется добавление ПФ\r\n if (!cardFilesInfo.PrintFormsInfo.IsNeedAddPrintForms) {\r\n return;\r\n }\r\n\r\n // если не установлен флаг подписания\r\n if (!cardFilesInfo.SigningInfo.IsNeedSigning) {\r\n return;\r\n }\r\n\r\n // если установлен флаг подписания через DSS\r\n if (cardFilesInfo.SigningInfo.IsNeedDssSigning) {\r\n return;\r\n }\r\n\r\n // способ установки штампа\r\n const inserModeID: number = 0;\r\n\r\n // добавление файлов печатных форм\r\n const addPrintFormsResult = await ArUIHelper.AddPrintFormsAsync(\r\n Array.of(cardFilesInfo),\r\n inserModeID,\r\n \"Подписан неквалифицированной электронной подписью в системе Tessa\",\r\n false,\r\n true,\r\n false);\r\n\r\n // проверяем результат валидации\r\n if (!addPrintFormsResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при формировании печатных форм.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n addPrintFormsResult.build().toString());\r\n\r\n // отменяем сохранение карточки\r\n context.cancel = true;\r\n }\r\n }\r\n\r\n /** Установка логики в заданиях. */\r\n private async SetTasksLogicAsync(context: ICardUIExtensionContext) {\r\n // проверяем секции\r\n const pkpdiSection = context.model.card.sections.tryGet(\"PkPersonnelDocumentInfo\");\r\n const pkdciSection = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if (pkpdiSection == null ||\r\n pkdciSection == null) {\r\n return;\r\n }\r\n\r\n // проверяем данные\r\n const documentKindID = pkpdiSection.fields.tryGet(\"DocumentKindID\");\r\n const stateID = pkdciSection.fields.tryGet(\"StateID\");\r\n\r\n // изменяем задания\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks == null) {\r\n return;\r\n }\r\n\r\n for (let task of tasks) {\r\n // при инциализации формы\r\n this.SetTaskLogicAsync(task, documentKindID, stateID);\r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(e => {\r\n this.SetTaskLogicAsync(e.task, documentKindID, stateID);\r\n });\r\n }\r\n }\r\n\r\n /** Логика варианта завершения \"Отказаться от подписания\". */\r\n private async SetTaskLogicAsync(\r\n task: TaskViewModel,\r\n documentKindID: string,\r\n stateID: number) {\r\n // скрытие кнопки \"Отказаться от подписания\"\r\n await this.HideRefuseSigningActionAsync(task, documentKindID);\r\n\r\n // скрытие кнопки \"Задать вопрос по документу\"\r\n await this.HideAskAboutDocumentActionAsync(task, documentKindID);\r\n\r\n // скрытие всех кнопок\r\n await this.HideAllActionsAsync(task, stateID);\r\n }\r\n\r\n /** Скрытие кнопки \"Отказаться от подписания\". */\r\n private async HideRefuseSigningActionAsync(\r\n task: TaskViewModel,\r\n documentKindID: string) {\r\n // нам нужно скрыть кнопку только в тех видах,\r\n // в которых не требуется ее отображение\r\n if (TessaPersonnelDocumentKinds.ShowRefuseSigningActionKinds.some(x => x === documentKindID)) {\r\n return;\r\n }\r\n\r\n // только в заданиях типа \"Подписание сотрудником\"\r\n if (task.taskModel.cardType == null ||\r\n task.taskModel.cardType.id !== PkTaskTypes.PkPersonnelDocumentSigningTypeID) {\r\n return;\r\n }\r\n\r\n // получаем все кнопки\r\n const actions = task.taskWorkspace.actions;\r\n if (actions == null) {\r\n return;\r\n }\r\n\r\n // получаем все дополнительные кнопки\r\n const additionalActions = task.taskWorkspace.additionalActions;\r\n if (additionalActions == null) {\r\n return;\r\n }\r\n\r\n // удаляем кнопки\r\n for (let i = actions.length - 1; i >= 0; i--) {\r\n const action = actions[i];\r\n\r\n if (action.completionOption == null ||\r\n action.completionOption.id !== PkFdProcessHelper.PkRefuseSigning) {\r\n continue;\r\n }\r\n\r\n actions.splice(i, 1);\r\n }\r\n\r\n // удаляем дополнительные кнопки\r\n for (let i = additionalActions.length - 1; i >= 0; i--) {\r\n const additionalAction = additionalActions[i];\r\n\r\n if (additionalAction.completionOption != null &&\r\n additionalAction.completionOption.id !== PkFdProcessHelper.PkRefuseSigning) {\r\n continue;\r\n }\r\n\r\n additionalActions.splice(i, 1);\r\n }\r\n }\r\n\r\n /** Скрытие кнопки \"Задать вопрос по документу\". */\r\n private async HideAskAboutDocumentActionAsync(\r\n task: TaskViewModel,\r\n documentKindID: string) {\r\n // нам нужно скрыть кнопку только в тех видах,\r\n // в которых пропускается этап подписания куратором\r\n if (!TessaPersonnelDocumentKinds.ShouldBeSkippedCuratorSigningKinds.some(x => x === documentKindID)) {\r\n return;\r\n }\r\n\r\n // получаем все кнопки\r\n const actions = task.taskWorkspace.actions;\r\n if (actions == null) {\r\n return;\r\n }\r\n\r\n // получаем все дополнительные кнопки\r\n const additionalActions = task.taskWorkspace.additionalActions;\r\n if (additionalActions == null) {\r\n return;\r\n }\r\n\r\n // удаляем кнопки\r\n for (let i = actions.length - 1; i >= 0; i--) {\r\n const action = actions[i];\r\n\r\n if (action.completionOption == null ||\r\n action.completionOption.id !== PkFdProcessHelper.PkAskAboutDocument) {\r\n continue;\r\n }\r\n\r\n actions.splice(i, 1);\r\n }\r\n\r\n // удаляем дополнительные кнопки\r\n for (let i = additionalActions.length - 1; i >= 0; i--) {\r\n const additionalAction = additionalActions[i];\r\n\r\n if (additionalAction.completionOption != null &&\r\n additionalAction.completionOption.id !== PkFdProcessHelper.PkAskAboutDocument) {\r\n continue;\r\n }\r\n\r\n additionalActions.splice(i, 1);\r\n }\r\n }\r\n\r\n /** Скрытие всех кнопок. */\r\n private async HideAllActionsAsync(\r\n task: TaskViewModel,\r\n stateID: number) {\r\n // нам нужно скрыть все кнопки, если состояние = \"На подписании DSS\"\r\n if (stateID !== CdDocStates.OnDssSigning.id) {\r\n return;\r\n }\r\n\r\n // получаем все кнопки\r\n const actions = task.taskWorkspace.actions;\r\n if (actions == null) {\r\n return;\r\n }\r\n\r\n // получаем все дополнительные кнопки\r\n const additionalActions = task.taskWorkspace.additionalActions;\r\n if (additionalActions == null) {\r\n return;\r\n }\r\n\r\n // удаляем кнопки\r\n actions.splice(0, actions.length);\r\n\r\n // удаляем дополнительные кнопки\r\n additionalActions.splice(0, additionalActions.length);\r\n }\r\n\r\n /** Обработка информации по DSS-подписанию. */\r\n private async ProcessDssSigningInfoAsync(context: ICardUIExtensionContext) {\r\n // получаем список ID активных заданий\r\n const taskIDs = context.card.tasks\r\n .map(x => createTypedField(x.rowId, DotNetType.Guid));\r\n\r\n // определяем запрос на получение информации по DSS-подписанию\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetLastSignDssMessageInfo;\r\n request.info[\"TaskIDs\"] = taskIDs;\r\n\r\n // отправляем запрос\r\n const response = await CardService.instance.request(request);\r\n\r\n // проверяем ответ\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n // проверяем флаг наличия данных по DSS-подписанию\r\n if (!tryGetFromInfo(response.info, \"HasDssSigningInfo\")) {\r\n return;\r\n }\r\n\r\n // получаем данные по подписанию\r\n const dssSigningAuthorID = tryGetFromInfo(response.info, \"DssSigningAuthorID\");\r\n const dssSigningState = tryGetFromInfo(response.info, \"DssSigningStateID\");\r\n const dssSigningCspType = tryGetFromInfo(response.info, \"DssSigningCspTypeID\");\r\n const dssSigningErrorMessage = tryGetFromInfo(response.info, \"DssSigningErrorMessage\");\r\n\r\n // отображаем сообщение по подписанию\r\n await this.ShowDssSigningInfoMessageAsync(\r\n dssSigningAuthorID,\r\n dssSigningState,\r\n dssSigningCspType,\r\n dssSigningErrorMessage);\r\n }\r\n\r\n /** Отображение сообщения по DSS-подписанию. */\r\n private async ShowDssSigningInfoMessageAsync(\r\n dssSigningAuthorID: string,\r\n dssSigningState: number,\r\n dssSigningCspType: number,\r\n dssSigningErrorMessage: string | null) {\r\n // проверяем, что текущий пользователь является автором подписания\r\n if (userSession.UserID !== dssSigningAuthorID) {\r\n return;\r\n }\r\n\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // смотрим состояние сообщения\r\n switch (dssSigningState) {\r\n // для состояний \"Не отправлено\" и \"Отправлено\"\r\n case CdSignDssMessagesInfoState.NotSended.ID:\r\n case CdSignDssMessagesInfoState.Sended.ID:\r\n\r\n // если тип подписания = \"НЭП\"\r\n if (dssSigningCspType === CdDssCspType.NonQualified.ID) {\r\n validationResult.add(\r\n ValidationResultType.Info,\r\n \"Документ был отправлен на подписание, редактирование недоступно.\\n\" +\r\n \"Пожалуйста, дождитесь окончания подписания (обычно это занимает несколько минут).\\n\" +\r\n \"Вы можете закрыть документ, он обновится автоматически, или дождаться его подписания, периодически обновляя карточку.\\n\" +\r\n \"Если вы продолжаете видеть это сообщение в течение длительного времени - обратитесь к администратору.\");\r\n }\r\n\r\n // если тип подписания = \"КЭП\"\r\n else if (dssSigningCspType === CdDssCspType.Qualified.ID) {\r\n validationResult.add(\r\n ValidationResultType.Info,\r\n \"Документ был отправлен на подписание, редактирование недоступно.\\n\" +\r\n \"Пожалуйста, подтвердите подписание в мобильном приложении \\\"myDSS\\\" и дождитесь его окончания (обычно это занимает несколько минут).\\n\" +\r\n \"Вы можете закрыть документ, он обновится автоматически, или дождаться его подписания, периодически обновляя карточку.\\n\" +\r\n \"Если вы продолжаете видеть это сообщение в течение длительного времени - обратитесь к администратору.\");\r\n }\r\n\r\n break;\r\n\r\n // для ошибочных состояний\r\n case CdSignDssMessagesInfoState.SendingError.ID:\r\n case CdSignDssMessagesInfoState.ReceivingError.ID:\r\n case CdSignDssMessagesInfoState.CompletingError.ID:\r\n\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"При подписании документа возникла следующая ошибка:\\n\" +\r\n \"- \\\"\" + dssSigningErrorMessage + \"\\\"\\n\" +\r\n \"Если кнопки подписания стали снова доступны, и ошибка вам знакома - попробуйте заново подписать документ.\\n\" +\r\n \"В ином случае - пожалуйста, обратитесь к администратору.\");\r\n\r\n break;\r\n }\r\n\r\n // отображаем сообщение по результату валидации\r\n await showNotEmpty(validationResult.build(), \"Информация о подписании\");\r\n }\r\n\r\n /** Блокировка карточки. */\r\n private async BlockCardAsync(context: ICardUIExtensionContext) {\r\n // получаем секцию по карточке\r\n const pkdciSection = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if (pkdciSection == null) {\r\n return;\r\n }\r\n\r\n // получаем данные\r\n const stateID = pkdciSection.fields.tryGet(\"StateID\");\r\n\r\n // проверяем, что карточка находится в состоянии \"На подписании DSS\"\r\n if (stateID !== CdDocStates.OnDssSigning.id) {\r\n return;\r\n }\r\n\r\n // устанавливаем блокировку карточки\r\n prohibitAllPermissions(context.model.card, true);\r\n\r\n // получаем права редактирования файлов карточки\r\n const fileContainerPermissions = context.fileContainer.permissions as FileContainerPermissions;\r\n\r\n // устанавливаем блокировку файлов карточки\r\n fileContainerPermissions.canAdd = false;\r\n\r\n // пробегаемся по файлам карточки\r\n for (const file of context.fileContainer.files) {\r\n // устанавливаем блокировку для файла\r\n file.permissions.set(FilePermissions.empty);\r\n }\r\n }\r\n}","\r\nimport { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Visibility, TypedField } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { GridViewModel, FileListViewModel } from 'tessa/ui/cards/controls';\r\nimport { UIButton, tryGetFromInfo, showLoadingOverlay } from 'tessa/ui';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { reaction } from 'mobx';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { Card, CardRemoveChangesDeletedHandling, CardTaskAction } from 'tessa/cards';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { CardFilesInfo } from 'src/pkScripts/Helpers/PkCardHelper';\r\nimport { ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { CardService, CardStoreRequest } from 'tessa/cards/service';\r\n\r\nexport class PkPersonnelPacketVirtualUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n private _disposerSelectRow: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null ||\r\n context.model.card.typeId !== PkCardTypes.PkPersonnelPacketVirtualTypeID) {\r\n return;\r\n }\r\n\r\n let controls;\r\n let packetControl;\r\n let filesVisibleControl;\r\n\r\n if ((controls = this.InitControls(context)) == null ||\r\n (packetControl = controls.packetControl) == null ||\r\n (filesVisibleControl = controls.filesVisibleControl) == null) {\r\n return;\r\n }\r\n\r\n let cardTasks: TaskViewModel[] = [];\r\n\r\n this.InitButtons(packetControl);\r\n this.PacketCardLogic(context);\r\n this.InitTasks(context, packetControl, cardTasks);\r\n this.PacketSelectRowLogic(context, packetControl, cardTasks, filesVisibleControl);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (!context.validationResult.isSuccessful ||\r\n context.model == null ||\r\n context.model.card == null ||\r\n context.model.card.typeId !== PkCardTypes.PkPersonnelPacketVirtualTypeID) {\r\n return;\r\n }\r\n\r\n // получаем карточки документов пакета\r\n const packetCards = this.GetPacketCards(context.card);\r\n\r\n // обрабатываем завершение заданий\r\n await this.ProcessCompletingTasksAsync(context.card, packetCards);\r\n\r\n // формируем информацию по карточкам и файлам\r\n const packetCardsWithFilesInfo = await ArUIHelper.GetCardsFilesInfoAsync(packetCards, true);\r\n\r\n // подписываем карточки документов пакета\r\n await this.SignPacketCardsAsync(context, packetCardsWithFilesInfo);\r\n\r\n // добавляем печатные формы по карточкам документов пакета\r\n await this.AddPrintFormsToPacketCardsAsync(context, packetCardsWithFilesInfo);\r\n\r\n // сохраняем карточки документов пакета\r\n await this.StorePacketCardsAsync(context, packetCardsWithFilesInfo);\r\n\r\n // убираем изменения по виртуальной карточке пакета\r\n context.card.removeChanges(CardRemoveChangesDeletedHandling.ResetToNone);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n // подчищаем за собой\r\n if (this._disposerSelectRow) {\r\n this._disposerSelectRow();\r\n this._disposerSelectRow = null;\r\n }\r\n }\r\n\r\n /** Инициализация контролов. */\r\n private InitControls(context: ICardUIExtensionContext) {\r\n let packetControl = context.model.controls.get(\"PacketControl\") as GridViewModel;\r\n let filesVisibleControl;\r\n let filesHiddenControl;\r\n\r\n if ((filesVisibleControl = context.model.controls.get(\"FilesVisibleControl\") as FileListViewModel) == null ||\r\n (filesHiddenControl = context.model.controls.get(\"FilesHiddenControl\") as FileListViewModel) == null) {\r\n return false;\r\n }\r\n\r\n return {packetControl, filesVisibleControl, filesHiddenControl};\r\n }\r\n\r\n /** Инициализация кнопок. */\r\n private InitButtons(packetControl: GridViewModel) {\r\n packetControl.moveUpButton.setVisibility(Visibility.Collapsed);\r\n packetControl.moveDownButton.setVisibility(Visibility.Collapsed);\r\n\r\n let unckeckButton = new UIButton(\r\n \"Снять выделение\",\r\n async () => { this.UncheckButtonLogic(packetControl); },\r\n null,\r\n () => this.IsEnabledUncheckFunc(packetControl));\r\n\r\n packetControl.rightButtons.push(unckeckButton);\r\n }\r\n\r\n /** Инициализация заданий. */\r\n private InitTasks(context: ICardUIExtensionContext, packetControl: GridViewModel, cardTasks: TaskViewModel[]) {\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks != null) {\r\n for (let t of tasks) {\r\n cardTasks.push(t);\r\n }\r\n }\r\n let docList = this.GetSelectedDocs(packetControl);\r\n this.ChangeTasksVisible(cardTasks, tasks, docList);\r\n }\r\n\r\n /** Логика пакета документов. */\r\n private PacketCardLogic(context: ICardUIExtensionContext) {\r\n const section = context.model.card.sections.tryGet('PkPersonnelPacketCompositionVirtual');\r\n\r\n if (section == null || section.rows == null || section.rows.length < 1) {\r\n const packetBlock = context.model.blocks.get('PacketBlock');\r\n if (packetBlock != null) {\r\n packetBlock.blockVisibility = Visibility.Collapsed;\r\n packetBlock.captionVisibility = Visibility.Collapsed;\r\n }\r\n return;\r\n }\r\n\r\n ArUIHelper.PacketControlLogic(context);\r\n ArUIHelper.PacketApprovementControlLogic(context.model);\r\n }\r\n\r\n /** Логика изменения выделения документов пакета. */\r\n private PacketSelectRowLogic(\r\n context: ICardUIExtensionContext,\r\n packetControl: GridViewModel,\r\n cardTasks: TaskViewModel[],\r\n filesVisibleControl: FileListViewModel) {\r\n if (this._disposerSelectRow == null) {\r\n this._disposerSelectRow = reaction(() => packetControl.selectedRows, () => {\r\n let docList = this.GetSelectedDocs(packetControl);\r\n let tasks = context.model.tryGetTasks();\r\n this.ChangeTasksVisible(cardTasks, tasks, docList);\r\n this.ChangeFilesVisible(filesVisibleControl, docList);\r\n });\r\n }\r\n }\r\n\r\n /** Изменение видимости файлов. */\r\n private ChangeFilesVisible(filesVisibleControl: FileListViewModel, docList: Array) {\r\n for (let i = filesVisibleControl.files.length - 1; i > -1; i--) {\r\n const file = filesVisibleControl.files[i];\r\n if (!(docList.indexOf(file.model.info.DocID.$value) > -1)) {\r\n filesVisibleControl.removeFile(file);\r\n }\r\n }\r\n }\r\n\r\n /** Изменение видимости заданий. */\r\n private ChangeTasksVisible(cardTasks: TaskViewModel[], tasks: TaskViewModel[] | null, docList: Array) {\r\n if (tasks != null) {\r\n tasks.splice(0, tasks.length);\r\n\r\n const docListWithTask = this.GetTasksDocs(docList, cardTasks);\r\n\r\n for (let task of cardTasks) {\r\n let docIDs = (tryGetFromInfo(task!.taskModel!.cardTask!.info, \"DocID\") as TypedField[]).map(x => x.$value);\r\n if (docListWithTask.some(x => docIDs.indexOf(x) > -1)) {\r\n tasks.push(task);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Получение выделенных документов пакета. */\r\n private GetSelectedDocs(packetControl: GridViewModel) {\r\n let docList: Array = [];\r\n\r\n if (packetControl.selectedRows.length > 0) {\r\n docList = packetControl.selectedRows.map(t => t.row.get(\"DocID\"));\r\n }\r\n else {\r\n docList = packetControl.rows.map(t => t.row.get(\"DocID\"));\r\n }\r\n\r\n return docList;\r\n }\r\n\r\n /** Получение ID документов по заданиям. */\r\n private GetTasksDocs(docList: Array, cardTasks: TaskViewModel[]) {\r\n const tasksDocs: Array = [];\r\n\r\n for (let cardTask of cardTasks) {\r\n const taskDocs = (tryGetFromInfo(cardTask!.taskModel!.cardTask!.info, \"DocID\") as TypedField[]).map(x => x.$value);\r\n\r\n for (let taskDoc of taskDocs) {\r\n const docListIndex = docList.indexOf(taskDoc);\r\n const tasksDocsIndex = tasksDocs.indexOf(taskDoc);\r\n if (docListIndex > -1 && tasksDocsIndex === -1) {\r\n tasksDocs.push(taskDoc);\r\n }\r\n }\r\n }\r\n\r\n return tasksDocs;\r\n }\r\n\r\n /** Доступность кнопки снятия выделения строк. */\r\n private IsEnabledUncheckFunc(packetControl: GridViewModel) {\r\n return packetControl.selectedRows.length > 0;\r\n }\r\n\r\n /** Снятие выделения строк. */\r\n private UncheckButtonLogic(packetControl: GridViewModel) {\r\n for (let row of packetControl.rows) {\r\n row.isSelected = false;\r\n }\r\n }\r\n\r\n /** Получение списка карточек документов пакета. */\r\n private GetPacketCards(card: Card) {\r\n // получаем список объектов из инфо\r\n const packetCardsInfo: IStorage[] = tryGetFromInfo(card.info, \"PacketCardsServerInfo\", []);\r\n\r\n // формируем список карточек\r\n const packetCards = packetCardsInfo!\r\n .map(x => new Card(x));\r\n\r\n // возвращаем спико\r\n return packetCards;\r\n }\r\n\r\n /** Обработка завершения заданий по карточке пакета. */\r\n private async ProcessCompletingTasksAsync(\r\n card: Card,\r\n packetCards: Card[]) {\r\n // пробегаемся по заданиям карточки пакета\r\n for (const cardTask of card.tasks) {\r\n // если действий с заданием не производилось\r\n if (cardTask.action === CardTaskAction.None) {\r\n // смотрим дальше\r\n continue;\r\n }\r\n\r\n // получаем список ID связанных карточек\r\n const relatedCardsIDs = tryGetFromInfo(cardTask.info, \"DocID\", [])\r\n .map(x => x.$value as string);\r\n\r\n // получаем список ID связанных заданий\r\n const relatedTasksIDs = tryGetFromInfo(cardTask.info, \"RelatedTasks\", [])\r\n .map(x => x.$value as string);\r\n\r\n // если список пустой, добавляем ID задания\r\n if (relatedTasksIDs.length === 0) {\r\n relatedTasksIDs.push(cardTask.rowId);\r\n }\r\n\r\n // пробегаемся по ID связанных карточек\r\n for (const relatedCardID of relatedCardsIDs) {\r\n // получаем связанную карточку по ID\r\n const packetCard = packetCards.find(x => x.id === relatedCardID)!;\r\n\r\n // пробегаемся по заданиям связанной карточки\r\n for (let i = 0; i < packetCard.tasks.length; i++) {\r\n // получаем задание связанной карточки\r\n const oldPacketCardTask = packetCard.tasks[i];\r\n\r\n // если задание не входит в список связанных\r\n if (!relatedTasksIDs.some(x => x === oldPacketCardTask.rowId)) {\r\n // смотрим дальше\r\n continue;\r\n }\r\n\r\n // удаляем существующее задание в связанной карточке\r\n // (для того, чтобы заменить его на задание пакета)\r\n packetCard.tasks.remove(oldPacketCardTask);\r\n\r\n // копируем и вставляем новое задание в связанную карточку\r\n const newPacketCardTask = packetCard.tasks.length === i\r\n ? packetCard.tasks.add(cardTask)\r\n : packetCard.tasks.set(i, cardTask);\r\n\r\n // заменяем данные по заданию на те, которые были в удаленном\r\n newPacketCardTask.rowId = oldPacketCardTask.rowId;\r\n newPacketCardTask.roleId = oldPacketCardTask.roleId;\r\n newPacketCardTask.roleName = oldPacketCardTask.roleName;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Подписание карточек документов пакета. */\r\n private async SignPacketCardsAsync(\r\n context: ICardUIExtensionContext,\r\n cardsFilesInfo: CardFilesInfo[]) {\r\n // проверяем результат валидации контекста\r\n if (!context.validationResult.isSuccessful) {\r\n // если не ок - выходим\r\n return;\r\n }\r\n\r\n // подписываем файлы\r\n const signingResult = await ArUIHelper.SignFilesByGroupsAsync(cardsFilesInfo, context.model.edsProvider);\r\n\r\n // проверяем результат подписания\r\n if (!signingResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании файлов документов пакета.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n signingResult.build().toString());\r\n\r\n // устанавливаем флаг отмены сохранения\r\n context.cancel = true;\r\n }\r\n }\r\n\r\n /** Формирование печатных форм по карточкам документов пакета. */\r\n private async AddPrintFormsToPacketCardsAsync(\r\n context: ICardUIExtensionContext,\r\n cardsFilesInfo: CardFilesInfo[]) {\r\n // проверяем результат валидации контекста\r\n if (!context.validationResult.isSuccessful) {\r\n // если не ок - выходим\r\n return;\r\n }\r\n\r\n // способ установки штампа\r\n const inserModeID: number = 0;\r\n\r\n // получаем список данных, по которым необходимо формирование ПФ\r\n const cardFilesInfoWhichNeedPrintForms = cardsFilesInfo.filter(x =>\r\n x.SigningInfo.IsNeedSigning &&\r\n !x.SigningInfo.IsNeedDssSigning &&\r\n !x.SigningInfo.IsNeedNepRelease);\r\n\r\n // добавляем файлы печатных форм\r\n const addPrintFormsResult = await ArUIHelper.AddPrintFormsAsync(\r\n cardFilesInfoWhichNeedPrintForms,\r\n inserModeID,\r\n \"Подписан неквалифицированной электронной подписью в системе Tessa\",\r\n false,\r\n true,\r\n false);\r\n\r\n // проверяем результат добавления печатных форм\r\n if (!addPrintFormsResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при формировании печатных форм для документов пакета.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n addPrintFormsResult.build().toString());\r\n\r\n // устанавливаем флаг отмены сохранения\r\n context.cancel = true;\r\n }\r\n }\r\n\r\n /** Сохранение карточек документов пакета. */\r\n private async StorePacketCardsAsync(\r\n context: ICardUIExtensionContext,\r\n cardsFilesInfo: CardFilesInfo[]) {\r\n // проверяем результат валидации контекста\r\n if (!context.validationResult.isSuccessful) {\r\n // если не ок - выходим\r\n return;\r\n }\r\n\r\n await showLoadingOverlay(async () => {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // пробегаемся по карточкам\r\n for (const cardFilesInfo of cardsFilesInfo) {\r\n // проверяем флаг подписания через DSS и флаг наличия файлов для подписания\r\n if (cardFilesInfo.SigningInfo.IsNeedDssSigning && !tryGetFromInfo(cardFilesInfo.Card.info, \"NoFilesToSign\")) {\r\n // смотрим дальше, если требуется подписание через DSS\r\n // (значит должен был отправиться запрос)\r\n continue;\r\n }\r\n\r\n // проверям флаг необходимости выпуска НЭП-а\r\n if (cardFilesInfo.SigningInfo.IsNeedNepRelease) {\r\n // смотрим дальше, если флаг установлен\r\n continue;\r\n }\r\n\r\n // проверяем были ли изменения по карточке\r\n if (!cardFilesInfo.Card.hasChanges()) {\r\n // смотрим дальше, если не было\r\n continue;\r\n }\r\n\r\n // получаем необходимые секции\r\n const dciSection = cardFilesInfo.Card.sections.tryGet(\"DocumentCommonInfo\");\r\n const pkpdiSection = cardFilesInfo.Card.sections.tryGet(\"PkPersonnelDocumentInfo\");\r\n\r\n // проверяем наличие необходимых секций\r\n if (dciSection == null || pkpdiSection == null) {\r\n // если нет - пропускаем\r\n continue;\r\n }\r\n\r\n // получаем необходимые поля\r\n const secondaryFullNumber = dciSection.fields.tryGet(\"SecondaryFullNumber\") as string;\r\n const kindName = pkpdiSection.fields.tryGet(\"DocumentKindDocumentKind\") as string;\r\n\r\n // сохраняем карточку\r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = cardFilesInfo.Card;\r\n const storeResponse = await CardService.instance.store(storeRequest, cardFilesInfo.FileContainer.files);\r\n\r\n // проверяем результат сохранения\r\n if (!storeResponse.validationResult.isSuccessful) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при сохранении карточки ID: \\\"\" + secondaryFullNumber + \"\\\"\" +\r\n (kindName != null ? \", Вид: \\\"\" + kindName + \"\\\"\" : \"\"),\r\n undefined,\r\n undefined,\r\n undefined,\r\n storeResponse.validationResult.build().toString());\r\n }\r\n }\r\n\r\n // проверяем ошибки\r\n if (!validationResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при сохранении документов пакета.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n validationResult.build().toString());\r\n\r\n // устанавливаем флаг отмены сохранения\r\n context.cancel = true;\r\n }\r\n }, \"Сохранение документов пакета\");\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType, createTypedField, Visibility } from 'tessa/platform';\r\nimport { Card, CardGetMethod, CardGetMode, CardRow, CardRowsListener, CardRowState, CardSection } from 'tessa/cards';\r\nimport { GridRowAction, GridViewModel, TabControlViewModel } from 'tessa/ui/cards/controls';\r\nimport { CardGetRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { showError } from 'tessa/ui';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { DefaultFormTabWithoutTasksViewModel } from 'tessa/ui/cards/forms';\r\n\r\nlet systemInfos: [{\r\n RowID: guid | null,\r\n Name: string | null,\r\n IsConnected: boolean | null,\r\n TechnicalInformation: string | null,\r\n StateID: number | null,\r\n StateName: string | null,\r\n ConnectionDate: Date | null,\r\n Comment: string | null,\r\n ResponsibleFromBusinessID: guid | null,\r\n ResponsibleFromBusinessName: string | null,\r\n ITSystemResponsibleID: guid | null,\r\n ITSystemResponsibleName: number | null,\r\n RowState: CardRowState | null,\r\n FlagID: number | null,\r\n CheckboxTableName: string | null,\r\n VirtualTableName: string | null,\r\n VirtualTableControlName: string | null\r\n}];\r\n\r\nexport class DepartmentRoleUIExtension extends CardUIExtension {\r\n\r\n private disposer: Function | null = null;\r\n private _listener: CardRowsListener | null;\r\n\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.DepartmentRoleTypeID)) {\r\n return;\r\n }\r\n\r\n if (this._listener) {\r\n this._listener.stop();\r\n }\r\n\r\n // Работа с таблицей \"Роли подразделения\".\r\n await this.WorkWithDepartmentRolesTable(context, context.model.card);\r\n await this.SystemFlagsLogicAsync(context, context.model.card); \r\n } \r\n\r\n /** Работа с таблицей \"Роли подразделения\" */\r\n private async WorkWithDepartmentRolesTable(context: ICardUIExtensionContext, card: Card) {\r\n const PkDepartmentRolesTable = context.model.controls.get(\"PkDepartmentRolesTable\") as GridViewModel;\r\n if (PkDepartmentRolesTable == null) {\r\n return;\r\n }\r\n\r\n let departmentRolesSection = card.sections.tryGet('PkDepartmentRoles');\r\n let departmentRolesUsersSection = card.sections.tryGet('PkDepartmentRolesUsers');\r\n\r\n PkDepartmentRolesTable.rowValidating.add(async e => {\r\n\r\n let roleID = e.row.tryGet(\"RoleID\");\r\n\r\n if (roleID == null)\r\n {\r\n showError(\"Роль должна быть заполнена.\");\r\n let row = departmentRolesSection?.rows.find(r => r.rowId == e.row.rowId);\r\n if (row) {\r\n row.state = CardRowState.Deleted;\r\n let rows = departmentRolesUsersSection?.rows.filter(r => r.parentRowId == e.row.rowId);\r\n rows?.forEach(r => r.state = CardRowState.Deleted);\r\n }\r\n \r\n return;\r\n }\r\n\r\n if (departmentRolesSection?.rows.some(r => \r\n r.state != CardRowState.Deleted && r.rowId != e.row.rowId && r.tryGet(\"RoleID\") == roleID)) {\r\n showError(\"Строка с такой ролью уже существует. Выберите другую роль или выберите нужную строку.\");\r\n let row = departmentRolesSection?.rows.find(r => r.rowId == e.row.rowId);\r\n if (row) {\r\n row.state = CardRowState.Deleted;\r\n let rows = departmentRolesUsersSection?.rows.filter(r => r.parentRowId == e.row.rowId);\r\n rows?.forEach(r => r.state = CardRowState.Deleted);\r\n }\r\n\r\n return;\r\n }\r\n \r\n var roleIsFromCard = e.row.tryGet(\"RoleIsFromCard\");\r\n if (!roleIsFromCard)\r\n {\r\n return;\r\n }\r\n\r\n const request = new CardGetRequest();\r\n request.cardId = roleID;\r\n request.getMode = CardGetMode.ReadOnly;\r\n request.method = CardGetMethod.Export;\r\n\r\n const response = await CardService.instance.get(request);\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n let roleInDepartmentCard : Card = response.card;\r\n let roleInDepartmentSection = roleInDepartmentCard.sections.tryGet('PkRoleInDepartment');\r\n \r\n if (roleInDepartmentSection == null) {\r\n return;\r\n }\r\n\r\n let dataType = roleInDepartmentSection.fields.tryGet(\"SectionDataTypeCaption\");\r\n let section = roleInDepartmentSection.fields.tryGet(\"SectionSectionName\");\r\n let field = roleInDepartmentSection.fields.tryGet(\"SectionComplexColumnName\");\r\n\r\n let cardSection = card.sections.tryGet(section as string);\r\n\r\n switch (dataType) {\r\n case \"Ссылка\":\r\n var userRow = departmentRolesUsersSection?.rows.find(r => r.parentRowId == e.row.rowId\r\n && r.state != CardRowState.Deleted);\r\n if (userRow) {\r\n cardSection?.fields.set(`${field}ID`, createTypedField(userRow.tryGet('UserID'), DotNetType.Guid));\r\n cardSection?.fields.set(`${field}Name`, createTypedField(userRow.tryGet('UserName'), DotNetType.String));\r\n\r\n var rowsToDelete = departmentRolesUsersSection?.rows.filter(r => \r\n r.parentRowId == e.row.rowId && r.rowId != userRow?.rowId);\r\n\r\n rowsToDelete?.forEach(r => r.state = CardRowState.Deleted);\r\n }\r\n else {\r\n cardSection?.fields.set(`${field}ID`, null);\r\n cardSection?.fields.set(`${field}Name`, null);\r\n }\r\n\r\n break;\r\n case \"Список\":\r\n const rowId = e.row.rowId;\r\n var userRows = departmentRolesUsersSection?.rows.filter(r => \r\n r.state != CardRowState.Deleted && r.parentRowId == rowId);\r\n\r\n cardSection?.rows.filter(r => r.state != CardRowState.Deleted)\r\n .forEach(r => {\r\n if (!userRows?.some(ur => ur.state != CardRowState.Deleted && ur.tryGet('UserID') == r.tryGet(`${field}ID`))) {\r\n r.state = CardRowState.Deleted;\r\n }\r\n });\r\n\r\n userRows?.forEach(userRow => {\r\n if (!cardSection?.rows.some(r => r.state != CardRowState.Deleted && userRow.tryGet('UserID') == r.tryGet(`${field}ID`))) {\r\n let newRow = new CardRow();\r\n\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(`${field}ID`, createTypedField(userRow.tryGet('UserID'), DotNetType.Guid));\r\n newRow.set(`${field}Name`, createTypedField(userRow.tryGet('UserName'), DotNetType.String));\r\n\r\n if (section == \"PkStructDepartmentReaders\")\r\n {\r\n newRow.set('Order', createTypedField(cardSection?.rows.length, DotNetType.Int32));\r\n }\r\n\r\n newRow.state = CardRowState.Inserted;\r\n cardSection?.rows.push(newRow);\r\n }\r\n });\r\n\r\n break;\r\n }\r\n });\r\n\r\n PkDepartmentRolesTable.rowInvoked.add(async e => {\r\n let roleID = e.row.tryGet(\"RoleID\");\r\n\r\n if(e.action == GridRowAction.Deleting) {\r\n \r\n var roleIsFromCard = e.row.tryGet(\"RoleIsFromCard\"); \r\n if (roleID == null || !roleIsFromCard)\r\n {\r\n return;\r\n }\r\n \r\n const request = new CardGetRequest();\r\n request.cardId = roleID;\r\n request.getMode = CardGetMode.ReadOnly;\r\n request.method = CardGetMethod.Export;\r\n \r\n const response = await CardService.instance.get(request);\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n \r\n let roleInDepartmentCard : Card = response.card;\r\n let roleInDepartmentSection = roleInDepartmentCard.sections.tryGet('PkRoleInDepartment');\r\n \r\n if (roleInDepartmentSection == null) {\r\n return;\r\n }\r\n \r\n let dataType = roleInDepartmentSection.fields.tryGet(\"SectionDataTypeCaption\");\r\n let section = roleInDepartmentSection.fields.tryGet(\"SectionSectionName\");\r\n let field = roleInDepartmentSection.fields.tryGet(\"SectionComplexColumnName\");\r\n \r\n let cardSection = card.sections.tryGet(section as string);\r\n \r\n switch (dataType) {\r\n case \"Ссылка\": \r\n cardSection?.fields.set(`${field}ID`, null);\r\n cardSection?.fields.set(`${field}Name`, null);\r\n \r\n break;\r\n case \"Список\":\r\n cardSection?.rows.forEach(r => r.state = CardRowState.Deleted);\r\n \r\n break;\r\n }\r\n }\r\n\r\n if(e.action == GridRowAction.Opening) {\r\n if (roleID != null) {\r\n let roleControl = e.rowModel?.controls.get(\"RoleInDepartment\");\r\n if (roleControl) {\r\n roleControl.isReadOnly = true;\r\n }\r\n }\r\n }\r\n });\r\n } \r\n\r\n \r\n /** Логика флажков из блока \"Системы\". */\r\n private async SystemFlagsLogicAsync(context: ICardUIExtensionContext, card: Card) {\r\n systemInfos = [{\r\n RowID: null,\r\n Name: null,\r\n IsConnected: null,\r\n TechnicalInformation: null,\r\n StateID: null,\r\n StateName: null,\r\n ConnectionDate: null,\r\n Comment: null,\r\n ResponsibleFromBusinessID: null,\r\n ResponsibleFromBusinessName: null,\r\n ITSystemResponsibleID: null,\r\n ITSystemResponsibleName: null,\r\n RowState: null,\r\n FlagID: null,\r\n CheckboxTableName: null,\r\n VirtualTableName: null,\r\n VirtualTableControlName: null\r\n }];\r\n\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetDepartmentSystemInfo;\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n \r\n let response = await CardService.instance.request(request);\r\n \r\n if (response.validationResult.isSuccessful &&\r\n response.info!.Result!) {\r\n let objectList = response.info.Result;\r\n if (objectList === null) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < objectList.length; i++) {\r\n let obj = objectList[i];\r\n systemInfos[i] = {\r\n RowID: null,\r\n Name: obj.Name ? obj.Name.$value : null,\r\n IsConnected: obj.IsConnected ? obj.IsConnected.$value : null,\r\n TechnicalInformation: obj.TechnicalInformation ? obj.TechnicalInformation.$value : null,\r\n StateID: null,\r\n StateName: null,\r\n ConnectionDate: null,\r\n Comment: obj.Comment ? obj.Comment.$value : null,\r\n ResponsibleFromBusinessID: obj.ResponsibleFromBusinessID ? obj.ResponsibleFromBusinessID.$value : null,\r\n ResponsibleFromBusinessName: obj.ResponsibleFromBusinessName ? obj.ResponsibleFromBusinessName.$value : null,\r\n ITSystemResponsibleID: obj.ITSystemResponsibleID ? obj.ITSystemResponsibleID.$value : null,\r\n ITSystemResponsibleName: obj.ITSystemResponsibleName ? obj.ITSystemResponsibleName.$value : null,\r\n RowState: null,\r\n FlagID: obj.FlagID ? obj.FlagID.$value : null,\r\n CheckboxTableName: obj.CheckboxTableName ? obj.CheckboxTableName.$value : null,\r\n VirtualTableName: obj.VirtualTableName ? obj.VirtualTableName.$value : null,\r\n VirtualTableControlName: obj.VirtualTableControlName ? obj.VirtualTableControlName.$value : null\r\n };\r\n }\r\n }\r\n\r\n this.CheckFlags(card);\r\n this.SetSystemControlsVisabilityAll(context, card);\r\n let section = card.sections.tryGet('PkDepartments');\r\n if (section !== null && section !== undefined) {\r\n section.fields.fieldChanged.add(e => {\r\n let checkboxInList: boolean = false;\r\n for (let i = 0; i < systemInfos.length; i++) {\r\n let systemInfo = systemInfos[i];\r\n let value = e.fieldValue as boolean;\r\n if (e.fieldName === systemInfo.CheckboxTableName &&\r\n systemInfo.VirtualTableName !== null) {\r\n let section = card.sections.getOrAdd(systemInfo.VirtualTableName);\r\n\r\n if (value) {\r\n this.FillSystemTable(section, systemInfo);\r\n if (systemInfo.VirtualTableControlName !== null) {\r\n this.SetSystemControlsVisability(context, card, e.fieldName, systemInfo.VirtualTableControlName);\r\n }\r\n checkboxInList = true;\r\n }\r\n else {\r\n for (let j = 0; j < section.rows.length; j++) {\r\n section.rows[j].state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!checkboxInList) {\r\n this.SetSystemControlsVisabilityAll(context, card);\r\n }\r\n });\r\n }\r\n } \r\n\r\n private CheckFlags(card: Card)\r\n {\r\n var depSection = card.sections.get(\"PkDepartments\");\r\n var checkboxsWithConnection: string[] = [];\r\n\r\n if (depSection === null || depSection === undefined) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < systemInfos.length; i++)\r\n {\r\n let systemInfo = systemInfos[i];\r\n if (systemInfo.IsConnected && systemInfo.CheckboxTableName) {\r\n if (depSection.fields.has(systemInfo.CheckboxTableName))\r\n {\r\n var value = depSection.fields.get(systemInfo.CheckboxTableName);\r\n\r\n if ((value === null || value === false) &&\r\n checkboxsWithConnection.find(x => x === systemInfo.CheckboxTableName) === undefined)\r\n {\r\n checkboxsWithConnection[checkboxsWithConnection.length] = systemInfo.CheckboxTableName;\r\n depSection.fields.set(systemInfo.CheckboxTableName, true, DotNetType.Boolean);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < systemInfos.length; i++)\r\n {\r\n let systemInfo = systemInfos[i];\r\n for (let j = 0; j < checkboxsWithConnection.length; j++)\r\n {\r\n let checkboxName = checkboxsWithConnection[j];\r\n if (systemInfo.CheckboxTableName == checkboxName && systemInfo.VirtualTableName)\r\n {\r\n var section = card.sections.getOrAdd(systemInfo.VirtualTableName);\r\n this.FillSystemTable(section, systemInfo);\r\n }\r\n }\r\n }\r\n\r\n if (checkboxsWithConnection.length > 0)\r\n {\r\n let isDocumentFlow: Boolean =\r\n depSection.fields.has(\"IsDocumentFlow\") &&\r\n depSection.fields.get(\"IsDocumentFlow\");\r\n\r\n\r\n if (!isDocumentFlow)\r\n {\r\n depSection.fields.set(\"IsDocumentFlow\", true, DotNetType.Boolean);\r\n }\r\n }\r\n }\r\n\r\n private FillSystemTable(section: CardSection, systemInfo) {\r\n let row = section.rows.add();\r\n row.state = CardRowState.Inserted;\r\n row.rowId = Guid.newGuid();\r\n row.set(\"Name\", systemInfo.Name, DotNetType.String);\r\n row.set(\"IsConnected\", systemInfo.IsConnected, DotNetType.Boolean);\r\n row.set(\"TechnicalInformation\", systemInfo.TechnicalInformation, DotNetType.String);\r\n row.set(\"StateID\", systemInfo.StateID, DotNetType.Int32);\r\n row.set(\"StateName\", systemInfo.StateName, DotNetType.String);\r\n row.set(\"ConnectionDate\", systemInfo.ConnectionDate, DotNetType.DateTime);\r\n row.set(\"Comment\", systemInfo.Comment, DotNetType.String);\r\n row.set(\"ResponsibleFromBusinessID\", systemInfo.ResponsibleFromBusinessID, DotNetType.Guid);\r\n row.set(\"ResponsibleFromBusinessName\", systemInfo.ResponsibleFromBusinessName, DotNetType.String);\r\n row.set(\"ITSystemResponsibleID\", systemInfo.ITSystemResponsibleID, DotNetType.Guid);\r\n row.set(\"ITSystemResponsibleName\", systemInfo.ITSystemResponsibleName, DotNetType.String);\r\n }\r\n\r\n private SetSystemControlsVisabilityAll(context: ICardUIExtensionContext, card: Card) {\r\n let section = card.sections.tryGet('PkDepartments');\r\n let systemsControl = context.model.blocks.get('SystemsControl');\r\n let systemTabsControl = systemsControl?.controls.find(x => x.name === 'SystemTabsControl') as TabControlViewModel;\r\n\r\n if (section === null || section === undefined ||\r\n systemsControl === null || systemsControl === undefined ||\r\n systemTabsControl === null || systemTabsControl === undefined) {\r\n return;\r\n }\r\n\r\n let isEntity: boolean =\r\n section.fields.has('IsEntity') &&\r\n section.fields.get('IsEntity');\r\n\r\n systemsControl.blockVisibility =\r\n isEntity\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n \r\n let isDocumentFlow: boolean =\r\n section.fields.has('IsDocumentFlow') &&\r\n section.fields.get('IsDocumentFlow');\r\n\r\n systemTabsControl.controlVisibility =\r\n isDocumentFlow\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n \r\n let form = systemTabsControl.block.form as DefaultFormTabWithoutTasksViewModel;\r\n if (form !== null) {\r\n for (let i = 0; i < systemInfos.length; i++) {\r\n let systemInfo = systemInfos[i];\r\n if (systemInfo.CheckboxTableName !== null && systemInfo.VirtualTableControlName !== null) {\r\n let flag = section.fields.tryGet(systemInfo.CheckboxTableName) as boolean;\r\n let control = form.controls.get(systemInfo.VirtualTableControlName);\r\n if (control !== null && control !== undefined) {\r\n control.controlVisibility =\r\n flag != null && flag\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private SetSystemControlsVisability(context: ICardUIExtensionContext, card: Card, checkboxTableName: string, virtualTableControlName: string) {\r\n let section = card.sections.tryGet('PkDepartments');\r\n let systemsControl = context.model.blocks.get('SystemsControl');\r\n let systemTabsControl = systemsControl?.controls.find(x => x.name === 'SystemTabsControl') as TabControlViewModel;\r\n\r\n if (section === null || section === undefined ||\r\n systemsControl === null || systemsControl === undefined ||\r\n systemTabsControl === null || systemTabsControl === undefined) {\r\n return;\r\n }\r\n\r\n let isEntity: boolean =\r\n section.fields.has('IsEntity')\r\n && section.fields.get('IsEntity');\r\n\r\n systemsControl.blockVisibility =\r\n isEntity\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n \r\n let isDocumentFlow: boolean =\r\n section.fields.has('IsDocumentFlow')\r\n && section.fields.get('IsDocumentFlow');\r\n\r\n systemTabsControl.controlVisibility =\r\n isDocumentFlow\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n \r\n if (checkboxTableName &&\r\n virtualTableControlName &&\r\n section.fields.has(checkboxTableName)) {\r\n let flag = section.fields.get(checkboxTableName) as boolean;\r\n if (flag) {\r\n let form = systemTabsControl.block.form as DefaultFormTabWithoutTasksViewModel;\r\n if (form !== null) {\r\n let control = form.controls.get(virtualTableControlName);\r\n if (control !== null && control !== undefined) {\r\n control.controlVisibility =\r\n flag != null && flag\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this.disposer) {\r\n this.disposer();\r\n this.disposer = null;\r\n }\r\n if (this._listener) {\r\n this._listener.stop();\r\n this._listener = null;\r\n }\r\n }\r\n\r\n}","export class PkTCOfferSharedHelper { \r\n static ApprovementRoles =\r\n {\r\n EngineerPTOLettersID : \"1493e0c0-b59f-4346-80be-0e60278f518a\",\r\n EngineerPTOLettersName : \"Инженер ПТО (распределительные письма и заявки)\",\r\n\r\n EngineerPTOID : \"f581eb87-d363-44cd-8f0c-fd25880748ef\",\r\n EngineerPTOName : \"Инженер ПТО (ТКП)\",\r\n\r\n PTOChiefRegionsID : \"78b6f4d2-3cc9-4abb-929c-ca38202fa4b8\",\r\n PTOChiefRegionsName : \"Начальник ПТО (регионы) (ТКП)\",\r\n\r\n PTOChiefID : \"b71530fc-d24d-4c50-a85a-8ee8ae53b718\",\r\n PTOChiefName : \"Начальник ПТО (ТКП)\",\r\n\r\n HeadOfTheSiteID : \"0753e78b-ca44-482e-8f8d-d17aee2df9a9\",\r\n HeadOfTheSiteName : \"Начальник участка (ТКП)\",\r\n\r\n SchedulerID : \"1dcf1f81-4330-41d4-b19d-41dc189f2eca\",\r\n SchedulerName : \"Планировщик (ТКП)\",\r\n\r\n ContractorID : \"9c1e0106-a228-4930-84a3-71af27fd9029\",\r\n ContractorName : \"Подрядчик (ТКП)\",\r\n\r\n SMUChiefID : \"d1593dd6-b425-4cf4-92e3-59a1b6cca1cc\",\r\n SMUChiefName : \"Руководитель СМУ (ТКП)\",\r\n\r\n CostEstimatorID : \"b7a1ac20-7997-4d70-9d0a-c45f793f22de\",\r\n CostEstimatorName :\"Сметчик (ТКП)\",\r\n\r\n ConstructionControlSpecialistID : \"08a76249-c065-42f9-9976-f4c8a725bb47\",\r\n ConstructionControlSpecialistName :\"Специалист строительного контроля (основной) (ТКП)\",\r\n\r\n FinancialManagerID : \"edf8beeb-176e-43af-bdcc-449dda8226b9\",\r\n FinancialManagerName : \"Финансовый менеджер (ТКП)\"\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext} from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { CardRow, CardRowState, CardSection, CardStoreMode} from 'tessa/cards';\r\nimport { FileListViewModel, GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { ButtonForCopyingRows } from 'src/pkScripts/Helpers/PkClientHelper';\r\nimport { showError } from 'tessa/ui';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { PkTCOfferSharedHelper } from 'src/pkScripts/helpers/PkTCOfferSharedHelper';\r\nimport moment from 'moment';\r\n\r\nexport class PkTCOfferUIExtension extends CardUIExtension {\r\n private _disposers: (Function|null)[] | null = [];\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkTCOfferTypeID)) {\r\n return;\r\n }\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n let accreditedContractorControl = context.model.controls.get(\"AccreditedContractor\");\r\n let unaccreditedContractorControl = context.model.controls.get(\"UnaccreditedContractor\");\r\n let employeeControl = context.model.controls.get(\"Employee\");\r\n let cardSection = context.model.card.sections.getOrAdd(\"PkTCOfferInfo\");\r\n let isUnaccredited = cardSection.fields.tryGet(\"IsUnaccredited\") ?? false;\r\n if (!accreditedContractorControl ||\r\n !unaccreditedContractorControl ||\r\n !employeeControl) {\r\n return;\r\n }\r\n\r\n accreditedContractorControl.controlVisibility = !isUnaccredited ? Visibility.Visible : Visibility.Collapsed;\r\n unaccreditedContractorControl.controlVisibility = isUnaccredited ? Visibility.Visible : Visibility.Collapsed;\r\n employeeControl.controlVisibility = !isUnaccredited ? Visibility.Visible : Visibility.Collapsed;\r\n\r\n cardSection.fields.fieldChanged.add (async e => {\r\n if (e.fieldName === \"IsUnaccredited\") {\r\n if (!accreditedContractorControl || !unaccreditedContractorControl || !employeeControl) {\r\n return;\r\n }\r\n if (e.fieldValue as boolean === true) {\r\n accreditedContractorControl.controlVisibility = Visibility.Collapsed;\r\n unaccreditedContractorControl.controlVisibility = Visibility.Visible;\r\n employeeControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n else {\r\n accreditedContractorControl.controlVisibility = Visibility.Visible;\r\n unaccreditedContractorControl.controlVisibility = Visibility.Collapsed;\r\n employeeControl.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n\r\n if (e.fieldName == \"SenderKCKExternalID\") {\r\n await this.fillEmployeeAsync(context);\r\n }\r\n\r\n if (e.fieldName == \"EmployeeName\") {\r\n await this.fillContractorAsync(context);\r\n }\r\n\r\n if (e.fieldName == \"IsRequired\") {\r\n var contractControl = context.model.controls.get(\"Contract\");\r\n if (contractControl == null) {\r\n return;\r\n }\r\n \r\n if (e.fieldValue) {\r\n cardSection.fields.set(\"ContractID\", null);\r\n cardSection.fields.set(\"ContractNameVirtual\", null);\r\n contractControl.isReadOnly = true;\r\n }\r\n else {\r\n contractControl.isReadOnly = false;\r\n }\r\n }\r\n });\r\n\r\n var objectsTable = context.model.controls.get(\"Objects\") as GridViewModel;\r\n\r\n if (!objectsTable) {\r\n return;\r\n }\r\n\r\n objectsTable.rowValidating.add (async () => { \r\n this.fillAssignmentAndApprovementTableAsync(context);\r\n this.fillArticlesIDPAsync(context);\r\n });\r\n\r\n let articlesIDPTable = context.model.controls.get(\"IdpList\") as GridViewModel;\r\n\r\n if (!articlesIDPTable) {\r\n return;\r\n }\r\n \r\n articlesIDPTable.rowValidating.add (async e => {\r\n let objectID = e.row.tryGet(\"ObjectID\");\r\n \r\n let objectList = context.model.card.sections.get(\"PkObjectList\")!;\r\n let idpList = context.model.card.sections.get(\"PkTCOfferIDPList\")!;\r\n \r\n let b = false;\r\n \r\n objectList.rows.forEach(r => {\r\n if (r.tryGet(\"ObjectID\") == objectID) {\r\n b = true;\r\n }\r\n });\r\n\r\n if (!b) {\r\n idpList.rows.remove(e.row);\r\n await showError(\"Выберите объект, содержащийся в табличной части \\\"Объекты\\\".\");\r\n }\r\n\r\n if (!e.row.tryGetField(\"ArCostItemID\")?.$value) {\r\n idpList.rows.remove(e.row);\r\n await showError(\"Необходимо заполнить статью ИДП\");\r\n }\r\n });\r\n\r\n let approversTable = context.model.controls.get(\"Matching\") as GridViewModel;\r\n\r\n if (approversTable) {\r\n approversTable.addButton.setVisibility(Visibility.Collapsed);\r\n approversTable.removeButton.setVisibility(Visibility.Collapsed);\r\n\r\n\r\n approversTable.rowValidating.add(async e => {\r\n let roleID = e.row.tryGet(\"RoleID\");\r\n let roleName = e.row.tryGet(\"RoleName\");\r\n let cardRow = new CardRow(); \r\n let pkTCOfferApprovalTable = context.model.card.sections.getOrAdd(\"PkTCOfferApprovalTable\");\r\n\r\n for (let i = 0; i < pkTCOfferApprovalTable.rows.length; i++) {\r\n let row = pkTCOfferApprovalTable.rows[i];\r\n if (row.tryGet(\"MatchingRowID\") == e.row.rowId) {\r\n if (row.tryGet(\"RoleID\") == null) {\r\n row.set(\"RoleID\", roleID, DotNetType.Guid);\r\n row.set(\"RoleName\", roleName, DotNetType.String);\r\n }\r\n\r\n if (row.state != CardRowState.Deleted) {\r\n let userID = row.tryGet(\"UserID\");\r\n if (row.tryGet(\"OrganizationExternalID\") == null\r\n && userID != null) { \r\n await this.fillUserDepartmentAsync(context, userID, row); \r\n }\r\n\r\n cardRow = row;\r\n }\r\n }\r\n }\r\n \r\n if(!cardRow.has(\"OrganizationExternalID\") || cardRow.tryGet(\"OrganizationID\") == null) {\r\n e.row.set('OrganizationID', null);\r\n e.row.set('OrganizationExternalID', null);\r\n e.row.set('OrganizationName', null);\r\n }\r\n else {\r\n e.row.set('OrganizationID', createTypedField(cardRow.tryGet('OrganizationID'), DotNetType.Guid));\r\n e.row.set('OrganizationExternalID', createTypedField(cardRow.tryGet('OrganizationExternalID'), DotNetType.Int64));\r\n e.row.set('OrganizationName', createTypedField(cardRow.tryGet('OrganizationName'), DotNetType.String)); \r\n }\r\n }); \r\n }\r\n\r\n this._disposers!.push(ButtonForCopyingRows.Initialized(context, \"IdpList\", \"PkTCOfferIDPList\"));\r\n\r\n let filesControlViewModel = context.model.controls.get(\"Files\") as FileListViewModel;\r\n \r\n if (!filesControlViewModel) {\r\n return;\r\n }\r\n\r\n let userName = await this.getCurrentUserNameAsync(context);\r\n \r\n filesControlViewModel.fileContainer.containerFileChanging.add(e => {\r\n if(e.added) {\r\n if (e.added.category?.id == ChFileCategories.PkTCOfferUnsigned.id) {\r\n let unsignedFile = filesControlViewModel.files.find(f => \r\n f.model.category?.id == ChFileCategories.PkTCOfferUnsigned.id);\r\n if (unsignedFile) {\r\n if (confirm(\"Вы действительно хотите заменить файл технико-коммерческого предложения?\")) {\r\n unsignedFile.model.changeCategory(ChFileCategories.PkTCOfferUnsignedIrrelevant);\r\n }\r\n else {\r\n e.cancel = true;\r\n }\r\n }\r\n }\r\n\r\n if (e.added.category?.id == ChFileCategories.PkTCOfferWorkSchedule.id) {\r\n let workScheduleFile = filesControlViewModel.files.find(f => \r\n f.model.category?.id == ChFileCategories.PkTCOfferWorkSchedule.id);\r\n if (workScheduleFile) {\r\n if (confirm(\"Вы действительно хотите заменить файл графика работ?\")) {\r\n workScheduleFile.model.changeCategory(ChFileCategories.PkTCOfferWorkScheduleIrrelevant);\r\n }\r\n else {\r\n e.cancel = true;\r\n }\r\n }\r\n }\r\n\r\n let dateTime = moment(new Date()).format('DD.MM.YYYY HH:mm');\r\n e.added.changeName(dateTime + '_' + userName.$value + '_' + e.added.name);\r\n }\r\n\r\n if (e.removed) {\r\n if (e.removed.category?.id == ChFileCategories.PkTCOfferUnsigned.id) {\r\n let unsignedFile = filesControlViewModel.files.find(f => \r\n f.model.category?.id == ChFileCategories.PkTCOfferUnsignedIrrelevant.id);\r\n if (unsignedFile) {\r\n unsignedFile.model.changeCategory(ChFileCategories.PkTCOfferUnsigned);\r\n }\r\n }\r\n\r\n if (e.removed.category?.id == ChFileCategories.PkTCOfferWorkSchedule.id) {\r\n let workScheduleFile = filesControlViewModel.files.find(f => \r\n f.model.category?.id == ChFileCategories.PkTCOfferWorkScheduleIrrelevant.id);\r\n if (workScheduleFile) {\r\n workScheduleFile.model.changeCategory(ChFileCategories.PkTCOfferWorkSchedule);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkTCOfferTypeID)) {\r\n return;\r\n }\r\n\r\n let cardSection = context.model.card.sections.getOrAdd(\"PkTCOfferInfo\");\r\n let isUnaccredited = cardSection.fields.tryGet(\"IsUnaccredited\") ?? false;\r\n if (!isUnaccredited) {\r\n if (!cardSection.fields.tryGetField(\"SenderKCKExternalID\")) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Необходимо заполнить подрядчика.\");\r\n }\r\n }\r\n else {\r\n if (!cardSection.fields.tryGet(\"UnaccreditedContractor\")) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Необходимо заполнить поле \\\"Неаккредитованный подрядчик\\\". Если подрядчик не определен, укажите прочерк.\");\r\n }\r\n }\r\n\r\n let isRequired = cardSection.fields.tryGet(\"IsRequired\") ?? false;\r\n if (!isRequired && (!cardSection.fields.tryGetField(\"ContractID\"))) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Заполните договор, к которому необходимо дополнительное соглашение, \" + \r\n \"\\nили укажите, что требуется новый договор.\");\r\n }\r\n }\r\n\r\n private async fillArticlesIDPAsync(context: ICardUIExtensionContext) {\r\n if (context.model.card.sections.has(\"PkTCOfferIDPList\") &&\r\n context.model.card.sections.has(\"PkObjectList\")) {\r\n let pkTCOfferIDPList = context.model.card.sections.get(\"PkTCOfferIDPList\")!;\r\n let objectList = context.model.card.sections.get(\"PkObjectList\")!;\r\n \r\n if (objectList.rows.length > 0) {\r\n objectList.rows.forEach(objectListRow => {\r\n let objectID = objectListRow.tryGet(\"ObjectID\");\r\n let objectName = objectListRow.tryGet(\"ObjectName\");\r\n \r\n let b = false;\r\n\r\n pkTCOfferIDPList.rows.forEach(pkTCOfferIDPListRow => {\r\n if (pkTCOfferIDPListRow.tryGet(\"ObjectID\") == objectID) {\r\n b = true;\r\n } \r\n });\r\n \r\n if (!b) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"ObjectID\", objectID, DotNetType.Guid);\r\n row.set(\"ObjectName\", objectName, DotNetType.String);\r\n row.set(\"ArCostItemID\", null, DotNetType.Guid);\r\n row.set(\"ArCostItemName\", null, DotNetType.String);\r\n row.set(\"ArCostItemIdpItemCode\", null, DotNetType.String);\r\n row.state = CardRowState.Inserted;\r\n pkTCOfferIDPList.rows.push(row);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private async fillAssignmentAndApprovementTableAsync(context: ICardUIExtensionContext)\r\n {\r\n let objectSection = context.model.card.sections.tryGet(\"PkObjectList\")!;\r\n let commonInfoSection = context.model.card.sections.tryGet(\"DocumentCommonInfo\")!;\r\n if (context.model.card.sections.has(\"PkTCOfferApprovalTable\") &&\r\n context.model.card.sections.has(\"PkTCOfferRoles\") &&\r\n commonInfoSection &&\r\n objectSection && \r\n objectSection.rows.length > 0) {\r\n let request = new CardRequest;\r\n request.requestType = PkRequestTypes.PkTCOfferGetApprovers;\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n request.info[\"ObjectID\"] = createTypedField(objectSection.rows[0].tryGetField(\"ObjectID\")?.$value, DotNetType.Guid);\r\n request.info[\"AuthorID\"] = createTypedField(commonInfoSection.fields.tryGetField(\"AuthorID\")?.$value, DotNetType.Guid);\r\n \r\n let response = await CardService.instance.request(request);\r\n \r\n if (!response.info.Approvers) {\r\n return;\r\n }\r\n\r\n let assignmentObj = response.info.Approvers;\r\n let pkTCOfferApprovalTable = context.model.card.sections.tryGet(\"PkTCOfferApprovalTable\");\r\n let pkTCOfferRoles = context.model.card.sections.getOrAdd(\"PkTCOfferRoles\");\r\n \r\n if (!assignmentObj\r\n || !pkTCOfferApprovalTable) {\r\n return;\r\n }\r\n\r\n //Удаление существующих записей в таблице Согласования\r\n this.clearCollectionSection(context.model.card.storeMode, pkTCOfferApprovalTable);\r\n this.clearCollectionSection(context.model.card.storeMode, pkTCOfferRoles);\r\n\r\n assignmentObj.forEach(assignment => {\r\n let roww = pkTCOfferRoles.rows\r\n .find(r => r.tryGetField(\"RoleID\")?.$value == assignment.RoleID.$value);\r\n let matchingRowID = roww?.rowId;\r\n\r\n if (!matchingRowID) { \r\n let roleRow = new CardRow();\r\n roleRow.rowId = Guid.newGuid();\r\n matchingRowID = roleRow.rowId;\r\n roleRow.set(\"RoleID\", assignment.RoleID);\r\n roleRow.set(\"RoleName\", assignment.RoleName);\r\n roleRow.set(\"OrganizationID\", assignment.OrganizationID);\r\n roleRow.set(\"OrganizationExternalID\", assignment.OrganizationExternalID);\r\n roleRow.set(\"OrganizationName\", assignment.OrganizationName);\r\n roleRow.set(\"StageID\", assignment.StageId);\r\n roleRow.set(\"StageName\", assignment.StageName);\r\n roleRow.set(\"Result\", assignment.Result);\r\n roleRow.set(\"Date\", assignment.Date);\r\n roleRow.state = CardRowState.Inserted;\r\n pkTCOfferRoles.rows.push(roleRow);\r\n }\r\n\r\n if (assignment.RoleID.$value == PkTCOfferSharedHelper.ApprovementRoles.ContractorID) {\r\n return;\r\n }\r\n\r\n let currentRow = new CardRow();\r\n currentRow.rowId = Guid.newGuid();\r\n currentRow.set(\"RoleID\", assignment.RoleID);\r\n currentRow.set(\"RoleName\", assignment.RoleName);\r\n currentRow.set(\"UserID\", assignment.UserID);\r\n currentRow.set(\"UserName\", assignment.UserName);\r\n currentRow.set(\"OrganizationID\", assignment.OrganizationID);\r\n currentRow.set(\"OrganizationExternalID\", assignment.OrganizationExternalID);\r\n currentRow.set(\"OrganizationName\", assignment.OrganizationName);\r\n currentRow.set(\"StageID\", assignment.StageId);\r\n currentRow.set(\"StageName\", assignment.StageName);\r\n currentRow.set(\"Result\", assignment.Result);\r\n currentRow.set(\"Date\", assignment.Date);\r\n currentRow.set(\"MatchingRowID\", createTypedField(matchingRowID, DotNetType.Guid));\r\n currentRow.state = CardRowState.Inserted;\r\n pkTCOfferApprovalTable?.rows.push(currentRow); \r\n });\r\n }\r\n }\r\n\r\n private async fillUserDepartmentAsync(context: ICardUIExtensionContext, userID: DotNetType.Guid, cardRow: CardRow)\r\n {\r\n if (!context.model.card.sections.has(\"PkTCOfferApprovalTable\")) {\r\n return;\r\n }\r\n\r\n let request = new CardRequest;\r\n request.requestType = PkRequestTypes.PkTCOfferGetUserDepartment;\r\n request.info[\"UserID\"] = createTypedField(userID, DotNetType.Guid);\r\n \r\n let response = await CardService.instance.request(request);\r\n \r\n if (!response.info.OrganizationExternalID) {\r\n return;\r\n }\r\n \r\n cardRow.set(\"OrganizationID\", createTypedField(response.info.OrganizationID.$value, DotNetType.Guid));\r\n cardRow.set(\"OrganizationExternalID\", createTypedField(response.info.OrganizationExternalID.$value, DotNetType.Int64));\r\n cardRow.set(\"OrganizationName\", createTypedField(response.info.OrganizationName.$value, DotNetType.String));\r\n }\r\n\r\n private async fillEmployeeAsync(context: ICardUIExtensionContext)\r\n {\r\n let pkTCOfferInfoSection = context.model.card.sections.tryGet(\"PkTCOfferInfo\")!;\r\n if (pkTCOfferInfoSection) {\r\n let request = new CardRequest;\r\n request.requestType = PkRequestTypes.PkTCOfferGetEmployee;\r\n request.info[\"SenderKCKExternalID\"] = createTypedField(pkTCOfferInfoSection.fields.tryGet(\"SenderKCKExternalID\"), DotNetType.Int64);\r\n \r\n let response = await CardService.instance.request(request);\r\n\r\n let result = response.validationResult.build();\r\n \r\n if (!result.isSuccessful) {\r\n context.validationResult.add(result);\r\n return;\r\n }\r\n\r\n pkTCOfferInfoSection.fields.set(\"EmployeeID\", response.info.ID);\r\n pkTCOfferInfoSection.fields.set(\"EmployeeName\", response.info.Name);\r\n }\r\n }\r\n\r\n private async getCurrentUserNameAsync(context: ICardUIExtensionContext) : Promise\r\n {\r\n let pkTCOfferInfoSection = context.model.card.sections.tryGet(\"PkTCOfferInfo\")!;\r\n if (pkTCOfferInfoSection) {\r\n let request = new CardRequest;\r\n request.requestType = PkRequestTypes.PkTCOfferGetUserName;\r\n\r\n let response = await CardService.instance.request(request);\r\n\r\n let result = response.validationResult.build();\r\n \r\n if (!result.isSuccessful) {\r\n context.validationResult.add(result);\r\n return;\r\n }\r\n\r\n return response.info.Name;\r\n }\r\n }\r\n\r\n private async fillContractorAsync(context: ICardUIExtensionContext)\r\n {\r\n if (!context.model.card.sections.has(\"PkTCOfferApprovalTable\")\r\n || !context.model.card.sections.has(\"PkTCOfferRoles\")\r\n || !context.model.card.sections.has(\"PkTCOfferInfo\")) {\r\n return;\r\n }\r\n\r\n let pkTCOfferInfo = context.model.card.sections.tryGet(\"PkTCOfferInfo\")!;\r\n let pkTCOfferApprovalTable = context.model.card.sections.tryGet(\"PkTCOfferApprovalTable\")!;\r\n let employeeID = pkTCOfferInfo.fields.tryGet(\"EmployeeID\");\r\n let employeeName = pkTCOfferInfo.fields.tryGet(\"EmployeeName\");\r\n\r\n pkTCOfferApprovalTable.rows.forEach(r => {\r\n if (r.tryGetField(\"RoleID\")?.$value == PkTCOfferSharedHelper.ApprovementRoles.ContractorID) {\r\n r.state = CardRowState.Deleted;\r\n }\r\n });\r\n\r\n let matchingRowID = context.model.card.sections.getOrAdd(\"PkTCOfferRoles\").rows\r\n .find(r => r.tryGetField(\"RoleID\")?.$value == PkTCOfferSharedHelper.ApprovementRoles.ContractorID)?.rowId;\r\n if (!matchingRowID) {\r\n return;\r\n }\r\n \r\n var matching = context.model.controls.get(\"Matching\") as GridViewModel;\r\n var matchingRow = matching?.rows?.find(r => r.rowId == matchingRowID);\r\n if (!matchingRow) {\r\n return;\r\n }\r\n\r\n matchingRow.row.set(\"OrganizationID\", null);\r\n matchingRow.row.set(\"OrganizationExternalID\", null);\r\n matchingRow.row.set(\"OrganizationName\", null);\r\n\r\n if (employeeID == null) {\r\n return;\r\n }\r\n\r\n let cardRow = new CardRow();\r\n cardRow.rowId = Guid.newGuid();\r\n cardRow.set(\"RoleID\", createTypedField(PkTCOfferSharedHelper.ApprovementRoles.ContractorID, DotNetType.Guid));\r\n cardRow.set(\"RoleName\", createTypedField(PkTCOfferSharedHelper.ApprovementRoles.ContractorName, DotNetType.String));\r\n cardRow.set(\"MatchingRowID\", createTypedField(matchingRowID, DotNetType.Guid));\r\n cardRow.set(\"UserID\", createTypedField(employeeID, DotNetType.Guid));\r\n cardRow.set(\"UserName\", createTypedField(employeeName, DotNetType.String));\r\n await this.fillUserDepartmentAsync(context, employeeID, cardRow);\r\n cardRow.set(\"Result\", null);\r\n cardRow.set(\"Date\", null);\r\n cardRow.state = CardRowState.Inserted;\r\n pkTCOfferApprovalTable?.rows.push(cardRow);\r\n matchingRow.row.set(\"OrganizationID\", createTypedField(cardRow.tryGet(\"OrganizationID\"), DotNetType.Guid));\r\n matchingRow.row.set(\"OrganizationExternalID\", createTypedField(cardRow.tryGet(\"OrganizationExternalID\"), DotNetType.Int64));\r\n matchingRow.row.set(\"OrganizationName\", createTypedField(cardRow.tryGet(\"OrganizationName\"), DotNetType.String));\r\n }\r\n \r\n private async clearCollectionSection(storeMode: CardStoreMode, section: CardSection) {\r\n for (let row of section.rows.filter(x => x.state != CardRowState.Deleted)) {\r\n this.removeRowFromCollectionSection(storeMode, section, row)\r\n }\r\n }\r\n\r\n private async removeRowFromCollectionSection(storeMode: CardStoreMode, section: CardSection, row: CardRow) {\r\n if (storeMode == CardStoreMode.Update && row.state != CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n else {\r\n section.rows.remove(row);\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposers) {\r\n this._disposers.forEach(element => {\r\n element!();\r\n element = null;\r\n });\r\n ;\r\n this._disposers = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType, Visibility } from 'tessa/platform';\r\nimport { GridViewModel, GridRowViewModel, GridRowAction, GridRowEventArgs, DecimalBoxViewModel, ButtonViewModel } from 'tessa/ui/cards/controls';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { CardRow, CardRowState } from 'tessa/cards';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { showNotEmpty, UIButton } from 'tessa/ui';\r\nimport { reaction } from 'mobx';\r\nimport { PkUIHelper } from '../../UI/PkUIHelper';\r\nimport { PkClientHelper } from 'src/pkScripts/Helpers/PkClientHelper';\r\nimport { PkContractUIHelper } from 'src/pkScripts/Helpers/PkContractUIHelper';\r\n\r\nlet stopFlag = true;\r\n\r\n/** Работа с карточкой Статьи стикера. */\r\nexport class PkArticleStickerUIExtension extends CardUIExtension {\r\n\r\n private _disposerSelectRow: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkArticleStickerTypeID)) {\r\n return;\r\n }\r\n\r\n const arArticleParentStickersTableControl = CdUIHelper.GetUIControl(context, \"ArArticleParentStickersTableControl\");\r\n if (arArticleParentStickersTableControl === null || arArticleParentStickersTableControl === undefined){\r\n return;\r\n }\r\n arArticleParentStickersTableControl.rowInitialized.add(e => { \r\n if(e.action != GridRowAction.Deleting)\r\n {\r\n e.row.fieldChanged.add(async e1 => {\r\n if (e1.fieldName == \"CostItemID\" && stopFlag) {\r\n stopFlag = false;\r\n this.ClearCollection(context, 'ArArticleStickers', e.row.rowId);\r\n if (e1.fieldValue != null) {\r\n await this.GetArticleStickersByParentRequest(context, e1.fieldValue, e.row.rowId);\r\n }\r\n stopFlag = true;\r\n\r\n // обновим сумму всего\r\n this.CalcSumAmount(context, e);\r\n }\r\n\r\n // сумма всего\r\n if (e1.fieldName == \"Amount\" && e1.fieldValue != null) {\r\n await this.RecalcAmountWithoutVatAsync(e, e1.fieldValue);\r\n\r\n // пересчет суммы аванса\r\n let amountPrepayment = e.row.tryGet('AmountPrepayment'); // сумма аванса\r\n let percentPrepayment = e.row.tryGet('PercentPrepayment'); // процент аванса\r\n\r\n if (percentPrepayment != null && amountPrepayment == null) \r\n {\r\n e.row.set('AmountPrepayment', (e1.fieldValue * percentPrepayment / 100).toString(), DotNetType.Decimal);\r\n }\r\n }\r\n\r\n // процент аванса\r\n if (e1.fieldName == \"PercentPrepayment\" && e1.fieldValue != null) \r\n {\r\n let amountPrepayment = e.row.tryGet('AmountPrepayment'); // сумма аванса\r\n let amount = e.row.tryGet('Amount'); // сумма всего\r\n\r\n if (amountPrepayment == null && amount != null) \r\n {\r\n e.row.set('AmountPrepayment', (amount * e1.fieldValue / 100).toString(), DotNetType.Decimal);\r\n }\r\n }\r\n\r\n // ставка ндс\r\n if (e1.fieldName == \"VatRateID\" && e1.fieldValue != null) {\r\n let amount = e.row.tryGet('Amount'); // сумма всего\r\n if (amount != null) {\r\n await this.RecalcAmountWithoutVatAsync(e, amount);\r\n }\r\n }\r\n });\r\n\r\n // подписка на контролы внутри\r\n if (e.rowModel) {\r\n let arArticleStickersTableControl = e.rowModel.controlsBag.find(x => x.name == \"ArArticleStickersTableControl\");\r\n // Заполнение полей в родительских статьях.\r\n this.SetValuesInArArticleParentStickers(context, arArticleStickersTableControl as GridViewModel);\r\n\r\n // отобразим поле \"Текущая сумма по статье\" только для дочерних статей (ДС и т.д.)\r\n let currentAmountArticleContractControl = e.rowModel.controlsBag.find(x => x.name == \"CurrentAmountArticleContractControl\");\r\n if (e.row.tryGet('ParentArticleRowGuid') != null && \r\n e.row.tryGet('ParentArticleRowGuid')!.length > 1 &&\r\n currentAmountArticleContractControl != null)\r\n {\r\n currentAmountArticleContractControl.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n }\r\n });\r\n\r\n arArticleParentStickersTableControl.rowEditorClosed.add(e => {\r\n if (e != null) {\r\n this.SetArticleStickersVirtualCollection(context);\r\n }\r\n });\r\n\r\n this.SetArticleStickersVirtualCollection(context);\r\n\r\n // Механизм клика по родительской строке с последующим отображением данных в дочерней виртуальной таблице.\r\n this.ClickOnParentRowTable(context);\r\n }\r\n\r\n /** Заполнение полей в родительских статьях. */\r\n private SetValuesInArArticleParentStickers(context: ICardUIExtensionContext, arArticleStickersTableControl: GridViewModel | undefined) {\r\n // получим контрол с родительскими статьями\r\n let arArticleParentStickers = context.model.card.sections.tryGet('ArArticleParentStickers');\r\n if (arArticleStickersTableControl === null || arArticleStickersTableControl === undefined){\r\n return;\r\n }\r\n\r\n let nextOpenRow: GridRowViewModel | undefined;\r\n\t\tlet nextOpenRowBool = false;\r\n\r\n // подписка на изменение данных в статьях стикера\r\n arArticleStickersTableControl.rowEditorClosed.add(async e => { \r\n if (e.action != GridRowAction.Deleting)\r\n {\r\n let arArticleStickers = context.model.card.sections.tryGet('ArArticleStickers');\r\n if (arArticleStickers) { \r\n const filterStickRows = arArticleStickers.rows.filter(x => x.state !== CardRowState.Deleted && Guid.equals(x.tryGetField('ParentRowID')?.$value, e.row.parentRowId));\r\n // сумма всего\r\n let amount = PkClientHelper.SumStickerAmount(filterStickRows, 'Amount');\r\n if (arArticleParentStickers) {\r\n arArticleParentStickers.rows.forEach(async row =>\r\n {\r\n if (row.rowId == e.row.parentRowId) {\r\n let parentArticleRowGuid = row.tryGet('ParentArticleRowGuid');\r\n if (parentArticleRowGuid != null && (parentArticleRowGuid as string).length > 1) {\r\n let amountContact = await PkContractUIHelper.GetAmountFromContractAsync(context, parentArticleRowGuid);\r\n row.set(\"Amount\", (amount + amountContact)?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n else {\r\n row.set(\"Amount\", amount?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (nextOpenRow && nextOpenRowBool) {\r\n\t\t\t\t\tnextOpenRowBool = false;\r\n await arArticleStickersTableControl.editRow(nextOpenRow);\r\n }\r\n\t\t\t\telse {\r\n nextOpenRowBool = false;\r\n nextOpenRow = undefined;\r\n }\r\n } \r\n });\r\n\r\n arArticleStickersTableControl.rowInitialized.add(e => { \r\n // отображение контролов на форме стикеров для дочерних документов\r\n if (e.rowModel) {\r\n let initialAmountControl = e.rowModel.controlsBag.find(x => x.name == \"InitialAmountControl\");\r\n let remainOfStickerControl = e.rowModel.controlsBag.find(x => x.name == \"RemainOfStickerControl\");\r\n let arArticleParentStickers1 = context.model.card.sections.tryGet('ArArticleParentStickers');\r\n if (arArticleParentStickers1 != null) {\r\n const isParentClarifying = arArticleParentStickers1.rows.filter(x => \r\n x.state !== CardRowState.Deleted && x.rowId == e.row.parentRowId &&\r\n x.tryGetField('TypeID')?.$value == 0).length;\r\n if (isParentClarifying > 0)\r\n {\r\n // Текущая сумма\r\n if (initialAmountControl != null)\r\n {\r\n initialAmountControl.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n // Остаток по стикеру (ист.)\r\n if (remainOfStickerControl != null)\r\n {\r\n remainOfStickerControl.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n }\r\n\r\n // установка курсора в поле Сумма изменения\r\n let stickerAmountControl = e.rowModel.controlsBag.find(x => x.name == \"StickerAmountControl\") as DecimalBoxViewModel;\r\n if (stickerAmountControl) {\r\n PkUIHelper.SetFocusInControlAndSelectText(stickerAmountControl);\r\n // подписка на нажаие клавишы Enter для поля Сумма изменения для открытия следующей строки\r\n stickerAmountControl.keyDown.add(async ee => {\r\n if (ee.event.key === 'Enter') {\r\n\t\t\t\t\t\t\tnextOpenRowBool = true;\r\n ee.control.isFocused = false;\r\n nextOpenRow = await PkUIHelper.NextRowButtonClickAsync(e, arArticleStickers, arArticleStickersTableControl);\r\n }\r\n });\r\n }\r\n\r\n // подписка на кнопку Следующая строка\r\n let nextRowButton = e.rowModel.controlsBag.find(x => x.name == \"NextRowButton\") as ButtonViewModel;\r\n let arArticleStickers = context.model.card.sections.tryGet('ArArticleStickers');\r\n if (nextRowButton != null && arArticleStickers) {\r\n nextRowButton.onClick = async () => {\r\n\t\t\t\t\t\tnextOpenRowBool = true;\r\n nextOpenRow = await PkUIHelper.NextRowButtonClickAsync(e, arArticleStickers, arArticleStickersTableControl);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Считаем и устанавливаем сумму всего. */\r\n private CalcSumAmount(context: ICardUIExtensionContext, e: GridRowEventArgs) {\r\n let arArticleStickers = context.model.card.sections.tryGet('ArArticleStickers');\r\n if (arArticleStickers) {\r\n const filterStickRows = arArticleStickers.rows.filter(x => x.state !== CardRowState.Deleted && Guid.equals(x.tryGetField('ParentRowID')?.$value, e.row.rowId));\r\n // сумма всего\r\n let amount = PkClientHelper.SumStickerAmount(filterStickRows, 'Amount');\r\n e.row.set(\"Amount\", (amount)?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n }\r\n\r\n /** Получим стикерные статьи с сервера. */\r\n private async GetArticleStickersByParentRequest(context: ICardUIExtensionContext, costItemID: any, parentRowID: any)\r\n {\r\n if (!costItemID || !parentRowID) {\r\n return;\r\n }\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetArticleStickersByParent;\r\n request.info[\"StickerParentID\"] = createTypedField(costItemID != null ? costItemID.toString() : null, DotNetType.String);\r\n // проверка ответа\r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n if (response.info.stickersList) {\r\n let stickersList = response.info.stickersList;\r\n let i = 1;\r\n let arArticleStickers = context.model.card.sections.tryGet('ArArticleStickers');\r\n if (arArticleStickers) {\r\n let stickRows = arArticleStickers.rows;\r\n for (let sticker of stickersList) {\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"ParentRowID\", createTypedField(parentRowID, DotNetType.Guid));\r\n newRow.set(\"CostItemID\", sticker.ID);\r\n newRow.set(\"CostItemMdsID\", sticker.MdsID);\r\n newRow.set(\"CostItemName\", sticker.Name);\r\n newRow.set(\"Amount\", null);\r\n newRow.set(\"Order\", createTypedField(i++, DotNetType.Int32));\r\n newRow.state = CardRowState.Inserted;\r\n stickRows.push(newRow);\r\n }\r\n }\r\n } \r\n }\r\n\r\n /** Очистка строк в коллекции по parentRowID. */\r\n private ClearCollection(context: ICardUIExtensionContext, sectionName: string, parentRowID: any) {\r\n const rows = context.model.card.sections.tryGet(sectionName)!.rows;\r\n if (!rows) return;\r\n let removeRows: CardRow[];\r\n if (parentRowID != null) { \r\n removeRows = rows.filter(x => x.state === CardRowState.Inserted && Guid.equals(x.tryGetField('ParentRowID')?.$value, parentRowID));\r\n }\r\n else {\r\n removeRows = rows.filter(x => x.state === CardRowState.Inserted);\r\n }\r\n\r\n for (let row of removeRows) {\r\n rows.remove(row);\r\n }\r\n for (let row of rows) {\r\n if (parentRowID != null) {\r\n if (Guid.equals(row.tryGetField('ParentRowID')?.$value, parentRowID)) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n else {\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n\r\n /** Заполнение виртуальной таблицы снизу для отображения все статей в карточке с их стикерами. */\r\n private SetArticleStickersVirtualCollection(context: ICardUIExtensionContext, parentRowIDCick: string = \"\") {\r\n let arArticleStickersVirtual = context.model.card.sections.tryGet('ArArticleStickersVirtual');\r\n let arArticleStickers = context.model.card.sections.tryGet('ArArticleStickers');\r\n let arArticleParentStickers = context.model.card.sections.tryGet('ArArticleParentStickers');\r\n if (!arArticleStickersVirtual || !arArticleStickers || !arArticleParentStickers) {\r\n return;\r\n }\r\n \r\n let removeRows = arArticleStickersVirtual.rows.filter(x => x.state !== CardRowState.Deleted);\r\n for (let parentArticle of removeRows) {\r\n arArticleStickersVirtual.rows.remove(parentArticle);\r\n }\r\n \r\n let i = 1;\r\n\r\n // считаем сумму Итого\r\n let pkArticleStickerVirtial = context.model.card.sections.tryGet('PkArticleStickerVirtial');\r\n if (pkArticleStickerVirtial) {\r\n const filterStickRows = arArticleStickers.rows.filter(x => x.state !== CardRowState.Deleted);\r\n pkArticleStickerVirtial.fields.set(\"AmountTotal\", PkClientHelper.SumStickerAmount(filterStickRows, 'Amount')?.toString() ?? null, DotNetType.Decimal);\r\n }\r\n\r\n // считаем что осталось распределить\r\n let pkArticleSticker = context.model.card.sections.tryGet('PkArticleSticker');\r\n if (pkArticleSticker && pkArticleStickerVirtial) {\r\n const filterParentStickRows = arArticleParentStickers.rows.filter(x => x.state !== CardRowState.Deleted);\r\n // сумма итого\r\n let amountTotal = PkClientHelper.SumStickerAmount(filterParentStickRows, 'Amount');\r\n // сумма по договору \r\n let amount = pkArticleSticker.fields.tryGetField('Amount')?.$value;\r\n let amountRemains: number = 0.00;\r\n if (amount != null) {\r\n amountRemains = parseFloat(amount) - amountTotal;\r\n }\r\n\r\n // TODO пока комментиурем, временно\r\n // если это допник \r\n // let parentDirectumCode = pkArticleSticker.fields.tryGetField('ParentDirectumCode');\r\n // if (parentDirectumCode){\r\n // // получим сумму родительского договорного документа по статьям\r\n // let amountParentContract = pkArticleStickerVirtial.fields.tryGetField('AmountParentContract')?.$value;\r\n\r\n // // получим тип статей\r\n // // 0 - не допник.\r\n // // 1 - Уточняющий.\r\n // // 2 - Изменяющий.\r\n // // 3 - смешанный.\r\n // var typeArticles = pkArticleStickerVirtial.fields.tryGetField('TypeArticles')?.$value;\r\n // if (typeArticles == 1){\r\n // amountRemains = amount - amountParentContract;\r\n // }\r\n // }\r\n\r\n if (amountRemains < 0)\r\n {\r\n amountRemains = 0;\r\n }\r\n \r\n pkArticleStickerVirtial.fields.set(\"AmountRemains\", amountRemains.toString(), DotNetType.Decimal);\r\n }\r\n\r\n // отсортируем родительские статьи с непустыми суммами\r\n let filterArArticleStickers: CardRow[];\r\n if (parentRowIDCick != null && parentRowIDCick != \"\") {\r\n filterArArticleStickers = arArticleParentStickers.rows.filter(x => x.state !== CardRowState.Deleted \r\n && x.rowId == parentRowIDCick);\r\n }\r\n else {\r\n filterArArticleStickers = arArticleParentStickers.rows.filter(x => x.state !== CardRowState.Deleted \r\n && x.tryGetField('Amount')?.$value != null);\r\n }\r\n \r\n \r\n // начинаем цикл с родительских статей БК и по одной добавляем в коллекцию\r\n // после каждой статьи добавляем статьи-стикеры\r\n for (let parentArticle of filterArArticleStickers) {\r\n let costItemID = parentArticle.getField('CostItemID')?.$value;\r\n if (!costItemID || parentArticle.state == CardRowState.Deleted) {\r\n continue;\r\n }\r\n\r\n // отфильтруем статьи стикеры\r\n const filterStickerRows = arArticleStickers.rows.filter(x => x.state !== CardRowState.Deleted \r\n && Guid.equals(x.tryGetField('ParentRowID')?.$value, parentArticle.rowId)\r\n && x.tryGetField('Amount') != null);\r\n \r\n // сумма по стикерным статьям\r\n let amountParent = PkClientHelper.SumStickerAmount(filterStickerRows, 'Amount');\r\n\r\n let virtualStickRows = arArticleStickersVirtual.rows;\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"CostItemParentID\", createTypedField(parentArticle.getField('CostItemID')?.$value, DotNetType.Guid));\r\n newRow.set(\"CostItemParentName\", createTypedField(parentArticle.getField('CostItemName')?.$value, DotNetType.String));\r\n newRow.set(\"CostItemParentMdsID\", createTypedField(parentArticle.getField('CostItemMdsID')?.$value, DotNetType.Int64));\r\n newRow.set(\"ObjectID\", createTypedField(parentArticle.getField('ObjectID')?.$value, DotNetType.Guid));\r\n newRow.set(\"ObjectName\", createTypedField(parentArticle.getField('ObjectName')?.$value, DotNetType.String));\r\n newRow.set(\"Amount\", createTypedField(amountParent?.toString() ?? null, DotNetType.Decimal));\r\n newRow.set(\"Order\", createTypedField(i++, DotNetType.Int32));\r\n newRow.state = CardRowState.Inserted;\r\n virtualStickRows.push(newRow);\r\n\r\n // цикл по стикерам\r\n for (let stickerArticle of filterStickerRows) {\r\n newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"CostItemStickerID\", createTypedField(stickerArticle.getField('CostItemID')?.$value, DotNetType.Guid));\r\n newRow.set(\"CostItemStickerName\", createTypedField(stickerArticle.getField('CostItemName')?.$value, DotNetType.String));\r\n newRow.set(\"CostItemStickerMdsID\", createTypedField(stickerArticle.getField('CostItemMdsID')?.$value, DotNetType.Int64));\r\n newRow.set(\"Amount\", createTypedField(stickerArticle.getField('Amount')?.$value.toString() ?? null, DotNetType.Decimal));\r\n newRow.set(\"Order\", createTypedField(i++, DotNetType.Int32));\r\n newRow.state = CardRowState.Inserted;\r\n virtualStickRows.push(newRow);\r\n }\r\n }\r\n \r\n // подркаска строк\r\n this.SetColorForRows(context);\r\n\r\n // очистка изменений в виртуальных секциях\r\n arArticleStickersVirtual!.removeChanges();\r\n pkArticleStickerVirtial!.clearChanges();\r\n }\r\n\r\n /** Подкраска стикерных статей. */\r\n private SetColorForRows(context: ICardUIExtensionContext) {\r\n const arArticleStickersVirtualTableControl = CdUIHelper.GetUIControl(context, \"ArArticleStickersVirtualTableControl\");\r\n if (arArticleStickersVirtualTableControl === null || arArticleStickersVirtualTableControl === undefined){\r\n return;\r\n }\r\n\r\n arArticleStickersVirtualTableControl.rows.forEach(e => {\r\n if (e.row.getField('CostItemStickerID')?.$value != null) {\r\n var style = { \"background\": \"#f3ff3f52\" } as React.CSSProperties;\r\n e.style = style;\r\n }\r\n });\r\n }\r\n\r\n /** Механизм клика по родительской строке с последующим отображением данных в дочерней виртуальной таблице. */\r\n private ClickOnParentRowTable(context: ICardUIExtensionContext) \r\n {\r\n // получим контрол для подписки на клик\r\n const arArticleParentStickersTableControl = CdUIHelper.GetUIControl(context, \"ArArticleParentStickersTableControl\");\r\n if (!arArticleParentStickersTableControl)\r\n {\r\n return;\r\n }\r\n\r\n // добавим кнопку снять выделение\r\n let unckeckButton = new UIButton(\r\n \"Снять выделение\",\r\n async () => { \r\n for (let row of arArticleParentStickersTableControl.rows) {\r\n row.isSelected = false;\r\n }\r\n this.SetArticleStickersVirtualCollection(context);\r\n },\r\n null,\r\n () => arArticleParentStickersTableControl.selectedRows.length > 0);\r\n\r\n arArticleParentStickersTableControl.rightButtons.push(unckeckButton);\r\n\r\n // подписываемся на клик\r\n if (this._disposerSelectRow == null) {\r\n this._disposerSelectRow = reaction(() => arArticleParentStickersTableControl.selectedRows, () => {\r\n let cardRowViewModel = arArticleParentStickersTableControl.selectedRow;\r\n if (cardRowViewModel != null) {\r\n if (cardRowViewModel.isSelected == true) {\r\n let row = cardRowViewModel.row;\r\n if (row != null && row.rowId != null) {\r\n this.SetArticleStickersVirtualCollection(context, row.rowId);\r\n }\r\n }\r\n }\r\n }); \r\n }\r\n }\r\n\r\n /** Пересчет поля Сумма без НДС. */\r\n private async RecalcAmountWithoutVatAsync(e: GridRowEventArgs, amount)\r\n {\r\n let vatRateID;\r\n if ((vatRateID = e.row.tryGet('VatRateID')) != null) {\r\n if (vatRateID != null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCalculateAmountWithoutVat;\r\n request.info[\"AmountDouble\"] = createTypedField(parseFloat(amount), DotNetType.Double);\r\n request.info[\"VATRateID\"] = createTypedField(vatRateID, DotNetType.Int32);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n if (response.info) {\r\n e.row.set('AmountWithoutVat', createTypedField(response.info.AmountWithoutVat.$value?.toString() ?? null, DotNetType.Decimal));\r\n }\r\n }\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposerSelectRow) {\r\n this._disposerSelectRow();\r\n this._disposerSelectRow = null;\r\n }\r\n }\r\n}","/** Типы исходящего письма*/\r\nexport enum DownloadType\r\n{\r\n /** Получить в виде одного файла */\r\n Cobine,\r\n\r\n /** Получить файлы в виде архива */\r\n Archive\r\n}\r\n\r\nexport enum PkPeriodicity\r\n{\r\n Daily = 0,\r\n Weekly = 1,\r\n Monthly = 2,\r\n Quarterly = 3,\r\n Yearly = 4,\r\n OnWeekDays = 5,\r\n Other = 6\r\n}\r\n\r\nexport enum PkPeriod\r\n{\r\n Daily = 0,\r\n Weekly = 1,\r\n Monthly = 2,\r\n Quarterly = 3,\r\n Yearly = 4\r\n}\r\n\r\nexport enum PkDayType\r\n{\r\n Work = 0,\r\n Calendar = 1\r\n}\r\n\r\nexport enum PkWeekdays\r\n{\r\n Monday = 0,\r\n Tuesday = 1,\r\n Wednesday = 2,\r\n Thursday = 3,\r\n Friday = 4,\r\n Saturday = 5,\r\n Sunday = 6\r\n}\r\n\r\nexport enum ArticleType\r\n{\r\n Ohr = 0,\r\n Idp = 1\r\n}\r\n\r\n/** Способ расшифровки на стикеры. */\r\nexport enum PkMethodsEmbroideryOnStickersID\r\n{\r\n /** Вручную */\r\n Manually = 0,\r\n\r\n /** Excel. */\r\n Excel = 1,\r\n\r\n /** Из ЕСУД. */\r\n FromEsud = 2,\r\n\r\n /** Скрипт 1:1. */\r\n Script1To1 = 3,\r\n\r\n /** Конструктор актов. */\r\n ConstructorOfActs = 4,\r\n\r\n /** ЕФС. */\r\n EFS = 5,\r\n\r\n /** АУД. */\r\n AUD = 6\r\n}\r\n\r\nexport const EfsAudMethodIds: number[] = [5, 6]; \r\n\r\n/** Способ расшифровки на стикеры. */\r\nexport const PkMethodsEmbroideryOnStickers = new Map([\r\n [PkMethodsEmbroideryOnStickersID.Manually, 'Вручную'],\r\n [PkMethodsEmbroideryOnStickersID.Excel, 'Excel'],\r\n [PkMethodsEmbroideryOnStickersID.FromEsud, 'Из ЕСУД'],\r\n [PkMethodsEmbroideryOnStickersID.Script1To1, 'Скрипт 1:1'],\r\n [PkMethodsEmbroideryOnStickersID.ConstructorOfActs, 'Конструктор актов'],\r\n [PkMethodsEmbroideryOnStickersID.ConstructorOfActs, 'ЕФС'],\r\n [PkMethodsEmbroideryOnStickersID.ConstructorOfActs, 'АУД']\r\n]);\r\n\r\nexport enum ArContractTypes\r\n { \r\n /**Основной */ \r\n Main = 0,\r\n\r\n /**Перевода долга */ \r\n Debt = 1,\r\n\r\n /**Поставки материалов(давальческая схема) */\r\n Materials = 2,\r\n\r\n /**Рамочный */\r\n Framework = 3,\r\n\r\n /**Тарифный */\r\n Tariff = 4\r\n }","import { CardUIExtension, ICardModel, ICardUIExtensionContext, IControlViewModel } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Card, CardSection, CardStoreMode } from 'tessa/cards';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { PkDayType, PkPeriod, PkPeriodicity, PkWeekdays } from 'src/pkScripts/helpers/PkEnums';\r\nimport { AutoCompleteTableViewModel } from 'tessa/ui/cards/controls';\r\nimport { showNotEmpty } from 'tessa/ui';\r\nimport moment from 'moment';\r\n\r\nexport class PkCovenantUIExtension extends CardUIExtension {\r\n public initialized(context: ICardUIExtensionContext) {\r\n let model = context.model;\r\n let card = context.model.card;\r\n if (model == null ||\r\n card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkCovenantTypeID)) {\r\n return;\r\n }\r\n\r\n if (card.storeMode == CardStoreMode.Update) {\r\n\r\n let eventStartDate = model.controls.get('EventStartDate') as IControlViewModel;\r\n let periodicity = model.controls.get('Periodicity') as IControlViewModel;\r\n \r\n let periodicitySection: CardSection | undefined = model.card.sections.tryGet('PkEventPeriodicity');\r\n\r\n let interval = model.controls.get('Interval') as IControlViewModel;\r\n let period = model.controls.get('Period') as IControlViewModel;\r\n let weekdays = model.controls.get('Weekdays') as IControlViewModel;\r\n let repeatAfter = model.controls.get('RepeatAfter') as IControlViewModel;\r\n let days = model.controls.get('Days') as IControlViewModel;\r\n let daysType = model.controls.get('DaysType') as IControlViewModel;\r\n let afterDate = model.controls.get('AfterDate') as IControlViewModel;\r\n\r\n let intervalMark = model.controls.get('IntervalMark') as IControlViewModel;\r\n let repeatMark = model.controls.get('RepeatMark') as IControlViewModel;\r\n\r\n let periodicityBlock = model.blocks.get(\"PeriodicityBlock\");\r\n \r\n if(!eventStartDate || !periodicity || !periodicitySection || !interval || !period || !weekdays ||\r\n !repeatAfter || !days || !daysType || !afterDate || !intervalMark || !repeatMark ||! periodicityBlock)\r\n {\r\n return;\r\n }\r\n \r\n eventStartDate.isReadOnly = true;\r\n periodicity.isReadOnly = true;\r\n\r\n SetWeekdaysVisibility(model);\r\n\r\n let isDaysAfter = periodicitySection.fields.tryGet(\"IsDaysAfter\");\r\n let periodicityID = periodicitySection.fields.tryGet(\"PeriodicityID\");\r\n\r\n if (periodicityID == PkPeriodicity.Other)\r\n {\r\n if (isDaysAfter) \r\n {\r\n intervalMark.controlVisibility = \r\n interval.controlVisibility = \r\n period.controlVisibility = Visibility.Collapsed;\r\n \r\n repeatAfter.isReadOnly = \r\n days.isReadOnly = \r\n daysType.isReadOnly = \r\n afterDate.isReadOnly = true;\r\n }\r\n else\r\n {\r\n repeatAfter.controlVisibility = \r\n days.controlVisibility = \r\n daysType.controlVisibility = \r\n repeatMark.controlVisibility = \r\n afterDate.controlVisibility = Visibility.Collapsed;\r\n \r\n interval.isReadOnly = \r\n period.isReadOnly = \r\n weekdays.isReadOnly = true;\r\n }\r\n\r\n return;\r\n }\r\n else\r\n {\r\n periodicityBlock.blockVisibility = Visibility.Collapsed;\r\n }\r\n\r\n return;\r\n }\r\n\r\n let covenantInfoSection: CardSection | undefined = card.sections.tryGet('PkCovenantInfo');\r\n if (covenantInfoSection)\r\n {\r\n covenantInfoSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"ContractID\") \r\n {\r\n if (!e) return;\r\n FillContractInfo(card);\r\n }\r\n });\r\n }\r\n\r\n let periodicitySection: CardSection | undefined = card.sections.tryGet('PkEventPeriodicity');\r\n if (periodicitySection)\r\n {\r\n SetPeriodicityBlockVisibility(model);\r\n SetPeriodicityControlsReadOnly(model);\r\n SetPeriodicityReadOnly(model);\r\n SetWeekdaysVisibility(model);\r\n FillNextLaunch(model);\r\n periodicitySection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === \"EventStartDate\")\r\n {\r\n SetPeriodicityReadOnly(model);\r\n }\r\n if (e.fieldName === \"IsDaysAfter\") \r\n {\r\n if (!e) return;\r\n SetPeriodicityControlsReadOnly(model);\r\n }\r\n if (e.fieldName === \"PeriodicityID\") \r\n {\r\n if (!e) return;\r\n SetPeriodicityBlockVisibility(model);\r\n }\r\n if (e.fieldName === \"PeriodID\") \r\n {\r\n if (!e) return;\r\n SetWeekdaysVisibility(model);\r\n }\r\n if (e.fieldName === \"Interval\"\r\n || e.fieldName === \"EventStartDate\"\r\n || e.fieldName === \"PeriodID\"\r\n || e.fieldName === \"PeriodicityID\"\r\n || e.fieldName === \"IsDaysAfter\"\r\n || e.fieldName === \"DaysAfter\"\r\n || e.fieldName === \"DayTypeID\"\r\n || e.fieldName === \"Date\")\r\n {\r\n if (!e) return;\r\n FillNextLaunch(model);\r\n }\r\n });\r\n let weekdaysControl = model.controls.get('Weekdays') as AutoCompleteTableViewModel;\r\n if (weekdaysControl != null)\r\n {\r\n weekdaysControl.valueSet.add(() =>\r\n {\r\n FillNextLaunch(model);\r\n });\r\n weekdaysControl.valueDeleted.add(() =>\r\n {\r\n FillNextLaunch(model);\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nasync function FillNextLaunch(model: ICardModel) {\r\n let eventSection = model.card.sections.tryGet('PkEventPeriodicity');\r\n let weekdaysSection = model.card.sections.tryGet(\"PkEventPeriodicityWeekdays\");\r\n if (eventSection\r\n && weekdaysSection)\r\n {\r\n let periodicityID = eventSection.fields.tryGet(\"PeriodicityID\");\r\n let lastLaunchDate = eventSection.fields.tryGet(\"EventStartDate\") ?? moment().format('YYYY-MM-DDTHH:mm:ss');\r\n let nextLaunchDate: Date | null = null;\r\n let weekdays: PkWeekdays[] = [];\r\n let periodID = eventSection.fields.tryGet(\"PeriodID\");\r\n let interval = eventSection.fields.tryGet(\"Interval\");\r\n \r\n function onlyUnique(value, index, self) {\r\n return self.indexOf(value) === index;\r\n }\r\n\r\n if (weekdaysSection.rows.length > 0)\r\n {\r\n weekdays = weekdaysSection.rows\r\n .map(row => row.tryGet(\"WeekdayID\"))\r\n .filter(onlyUnique);\r\n }\r\n \r\n switch (periodicityID)\r\n {\r\n case PkPeriodicity.Daily:\r\n case PkPeriodicity.Weekly:\r\n case PkPeriodicity.Monthly:\r\n case PkPeriodicity.Quarterly:\r\n case PkPeriodicity.Yearly:\r\n nextLaunchDate = await CalculateNextLaunch(\r\n lastLaunchDate,\r\n 1,\r\n periodicityID,\r\n weekdays);\r\n break;\r\n case PkPeriodicity.OnWeekDays:\r\n nextLaunchDate = await CalculateNextLaunch(\r\n lastLaunchDate,\r\n 1,\r\n PkPeriod.Weekly,\r\n [\r\n PkWeekdays.Monday,\r\n PkWeekdays.Tuesday,\r\n PkWeekdays.Wednesday,\r\n PkWeekdays.Thursday,\r\n PkWeekdays.Friday\r\n ]);\r\n break;\r\n case PkPeriodicity.Other:\r\n if (eventSection.fields.tryGet(\"IsDaysAfter\"))\r\n {\r\n var daysAfter = eventSection.fields.tryGet(\"DaysAfter\");\r\n var dayType = eventSection.fields.tryGet(\"DayTypeID\");\r\n var date = eventSection.fields.tryGet(\"Date\");\r\n var eventStartDate = eventSection.fields.tryGet(\"EventStartDate\");\r\n if (daysAfter == null)\r\n {\r\n daysAfter = 1;\r\n }\r\n if (date == null || date < eventStartDate)\r\n {\r\n date = eventStartDate;\r\n }\r\n if (daysAfter == null || date == null)\r\n break;\r\n nextLaunchDate = await CalculateNextLaunchDays(\r\n daysAfter,\r\n dayType,\r\n date);\r\n }\r\n else\r\n {\r\n nextLaunchDate = await CalculateNextLaunch(\r\n lastLaunchDate,\r\n interval,\r\n periodID,\r\n weekdays);\r\n }\r\n break;\r\n }\r\n if (nextLaunchDate)\r\n {\r\n nextLaunchDate = CheckContractDateRestriction(model,nextLaunchDate);\r\n eventSection.fields.set(\"NextLaunchDate\", createTypedField(nextLaunchDate, DotNetType.DateTime));\r\n } \r\n }\r\n}\r\n\r\nfunction CheckContractDateRestriction(model: ICardModel, nextLaunchDate: Date)\r\n{\r\n let section = model.card.sections.tryGet(\"PkCovenantInfo\");\r\n if (section)\r\n {\r\n var contractDate = section.fields.tryGet(\"PeriodTo\");\r\n if (contractDate)\r\n return nextLaunchDate > contractDate ? contractDate : nextLaunchDate;\r\n }\r\n\r\n return nextLaunchDate;\r\n}\r\n\r\nasync function CalculateNextLaunchDays(daysAfter : number, daysType : PkDayType, date : Date) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetEventPeriodicity;\r\n request.info[\"DaysAfter\"] = createTypedField(daysAfter, DotNetType.Int32);\r\n request.info[\"DaysType\"] = createTypedField(daysType, DotNetType.Int32);\r\n request.info[\"Date\"] = createTypedField(date, DotNetType.DateTime);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n \r\n let result: Date | null = null;\r\n if (response.info!.NextLaunchDate) {\r\n result = response.info!.NextLaunchDate.$value;\r\n }\r\n return result;\r\n}\r\n\r\nasync function CalculateNextLaunch(\r\n lastLaunchDate : Date, \r\n interval : number, \r\n period : PkPeriod, \r\n weekdays : PkWeekdays[] | null) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetEventPeriodicity;\r\n request.info[\"LastLaunchDate\"] = createTypedField(lastLaunchDate, DotNetType.DateTime);\r\n request.info[\"Interval\"] = createTypedField(interval, DotNetType.Int32);\r\n request.info[\"Period\"] = createTypedField(period, DotNetType.Int32);\r\n if (weekdays)\r\n request.info[\"Weekdays\"] = weekdays.map(x=>createTypedField(x, DotNetType.Int32));\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n\r\n let result: Date | null = null;\r\n if (response.info!.NextLaunchDate) {\r\n result = response.info!.NextLaunchDate.$value;\r\n }\r\n return result;\r\n}\r\n\r\n\r\nasync function FillContractInfo(card: Card) {\r\n let covenantInfoSection: CardSection | undefined = card.sections.tryGet('PkCovenantInfo');\r\n if (covenantInfoSection)\r\n {\r\n var contractID = covenantInfoSection.fields.tryGet(\"ContractID\");\r\n covenantInfoSection.fields.set(\"ContractDate\", null);\r\n covenantInfoSection.fields.set(\"ContractorID\", null);\r\n covenantInfoSection.fields.set(\"ContractorExternalID\", null);\r\n covenantInfoSection.fields.set(\"ContractorINN\", null);\r\n covenantInfoSection.fields.set(\"ContractorName\", null);\r\n covenantInfoSection.fields.set(\"ContractorCategoryID\", null);\r\n covenantInfoSection.fields.set(\"ContractorCategoryName\", null);\r\n covenantInfoSection.fields.set(\"BorrowerID\", null);\r\n covenantInfoSection.fields.set(\"BorrowerExternalID\", null);\r\n covenantInfoSection.fields.set(\"BorrowerINN\", null);\r\n covenantInfoSection.fields.set(\"BorrowerName\", null);\r\n covenantInfoSection.fields.set(\"BorrowerCategoryID\", null);\r\n covenantInfoSection.fields.set(\"BorrowerCategoryName\", null);\r\n covenantInfoSection.fields.set(\"PeriodFrom\", null);\r\n covenantInfoSection.fields.set(\"PeriodTo\", null);\r\n\r\n if (contractID)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetContractInfoForCovenant;\r\n request.info[\"ContractID\"] = createTypedField(contractID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n return;\r\n } \r\n covenantInfoSection.fields.set(\"ContractDate\", response.info.ContractDate);\r\n covenantInfoSection.fields.set(\"ContractorID\", response.info.ContractorID);\r\n covenantInfoSection.fields.set(\"ContractorExternalID\", response.info.ContractorExternalID);\r\n covenantInfoSection.fields.set(\"ContractorINN\", response.info.ContractorINN);\r\n covenantInfoSection.fields.set(\"ContractorName\", response.info.ContractorName);\r\n covenantInfoSection.fields.set(\"ContractorCategoryID\", response.info.ContractorCategoryID);\r\n covenantInfoSection.fields.set(\"ContractorCategoryName\", response.info.ContractorCategoryName);\r\n covenantInfoSection.fields.set(\"BorrowerID\", response.info.BorrowerID);\r\n covenantInfoSection.fields.set(\"BorrowerExternalID\", response.info.BorrowerExternalID);\r\n covenantInfoSection.fields.set(\"BorrowerINN\", response.info.BorrowerINN);\r\n covenantInfoSection.fields.set(\"BorrowerName\", response.info.BorrowerName);\r\n covenantInfoSection.fields.set(\"BorrowerCategoryID\", response.info.BorrowerCategoryID);\r\n covenantInfoSection.fields.set(\"BorrowerCategoryName\", response.info.BorrowerCategoryName);\r\n covenantInfoSection.fields.set(\"PeriodFrom\", response.info.PeriodFrom);\r\n covenantInfoSection.fields.set(\"PeriodTo\", response.info.PeriodTo);\r\n }\r\n }\r\n}\r\n\r\nfunction SetPeriodicityReadOnly(model: ICardModel) {\r\n let periodicitySection = model.card.sections.tryGet(\"PkEventPeriodicity\")\r\n if (model.blocks.has(\"CalendarBlock\")\r\n && periodicitySection)\r\n {\r\n let periodicityControl = model.controls.get(\"Periodicity\");\r\n let eventStartDate = periodicitySection.fields.tryGet(\"EventStartDate\");\r\n if (periodicityControl != null)\r\n {\r\n periodicityControl.isReadOnly = !eventStartDate;\r\n }\r\n }\r\n}\r\n\r\nfunction SetPeriodicityControlsReadOnly(model: ICardModel) {\r\n let periodicitySection: CardSection | undefined = model.card.sections.tryGet('PkEventPeriodicity');\r\n if (periodicitySection)\r\n {\r\n if (model.controls.has(\"Interval\")\r\n && model.controls.has(\"Period\")\r\n && model.controls.has(\"Weekdays\")\r\n && model.controls.has(\"Days\")\r\n && model.controls.has(\"DaysType\")\r\n && model.controls.has(\"AfterDate\"))\r\n {\r\n let intervalControl = model.controls.get(\"Interval\");\r\n let periodControl = model.controls.get(\"Period\");\r\n let weekdaysControl = model.controls.get(\"Weekdays\");\r\n let daysControl = model.controls.get(\"Days\");\r\n let daysTypeControl = model.controls.get(\"DaysType\");\r\n let afterDateControl = model.controls.get(\"AfterDate\");\r\n if (intervalControl != null\r\n && periodControl != null\r\n && weekdaysControl != null\r\n && daysControl != null\r\n && daysTypeControl != null\r\n && afterDateControl != null) {\r\n intervalControl.isReadOnly =\r\n periodControl.isReadOnly =\r\n weekdaysControl.isReadOnly = periodicitySection.fields.tryGet(\"IsDaysAfter\");\r\n daysControl.isReadOnly =\r\n daysTypeControl.isReadOnly =\r\n afterDateControl.isReadOnly = !periodicitySection.fields.tryGet(\"IsDaysAfter\");\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction SetPeriodicityBlockVisibility(model: ICardModel) {\r\n let periodicitySection: CardSection | undefined = model.card.sections.tryGet('PkEventPeriodicity');\r\n\r\n if (periodicitySection)\r\n {\r\n let periodicityBlock = model.blocks.get(\"PeriodicityBlock\");\r\n if (periodicityBlock)\r\n {\r\n if (periodicitySection.fields.tryGet(\"PeriodicityID\") == PkPeriodicity.Other)\r\n {\r\n periodicityBlock.blockVisibility = Visibility.Visible;\r\n }\r\n else\r\n {\r\n periodicityBlock.blockVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction SetWeekdaysVisibility(model: ICardModel) {\r\n let periodicitySection: CardSection | undefined = model.card.sections.tryGet('PkEventPeriodicity');\r\n\r\n if (periodicitySection)\r\n {\r\n let periodicityBlock = model.blocks.get(\"PeriodicityBlock\");\r\n if (periodicityBlock)\r\n {\r\n let weekdaysControl = model.controls.get(\"Weekdays\");\r\n if (weekdaysControl)\r\n {\r\n if (periodicitySection.fields.tryGet(\"PeriodID\") == PkPeriod.Weekly)\r\n {\r\n weekdaysControl.controlVisibility = Visibility.Visible;\r\n }\r\n else\r\n {\r\n weekdaysControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n","export class PkFileTypes {\r\n static GetFilesFromCardType = 'GetFilesFromCard';\r\n static GetInventoryContentType = 'GetInventoryContent';\r\n static CorrespondenceSendingRequestPrintForm = \"CorrespondenceSendingRequestPrintForm\";\r\n static PkGetDownloadContractsReportContent = \"PkGetDownloadContractsReportContent\";\r\n static PkGetDownloadActsAndContractsReportContent = \"PkGetDownloadActsAndContractsReportContent\";\r\n static PkGetDownloadActsReportContent = \"PkGetDownloadActsReportContent\";\r\n static PkGetDownloadLinkedDocsReportContent = \"PkGetDownloadLinkedDocsReportContent\";\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ChUIHelper } from '../ChUIHelper';\r\nimport { Card } from 'tessa/cards';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ButtonViewModel } from 'tessa/ui/cards/controls';\r\nimport { CardGetFileContentRequest, CardService } from 'tessa/cards/service';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { showNotEmpty, tryGetFromInfo } from 'tessa/ui';\r\nimport { PkFileTypes } from 'src/pkScripts/helpers/PkFileTypes';\r\n\r\n\r\nexport class PkPackageOfOriginalDocumentsUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n private _disposerSelectRow: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkPackageOfOriginalDocumentsTypeID)) {\r\n return;\r\n }\r\n\r\n // Инициализация полей\r\n ChUIHelper.PackageContentsControlInitialization(context);\r\n this.InitPrintFormDownloadingAsync(context, context.model.card);\r\n\r\n PkPackageOfOriginalDocumentsUIExtension.InitializeBuildReportPermisions(context);\r\n }\r\n\r\n\r\n /** Иницилизировать права на выгрузку описи по пакету. */\r\n public static InitializeBuildReportPermisions(context: ICardUIExtensionContext) {\r\n const info = context.card.info;\r\n if (!info.isBuildReportAvaible) {\r\n return;\r\n }\r\n\r\n const isBuildReportAvaible = tryGetFromInfo(info, \"isBuildReportAvaible\", false);\r\n const buildReportButton = CdUIHelper.GetUIControl(context, \"CreateAnInventory\")!;\r\n buildReportButton.isReadOnly = !isBuildReportAvaible;\r\n }\r\n\r\n /** Инициализировать скачивание печатной формы.*/\r\n private async InitPrintFormDownloadingAsync(context: ICardUIExtensionContext, card: Card) {\r\n const createAnInventory = CdUIHelper.GetUIControl(context, \"CreateAnInventory\")!;\r\n\r\n const buildReportAsync = async () => {\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = PkFileTypes.GetInventoryContentType;\r\n getFileContentRequest.cardId = card.id;\r\n getFileContentRequest.versionRowId = Guid.empty;\r\n getFileContentRequest.fileId = Guid.empty;\r\n getFileContentRequest.fileName = PkFileTypes.GetInventoryContentType;\r\n\r\n const getFileContentResponse = await CardService.instance.getFileContent(getFileContentRequest);\r\n\r\n if (!getFileContentResponse.validationResult.isSuccessful) {\r\n await showNotEmpty(getFileContentResponse.validationResult.build());\r\n return;\r\n }\r\n\r\n if (getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n return;\r\n }\r\n\r\n const dlgFileName = `Опись для пакета «${context.model!.digest}»`;\r\n\r\n PkCommonHelper.SaveFileContent(dlgFileName + \".docx\", getFileContentResponse.content);\r\n };\r\n\r\n createAnInventory.executeOnClick = async () => {\r\n createAnInventory!.isReadOnly = true;\r\n\r\n await buildReportAsync();\r\n createAnInventory.isReadOnly = false;\r\n };\r\n }\r\n\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n // подчищаем за собой\r\n if (this._disposerSelectRow) {\r\n this._disposerSelectRow();\r\n this._disposerSelectRow = null;\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { ButtonViewModel } from 'tessa/ui/cards/controls';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { showError, showMessage, showNotEmpty, showLoadingOverlay } from 'tessa/ui';\r\n\r\n/** Карточка \"Настройки плагина синхронизации с МДС\". */\r\nexport class PkMdsSettingsCardUIExtension extends CardUIExtension {\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkMdsSettingsCardTypeID)) {\r\n return;\r\n }\r\n\r\n let contractSyncButton = CdUIHelper.GetUIControl(context, \"ContractSyncButton\");\r\n\r\n if (contractSyncButton != null) {\r\n contractSyncButton.onClick = async () => {\r\n let pkCommonServiceSettingsVirtual = context.model.card.sections.tryGet('PkCommonServiceSettingsVirtual');\r\n if (pkCommonServiceSettingsVirtual) {\r\n let directumCode = pkCommonServiceSettingsVirtual.fields.tryGet(\"DirectumCode\", null);\r\n if (directumCode != null) {\r\n await showLoadingOverlay(async () => {\r\n const createContractRequest = new CardRequest();\r\n createContractRequest.requestType = PkRequestTypes.PkUpdateContractFromMdsRequest;\r\n createContractRequest.info[\"directumCode\"] = createTypedField(directumCode, DotNetType.String);\r\n const createContractResponse = await CardService.instance.request(createContractRequest);\r\n if (createContractResponse.validationResult.isSuccessful) {\r\n if (createContractResponse.info) {\r\n await showMessage(createContractResponse.info?.result.$value)\r\n }\r\n }\r\n else {\r\n await showNotEmpty(createContractResponse.validationResult.build(), \"Ошибка!\");\r\n }\r\n }, \"Обработка договора...\");\r\n }\r\n else {\r\n await showError(\"Укажите Код ЕСУД\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, IControlViewModel } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { GridViewModel, GridRowAction, GridRowEventArgs, AutoCompleteTableViewModel, AutoCompleteEntryViewModel } from 'tessa/ui/cards/controls';\r\nimport { Card, CardRowState, CardRowsListener, CardRow, CardSection, CardStoreMode } from 'tessa/cards';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { showError } from 'tessa/ui';\r\n\r\nexport class ArRolePerformersUIExtension extends CardUIExtension {\r\n\r\n private disposer: Function | null = null;\r\n private _listener: CardRowsListener | null;\r\n \r\n private _controlList: Array = new Array();\r\n private _isNewCard: boolean = false;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null || context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArRolePerformersTypeID)) {\r\n return;\r\n }\r\n\r\n if (this._listener) {\r\n this._listener.stop();\r\n }\r\n\r\n let card = context.model.card;\r\n if (card.storeMode == CardStoreMode.Insert)\r\n {\r\n this._isNewCard = true;\r\n }\r\n \r\n // Работа с таблицей Критерии.\r\n await this.WorkWithRolePerformerCriteriasTableAsync(context, card); \r\n }\r\n\r\n /// \r\n /// Работа с таблицей Критерии.\r\n /// \r\n private async WorkWithRolePerformerCriteriasTableAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n var rolePerformerCriteriasTable = CdUIHelper.GetUIControl(context, \"RolePerformerCriteriasTable\");\r\n var arRolePerformerCriterias = card.sections.get(\"ArRolePerformerCriterias\");\r\n var arRolePerformerCriteriaValues = card.sections.get(\"ArRolePerformerCriteriaValues\");\r\n\r\n if (rolePerformerCriteriasTable == null || !arRolePerformerCriterias || !arRolePerformerCriteriaValues)\r\n {\r\n return;\r\n }\r\n\r\n rolePerformerCriteriasTable.rowEditorClosing.add(e => {\r\n this.RemoveDuplicates(e, arRolePerformerCriteriaValues);\r\n });\r\n\r\n rolePerformerCriteriasTable.rowInvoked.add(e =>\r\n {\r\n if (e.action != GridRowAction.Deleting)\r\n {\r\n this.InitControls(e.rowModel!.controlsBag);\r\n }\r\n\r\n if (e.action == GridRowAction.Opening)\r\n {\r\n if (e.row.get(\"SectionComplexColumnName\") \r\n || e.row.get(\"SectionPhysicalColumnName\") \r\n || e.row.get(\"SectionSectionName\"))\r\n {\r\n if (e.row.get(\"SectionComplexColumnName\") === \"ObjectSegment\")\r\n {\r\n this.SetConrolVisible(\"EnumValuesListControl\");\r\n this.SetListHandler(\"EnumValuesListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n else if (e.row.get(\"SectionComplexColumnName\") === \"ContractCategory\")\r\n {\r\n this.SetConrolVisible(\"ContractCategoryListControl\");\r\n this.SetListHandler(\"ContractCategoryListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n else if (e.row.get(\"SectionComplexColumnName\") === \"SubdivisionExecutor\")\r\n {\r\n this.SetConrolVisible(\"SubdivisionExecutorListControl\");\r\n this.SetListHandler(\"SubdivisionExecutorListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n else if (e.row.get(\"SectionSectionName\") === \"ArContractPartners\")\r\n {\r\n this.SetConrolVisible(\"ContractorListControl\");\r\n this.SetListHandler(\"ContractorListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n else if (e.row.get(\"SectionPhysicalColumnName\") === \"IsArticleIdp\"\r\n || e.row.get(\"SectionPhysicalColumnName\") === \"IsBelongsToZemAktiv\"\r\n || e.row.get(\"SectionPhysicalColumnName\") === \"IsArticleOhr\"\r\n || e.row.get(\"SectionPhysicalColumnName\") === \"IsFromKD\")\r\n {\r\n this.SetConrolVisible(\"BoolValueControl\");\r\n }\r\n else\r\n {\r\n this.SetConrolVisible(\"ValuesListControl\");\r\n this.SetListHandler(\"ValuesListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n }\r\n }\r\n\r\n if (e.action != GridRowAction.Deleting)\r\n {\r\n let criteriaControl = e.rowModel!.controlsBag.find(x => x.name === 'CriteriaControl') as AutoCompleteEntryViewModel;\r\n if (criteriaControl) {\r\n criteriaControl.valueSet.add((e1) => {\r\n if (arRolePerformerCriterias!.rows.filter(_ => _.get('SectionCaption') === e1.item.displayText\r\n && _.state != CardRowState.Deleted).length > 1) {\r\n this.ClearCriteria(e.row, e1.item.displayText);\r\n }\r\n });\r\n }\r\n\r\n e.row.fieldChanged.add( async e1 =>\r\n {\r\n if (e1.fieldName === \"SectionComplexColumnName\"\r\n || (e1.fieldName === \"SectionPhysicalColumnName\" && (e1.fieldValue === \"IsArticleIdp\"\r\n || e1.fieldValue === \"IsBelongsToZemAktiv\"\r\n || e1.fieldValue === \"IsArticleOhr\"\r\n || e1.fieldValue === \"IsFromKD\"))\r\n || (e1.fieldName === \"SectionSectionName\" && e1.fieldValue === \"ArContractPartners\"))\r\n {\r\n if (e1.fieldValue === null)\r\n {\r\n return;\r\n }\r\n\r\n if (e1.fieldValue === \"ObjectSegment\")\r\n {\r\n this.SetConrolVisible(\"EnumValuesListControl\");\r\n this.SetListHandler(\"EnumValuesListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n else if (e1.fieldValue === \"IsArticleIdp\"\r\n || e1.fieldValue === \"IsBelongsToZemAktiv\"\r\n || e1.fieldValue === \"IsArticleOhr\"\r\n || e1.fieldValue === \"IsFromKD\")\r\n {\r\n this.SetConrolVisible(\"BoolValueControl\");\r\n }\r\n else if (e1.fieldValue === \"ContractCategory\")\r\n {\r\n this.SetConrolVisible(\"ContractCategoryListControl\");\r\n this.SetListHandler(\"ContractCategoryListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n else if (e1.fieldValue === \"SubdivisionExecutor\")\r\n {\r\n this.SetConrolVisible(\"SubdivisionExecutorListControl\");\r\n this.SetListHandler(\"SubdivisionExecutorListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n else if (e1.fieldValue === \"ArContractPartners\")\r\n {\r\n this.SetConrolVisible(\"ContractorListControl\");\r\n this.SetListHandler(\"ContractorListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n else\r\n {\r\n this.SetConrolVisible(\"ValuesListControl\");\r\n this.SetListHandler(\"ValuesListControl\", arRolePerformerCriteriaValues!, e);\r\n }\r\n }\r\n else if (e1.fieldName === \"BoolValue\" && e1.fieldValue !== undefined)\r\n {\r\n e.row.set('StringValue', createTypedField(e1.fieldValue ? \"Да\" : \"Нет\", DotNetType.String));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n private ClearCriteria(row: CardRow, displayText: string) {\r\n showError(`Критерий \"${displayText}\" уже существует, выберите другой критерий`);\r\n\r\n row.set('SectionCaption', null);\r\n row.set('SectionComplexColumnName', null);\r\n row.set('SectionDataTypeCaption', null);\r\n row.set('SectionDataTypeID', null);\r\n row.set('SectionID', null);\r\n row.set('SectionIsContractorCategory', null);\r\n row.set('SectionIsContractorKck', null);\r\n row.set('SectionIsExecutorSubdivision', null);\r\n row.set('SectionIsObjectSegment', null);\r\n row.set('SectionPhysicalColumnName', null);\r\n row.set('SectionSectionName', null);\r\n row.set('SectionSectionTypeName', null);\r\n }\r\n\r\n private RemoveDuplicates(e: GridRowEventArgs, сriteriaValues: CardSection | undefined)\r\n {\r\n var rows = сriteriaValues!.rows.filter(_ => _.get(\"ParentRowID\") == e.row.rowId \r\n && e.row.state != CardRowState.Deleted);\r\n var isNeedRecalc = false;\r\n rows.forEach(row => {\r\n if (this.Count(rows, \"ValueID\", row) > 1 || this.Count(rows, \"Value2ID\", row) > 1)\r\n {\r\n isNeedRecalc = true;\r\n if (this._isNewCard)\r\n {\r\n сriteriaValues!.rows.remove(row);\r\n }\r\n else\r\n {\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n });\r\n\r\n if (isNeedRecalc)\r\n {\r\n this.RecalcStringValue(e, сriteriaValues);\r\n }\r\n }\r\n\r\n private Count(rows: CardRow[], fieldName: string, row: CardRow) : number{\r\n return rows.filter(_ => _.get(fieldName) === row.get(fieldName) && _.state != CardRowState.Deleted && _.get(fieldName) !== null).length;\r\n }\r\n\r\n private RecalcStringValue(e: GridRowEventArgs, arRolePerformerCriteriaValues: CardSection | undefined)\r\n {\r\n var rows = arRolePerformerCriteriaValues!.rows.filter(_ => _.get(\"ParentRowID\") == e.row.rowId);\r\n\r\n var stringValue = '';\r\n if (rows != null)\r\n {\r\n rows.forEach(row =>\r\n {\r\n if (row.state == CardRowState.Deleted)\r\n {\r\n return;\r\n }\r\n\r\n let valueName: string = row.get(\"ValueName\");\r\n if (valueName && valueName != '')\r\n {\r\n stringValue += `${valueName}; `;\r\n }\r\n\r\n let value2Name: string = row.get(\"Value2Name\");\r\n if (value2Name && value2Name != '')\r\n {\r\n stringValue += `${value2Name}; `;\r\n }\r\n });\r\n }\r\n\r\n e.row.set('StringValue', createTypedField(stringValue, DotNetType.String));\r\n }\r\n\r\n private SetConrolVisible(controlName: string)\r\n {\r\n this.SetControlsUnvisible();\r\n\r\n var control = this._controlList.find(_ => _.name === controlName);\r\n\r\n control!.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n private SetControlsUnvisible() {\r\n this._controlList.forEach(_ => _.controlVisibility = Visibility.Collapsed);\r\n }\r\n\r\n private InitControls( controlBag: readonly IControlViewModel[])\r\n {\r\n this._controlList = new Array();\r\n\r\n this.Add(controlBag, 'BoolValueControl');\r\n this.Add(controlBag, 'EnumValuesListControl');\r\n this.Add(controlBag, 'ValuesListControl');\r\n this.Add(controlBag, 'ContractCategoryListControl');\r\n this.Add(controlBag, 'SubdivisionExecutorListControl');\r\n this.Add(controlBag, 'ContractorListControl');\r\n }\r\n\r\n private Add(controlBag: readonly IControlViewModel[], controlName: string){\r\n let control = controlBag.find(x => x.name === controlName);\r\n if (control) {\r\n this._controlList.push(control);\r\n }\r\n }\r\n\r\n private SetListHandler(controlName: string, arRolePerformerCriteriaValues: CardSection, e: GridRowEventArgs)\r\n {\r\n var control = this._controlList.find(_ => _.name == controlName);\r\n const controlRef = control as AutoCompleteTableViewModel;\r\n controlRef.valueSet.add( () =>\r\n {\r\n this.RecalcStringValue(e, arRolePerformerCriteriaValues);\r\n });\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this.disposer) {\r\n this.disposer();\r\n this.disposer = null;\r\n }\r\n if (this._listener) {\r\n this._listener.stop();\r\n this._listener = null;\r\n }\r\n }\r\n\r\n}\r\n\r\n","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { CardRowState, CardSection } from 'tessa/cards';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { showError } from 'tessa/ui';\r\n\r\nexport class PkPartnerExceptionUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null\r\n || context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkPartnerExceptionTypeID)) {\r\n return;\r\n }\r\n\r\n let table = context.model.controls.get('PartnersTable') as GridViewModel;;\r\n if (!table) {\r\n return;\r\n }\r\n\r\n table.rowValidating.add (async e => { \r\n let section: CardSection | undefined = context.model.card.sections.tryGet('PkPartnerExceptionList');\r\n let partnerExternalID = e.row.get('PartnerExternalID');\r\n if (section && section.rows.find(x => x.get('PartnerExternalID') == partnerExternalID\r\n && x.rowId != e.row.rowId\r\n && x.state != CardRowState.Deleted)) {\r\n section.rows.remove(e.row);\r\n await showError(\"Нельзя добавлять организацию дважды.\");\r\n }\r\n }); \r\n }\r\n\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CdUIHelper } from \"src/cdScripts/UI/CdUIHelper\";\r\nimport { PkCardTypes } from \"src/pkScripts/Helpers/PkCardTypes\";\r\nimport { CardRowState } from \"tessa/cards\";\r\nimport { Guid } from \"tessa/platform\";\r\nimport { showError } from \"tessa/ui\";\r\nimport { CardUIExtension, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { AutoCompleteEntryViewModel, AutoCompleteTableViewModel, GridRowAction, GridViewModel } from \"tessa/ui/cards/controls\";\r\n\r\nexport class PkMemoTemplateUIExtension extends CardUIExtension {\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkMemoTemplateTypeID)) {\r\n return;\r\n }\r\n\r\n var departmentsTableControl = CdUIHelper.GetUIControl(context, \"DepartmentsTable\");\r\n if (departmentsTableControl == null) {\r\n return;\r\n }\r\n\r\n departmentsTableControl.rowInvoked.add((e) => {\r\n if (e.action == GridRowAction.Deleting || !e.rowModel) {\r\n return;\r\n }\r\n\r\n var perimeterControl = e.rowModel.controls.get('Perimeter')! as AutoCompleteEntryViewModel;\r\n var departmentControl = e.rowModel.controls.get('Departments')! as AutoCompleteTableViewModel;\r\n\r\n if (perimeterControl.hasEmptyValue) {\r\n departmentControl.isReadOnly = true;\r\n }\r\n \r\n perimeterControl.valueSet.add(() => {\r\n departmentControl.isReadOnly = false;\r\n });\r\n \r\n perimeterControl.valueDeleted.add(() => {\r\n departmentControl.isReadOnly = true;\r\n });\r\n });\r\n\r\n \r\n departmentsTableControl.rowValidating.add(async e => {\r\n let rowID = e.row.rowId;\r\n let card = context.model.card;\r\n let perimeterSection = card.sections.getOrAdd('PkMemoTemplatePerimeters');\r\n let departmentSection = card.sections.getOrAdd('PkMemoTemplateDepartments');\r\n let perimeterRow = perimeterSection.rows.find(x => x.rowId == rowID);\r\n\r\n if (perimeterRow == null) {\r\n return;\r\n }\r\n \r\n if (perimeterSection.rows.find(x => x.tryGet('PerimeterID') == null\r\n && x.rowId == rowID\r\n && x.state != CardRowState.Deleted)) {\r\n perimeterRow.state = CardRowState.Deleted;\r\n departmentSection.rows.forEach((r) => {\r\n if (r.tryGet('PkMemoTemplatePerimeterRowID') == rowID) {\r\n r.state = CardRowState.Deleted;\r\n }\r\n });\r\n \r\n await showError('Необходимо выбрать периметр.');\r\n }\r\n \r\n let perimeterID = perimeterRow.tryGet('PerimeterID');\r\n if (perimeterID == null) {\r\n return;\r\n }\r\n \r\n if (perimeterSection.rows.find(x => x.tryGet('PerimeterID') == perimeterID\r\n && x.rowId != rowID\r\n && x.state != CardRowState.Deleted)) {\r\n perimeterRow.state = CardRowState.Deleted;\r\n departmentSection.rows.forEach((r) => {\r\n if (r.tryGet('PkMemoTemplatePerimeterRowID') == rowID) {\r\n r.state = CardRowState.Deleted;\r\n }\r\n });\r\n\r\n await showError('Нельзя добавлять периметр дважды.');\r\n }\r\n\r\n departmentSection.rows.forEach((r) => {\r\n if (r.state != CardRowState.Deleted) {\r\n departmentSection.rows.forEach((t) => {\r\n if (t.rowId != r.rowId\r\n && t.tryGet('DepartmentID') == r.tryGet('DepartmentID')\r\n && t.state != CardRowState.Deleted) {\r\n t.state = CardRowState.Deleted;\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import { CardUIExtension, ICardModel, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { CardRow, CardRowState, CardRowsListener, CardSection } from 'tessa/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { AutoCompleteTableViewModel } from 'tessa/ui/cards/controls';\r\nimport { showError, showNotEmpty } from 'tessa/ui';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { PkDepartmentHelper } from 'src/pkScripts/Helpers/PkDepartmentHelper';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { openCard } from 'tessa/ui/uiHost';\r\n\r\nexport class ArPowerOfAttorneyAuthorityUIExtension extends CardUIExtension {\r\n\r\n private disposer: Function | null = null;\r\n private _listener: CardRowsListener | null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArPowersOfAttorneyAuthorityTypeID)) {\r\n return;\r\n }\r\n const card = context.model.card;\r\n let section = card.sections.tryGet(\"ArCredential\");\r\n if (!section) return;\r\n section.fields.fieldChanged.add(async e =>\r\n {\r\n if (e.fieldName == \"SubtypeName\" || e.fieldName == \"ShortName\") {\r\n await this.SetNameAsync(section!);\r\n }\r\n });\r\n \r\n this.SetMRCListUniqueValuesHandler(context.model);\r\n await this.SetMatrixOrgaizationsListControlLogicAsync(context.model); \r\n }\r\n\r\n private async SetNameAsync(section: CardSection) { \r\n const subtype = section?.fields?.get(\"SubtypeName\")??\"\";\r\n const shortName = section?.fields?.get(\"ShortName\")??\"\"; \r\n section.fields.set(\"Name\", `${subtype} ${shortName}`, DotNetType.String);\r\n }\r\n \r\n private SetMRCListUniqueValuesHandler(model: ICardModel) {\r\n let mrcListControl = model.controls.get('MRCList') as AutoCompleteTableViewModel;\r\n mrcListControl.valueSet.add((e) => {\r\n\r\n const mrcToCredentialSection = model.card.sections.tryGet('ArMRCToCredentials');\r\n if (mrcToCredentialSection == null) return;\r\n\r\n if (mrcListControl.items.length >= 2) {\r\n let theSameMrcs = mrcToCredentialSection.rows.filter(row => row.state !== CardRowState.Deleted && row.get('MachineReadableCredentialID') == e.item.columnValues[0]);\r\n if (theSameMrcs.length > 1) {\r\n mrcToCredentialSection.rows.splice(mrcToCredentialSection.rows.length - 1, 1);\r\n showError('Это полномочие уже есть в списке, повторное добавление невозможно!'); \r\n }\r\n }\r\n });\r\n }\r\n private SetMatrixOrgaizationsListControlLogicAsync(model: ICardModel) {\r\n let matrixOrgaizationsListControl = model.controls.get('MatrixOrgaizationsListControl') as AutoCompleteTableViewModel;\r\n matrixOrgaizationsListControl.valueSet.add(async (e) => {\r\n\r\n let extID = e.item.columnValues[1]; // OrganizationExternalID\r\n \r\n const arCredentialsMatrixSigners = model.card.sections.tryGet('ArCredentialsMatrixSigners');\r\n\r\n if (!extID || !arCredentialsMatrixSigners) {\r\n return;\r\n }\r\n\r\n \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetDepartmentRolesRoleUsersID; \r\n let depRoles = [PkDepartmentHelper.GeneralDirector, PkDepartmentHelper.HeadOfDepartment, PkDepartmentHelper.DivisionVicePresident].map(x => createTypedField(x, DotNetType.String));\r\n request.info[\"Roles\"] = depRoles;\r\n request.info[\"ExtID\"] = createTypedField(extID, DotNetType.Int64);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n } \r\n \r\n const roles = response.info.RoleUsers;\r\n if (!roles || roles.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n \r\n let existedIDs : string[] = arCredentialsMatrixSigners.rows?.filter(row => row.state !== CardRowState.Deleted).map(row => row.tryGetField(\"SignerID\")!.$value as string);\r\n\r\n roles.forEach(role => {\r\n if (!!existedIDs && existedIDs.includes(role.UserID.$value)) {\r\n return;\r\n }\r\n\r\n let newRow = new CardRow(); \r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"SignerID\", createTypedField(role.UserID.$value, DotNetType.Guid));\r\n newRow.set(\"SignerName\", createTypedField(role.UserName.$value, DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n arCredentialsMatrixSigners!.rows.push(newRow);\r\n });\r\n });\r\n\r\n matrixOrgaizationsListControl.openRefAction = async (i) => {\r\n let partnerExternalID = matrixOrgaizationsListControl.items![i].columnValues[1]; // OrganizationExternalID\r\n if (partnerExternalID) {\r\n const infoDict: IStorage = {\r\n 'ExternalID': createTypedField(partnerExternalID, DotNetType.Int64)\r\n };\r\n await openCard({\r\n cardId: Guid.newGuid(),\r\n cardTypeId: CdCardTypes.PkKCKPartnerTypeID,\r\n info: infoDict\r\n });\r\n } else {\r\n const info = {};\r\n await openCard({\r\n cardId: matrixOrgaizationsListControl.items![i].reference,\r\n info: info\r\n });\r\n }\r\n \r\n };\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this.disposer) {\r\n this.disposer();\r\n this.disposer = null;\r\n }\r\n if (this._listener) {\r\n this._listener.stop();\r\n this._listener = null;\r\n }\r\n }\r\n\r\n}","/** Типы адресов. */\r\nexport enum PkAddressTypes {\r\n /** Стандартный (улица, дом, квартира). */\r\n Standart = 0,\r\n /** Абонентский ящик. */\r\n Box = 1,\r\n}\r\n\r\n/** Наименования типов адресов. */\r\nexport const PkAddressTypesDescriptions = new Map([\r\n [PkAddressTypes.Standart, \"Стандартный (улица, дом, квартира)\"],\r\n [PkAddressTypes.Box, \"Абонентский ящик\"]\r\n]);","import { Guid } from \"tessa/platform\";\r\n\r\nexport class ArContractStageKinds {\r\n /// \r\n /// Согласование руководителем\r\n /// \r\n public static ManagerApprovement = \"DCFA3615-249F-4E64-81A4-261FB4984D3D\";\r\n\r\n public static ManagerApprovementOrder = 1;\r\n\r\n /// \r\n /// Согласование ЦФО\r\n /// \r\n public static CFOApprovement = \"1251AB48-FEA2-4056-879E-F66CA7CA1DE1\";\r\n\r\n public static CFOApprovementOrder = 2;\r\n\r\n /// \r\n /// Согласование специалистом первичного контроля закупок\r\n /// \r\n public static ProcurementControlSpecialistApprovement = \"B4290EEE-EB05-48CA-8391-8D2EC1278CED\";\r\n\r\n public static ProcurementControlSpecialistApprovementOrder = 2;\r\n\r\n /// \r\n /// Согласование АНПТ\r\n /// \r\n public static ANPTApprovement = \"679C1454-2EDB-4E90-B1E9-0F8FBF6539A2\";\r\n\r\n public static ANPTApprovementOrder = 3;\r\n\r\n /// \r\n /// Согласование руководителем\r\n /// \r\n public static BudgetaryControlApprovement = \"AD7BF2D9-AA7B-49BD-B1B0-4CB7FB5E1F2F\";\r\n\r\n public static BudgetaryControlApprovementOrder = 4;\r\n\r\n /// \r\n /// Матрица согласования\r\n /// \r\n public static MatrixApprovement = \"E8775776-AC18-48F3-A104-9E95C0C4D267\";\r\n\r\n public static MatrixApprovementOrder = 5;\r\n\r\n /// \r\n /// Консолидирующий юрист\r\n /// \r\n public static LawyerConsolidation = \"DD0BA16B-050D-494C-9F0C-AF25F9408BD9\";\r\n\r\n public static LawyerConsolidationOrder = 6;\r\n\r\n /// \r\n /// Подписание\r\n /// \r\n public static Signing = \"D25C7056-E136-4000-AC33-52B5E7AAE116\";\r\n\r\n public static SigningOrder = 7;\r\n\r\n public static GetStageOrder(stageID: string): number\r\n {\r\n let order = 0;\r\n\r\n if (Guid.equals(stageID, ArContractStageKinds.ManagerApprovement))\r\n {\r\n order = ArContractStageKinds.ManagerApprovementOrder;\r\n }\r\n\r\n if (Guid.equals(stageID, ArContractStageKinds.CFOApprovement))\r\n {\r\n order = ArContractStageKinds.CFOApprovementOrder;\r\n }\r\n\r\n if (Guid.equals(stageID, ArContractStageKinds.ProcurementControlSpecialistApprovement))\r\n {\r\n order = ArContractStageKinds.ProcurementControlSpecialistApprovementOrder;\r\n }\r\n\r\n if (Guid.equals(stageID, ArContractStageKinds.ANPTApprovement))\r\n {\r\n order = ArContractStageKinds.ANPTApprovementOrder;\r\n }\r\n\r\n if (Guid.equals(stageID, ArContractStageKinds.BudgetaryControlApprovement))\r\n {\r\n order = ArContractStageKinds.BudgetaryControlApprovementOrder;\r\n }\r\n\r\n if (Guid.equals(stageID, ArContractStageKinds.MatrixApprovement))\r\n {\r\n order = ArContractStageKinds.MatrixApprovementOrder;\r\n }\r\n\r\n if (Guid.equals(stageID, ArContractStageKinds.LawyerConsolidation))\r\n {\r\n order = ArContractStageKinds.LawyerConsolidationOrder;\r\n }\r\n\r\n if (Guid.equals(stageID, ArContractStageKinds.Signing))\r\n {\r\n order = ArContractStageKinds.SigningOrder;\r\n }\r\n\r\n return order;\r\n }\r\n\r\n public static readonly MatrixStageList: string[] =\r\n [\r\n ArContractStageKinds.ManagerApprovement,\r\n ArContractStageKinds.CFOApprovement,\r\n ArContractStageKinds.ProcurementControlSpecialistApprovement,\r\n ArContractStageKinds.ANPTApprovement,\r\n ArContractStageKinds.BudgetaryControlApprovement,\r\n ArContractStageKinds.MatrixApprovement,\r\n ArContractStageKinds.LawyerConsolidation,\r\n ArContractStageKinds.Signing\r\n ];\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { GridViewModel, GridRowAction, AutoCompleteTableViewModel } from 'tessa/ui/cards/controls';\r\nimport { Card, CardRowState, CardRowsListener, CardRow, CardSection } from 'tessa/cards';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { tryGetFromInfo, UIButton } from 'tessa/ui';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { PkContractUIHelper } from 'src/pkScripts/Helpers/PkContractUIHelper';\r\nimport { reaction } from 'mobx';\r\nimport { ChContextRoles } from 'src/pkScripts/Helpers/ChContextRoles';\r\nimport { ArContractStageKinds } from 'src/pkScripts/Helpers/ArContractStageKinds';\r\nimport { DefaultFormMainViewModel } from 'tessa/ui/cards/forms';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { userSession } from 'common/utility';\r\nimport { TessaViewRequest, ViewService } from 'tessa/views';\r\nimport { RequestParameterBuilder } from 'tessa/views';\r\nimport { equalsCriteriaOperator } from 'tessa/views/metadata';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\n\r\nexport class ArContractCustomParticipantsUIExtension extends CardUIExtension {\r\n\r\n private disposer: Function | null = null;\r\n private _listener: CardRowsListener | null;\r\n private _disposerSelectFcptRow: Function | null = null;\r\n private _disposerSelectAccptRow: Function | null = null;\r\n\r\n private readonly _customParticipantsStatesList: any[] = \r\n [\r\n CdDocStates.Project,\r\n CdDocStates.Modification,\r\n CdDocStates.OnAgreement,\r\n CdDocStates.PreparationDocumentForSigning,\r\n CdDocStates.CheckingCommentsBeforeSending,\r\n CdDocStates.OnSigningAtPartner,\r\n CdDocStates.OnSigningInCompany,\r\n CdDocStates.FixingProblems\r\n ];\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null || context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArContractTypeID)) {\r\n return;\r\n }\r\n\r\n if (this._listener) {\r\n this._listener.stop();\r\n }\r\n\r\n let model = context.model;\r\n let card = model.card;\r\n let form = model.formsBag.find(_=> _.name === 'UniversalProcesses');\r\n if (form) {\r\n const mainForm = context.model.mainForm as DefaultFormMainViewModel;\r\n let currentTab = mainForm.selectedTab;\r\n mainForm.selectedTab = form;\r\n mainForm.selectedTab = currentTab;\r\n }\r\n\r\n // Очистка полей при копировании карточки.\r\n await this.ClearFieldsWhenCopyCard(card);\r\n\r\n // Логика кнопки 'Пересчитать'\r\n await this.RecalculateButtonControlLogicAsync(context, model, card);\r\n\r\n // Логика кнопки 'Добавить'\r\n await this.ArContractCustomParticipantsTable_AddButtonControlLogicAsync(context, card);\r\n\r\n // Логика кнопки 'Удалить'\r\n await this.ArContractCustomParticipantsTable_DeleteButtonControlLogicAsync(context, card);\r\n\r\n // Логика редактирования записи\r\n await this.ArContractCustomParticipantsTable_EditRowLogicAsync(context);\r\n\r\n await this.VisibilityUsersControl(context, card);\r\n\r\n PkContractUIHelper.FillArContractCustomParticipants(card);\r\n\r\n await this.WorkWithFdCustomParticipantsTable(context, card); \r\n\r\n // Если автоматизированная сторона только одна при добавлении доп. согласующего проставлять единственно возможное значение.\r\n await this.AddSinglePartnerIntoCustomParticipantsTable(context, card);\r\n }\r\n\r\n /** Очистка полей при копировании карточки. */\r\n private ClearFieldsWhenCopyCard(card: Card)\r\n {\r\n if (card.created)\r\n {\r\n return;\r\n }\r\n\r\n let fcprv : CardSection | undefined = card.sections.tryGet(\"FdCustomParticipants_RolesVirtual\");\r\n if (fcprv)\r\n {\r\n fcprv.rows.clear();\r\n }\r\n\r\n let fcpu : CardSection | undefined = card.sections.tryGet(\"FdCustomParticipants_Users\");\r\n if (fcpu)\r\n {\r\n fcpu.rows.clear();\r\n }\r\n\r\n let fcpv : CardSection | undefined = card.sections.tryGet(\"FdCustomParticipantsVirtual\");\r\n if (fcpv)\r\n {\r\n fcpv.rows.clear();\r\n }\r\n }\r\n\r\n private async ArContractCustomParticipantsTable_EditRowLogicAsync(context: ICardUIExtensionContext)\r\n {\r\n let fcpt = CdUIHelper.GetUIControl(context, \"FdCustomParticipantsTable\");\r\n let accpt = CdUIHelper.GetUIControl(context, \"ArContractCustomParticipantsTable\");\r\n\r\n if (accpt) {\r\n accpt.rowInvoked.add(async e =>\r\n {\r\n if (e.action == GridRowAction.Opening)\r\n {\r\n e.cancel = true;\r\n\r\n if (fcpt) {\r\n let fdEditRow = fcpt.rows.find(fdRow => fdRow.rowId == e.row.rowId);\r\n if (fdEditRow)\r\n {\r\n await fcpt!.editRow(fdEditRow);\r\n }\r\n } \r\n }\r\n }); \r\n }\r\n }\r\n\r\n private async WorkWithFdCustomParticipantsTable(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let fcpt = CdUIHelper.GetUIControl(context, \"FdCustomParticipantsTable\");\r\n if (!fcpt) {\r\n return;\r\n }\r\n\r\n fcpt.rowEditorClosed.add(async () =>\r\n {\r\n PkContractUIHelper.FillArContractCustomParticipants(card);\r\n });\r\n\r\n fcpt.rowInvoked.add(e =>\r\n {\r\n if (e.action == GridRowAction.Deleting)\r\n {\r\n PkContractUIHelper.FillArContractCustomParticipants(card, e.row.rowId);\r\n }\r\n });\r\n }\r\n\r\n private async ArContractCustomParticipantsTable_DeleteButtonControlLogicAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let fcpt = CdUIHelper.GetUIControl(context, \"FdCustomParticipantsTable\");\r\n let accpt = CdUIHelper.GetUIControl(context, \"ArContractCustomParticipantsTable\");\r\n if (accpt != null)\r\n {\r\n accpt.rightButtons.push(new UIButton(\r\n \"Удалить\", \r\n async () =>\r\n {\r\n let arContractDeleteRows = accpt!.selectedRows;\r\n let fdDeleteRows = fcpt!.rows.filter(fdRow => arContractDeleteRows.some(arRow => arRow.rowId == fdRow.rowId));\r\n if (fdDeleteRows.length > 0)\r\n {\r\n fdDeleteRows.forEach(async delRow => {\r\n let row = fcpt!.rows.find(_ => _.rowId === delRow.rowId);\r\n if(row)\r\n {\r\n row.isSelected = true; \r\n }\r\n \r\n await fcpt!.removeRow();\r\n PkContractUIHelper.FillArContractCustomParticipants(card, delRow.rowId);\r\n card.info[\"DoNotRecalculateCustomParticipants\"] = true;\r\n });\r\n }\r\n }, \r\n null, \r\n () => this.RemoveButtonRights(context, card)));\r\n }\r\n }\r\n\r\n private async ArContractCustomParticipantsTable_AddButtonControlLogicAsync(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let fcpt = CdUIHelper.GetUIControl(context, \"FdCustomParticipantsTable\");\r\n let accpt = CdUIHelper.GetUIControl(context, \"ArContractCustomParticipantsTable\");\r\n let checkFeatureFlag = tryGetFromInfo(card.info, \"CheckFeatureFlag\", false);\r\n\r\n if (accpt != null && fcpt != null && !checkFeatureFlag)\r\n {\r\n accpt.rightButtons.push(new UIButton(\r\n \"Добавить\", \r\n async () => await fcpt!.addRow(), \r\n null, \r\n () => this.AddButtonRights(card))\r\n );\r\n }\r\n }\r\n\r\n /**\r\n Определение доступности контрола UsersControl \r\n */\r\n private async VisibilityUsersControl(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let fcpt = CdUIHelper.GetUIControl(context, \"FdCustomParticipantsTable\");\r\n let accpt = CdUIHelper.GetUIControl(context, \"ArContractCustomParticipantsTable\");\r\n let fcprv = card.sections.get(\"FdCustomParticipants_RolesVirtual\");\r\n let fcpv = card.sections.get(\"FdCustomParticipantsVirtual\");\r\n let fcpu = card.sections.get(\"FdCustomParticipants_Users\");\r\n let accpv = card.sections.get(\"ArContractCustomParticipantsVirtual\");\r\n let arContractsUser = card.sections.get('ArContractsUser');\r\n if (!accpt || !fcpt || !fcprv || !fcpv || !fcpu || !accpv|| !arContractsUser)\r\n {\r\n return;\r\n }\r\n\r\n accpt.moveUpButton.setVisibility(Visibility.Hidden);\r\n accpt.moveDownButton.setVisibility(Visibility.Hidden); \r\n accpt.addButton.setVisibility(Visibility.Collapsed);\r\n accpt.removeButton.setVisibility(Visibility.Collapsed);\r\n\r\n if (this._disposerSelectAccptRow == null) {\r\n this._disposerSelectAccptRow = reaction(() => accpt!.selectedRows, () => {\r\n if (accpv!.rows.some(_ => accpt!.selectedRow != null && _.get(\"ParentRowID\") == accpt!.selectedRow.row.rowId && _.get(\"RoleID\") == ChContextRoles.ArContractAdditionalApprover))\r\n {\r\n accpt!.moveUpButton.setVisibility(Visibility.Visible);\r\n accpt!.moveDownButton.setVisibility(Visibility.Visible);\r\n }\r\n else\r\n {\r\n accpt!.moveUpButton.setVisibility(Visibility.Hidden);\r\n accpt!.moveDownButton.setVisibility(Visibility.Hidden);\r\n }\r\n }); \r\n }\r\n\r\n fcpt.moveUpButton.setVisibility(Visibility.Hidden);\r\n fcpt.moveDownButton.setVisibility(Visibility.Hidden);\r\n\r\n if (this._disposerSelectFcptRow == null) {\r\n this._disposerSelectFcptRow = reaction(() => fcpt!.selectedRows, () => {\r\n if (fcprv!.rows.some(_ => fcpt!.selectedRow != null && _.get(\"ParentRowID\") == fcpt!.selectedRow.row.rowId && _.get(\"RoleID\") == ChContextRoles.ArContractAdditionalApprover))\r\n {\r\n fcpt!.moveUpButton.setVisibility(Visibility.Visible);\r\n fcpt!.moveDownButton.setVisibility(Visibility.Visible);\r\n }\r\n else\r\n {\r\n fcpt!.moveUpButton.setVisibility(Visibility.Hidden);\r\n fcpt!.moveDownButton.setVisibility(Visibility.Hidden);\r\n }\r\n }); \r\n } \r\n \r\n fcpt.rowAdding.add(e => {\r\n let newRow = new CardRow();\r\n let rowId = Guid.newGuid();\r\n\r\n newRow.set('RowID', createTypedField(rowId, DotNetType.Guid));\r\n newRow.set('Order', createTypedField(0, DotNetType.Int32));\r\n newRow.set('ParentRowID', createTypedField(e.row.rowId, DotNetType.Guid));\r\n newRow.set('RoleID', createTypedField(ChContextRoles.ArContractAdditionalApprover, DotNetType.Guid));\r\n newRow.set('RoleName', createTypedField('Дополнительный согласующий', DotNetType.String));\r\n \r\n newRow.state = CardRowState.Inserted;\r\n\r\n let fcprv = card.sections.tryGet('FdCustomParticipants_RolesVirtual');\r\n if (fcprv) {\r\n fcprv.rows.push(newRow);\r\n }\r\n\r\n e.row.set('TaskTimeLimitationInWorkingDaysNormal', createTypedField(\"2\", DotNetType.Decimal));\r\n card.info[\"DoNotRecalculateCustomParticipants\"] = true;\r\n });\r\n\r\n fcpt.rowValidating.add(e =>\r\n {\r\n if (!fcpu!.rows.some(x => x.parentRowId == e.row.rowId))\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Поле \\\"Сотрудники\\\" обязательно для заполнения.\");\r\n }\r\n\r\n if (e.row.tryGet(\"PartnerExternalID\") == null)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Поле \\\"Сторона\\\" обязательно для заполнения.\");\r\n }\r\n\r\n if (e.row.tryGet(\"StageTemplateID\") == null)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Поле \\\"Этап\\\" обязательно для заполнения.\");\r\n }\r\n\r\n if (e.row.tryGet(\"TaskTimeLimitationInWorkingDaysNormal\") == null)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Поле \\\"Срок задания (рабочие дни)\\\" обязательно для заполнения.\");\r\n }\r\n });\r\n\r\n fcpt.rowEditorClosed.add(e => \r\n {\r\n if (!fcprv!.rows.some(_ => _.state != CardRowState.Deleted && _.get(\"ParentRowID\") === e.row.rowId && _.get(\"RoleID\") === ChContextRoles.ArContractAdditionalApprover)\r\n || fcpv!.rows.filter(_ => _.state != CardRowState.Deleted && _.get('Order') == e.row.get('Order')).length == 1) \r\n {\r\n return;\r\n }\r\n \r\n let partnerOrder = [...new Set(fcpv!.rows.filter(x => x.rowId != e.row.rowId).sort((a, b) => a.tryGet('Order') - b.tryGet('Order')).map(x => x.tryGet(\"PartnerExternalID\")))];\r\n\r\n let signingRows = fcpv!.rows\r\n .filter(_ => _.state != CardRowState.Deleted && Guid.equals(_.tryGet(\"StageTemplateID\"), ArContractStageKinds.Signing))\r\n .sort((a, b) =>\r\n {\r\n return (partnerOrder.indexOf(a.tryGet(\"PartnerExternalID\")) * 1000)\r\n - (partnerOrder.indexOf(b.tryGet(\"PartnerExternalID\")) * 1000)\r\n + (ArContractStageKinds.GetStageOrder(a.get('StageTemplateID')) * 100) \r\n - (ArContractStageKinds.GetStageOrder(b.get('StageTemplateID')) * 100) \r\n + a.get('OrderCustom') \r\n - b.get('OrderCustom');\r\n } \r\n );\r\n\r\n let otherRows = fcpv!.rows\r\n .filter(_ => _.state != CardRowState.Deleted && !Guid.equals(_.tryGet(\"StageTemplateID\"), ArContractStageKinds.Signing))\r\n .sort((a, b) =>\r\n {\r\n return (partnerOrder.indexOf(a.tryGet(\"PartnerExternalID\")) * 1000)\r\n - (partnerOrder.indexOf(b.tryGet(\"PartnerExternalID\")) * 1000)\r\n + (ArContractStageKinds.GetStageOrder(a.get('StageTemplateID')) * 100) \r\n - (ArContractStageKinds.GetStageOrder(b.get('StageTemplateID')) * 100) \r\n + a.get('OrderCustom') \r\n - b.get('OrderCustom');\r\n } \r\n );\r\n\r\n fcpv!.rows.clear();\r\n\r\n let order = 0;\r\n\r\n for (let row of otherRows)\r\n {\r\n row.set('Order', ++order, DotNetType.Int32)\r\n if (row.state == CardRowState.None)\r\n {\r\n row.state = CardRowState.Modified;\r\n }\r\n\r\n fcpv!.rows.push(row);\r\n }\r\n\r\n for (let row of signingRows)\r\n {\r\n row.set('Order', ++order, DotNetType.Int32)\r\n if (row.state == CardRowState.None)\r\n {\r\n row.state = CardRowState.Modified;\r\n }\r\n\r\n fcpv!.rows.push(row);\r\n }\r\n });\r\n\r\n fcpt.rowInvoked.add(e => {\r\n if (e.action == GridRowAction.Inserted || e.action == GridRowAction.Opening)\r\n {\r\n let isAdditionalApprover = fcprv!.rows.some(_ => _.state != CardRowState.Deleted\r\n && _.get(\"ParentRowID\") == e.row.rowId\r\n && _.get(\"RoleID\") == ChContextRoles.ArContractAdditionalApprover);\r\n\r\n let isInternalEmployee = e.row.tryGet(\"IsInternalEmployee\") as boolean | null ?? false;\r\n\r\n let isRequired = e.row.tryGet(\"IsRequired\") ?? false;\r\n \r\n let partnerControl = e.rowModel!.controlsBag.find(x => x.name == \"PartnerControl\");\r\n let stageControl = e.rowModel!.controlsBag.find(x => x.name == \"StageControl\");\r\n let taskTimeLimitControl = e.rowModel!.controlsBag.find(x => x.name == \"TaskTimeLimitationInWorkingDaysNormalControl\");\r\n let usersControl = e.rowModel!.controlsBag.find(x => x.name == \"UsersControl\") as AutoCompleteTableViewModel;\r\n let orderCustomControl = e.rowModel!.controlsBag.find(x => x.name == \"OrderCustomControl\");\r\n\r\n if (usersControl && this.HaveParticipantsTableRights(card))\r\n {\r\n if (e.action == GridRowAction.Inserted \r\n || isAdditionalApprover\r\n || isInternalEmployee\r\n || isRequired \r\n || usersControl.items.length == 0)\r\n { \r\n usersControl.isReadOnly = false;\r\n usersControl.isRequired = true;\r\n\r\n if(!isInternalEmployee)\r\n {\r\n e.row.set('IsInternalEmployee', true, DotNetType.Boolean);\r\n }\r\n\r\n e.row.set('ExceptStageID', '1251ab48-fea2-4056-879e-f66ca7ca1de1', DotNetType.Guid);\r\n }\r\n }\r\n\r\n if (orderCustomControl)\r\n {\r\n orderCustomControl.isReadOnly = true;\r\n }\r\n \r\n if (taskTimeLimitControl && this.HaveParticipantsTableRights(card) && isAdditionalApprover)\r\n {\r\n taskTimeLimitControl.isReadOnly = false;\r\n taskTimeLimitControl.isRequired = true;\r\n }\r\n\r\n if (e.action == GridRowAction.Inserted || isInternalEmployee)\r\n { \r\n if (stageControl && partnerControl && isAdditionalApprover && this.HaveParticipantsTableRights(card))\r\n {\r\n stageControl.isReadOnly = false;\r\n stageControl.isRequired = true;\r\n\r\n partnerControl.isReadOnly = false;\r\n partnerControl.isRequired = true;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n private RecalculateButtonControlLogicAsync(context: ICardUIExtensionContext, model: ICardModel, card: Card) \r\n { \r\n let buttonAction = async () =>\r\n {\r\n card.info[\"DoNotRecalculateCustomParticipants\"] = false;\r\n let result = await model.saveAsync();\r\n if (!result.isSuccessful)\r\n {\r\n return;\r\n }\r\n };\r\n\r\n // добавим самописную кнопку под таблицу\r\n let fcpt = CdUIHelper.GetUIControl(context, \"FdCustomParticipantsTable\");\r\n if(fcpt)\r\n {\r\n fcpt.leftButtons.push(new UIButton(\"Пересчитать\", buttonAction, null, () => this.HaveParticipantsTableRights(card)));\r\n }\r\n \r\n let accpt = CdUIHelper.GetUIControl(context, \"ArContractCustomParticipantsTable\");\r\n if(accpt)\r\n {\r\n accpt.leftButtons.push(new UIButton(\"Пересчитать\", buttonAction, null, () => this.RefreshButtonRights(card)));\r\n }\r\n }\r\n\r\n private HaveParticipantsTableRights(card: Card): boolean\r\n {\r\n const cardState = card.sections.get(\"PkDocumentCommonInfo\")?.fields.getField(\"StateID\")?.$value as number\r\n \r\n if (cardState == null || !this._customParticipantsStatesList.some(x => x.id == cardState))\r\n {\r\n return false;\r\n }\r\n \r\n return userSession.isAdmin \r\n || tryGetFromInfo(card.info, \"IsExecutor\", false) \r\n || tryGetFromInfo(card.info, \"IsAuthor\", false);\r\n }\r\n\r\n private RefreshButtonRights(card: Card): boolean\r\n {\r\n return this.HaveParticipantsTableRights(card);\r\n }\r\n \r\n private AddButtonRights(card: Card): boolean\r\n {\r\n return this.HaveParticipantsTableRights(card);\r\n }\r\n \r\n private RemoveButtonRights(context: ICardUIExtensionContext, card: Card): boolean\r\n {\r\n const accpt = CdUIHelper.GetUIControl(context, \"ArContractCustomParticipantsTable\");\r\n const fcprv = card.sections.tryGet(\"FdCustomParticipants_RolesVirtual\");\r\n if (accpt == null\r\n || accpt.selectedRow == null\r\n || fcprv == null)\r\n {\r\n return false;\r\n }\r\n\r\n var roleRow = fcprv.rows.find(x => x.state != CardRowState.Deleted && Guid.equals(x.tryGet(\"ParentRowID\"), accpt.selectedRow?.rowId));\r\n\r\n if (roleRow == null || (Guid.equals(roleRow.tryGet(\"RoleID\"), ChContextRoles.ArContractAdditionalApprover) && !userSession.isAdmin))\r\n {\r\n return false;\r\n }\r\n\r\n return this.HaveParticipantsTableRights(card);\r\n }\r\n\r\n /**Если автоматизированная сторона только одна при добавлении доп. согласующего проставлять единственно возможное значение. */\r\n private async AddSinglePartnerIntoCustomParticipantsTable(context: ICardUIExtensionContext, card: Card)\r\n {\r\n let fcpt = CdUIHelper.GetUIControl(context, \"FdCustomParticipantsTable\");\r\n\r\n const pkKCKPartners_WithInstanceIDView = ViewService.instance.getByName('PkKCKPartners_WithInstanceID');\r\n const request = new TessaViewRequest(pkKCKPartners_WithInstanceIDView!.metadata);\r\n \r\n const cardIDParam = new RequestParameterBuilder()\r\n .withMetadata(pkKCKPartners_WithInstanceIDView!.metadata.parameters.get('ContractGuid')!)\r\n .addCriteria(equalsCriteriaOperator(), card.id, card.id)\r\n .asRequestParameter();\r\n request.values.push(cardIDParam);\r\n\r\n const isAutomatedParam = new RequestParameterBuilder()\r\n .withMetadata(pkKCKPartners_WithInstanceIDView!.metadata.parameters.get('PartnerAutomated')!)\r\n .addCriteria(equalsCriteriaOperator(), '', true)\r\n .asRequestParameter();\r\n request.values.push(isAutomatedParam);\r\n\r\n let result = await pkKCKPartners_WithInstanceIDView!.getData(request); \r\n\r\n fcpt!.rowInvoked.add(async e =>\r\n {\r\n if (e.action == GridRowAction.Inserted && result.rows.length == 1)\r\n { \r\n let res = result!.rows[0];\r\n e.row.set('PartnerID', 'aedf785b-1c18-430c-82b8-76330027a853', DotNetType.Guid);\r\n e.row.set('PartnerExternalID', res[0], DotNetType.Int64);\r\n e.row.set('PartnerName', res[1], DotNetType.String); \r\n }\r\n }\r\n );\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this.disposer) {\r\n this.disposer();\r\n this.disposer = null;\r\n }\r\n\r\n if (this._listener) {\r\n this._listener.stop();\r\n this._listener = null;\r\n }\r\n \r\n if (this._disposerSelectAccptRow) {\r\n this._disposerSelectAccptRow();\r\n this._disposerSelectAccptRow = null;\r\n }\r\n \r\n if (this._disposerSelectFcptRow) {\r\n this._disposerSelectFcptRow();\r\n this._disposerSelectFcptRow = null;\r\n }\r\n }\r\n\r\n}\r\n\r\nexport class RolePerformersResponseInfo{\r\n public Order: number;\r\n public RowID: guid;\r\n public StageTemplateID: guid;\r\n public StageTemplateName: string;\r\n public StageTemplateIsParallel: boolean;\r\n public TaskTimeLimitationInWorkingDaysNormal: number;\r\n public RoleID: guid;\r\n public RoleName: string;\r\n public RoleOrder: number;\r\n public RoleIsRequired: boolean;\r\n public PartnerExternalID: number;\r\n public Users: any;\r\n\r\n /**\r\n *\r\n */\r\n constructor(obj: any) {\r\n this.Order = obj.Order ? obj.Order.$value : null;\r\n this.RowID = obj.RowID ? obj.RowID.$value : null;\r\n this.StageTemplateID = obj.StageTemplateID ? obj.StageTemplateID.$value : null;\r\n this.StageTemplateName = obj.StageTemplateName ? obj.StageTemplateName.$value : null;\r\n this.StageTemplateIsParallel = obj.StageTemplateIsParallel ? obj.StageTemplateIsParallel.$value : null;\r\n this.TaskTimeLimitationInWorkingDaysNormal = obj.TaskTimeLimitationInWorkingDaysNormal ? obj.TaskTimeLimitationInWorkingDaysNormal.$value : null;\r\n this.RoleID = obj.RoleID ? obj.RoleID.$value : null;\r\n this.RoleName = obj.RoleName ? obj.RoleName.$value : null;\r\n this.RoleOrder = obj.RoleOrder ? obj.RoleOrder.$value : null;\r\n this.RoleIsRequired = obj.RoleIsRequired ? obj.RoleIsRequired.$value : false;\r\n this.PartnerExternalID = obj.PartnerExternalID ? obj.PartnerExternalID.$value : false;\r\n this.Users = obj.Users;\r\n }\r\n}\r\n\r\nexport class User{\r\n public UserID: guid;\r\n public UserName: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(obj: any) {\r\n this.UserID = obj.UserID ? obj.UserID.$value : null;\r\n this.UserName = obj.UserName ? obj.UserName.$value : null;\r\n }\r\n}\r\n\r\n","\r\nimport { Card } from 'tessa/cards';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { createTypedField, DotNetType } from 'tessa/platform';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { showConfirm, showNotEmpty, UIContext } from 'tessa/ui';\r\nimport { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { ButtonViewModel } from 'tessa/ui/cards/controls';\r\n\r\n/**Расширение для вкладки избранное поставновка на контроль */\r\nexport class ECMPersonalControlUIExtension extends CardUIExtension {\r\n\r\n\r\n static ECMRequestOnControl = \"43B64E18-F7C9-45E3-8861-DFDE54FBC05F\"\r\n static ECMRequestRemoveControl = \"057B5C40-FF0C-4577-B33A-6A3E3A593E31\"\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n const card = context.model.card;\r\n const ECMPersonalControlInfoVirtual = card.sections.tryGet(\"ECMPersonalControlInfoVirtual\");\r\n if (ECMPersonalControlInfoVirtual == null) { return; }\r\n\r\n\r\n const model = context.model;\r\n const controlIsOnControl = model.controls.get(\"PersonalControl_IsOnControlBt\") as ButtonViewModel;\r\n const controlIsDelControl = model.controls.get(\"PersonalControl_IsDelControlBt\") as ButtonViewModel;\r\n if (controlIsOnControl != null) {\r\n controlIsOnControl.onClick = async () => { await this.OnControlButtonActionAsync(card); };\r\n }\r\n if (controlIsDelControl != null) {\r\n controlIsDelControl.onClick = async () => { await this.RemoveControlButtonActionAsync(card); };\r\n }\r\n\r\n }\r\n\r\n public finalized() {\r\n\r\n }\r\n\r\n private async SendRequestAsync(cardID: guid, info: IStorage, requestType: guid): Promise {\r\n const request = new CardRequest();\r\n request.info = info;\r\n request.requestType = requestType.toString();\r\n request.cardId = cardID;\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n\r\n private async OnControlButtonActionAsync(card: Card) {\r\n const cardEditor = UIContext.current.cardEditor!;\r\n if (await showConfirm(\"$Personal_Control_ConfirmMsgOnControl\")) {\r\n\r\n const ECMPersonalControlInfoVirtual = card.sections.tryGet(\"ECMPersonalControlInfoVirtual\");\r\n\r\n if (ECMPersonalControlInfoVirtual == null || ECMPersonalControlInfoVirtual.fields == null) { return; }\r\n const comment = ECMPersonalControlInfoVirtual.fields.tryGet(\"Comment\");\r\n const dateControl = ECMPersonalControlInfoVirtual.fields.tryGet(\"DateControl\");\r\n let info = {\r\n DateControl: createTypedField(dateControl, DotNetType.DateTime),\r\n Comment: createTypedField(comment, DotNetType.String)\r\n };\r\n\r\n if (await this.SendRequestAsync(card.id, info, ECMPersonalControlUIExtension.ECMRequestOnControl)) {\r\n cardEditor.refreshCard();\r\n }\r\n }\r\n }\r\n\r\n\r\n private async RemoveControlButtonActionAsync(card: Card) {\r\n const cardEditor = UIContext.current.cardEditor!;\r\n if (await showConfirm(\"$Personal_Control_ConfirmMsgDelControl\")) {\r\n let info = {};\r\n if (await this.SendRequestAsync(card.id, info, ECMPersonalControlUIExtension.ECMRequestRemoveControl)) {\r\n cardEditor.refreshCard();\r\n\r\n }\r\n }\r\n }\r\n}\r\n","import { CdCardTypes } from \"src/cdScripts/Helpers/CdCardTypes\";\r\nimport { CardFileState } from \"tessa/cards\";\r\nimport { Guid } from \"tessa/platform\";\r\nimport { IStorage } from \"tessa/platform/storage\";\r\nimport { showError } from \"tessa/ui\";\r\nimport { CardUIExtension, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { AutoCompleteEntryViewModel, FileListViewModel } from \"tessa/ui/cards/controls\";\r\nimport { openCard } from \"tessa/ui/uiHost\";\r\n\r\nexport class ArHeadersBlanksForPowerOfAttorneyUIExtension extends CardUIExtension {\r\n \r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArHeadersBlanksForPowerOfAttorneyTypeID)) {\r\n return;\r\n }\r\n\r\n await this.SetFileHandlersAsync(context);\r\n await this.OverloadKCKLinkAsync(context);\r\n }\r\n \r\n private async OverloadKCKLinkAsync(context: ICardUIExtensionContext) {\r\n const KCKPartnerControl = context.model.controls.get('PartnerKckControl') as AutoCompleteEntryViewModel;\r\n KCKPartnerControl.openRefAction = async () => {\r\n const headersBlanksSection = context.model.card.sections.tryGet('ArHeadersBlanksForPoA');\r\n\r\n const partnerExternalID = headersBlanksSection?.tryGetFields()?.tryGetField('PrincipalOrganizationExternalID');\r\n if (!!partnerExternalID) {\r\n const infoDict: IStorage = {\r\n 'ExternalID': partnerExternalID\r\n };\r\n await openCard({\r\n cardId: Guid.newGuid(),\r\n cardTypeId: CdCardTypes.PkKCKPartnerTypeID,\r\n info: infoDict\r\n }); \r\n }\r\n }\r\n }\r\n\r\n private async SetFileHandlersAsync(context: ICardUIExtensionContext) {\r\n const cardModel = context.model;\r\n\r\n if (!cardModel) {\r\n return;\r\n }\r\n\r\n const fileList = cardModel.controls.get('FileSelectingControl') as FileListViewModel | undefined;\r\n if (!fileList) {\r\n return;\r\n }\r\n\r\n fileList.containerFileAdding.add(e => {\r\n if (context.card.files.filter(file => file.state !== CardFileState.Deleted).length > 1) {\r\n showError('Для подразделения может быть выбран только один файл единовременно. Пожалуйста, удалите старый файл или создайте новую версию старого файла.');\r\n e.cancel = true;\r\n context.card.files.remove(context.card.files[context.card.files.length - 1]);\r\n }\r\n })\r\n }\r\n}","import { Guid } from 'tessa/platform';\r\nimport { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Card, CardRowState, CardSectionType, CardStoreMode } from 'tessa/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\n/*Класс отвечающий за сокрытие изменений в полях, выполненных НЕ пользователем, а при открытиии карточки*/\r\nexport class ArContractHiddenNotUserChanges extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (context.model.card.storeMode == CardStoreMode.Insert\r\n || !Guid.equals(context.model.card.typeId, CdCardTypes.ArContractTypeID)) {\r\n return;\r\n }\r\n\r\n this.SetChangedFalseByAutoclculateFields(context.card)\r\n }\r\n\r\n private SetChangedFalseByAutoclculateFields(card: Card) {\r\n card.sections.forEach(section => {\r\n if (!section || !section.hasChanges()) {\r\n return;\r\n }\r\n switch (section.type) {\r\n case CardSectionType.Entry:\r\n let keys = Object.keys(section.fields.getStorage());\r\n for (let i = 0; i < keys.length; i++) {\r\n section.setChanged(keys[i], false);\r\n }\r\n break;\r\n\r\n case CardSectionType.Table:\r\n\r\n section.rows.filter(x => x.state !== CardRowState.Deleted).forEach(row => {\r\n let keys = Object.keys(row.getStorage());\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n\r\n let item = row.get(keys[i]);\r\n if (item) {\r\n row.setChanged(keys[i], false);\r\n }\r\n }\r\n });\r\n\r\n break;\r\n }\r\n });\r\n }\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext, IControlViewModel } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Card } from 'tessa/cards';\r\nimport { AutoCompleteEntryViewModel, ControlViewModelBase, TextBoxViewModel } from 'tessa/ui/cards/controls';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { PkCorrespondenceSendingTypes } from 'src/pkScripts/Helpers/PkCorrespondenceSendingTypes';\r\nimport { PkAddressTypes } from 'src/pkScripts/Helpers/PkAddressTypes';\r\nimport { PkCardHelper } from 'src/pkScripts/Helpers/PkCardHelper';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { CdCardHelper } from 'src/cdScripts/Helpers/CdCardHelper';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\n\r\nexport class PkCorrespondenceSendingRequestUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (!Guid.equals(context.model?.card?.typeId, PkCardTypes.PkCorrespondenceSendingRequestTypeID)) {\r\n return;\r\n }\r\n\r\n // получаем карточку\r\n const card = context.model.card;\r\n\r\n // получаем модель карточки\r\n const model = context.model;\r\n\r\n // устанавливаем логику изменения полей в секциях\r\n this.SetSectionsFieldChangedLogic(card, model);\r\n\r\n // устанавливаем логику контрола \"Курьеры\"\r\n this.SetCouriersControlLogic(card, model);\r\n\r\n // устанавливаем логику контрола \"Отправитель\"\r\n this.SetSenderControlLogic(card, model);\r\n\r\n // устанавливаем логику контрола \"Курьерская служба экспресс-доставки\"\r\n this.SetExpressDeliveryCompanyControlLogic(card, model);\r\n\r\n // устанавливаем логику контрола \"Трек-номер\"\r\n this.SetTrackNumberControlLogic(card, model);\r\n\r\n // устанавливаем логику контролов связанных с адресом получателя\r\n this.SetReceiverAddressControlsLogic(card, model);\r\n\r\n // // устанавливаем логику контрола \"Отправления\"\r\n // this.SetEnvelopesControlLogic(card, model);\r\n\r\n // // устанавливаем логику блоков \"Отправитель\" и \"Получатель\"\r\n // this.SetSenderAndReceiverBlocksLogic(card, model);\r\n\r\n // скрываем вкладки\r\n CdUIHelper.HideTabs(model, \"История заданий\", \"Избранное\");\r\n }\r\n\r\n /** Установка логики изменения полей в секциях. */\r\n private SetSectionsFieldChangedLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n const pkcsrivSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfoVirtual\");\r\n\r\n // проверяем секции\r\n if (pkcsriSection == null ||\r\n pkcsrivSection == null) {\r\n return;\r\n }\r\n\r\n // подписываемся на событие изменения поля в секции \r\n pkcsriSection.fields.fieldChanged.add((e) => {\r\n switch (e.fieldName) {\r\n case \"SendingTypeID\":\r\n this.SetCouriersControlLogic(card, model);\r\n this.SetExpressDeliveryCompanyControlLogic(card, model);\r\n this.SetTrackNumberControlLogic(card, model);\r\n break;\r\n\r\n // this.SetEnvelopesControlLogic(card, model, true);\r\n // this.SetSenderAndReceiverBlocksLogic(card, model);\r\n case \"ReceiverAddressTypeID\":\r\n case \"ReceiverAddressManualInput\":\r\n // устанавливаем логику контролов адреса получателя\r\n this.SetReceiverAddressControlsLogic(card, model, true);\r\n break;\r\n case \"ReceiverAddressPostalCode\":\r\n case \"ReceiverAddressCountryName\":\r\n case \"ReceiverAddressRegion\":\r\n case \"ReceiverAddressSettlement\":\r\n case \"ReceiverAddressStreet\":\r\n case \"ReceiverAddressHouse\":\r\n case \"ReceiverAddressBlock\":\r\n case \"ReceiverAddressFlat\":\r\n case \"ReceiverAddressPostalBox\":\r\n // обновляем строку с адресом\r\n this.UpdateAddressFull(card);\r\n break;\r\n }\r\n });\r\n\r\n // подписываемся на событие изменения поля в секции \r\n pkcsrivSection.fields.fieldChanged.add((e) => {\r\n switch (e.fieldName) {\r\n case \"ReceiverAddressID\":\r\n // чистим все поля, связанные с адресом\r\n this.ClearAddressFields(card, e.fieldValue);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /** Установка логики контрола \"Курьеры\". */\r\n private SetCouriersControlLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n const pkdciSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n const pkcSection = card.sections.tryGet(\"PkCouriers\");\r\n\r\n // проверяем секции\r\n if (pkcsriSection == null ||\r\n pkdciSection == null ||\r\n pkcSection == null) {\r\n return;\r\n }\r\n\r\n // получаем контрол \"Курьеры\"\r\n const courierControl = CdUIHelper.GetUIControlFromModel(model, \"CouriersControl\");\r\n\r\n // проверяем наличие контрола\r\n if (courierControl == null) {\r\n return;\r\n }\r\n\r\n // получаем состояние карточки\r\n const stateID = pkdciSection.fields.tryGet(\"StateID\") as number | null;\r\n\r\n // получаем вид отправки\r\n const sendingTypeID = pkcsriSection.fields.tryGet(\"SendingTypeID\") as number | null;\r\n\r\n // получаем видимость контрола \"Курьеры\"\r\n const isCourierControlVisible =\r\n stateID != CdDocStates.Project.id &&\r\n sendingTypeID == PkCorrespondenceSendingTypes.Couriers;\r\n\r\n // если контрол должен быть скрыт\r\n if (!isCourierControlVisible) {\r\n // чистим список курьеров\r\n CdUIHelper.ClearSectionRows(pkcSection);\r\n }\r\n\r\n // устанавливаем видимость контрола\r\n CdUIHelper.SetConrolVisibility(courierControl, isCourierControlVisible);\r\n }\r\n\r\n /** Установка логики контрола \"Отправитель\". */\r\n private SetSenderControlLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const dciSection = card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n // проверяем секции\r\n if (dciSection == null) {\r\n return;\r\n }\r\n\r\n // получаем контрол \"Отправитель\"\r\n const senderControl = CdUIHelper.GetUIControlFromModel(model, \"SenderControl\");\r\n\r\n // проверяем наличие контрола\r\n if (senderControl == null) {\r\n return;\r\n }\r\n\r\n // подписываемся на выбор значения в поле \"Отправитель\"\r\n senderControl.valueSet.add((e) => {\r\n // устанавливаем организацию отправителя\r\n if (e.item.columnValues[3] != null) {\r\n dciSection.fields.set(\"DepartmentID\", createTypedField(e.item.columnValues[3] as string, DotNetType.Guid));\r\n }\r\n if (e.item.columnValues[4] != null) {\r\n dciSection.fields.set(\"DepartmentName\", createTypedField(e.item.columnValues[4] as string, DotNetType.String));\r\n }\r\n });\r\n\r\n // подписываемся на удаление значения из поля \"Отправитель\"\r\n senderControl.valueDeleted.add(() => {\r\n // сбрасывам организацию отправителя\r\n dciSection.fields.set(\"DepartmentID\", null);\r\n dciSection.fields.set(\"DepartmentName\", null);\r\n });\r\n }\r\n\r\n /** Установка логики контрола \"Курьерская служба экспресс-доставки\". */\r\n private SetExpressDeliveryCompanyControlLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n const pkdciSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n\r\n // проверяем секции\r\n if (pkcsriSection == null ||\r\n pkdciSection == null) {\r\n return;\r\n }\r\n\r\n // получаем контрол\r\n const expressDeliveryCompanyControl = CdUIHelper.GetUIControlFromModel(model, \"ExpressDeliveryCompanyControl\");\r\n\r\n // проверяем наличие контрола\r\n if (expressDeliveryCompanyControl == null) {\r\n return;\r\n }\r\n\r\n // получаем состояние карточки\r\n const stateID = pkdciSection.fields.tryGet(\"StateID\") as number | null;\r\n\r\n // получаем вид отправки\r\n const sendingTypeID = pkcsriSection.fields.tryGet(\"SendingTypeID\") as number | null;\r\n\r\n // получаем видимость контрола\r\n const isExpressDeliveryCompanyControlVisible = \r\n stateID != CdDocStates.Project.id &&\r\n sendingTypeID == PkCorrespondenceSendingTypes.ExpressDelivery;\r\n\r\n // если контрол должен быть скрыт\r\n if (!isExpressDeliveryCompanyControlVisible) {\r\n // чистим поле\r\n pkcsriSection.fields.set(\"ExpressDeliveryCompanyID\", null);\r\n pkcsriSection.fields.set(\"ExpressDeliveryCompanyName\", null);\r\n }\r\n\r\n // устанавливаем видимость контрола\r\n CdUIHelper.SetConrolVisibility(expressDeliveryCompanyControl, isExpressDeliveryCompanyControlVisible);\r\n }\r\n\r\n /** Установка логики контрола \"Трек-номер\". */\r\n private SetTrackNumberControlLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n const pkdciSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n\r\n // проверяем секции\r\n if (pkcsriSection == null ||\r\n pkdciSection == null) {\r\n return;\r\n }\r\n\r\n // получаем контрол\r\n const trackNumberControl = CdUIHelper.GetUIControlFromModel(model, \"TrackNumberControl\");\r\n\r\n // проверяем наличие контрола\r\n if (trackNumberControl == null) {\r\n return;\r\n }\r\n\r\n // получаем состояние карточки\r\n const stateID = pkdciSection.fields.tryGet(\"StateID\") as number | null;\r\n\r\n // получаем вид отправки\r\n const sendingTypeID = pkcsriSection.fields.tryGet(\"SendingTypeID\") as number | null;\r\n\r\n // получаем видимость контрола\r\n const isTrackNumberControlVisible =\r\n stateID != CdDocStates.Project.id &&\r\n sendingTypeID == PkCorrespondenceSendingTypes.ExpressDelivery;\r\n\r\n // если контрол должен быть скрыт\r\n if (!isTrackNumberControlVisible) {\r\n // чистим поле\r\n pkcsriSection.fields.set(\"TrackNumber\", null);\r\n }\r\n\r\n // устанавливаем видимость контрола\r\n CdUIHelper.SetConrolVisibility(trackNumberControl, isTrackNumberControlVisible);\r\n }\r\n\r\n // /** Установка логики контрола \"Отправления\". */\r\n // private SetEnvelopesControlLogic(\r\n // card: Card,\r\n // model: ICardModel,\r\n // isInitialized: boolean = false) {\r\n // // получаем секции\r\n // const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n // const pkevSection = card.sections.tryGet(\"PkEnvelopesVirtual\");\r\n // const pkervSection = card.sections.tryGet(\"PkEnvelopesRecipientsVirtual\");\r\n\r\n // // проверяем секции\r\n // if (pkcsriSection == null ||\r\n // pkevSection == null ||\r\n // pkervSection == null) {\r\n // return;\r\n // }\r\n\r\n // // получаем контролы\r\n // const envelopesControl = CdUIHelper.GetUIControlFromModel(model, \"EnvelopesControl\");\r\n\r\n // // проверяем наличие контрола\r\n // if (envelopesControl == null) {\r\n // return;\r\n // }\r\n\r\n // // получаем вид отправки\r\n // const sendingTypeID = pkcsriSection.fields.tryGet(\"SendingTypeID\") as number | null;\r\n\r\n // // получаем видимость контрола\r\n // const isEnvelopesControlVisible =\r\n // sendingTypeID == PkCorrespondenceSendingTypes.RussianPost;\r\n\r\n // // если контрол должен быть скрыт\r\n // if (!isEnvelopesControlVisible) {\r\n // // чистим данные\r\n // CdUIHelper.ClearSectionRows(pkevSection);\r\n // CdUIHelper.ClearSectionRows(pkervSection);\r\n // }\r\n\r\n // // устанавливаем видимость контрола\r\n // CdUIHelper.SetConrolVisibility(envelopesControl, isEnvelopesControlVisible);\r\n\r\n // // устанавливаем видимость блока\r\n // envelopesControl.block.blockVisibility = isEnvelopesControlVisible\r\n // ? Visibility.Visible\r\n // : Visibility.Collapsed;\r\n\r\n // // если контрол еще не инициализирован\r\n // if (!isInitialized) {\r\n // // устанавливаем видимость кнопок в табличке\r\n // this.SetEnvelopesControlButtonsVisibility(envelopesControl, pkevSection);\r\n\r\n // // устанавливаем логику для сущестсвующих строк\r\n // pkevSection.rows.forEach(x => this.SetEnvelopeVirtualRowLogic(\r\n // card, \r\n // model, \r\n // x, \r\n // pkevSection, \r\n // pkervSection, \r\n // envelopesControl));\r\n\r\n // // подписываемся на события изменение строки в табличке\r\n // envelopesControl.rowInvoked.add((e) => {\r\n // switch (e.action) {\r\n // case GridRowAction.Inserted:\r\n // // устанавливаем логику для новой строки\r\n // this.SetEnvelopeVirtualRowLogic(\r\n // card, \r\n // model, \r\n // e.row, \r\n // pkevSection, \r\n // pkervSection, \r\n // envelopesControl);\r\n // break;\r\n // case GridRowAction.Deleting:\r\n // // затираем данные в карточке по конверту\r\n // this.UpdateDataFromEnvelope(card);\r\n // break;\r\n // }\r\n // });\r\n\r\n // // подписываемся на изменение коллекции строк\r\n // pkevSection.rows.collectionChanged.add(() => {\r\n // // устанавливаем видимость кнопок в табличке\r\n // this.SetEnvelopesControlButtonsVisibility(envelopesControl, pkevSection);\r\n\r\n // // устанавливаем логику блоков \"Отправитель\" и \"Получатель\"\r\n // this.SetSenderAndReceiverBlocksLogic(card, model);\r\n // });\r\n // }\r\n // }\r\n\r\n // /** Установка логики виртуальной строки таблички конвертов. */\r\n // private SetEnvelopeVirtualRowLogic(\r\n // card: Card,\r\n // model: ICardModel,\r\n // pkevRow: CardRow,\r\n // pkevSection: CardSection,\r\n // pkervSection: CardSection,\r\n // envelopesControl: GridViewModel) {\r\n // // подписываемся на изменение поля строки\r\n // pkevRow.fieldChanged.add(async (e) => {\r\n // switch (e.fieldName) {\r\n // case \"EnvelopeID\":\r\n // await this.FillEnvelopeVirtualRowAsync(\r\n // e.fieldValue,\r\n // card,\r\n // pkevRow, \r\n // pkervSection);\r\n // break;\r\n // }\r\n // });\r\n\r\n // // подписываемся на изменение состояния строки\r\n // pkevRow.stateChanged.add((e) => {\r\n // switch (e.newState) {\r\n // case CardRowState.Deleted:\r\n // this.SetEnvelopesControlButtonsVisibility(envelopesControl, pkevSection);\r\n // this.SetSenderAndReceiverBlocksLogic(card, model);\r\n // }\r\n // });\r\n // }\r\n\r\n // /** Заполнение виртуальной строки таблички конвертов. */\r\n // private async FillEnvelopeVirtualRowAsync(\r\n // envelopeID: string | null,\r\n // card: Card,\r\n // pkevRow: CardRow,\r\n // pkervSection: CardSection) {\r\n // // чистим виртуальную табличку получателей\r\n // CdUIHelper.ClearSectionRows(pkervSection);\r\n\r\n // // если ID конверта не задан\r\n // if (envelopeID == null) {\r\n // // затираем данные в карточке по конверту\r\n // this.UpdateDataFromEnvelope(card);\r\n // return;\r\n // }\r\n\r\n // // иначе получаем данные по конверту\r\n // const mainInfo = await this.GetEnvelopeInfoAsync(envelopeID as string);\r\n // const envelopeInfo = mainInfo.envelopeInfo;\r\n // const envelopeRecipientInfo = mainInfo.envelopeRecipientsInfo;\r\n\r\n // // проверяем\r\n // if (envelopeInfo == null ||\r\n // envelopeRecipientInfo == null) {\r\n // return;\r\n // }\r\n\r\n // // задаем поля виртуальной строки\r\n // pkevRow.set(\"Shpi\", envelopeInfo.Shpi);\r\n // pkevRow.set(\"StateID\", envelopeInfo.StateID);\r\n // pkevRow.set(\"StateName\", envelopeInfo.StateName);\r\n\r\n // // пробегаемся по списку получателей конверта\r\n // for (const recipientInfo of envelopeRecipientInfo) {\r\n // // создаем строку\r\n // const pkervRow = new CardRow();\r\n\r\n // // задаем RowID таким же как у физической строки получателя в конверте\r\n // pkervRow.rowId = getTypedFieldValue(recipientInfo.RowID) as string;\r\n\r\n // // задаем ParentRowID - RowID строки с конвертом (для связи)\r\n // pkervRow.parentRowId = pkevRow.rowId;\r\n\r\n // // задаем остальные поля\r\n // pkervRow.set(\"OrganizationID\", recipientInfo.OrganizationID);\r\n // pkervRow.set(\"OrganizationExternalID\", recipientInfo.OrganizationExternalID);\r\n // pkervRow.set(\"OrganizationName\", recipientInfo.OrganizationName);\r\n // pkervRow.set(\"AddressFull\", recipientInfo.AddressFull);\r\n // pkervRow.set(\"ContactPerson\", recipientInfo.ContactPerson);\r\n\r\n // // задаем состояние строки\r\n // pkervRow.state = CardRowState.Inserted;\r\n\r\n // // добавляем строку в виртуальную табличку получателей\r\n // pkervSection.rows.push(pkervRow);\r\n // }\r\n\r\n // // обновляем данные в карточке по выбранному конверту\r\n // this.UpdateDataFromEnvelope(card, envelopeInfo, envelopeRecipientInfo);\r\n // }\r\n\r\n // /** Обновление данных по выбранной карточке конверта. */\r\n // private UpdateDataFromEnvelope(\r\n // card: Card,\r\n // envelopeInfo: IStorage | null = null,\r\n // envelopeRecipientInfo: IStorageArray | null = null) {\r\n // // получаем секции\r\n // const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n // const dciSection = card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n // // проверяем секции\r\n // if (pkcsriSection == null ||\r\n // dciSection == null) {\r\n // return;\r\n // }\r\n\r\n // // устанавливаем данные по отправителю\r\n // pkcsriSection.fields.set(\"SenderID\", envelopeInfo?.SenderID);\r\n // pkcsriSection.fields.set(\"SenderName\", envelopeInfo?.SenderName);\r\n // pkcsriSection.fields.set(\"SenderDepartmentID\", envelopeInfo?.SenderDepartmentID);\r\n // pkcsriSection.fields.set(\"SenderOrganizationID\", envelopeInfo?.SenderOrganizationID);\r\n // pkcsriSection.fields.set(\"SenderOrganizationName\", envelopeInfo?.SenderOrganizationName);\r\n // dciSection.fields.set(\"DepartmentID\", envelopeInfo?.DepartmentID);\r\n // dciSection.fields.set(\"DepartmentName\", envelopeInfo?.DepartmentName);\r\n\r\n // // получаем данные по получателю\r\n // const recipientInfo = envelopeRecipientInfo != null && envelopeRecipientInfo.length > 0 ? envelopeRecipientInfo[0] : null;\r\n\r\n // // устанавливаем данные по получателю\r\n // pkcsriSection.fields.set(\"ReceiverName\", recipientInfo?.ContactPerson);\r\n // pkcsriSection.fields.set(\"ReceiverAddress\", recipientInfo?.AddressFull);\r\n // pkcsriSection.fields.set(\"ReceiverOrganizationID\", recipientInfo?.OrganizationID);\r\n // pkcsriSection.fields.set(\"ReceiverOrganizationExternalID\", recipientInfo?.OrganizationExternalID);\r\n // pkcsriSection.fields.set(\"ReceiverOrganizationName\", recipientInfo?.OrganizationName);\r\n // }\r\n\r\n // /** Установка видимости кнопок в табличке \"Отправления\". */\r\n // private SetEnvelopesControlButtonsVisibility(\r\n // envelopesControl: GridViewModel,\r\n // pkevSection: CardSection) {\r\n // // получаем видимость кнопки \"Добавить\"\r\n // const addRowsVisibility = pkevSection.rows.length == 0 || pkevSection.rows.every(x => x.state == CardRowState.Deleted)\r\n // ? Visibility.Visible\r\n // : Visibility.Collapsed;\r\n\r\n // // устанавливаем видимость кнопки \"Добавить\"\r\n // envelopesControl.addButton.setVisibility(addRowsVisibility);\r\n // }\r\n\r\n // /** Установка логики блоков \"Отправитель\" и \"Получатель\". */\r\n // private SetSenderAndReceiverBlocksLogic(\r\n // card: Card,\r\n // model: ICardModel) {\r\n // // получаем секции\r\n // const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n\r\n // // проверяем и получаем секции\r\n // if (pkcsriSection == null) {\r\n // return;\r\n // }\r\n\r\n // // получаем контролы\r\n // const envelopesControl = CdUIHelper.GetUIControlFromModel(model, \"EnvelopesControl\");\r\n // const envelopesHintControl = CdUIHelper.GetUIControlFromModel(model, \"EnvelopesHintControl\");\r\n\r\n // // получаем блоки\r\n // const senderInfoBlock = model.blocks.get(\"SenderInfo\");\r\n // const receiverInfoBlock = model.blocks.get(\"ReceiverInfo\");\r\n\r\n // // проверяем\r\n // if (envelopesControl == null ||\r\n // senderInfoBlock == null ||\r\n // receiverInfoBlock == null) {\r\n // return;\r\n // }\r\n\r\n // // получаем вид отправления\r\n // const sendingTypeID = pkcsriSection.fields.tryGet(\"SendingTypeID\") as number | null;\r\n\r\n // // получаем запрет на изменение секции\r\n // const isSectionProhibitModify = Array.from(card.permissions.sections.entries()).some(x =>\r\n // x[0] == \"PkCorrespondenceSendingRequestInfo\" &&\r\n // hasAnyFlag(x[1].sectionPermissions, CardPermissionFlags.ProhibitModify));\r\n\r\n // // определяем доступность блоков\r\n // // либо вид отправления != \"Почта России\"\r\n // // либо \"Почта России\" и в табличке \"Отправления\" есть записи\r\n // const isBlocksEnable =\r\n // sendingTypeID != PkCorrespondenceSendingTypes.RussianPost ||\r\n // envelopesControl.rows.length > 0 && envelopesControl.rows.some(x => x.row.state != CardRowState.Deleted);\r\n\r\n // // устанавливаем доступность контролов блоков\r\n // senderInfoBlock.controls.forEach(x => x.isReadOnly = !isBlocksEnable || isSectionProhibitModify);\r\n // receiverInfoBlock.controls.forEach(x => x.isReadOnly = !isBlocksEnable || isSectionProhibitModify);\r\n\r\n // // устанавливаем видимость контрола подсказки в блоке \"Отправления\"\r\n // if (envelopesHintControl != null) {\r\n // CdUIHelper.SetConrolVisibility(envelopesHintControl, !isBlocksEnable);\r\n // }\r\n // }\r\n\r\n // /** Получение информации по конверту. */\r\n // private async GetEnvelopeInfoAsync(\r\n // envelopeID: string) : Promise<{\r\n // envelopeInfo: IStorage | null,\r\n // envelopeRecipientsInfo: IStorageArray | null\r\n // }> {\r\n // // создаем реквест\r\n // const request = new CardRequest();\r\n // request.requestType = PkRequestTypes.PkGetEnvelopeInfo;\r\n // request.info = {\r\n // EnvelopeID: createTypedField(envelopeID, DotNetType.Guid)\r\n // }\r\n\r\n // // отправляем реквест и получаем ответ\r\n // const response = await CardService.instance.request(request);\r\n\r\n // // проверяем ответ\r\n // if (!response.validationResult.isSuccessful) {\r\n // // отображаем ошибку\r\n // await showError(\r\n // response.validationResult.build().toString(),\r\n // \"Ошибка при получении данных по конверту\");\r\n\r\n // // выходим\r\n // return { \r\n // envelopeInfo: null, \r\n // envelopeRecipientsInfo: null \r\n // };\r\n // }\r\n\r\n // // получаем данные по конверту из ответа\r\n // const envelopeInfoStorage = tryGetFromInfo(response.info, \"EnvelopeInfo\");\r\n // const envelopeRecipientsInfoStorage = tryGetFromInfo(response.info, \"EnvelopeRecipientsInfo\");\r\n\r\n // // проверяем наличие ключей в ответе\r\n // if (envelopeInfoStorage == null ||\r\n // envelopeRecipientsInfoStorage == null) {\r\n // // отображаем ошибку\r\n // await showError(\r\n // \"Не удалось получить данные по конверту.\",\r\n // \"Ошибка при получении данных по конверту\");\r\n\r\n // // выходим\r\n // return { \r\n // envelopeInfo: null, \r\n // envelopeRecipientsInfo: null \r\n // };\r\n // }\r\n\r\n // // возвращаем данные по конверту\r\n // return { \r\n // envelopeInfo: envelopeInfoStorage, \r\n // envelopeRecipientsInfo: envelopeRecipientsInfoStorage \r\n // };\r\n // }\r\n\r\n /** Установка логики контролов связанных с адресом получателя. */\r\n private SetReceiverAddressControlsLogic(\r\n card: Card,\r\n model: ICardModel,\r\n isInitialized: boolean = false) {\r\n // получаем секции\r\n const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n const pkcsrivSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfoVirtual\");\r\n\r\n // проверяем\r\n if (pkcsriSection == null ||\r\n pkcsrivSection == null) {\r\n return;\r\n }\r\n\r\n // получаем тип адреса из строки\r\n const addressTypeID = pkcsriSection.fields.tryGet(\"ReceiverAddressTypeID\") as number | null;\r\n\r\n // получаем галочку \"Ручной ввод\" из строки\r\n const isManualInput = pkcsriSection.fields.tryGet(\"ReceiverAddressManualInput\", false) as boolean;\r\n\r\n // получаем необходимые контролы\r\n const addressControl = CdUIHelper.GetUIControlFromModel(model, \"AddressLinkControl\");\r\n const manualInputControl = CdUIHelper.GetUIControlFromModel(model, \"ManualInputControl\");\r\n const postalCodeControl = CdUIHelper.GetUIControlFromModel(model, \"PostalCodeControl\");\r\n const countryControl = CdUIHelper.GetUIControlFromModel(model, \"CountryControl\");\r\n const regionControl = CdUIHelper.GetUIControlFromModel(model, \"RegionControl\");\r\n const settlementControl = CdUIHelper.GetUIControlFromModel(model, \"SettlementControl\");\r\n const streetControl = CdUIHelper.GetUIControlFromModel(model, \"StreetControl\");\r\n const houseControl = CdUIHelper.GetUIControlFromModel(model, \"HouseControl\");\r\n const blockControl = CdUIHelper.GetUIControlFromModel(model, \"BlockControl\");\r\n const flatControl = CdUIHelper.GetUIControlFromModel(model, \"FlatControl\");\r\n const postalBoxControl = CdUIHelper.GetUIControlFromModel(model, \"PostalBoxControl\");\r\n\r\n // проверяем\r\n if (addressControl == null ||\r\n manualInputControl == null ||\r\n postalCodeControl == null ||\r\n countryControl == null ||\r\n regionControl == null ||\r\n settlementControl == null ||\r\n streetControl == null ||\r\n houseControl == null ||\r\n blockControl == null ||\r\n flatControl == null ||\r\n postalBoxControl == null) {\r\n return;\r\n }\r\n\r\n // устанавливаем видимость контролов\r\n CdUIHelper.SetConrolVisibility(addressControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(manualInputControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(postalCodeControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(countryControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(regionControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(settlementControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(streetControl, addressTypeID == PkAddressTypes.Standart);\r\n CdUIHelper.SetConrolVisibility(houseControl, addressTypeID == PkAddressTypes.Standart);\r\n CdUIHelper.SetConrolVisibility(blockControl, addressTypeID == PkAddressTypes.Standart);\r\n CdUIHelper.SetConrolVisibility(flatControl, addressTypeID == PkAddressTypes.Standart);\r\n CdUIHelper.SetConrolVisibility(postalBoxControl, addressTypeID == PkAddressTypes.Box);\r\n\r\n // получаем секции прав доступа\r\n const pkcsriPermissions = card.permissions.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n const pkcsrivPermissions = card.permissions.sections.tryGet(\"PkCorrespondenceSendingRequestInfoVirtual\");\r\n\r\n console.info(pkcsriPermissions);\r\n console.info(pkcsrivPermissions);\r\n\r\n // устанавливаем доступность контролов\r\n addressControl.isReadOnly = isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsrivPermissions, \"ReceiverAddressID\");\r\n postalCodeControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressPostalCode\");\r\n countryControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressCountryID\");\r\n regionControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressRegion\");\r\n settlementControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressSettlement\");\r\n streetControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressStreet\");\r\n houseControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressHouse\");\r\n blockControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressBlock\");\r\n flatControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressFlat\");\r\n postalBoxControl.isReadOnly = !isManualInput || !CdCardHelper.IsFieldAllowModify(pkcsriPermissions, \"ReceiverAddressPostalBox\");\r\n\r\n // проверяем тип адреса\r\n switch (addressTypeID) {\r\n case null: {\r\n // сбрасываем поля\r\n // при установке AddressID = NULL у нас срабатывает метод ClearAddressFields\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressID\", null, DotNetType.Guid);\r\n\r\n // выходим\r\n break;\r\n }\r\n\r\n case PkAddressTypes.Box: {\r\n // сбрасываем поля\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressStreet\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressHouse\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressBlock\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressFlat\", null, DotNetType.String);\r\n\r\n // выходим\r\n break;\r\n }\r\n\r\n case PkAddressTypes.Standart: {\r\n // сбрасываем поля\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressPostalBox\", null, DotNetType.String);\r\n\r\n // выходим\r\n break;\r\n }\r\n }\r\n\r\n // если модель строки еще не инициализирована\r\n // (это нужно, чтобы не подписываться на события лишний раз)\r\n if (!isInitialized) {\r\n // подписываемся на выбор значения в поле \"Адрес\"\r\n addressControl.valueSet.add((e) => {\r\n // устанавливаем поля\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressPostalCode\", e.item.columnValues[1], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressRegion\", e.item.columnValues[2], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressSettlement\", e.item.columnValues[3], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressStreet\", e.item.columnValues[4], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressHouse\", e.item.columnValues[5], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressBlock\", e.item.columnValues[6], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressFlat\", e.item.columnValues[7], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressCountryID\", e.item.columnValues[9], DotNetType.Guid);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressCountryName\", e.item.columnValues[10], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressCountryFullName\", e.item.columnValues[11], DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressCountryCode\", e.item.columnValues[12], DotNetType.Int64);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressPostalBox\", e.item.columnValues[13], DotNetType.String);\r\n });\r\n\r\n //// получаем код страны \r\n //var countryCode1C = pkcsriSection.Fields.TryGet(\"ReceiverAddressCountryCode\");\r\n\r\n //// если тип отправления \"Международное письмо заказное\"\r\n //if (countryCode1C != 643)\r\n //{\r\n // // задаем регулярное выражение\r\n // const string regExp = \"[а-яёА-ЯЁ]\";\r\n\r\n // // подписываемся на события ввода текста в контролы,\r\n // // в которых будет запрещать ввод символов из регулярного выражения\r\n // postalCodeControl.ForbiddingCharacterInput(regExp);\r\n // regionControl.ForbiddingCharacterInput(regExp);\r\n // settlementControl.ForbiddingCharacterInput(regExp);\r\n // streetControl.ForbiddingCharacterInput(regExp);\r\n // houseControl.ForbiddingCharacterInput(regExp);\r\n // blockControl.ForbiddingCharacterInput(regExp);\r\n // flatControl.ForbiddingCharacterInput(regExp);\r\n // postalBoxControl.ForbiddingCharacterInput(regExp);\r\n //}\r\n }\r\n }\r\n\r\n /** Чистка всех полей, связанных с адресом. */\r\n private ClearAddressFields(\r\n card: Card,\r\n addressID: object | null) {\r\n // чистим только тогда, когда адрес не задан\r\n if (addressID != null) {\r\n return;\r\n }\r\n\r\n // получаем секции\r\n const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n const pkcsrivSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfoVirtual\");\r\n\r\n // проверяем\r\n if (pkcsriSection == null ||\r\n pkcsrivSection == null) {\r\n return;\r\n }\r\n\r\n // чистим все поля, связанные с адресом\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressPostalCode\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressCountryID\", null, DotNetType.Guid);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressCountryName\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressCountryFullName\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressCountryCode\", null, DotNetType.Int64);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressRegion\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressSettlement\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressStreet\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressHouse\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressBlock\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressFlat\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddressPostalBox\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsriSection.fields, \"ReceiverAddress\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressPostalCode\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressRegion\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressSettlement\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressStreet\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressHouse\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressBlock\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressFlat\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressCountryID\", null, DotNetType.Guid);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressCountryName\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressCountryFullName\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressCountryCode1C\", null, DotNetType.Int64);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressPostalBox\", null, DotNetType.String);\r\n PkCardHelper.UpdateKeyValue(pkcsrivSection.fields, \"ReceiverAddressFull\", null, DotNetType.String);\r\n }\r\n\r\n /** Обновление строки с адресом. */\r\n private UpdateAddressFull(\r\n card: Card) {\r\n // получаем секции\r\n const pkcsriSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfo\");\r\n const pkcsrivSection = card.sections.tryGet(\"PkCorrespondenceSendingRequestInfoVirtual\");\r\n\r\n // проверяем\r\n if (pkcsriSection == null ||\r\n pkcsrivSection == null) {\r\n return;\r\n }\r\n\r\n // получаем код страны \r\n const countryCode1C = pkcsriSection.fields.tryGet(\"ReceiverAddressCountryCode\") as number | null;\r\n\r\n // получаем значения полей\r\n const postalCode = pkcsriSection.fields.tryGet(\"ReceiverAddressPostalCode\") as string | null;\r\n const countryName = pkcsriSection.fields.tryGet(\"ReceiverAddressCountryName\") as string | null;\r\n const region = pkcsriSection.fields.tryGet(\"ReceiverAddressRegion\") as string | null;\r\n const settlement = pkcsriSection.fields.tryGet(\"ReceiverAddressSettlement\") as string | null;\r\n const street = pkcsriSection.fields.tryGet(\"ReceiverAddressStreet\") as string | null;\r\n const house = pkcsriSection.fields.tryGet(\"ReceiverAddressHouse\") as string | null;\r\n const block = pkcsriSection.fields.tryGet(\"ReceiverAddressBlock\") as string | null;\r\n const flat = pkcsriSection.fields.tryGet(\"ReceiverAddressFlat\") as string | null;\r\n const postalBox = pkcsriSection.fields.tryGet(\"ReceiverAddressPostalBox\") as string | null;\r\n\r\n // инициализируем список полей адреса\r\n const addressFullList: Array = [];\r\n\r\n // проверяем значение полей и добавляем их в список\r\n if (!PkCommonHelper.IsNullOrWhitespace(postalCode)) {\r\n addressFullList.push(postalCode!);\r\n }\r\n\r\n if (countryCode1C != 643 && \r\n !PkCommonHelper.IsNullOrWhitespace(countryName)) {\r\n addressFullList.push(countryName!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(region)) {\r\n addressFullList.push(region!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(settlement)) {\r\n addressFullList.push(settlement!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(street)) {\r\n addressFullList.push(street!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(house)) {\r\n addressFullList.push(house!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(block)) {\r\n addressFullList.push(block!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(flat)) {\r\n addressFullList.push(flat!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(postalBox)) {\r\n addressFullList.push(postalBox!);\r\n }\r\n\r\n // если хотя бы 1 поле по адресу заполнено\r\n if (addressFullList.length > 0) {\r\n // устанавливаем значение адреса\r\n const addressFull = addressFullList.join(\", \");\r\n pkcsrivSection.fields.set(\"ReceiverAddressID\", createTypedField(Guid.newGuid(), DotNetType.Guid));\r\n pkcsrivSection.fields.set(\"ReceiverAddressFull\", createTypedField(addressFull, DotNetType.String));\r\n pkcsriSection.fields.set(\"ReceiverAddress\", createTypedField(addressFull, DotNetType.String));\r\n }\r\n else {\r\n // сбрасываем значение адреса\r\n pkcsrivSection.fields.set(\"ReceiverAddressID\", null);\r\n pkcsrivSection.fields.set(\"ReceiverAddressFull\", null);\r\n pkcsriSection.fields.set(\"ReceiverAddress\", null);\r\n }\r\n }\r\n}","/** Виды отправлений. */\r\nexport enum PkDispatchTypes {\r\n /** Письмо простое (не отслеживается). */\r\n Letter = 0,\r\n /** Письмо заказное. */\r\n LetterCustom = 1,\r\n /** Письмо ценное с описью. */\r\n LetterValuable = 2,\r\n /** Международное письмо заказное. */\r\n LetterInternational = 3,\r\n}\r\n\r\n/** Наименования видов отправлений. */\r\nexport const PkDispatchTypesDescriptions = new Map([\r\n [PkDispatchTypes.Letter, \"Письмо простое (не отслеживается)\"],\r\n [PkDispatchTypes.LetterCustom, \"Письмо заказное\"],\r\n [PkDispatchTypes.LetterValuable, \"Письмо ценное с описью\"],\r\n [PkDispatchTypes.LetterInternational, \"Международное письмо заказное\"]\r\n]);","import { CardUIExtension, ICardModel, ICardUIExtensionContext, IControlViewModel } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Card, CardRow, CardRowState, CardSection, CardValidatorTypes } from 'tessa/cards';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { AutoCompleteEntryViewModel, GridRowAction, GridViewModel, TextBoxViewModel } from 'tessa/ui/cards/controls';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { IValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { PkAddressTypes, PkAddressTypesDescriptions } from 'src/pkScripts/Helpers/PkAddressTypes';\r\nimport { PkDispatchTypes } from 'src/pkScripts/Helpers/PkDispatchTypes';\r\nimport { PkCardHelper } from 'src/pkScripts/Helpers/PkCardHelper';\r\n\r\nexport class PkEnvelopeUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (!Guid.equals(context.model?.card?.typeId, PkCardTypes.PkEnvelopeTypeID)) {\r\n return;\r\n }\r\n\r\n // получаем карточку\r\n var card = context.model.card;\r\n\r\n // получаем модель карточки\r\n var model = context.model;\r\n\r\n // устанавливаем логику изменения полей в секциях\r\n this.SetSectionsFieldChangedLogic(card, model);\r\n\r\n // устанавливаем логику контрола \"Возврату не подлежит\"\r\n this.SetNoReturnControlLogic(card, model);\r\n\r\n // устанавливаем логику контрола \"Отправитель\"\r\n this.SetSenderControlLogic(card, model);\r\n\r\n // устанавливаем логику контрола \"Получатели\"\r\n this.SetRecipientsControlLogic(card, model);\r\n\r\n // устанавливаем логику контрола \"Опись вложения\"\r\n this.SetAttachmentsInventoryControlLogic(card, model);\r\n\r\n // устанавливаем логику вкладки \"Отслеживание отправления\"\r\n this.SetShipmentTrackingTabLogic(card, model);\r\n\r\n // скрываем вкладки\r\n CdUIHelper.HideTabs(model, \"История заданий\", \"Избранное\");\r\n }\r\n\r\n /** Установка логики изменения полей в секциях. */\r\n private SetSectionsFieldChangedLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkeSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n\r\n // проверяем секции\r\n if (pkeSection == null) {\r\n return;\r\n }\r\n\r\n // подписываемся на событие изменения поля в секции \r\n pkeSection.fields.fieldChanged.add((e) => {\r\n switch (e.fieldName) {\r\n case \"DispatchTypeID\":\r\n this.SetNoReturnControlLogic(card, model);\r\n this.SetAttachmentsInventoryControlLogic(card, model);\r\n this.ClearRecipientsAddress(card);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /** Установка логики контрола \"Возврату не подлежит\". */\r\n private SetNoReturnControlLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkeSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n\r\n // проверяем секции\r\n if (pkeSection == null) {\r\n return;\r\n }\r\n\r\n // получаем контрол\r\n const noReturnControl = CdUIHelper.GetUIControlFromModel(model, \"NoReturnControl\");\r\n\r\n // проверяем наличие контрола\r\n if (noReturnControl == null) {\r\n return;\r\n }\r\n\r\n // получаем тип отправления из карточки\r\n const dispatchTypeID = pkeSection.fields.tryGet(\"DispatchTypeID\") as number | null;\r\n\r\n // определяем видимость контрола\r\n const isNoReturnControlVisible = \r\n dispatchTypeID == PkDispatchTypes.LetterCustom ||\r\n dispatchTypeID == PkDispatchTypes.LetterValuable;\r\n\r\n // если контрол должен быть скрыт\r\n if (!isNoReturnControlVisible) {\r\n // чистим поле\r\n pkeSection.fields.set(\"NoReturn\", createTypedField(false, DotNetType.Boolean));\r\n }\r\n\r\n // получаем видимость контрола\r\n CdUIHelper.SetConrolVisibility(noReturnControl, isNoReturnControlVisible)\r\n }\r\n\r\n /** Установка логики контрола \"Отправитель\". */\r\n private SetSenderControlLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const dciSection = card.sections.tryGet(\"DocumentCommonInfo\");\r\n\r\n // проверяем секции\r\n if (dciSection == null) {\r\n return;\r\n }\r\n\r\n // получаем контрол \"Отправитель\"\r\n const senderControl = CdUIHelper.GetUIControlFromModel(model, \"SenderControl\");\r\n\r\n // проверяем наличие контрола\r\n if (senderControl == null) {\r\n return;\r\n }\r\n\r\n // подписываемся на выбор значения в поле \"Отправитель\"\r\n senderControl.valueSet.add((e) => {\r\n // устанавливаем организацию отправителя\r\n PkCardHelper.UpdateKeyValue(dciSection.fields, \"DepartmentID\", e.item.columnValues[3], DotNetType.Guid);\r\n PkCardHelper.UpdateKeyValue(dciSection.fields, \"DepartmentName\", e.item.columnValues[4], DotNetType.String);\r\n });\r\n\r\n // подписываемся на удаление значения из поля \"Отправитель\"\r\n senderControl.valueDeleted.add(() => {\r\n // сбрасывам организацию отправителя\r\n dciSection.fields.set(\"DepartmentID\", null);\r\n dciSection.fields.set(\"DepartmentName\", null);\r\n });\r\n }\r\n\r\n /** Установка логики контрола \"Получатели\". */\r\n private SetRecipientsControlLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkrvSection = card.sections.tryGet(\"PkRecipientsVirtual\");\r\n\r\n // проверяем секции\r\n if (pkrvSection == null) {\r\n return;\r\n }\r\n\r\n // получаем контрол \"Получатели\"\r\n const recipientsControl = CdUIHelper.GetUIControlFromModel(model, \"RecipientsControl\");\r\n\r\n // проверяем наличие контрола\r\n if (recipientsControl == null) {\r\n return;\r\n }\r\n\r\n // устанавливаем видимость кнопок в табличке\r\n this.SetRecipientsControlButtonsVisibility(recipientsControl, pkrvSection);\r\n\r\n // устанавливаем логику для существующих строк\r\n pkrvSection.rows.forEach(x => this.SetRecipientRowLogic(card, model, x, pkrvSection, recipientsControl));\r\n\r\n // подписываемся на событие валидации строк\r\n recipientsControl.rowValidating.add((e) => {\r\n // проверяем строку\r\n this.ValidateRecipientRow(e.row, e.validationResult);\r\n });\r\n\r\n // подписываемся на событие создания / открытия строки\r\n recipientsControl.rowInitializing.add((e) => {\r\n switch (e.action) {\r\n // если строка создается\r\n case GridRowAction.Inserted: {\r\n // устанавливаем тип адреса \"Стандартный\" по умолчанию\r\n this.SetRecipientRowAddressType(e.row, PkAddressTypes.Standart);\r\n\r\n // устанавливаем у нее флаг \"Ручной ввод\" при необходимости\r\n this.SetRecipientRowManualInput(card, e.row);\r\n\r\n // устанавливаем логику для новой строки\r\n this.SetRecipientRowLogic(card, model, e.row, pkrvSection, recipientsControl);\r\n\r\n // устанавливаем логику модели строки\r\n this.SetRecipientRowModelLogic(card, model, e.row);\r\n }\r\n\r\n // если открывается строка\r\n case GridRowAction.Opening: {\r\n // устанавливаем у нее флаг \"Ручной ввод\" при необходимости\r\n this.SetRecipientRowManualInput(card, e.row);\r\n\r\n // устанавливаем логику модели строки\r\n this.SetRecipientRowModelLogic(card, model, e.row);\r\n }\r\n }\r\n });\r\n\r\n // подписываемся на изменение коллекции строк\r\n pkrvSection.rows.collectionChanged.add(() => {\r\n // устанавливаем видимость кнопок в табличке\r\n this.SetRecipientsControlButtonsVisibility(recipientsControl, pkrvSection);\r\n });\r\n }\r\n\r\n /** Установка логики виртуальной строки таблички получателей. */\r\n private SetRecipientRowLogic(\r\n card: Card,\r\n model: ICardModel,\r\n row: CardRow,\r\n pkrvSection: CardSection,\r\n recipientsControl: GridViewModel) {\r\n // подписываемся на изменения полей строки\r\n row.fieldChanged.add((e) => {\r\n switch (e.fieldName) {\r\n case \"AddressTypeID\":\r\n case \"ManualInput\":\r\n // устанавливаем логику модели строки\r\n this.SetRecipientRowModelLogic(card, model, row, true);\r\n break;\r\n case \"PostalCode\":\r\n case \"CountryName\":\r\n case \"Region\":\r\n case \"Settlement\":\r\n case \"Street\":\r\n case \"House\":\r\n case \"Block\":\r\n case \"Flat\":\r\n case \"PostalBox\":\r\n // обновляем строку с адресом\r\n this.UpdateAddressFull(row, card);\r\n break;\r\n case \"AddressID\":\r\n this.ClearAddressFields(row, e.fieldValue);\r\n break;\r\n }\r\n });\r\n\r\n // подписываемся на изменение состояния строки\r\n row.stateChanged.add((e) => {\r\n switch (e.newState) {\r\n case CardRowState.Deleted:\r\n this.SetRecipientsControlButtonsVisibility(recipientsControl, pkrvSection);\r\n }\r\n });\r\n }\r\n\r\n /** Установка поля \"Тип адреса\" в строке получателей. */\r\n private SetRecipientRowAddressType(\r\n row: CardRow,\r\n addressType: PkAddressTypes | null) {\r\n // устанавливаем тип адреса в строку\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressTypeID\", addressType, DotNetType.Int32);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressTypeName\", addressType != null ? PkAddressTypesDescriptions.get(addressType) : null, DotNetType.String);\r\n }\r\n\r\n /** Установка флага \"Ручной ввод\" в строке получателей. */\r\n private SetRecipientRowManualInput(\r\n card: Card,\r\n row: CardRow) {\r\n // получаем секции\r\n const pkeSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n\r\n // проверяем секции\r\n if (pkeSection == null) {\r\n return;\r\n }\r\n\r\n // получаем тип отправления из карточки\r\n const dispatchTypeID = pkeSection.fields.tryGet(\"DispatchTypeID\") as number | null;\r\n\r\n // если тип отправления = \"Международное письмо заказное\"\r\n if (dispatchTypeID == PkDispatchTypes.LetterInternational) {\r\n // устанавливаем флажок \"Ручной ввод\"\r\n PkCardHelper.UpdateRowKeyValue(row, \"ManualInput\", true, DotNetType.Boolean);\r\n }\r\n }\r\n\r\n /** Чистка всех полей, связанных с адресом. */\r\n private ClearAddressFields(\r\n row: CardRow,\r\n addressID: object | null) {\r\n // чистим только тогда, когда адрес не задан\r\n if (addressID != null) {\r\n return;\r\n }\r\n\r\n // чистим все поля, связанные с адресом\r\n PkCardHelper.UpdateRowKeyValue(row, \"PostalCode\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"CountryID\", null, DotNetType.Guid);\r\n PkCardHelper.UpdateRowKeyValue(row, \"CountryName\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"CountryFullName\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"CountryCode\", null, DotNetType.Int64);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Region\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Settlement\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Street\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"House\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Block\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Flat\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"PostalBox\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressPostalCode\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressRegion\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressSettlement\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressStreet\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressHouse\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressBlock\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressFlat\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressCountryID\", null, DotNetType.Guid);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressCountryName\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressCountryFullName\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressCountryCode1C\", null, DotNetType.Int64);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressPostalBox\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressFull\", null, DotNetType.String);\r\n }\r\n\r\n\r\n /** Обновление строки с адресом. */\r\n private UpdateAddressFull(\r\n row: CardRow,\r\n card: Card) {\r\n // получаем секции\r\n const pkeSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n\r\n // проверяем секции\r\n if (pkeSection == null) {\r\n return;\r\n }\r\n\r\n // получаем тип отправления из карточки\r\n const dispatchTypeID = pkeSection.fields.tryGet(\"DispatchTypeID\") as number | null;\r\n\r\n // получаем значения полей\r\n const postalCode = row.tryGet(\"PostalCode\") as string | null;\r\n const countryName = row.tryGet(\"CountryName\") as string | null;\r\n const region = row.tryGet(\"Region\") as string | null;\r\n const settlement = row.tryGet(\"Settlement\") as string | null;\r\n const street = row.tryGet(\"Street\") as string | null;\r\n const house = row.tryGet(\"House\") as string | null;\r\n const block = row.tryGet(\"Block\") as string | null;\r\n const flat = row.tryGet(\"Flat\") as string | null;\r\n const postalBox = row.tryGet(\"PostalBox\") as string | null;\r\n\r\n // инициализируем список полей адреса\r\n const addressFullList: Array = [];\r\n\r\n // проверяем значение полей и добавляем их в список\r\n if (!PkCommonHelper.IsNullOrWhitespace(postalCode)) {\r\n addressFullList.push(postalCode!);\r\n }\r\n\r\n if (dispatchTypeID == PkDispatchTypes.LetterInternational\r\n && !PkCommonHelper.IsNullOrWhitespace(countryName)) {\r\n addressFullList.push(countryName!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(region)) {\r\n addressFullList.push(region!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(settlement)) {\r\n addressFullList.push(settlement!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(street)) {\r\n addressFullList.push(street!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(house)) {\r\n addressFullList.push(house!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(block)) {\r\n addressFullList.push(block!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(flat)) {\r\n addressFullList.push(flat!);\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(postalBox)) {\r\n addressFullList.push(postalBox!);\r\n }\r\n\r\n // если хотя бы 1 поле по адресу заполнено\r\n if (addressFullList.length > 0) {\r\n // устанавливаем значение адреса\r\n row.set(\"AddressID\", createTypedField(Guid.newGuid(), DotNetType.Guid));\r\n row.set(\"AddressFull\", createTypedField(addressFullList.join(\", \"), DotNetType.String));\r\n }\r\n else {\r\n // сбрасываем значение адреса\r\n row.set(\"AddressID\", null);\r\n row.set(\"AddressFull\", null);\r\n }\r\n }\r\n\r\n /** Установка видимости кнопок в табличке \"Получатели\". */\r\n private SetRecipientsControlButtonsVisibility(\r\n recipientsControl: GridViewModel,\r\n pkrvSection: CardSection) {\r\n // получаем видимость кнопки \"Добавить\"\r\n const addRowsVisibility = pkrvSection.rows.length == 0 || pkrvSection.rows.every(x => x.state == CardRowState.Deleted)\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n\r\n // устанавливаем видимость кнопки \"Добавить\"\r\n recipientsControl.addButton.setVisibility(addRowsVisibility);\r\n }\r\n\r\n /** Проверка строки в табличке \"Получатели\". */\r\n private ValidateRecipientRow(\r\n row: CardRow,\r\n validationResult: IValidationResultBuilder) {\r\n // получаем значения полей\r\n const contactPerson = row.tryGet(\"ContactPerson\") as string | null;\r\n const addressTypeID = row.tryGet(\"AddressTypeID\") as number | null;\r\n\r\n if (addressTypeID == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Тип адреса\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.AddressTypeID\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n if (contactPerson == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Контактное лицо\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.ContactPerson\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n // если тип адреса не задан, выходим\r\n if (addressTypeID == null) {\r\n return;\r\n }\r\n\r\n // получаем значения полей\r\n const addressFull = row.tryGet(\"AddressFull\") as string | null;\r\n const postalCode = row.tryGet(\"PostalCode\") as string | null;\r\n const countryID = row.tryGet(\"CountryID\") as string | null;\r\n const region = row.tryGet(\"Region\") as string | null;\r\n const settlement = row.tryGet(\"Settlement\") as string | null;\r\n\r\n if (addressFull == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Адрес\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.AddressFull\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n if (postalCode == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Индекс\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.PostalCode\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n if (countryID == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Страна\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.CountryID\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n if (region == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Область/край\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.Region\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n if (settlement == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Населенный пункт\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.Settlement\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n // проверяем тип адреса\r\n switch (addressTypeID) {\r\n case PkAddressTypes.Box: {\r\n // получаем значения полей\r\n const postalBox = row.tryGet(\"PostalBox\") as string | null;\r\n\r\n if (postalBox == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Абонентский ящик\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.PostalBox\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n break;\r\n }\r\n case PkAddressTypes.Standart: {\r\n // получаем значения полей\r\n const street = row.tryGet(\"Street\") as string | null;\r\n const house = row.tryGet(\"House\") as string | null;\r\n\r\n if (street == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Улица\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.Street\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n if (house == null) {\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Поле \\\"Дом\\\" обязательно для заполнения.\",\r\n undefined,\r\n \"PkRecipientsVirtual.House\",\r\n CardValidatorTypes.notNullField.name);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** Установка логики модели строки таблички \"Получатели\". */\r\n private SetRecipientRowModelLogic(\r\n card: Card,\r\n model: ICardModel,\r\n row: CardRow,\r\n isInitialized: boolean = false) {\r\n // получаем секции\r\n const pkeSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n\r\n // проверяем секции\r\n if (pkeSection == null) {\r\n return;\r\n }\r\n\r\n // проверяем открыта ли форма строки\r\n if (model.currentRow == null) {\r\n return;\r\n }\r\n\r\n // получаем модель строки\r\n const rowModel = model.currentRow;\r\n\r\n // получаем тип отправления из карточки\r\n const dispatchTypeID = pkeSection.fields.tryGet(\"DispatchTypeID\") as number | null;\r\n\r\n // получаем тип адреса из строки\r\n const addressTypeID = row.tryGet(\"AddressTypeID\") as number | null;;\r\n\r\n // получаем галочку \"Ручной ввод\" из строки\r\n const isManualInput = row.tryGet(\"ManualInput\", false) as boolean;\r\n\r\n // получаем необходимые контролы\r\n const addressControl = CdUIHelper.GetUIControlFromModel(rowModel, \"AddressLinkControl\");\r\n const manualInputControl = CdUIHelper.GetUIControlFromModel(rowModel, \"ManualInputControl\");\r\n const postalCodeControl = CdUIHelper.GetUIControlFromModel(rowModel, \"PostalCodeControl\");\r\n const countryControl = CdUIHelper.GetUIControlFromModel(rowModel, \"CountryControl\");\r\n const regionControl = CdUIHelper.GetUIControlFromModel(rowModel, \"RegionControl\");\r\n const settlementControl = CdUIHelper.GetUIControlFromModel(rowModel, \"SettlementControl\");\r\n const streetControl = CdUIHelper.GetUIControlFromModel(rowModel, \"StreetControl\");\r\n const houseControl = CdUIHelper.GetUIControlFromModel(rowModel, \"HouseControl\");\r\n const blockControl = CdUIHelper.GetUIControlFromModel(rowModel, \"BlockControl\");\r\n const flatControl = CdUIHelper.GetUIControlFromModel(rowModel, \"FlatControl\");\r\n const postalBoxControl = CdUIHelper.GetUIControlFromModel(rowModel, \"PostalBoxControl\");\r\n const addressHintControl = CdUIHelper.GetUIControlFromModel(rowModel, \"AddressHintControl\");\r\n\r\n // проверяем\r\n if (addressControl == null ||\r\n manualInputControl == null ||\r\n postalCodeControl == null ||\r\n countryControl == null ||\r\n regionControl == null ||\r\n settlementControl == null ||\r\n streetControl == null ||\r\n houseControl == null ||\r\n blockControl == null ||\r\n flatControl == null ||\r\n postalBoxControl == null || \r\n addressHintControl == null) {\r\n return;\r\n }\r\n\r\n // устанавлимваем видимость контролов\r\n CdUIHelper.SetConrolVisibility(addressControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(manualInputControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(postalCodeControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(countryControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(regionControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(settlementControl, addressTypeID != null);\r\n CdUIHelper.SetConrolVisibility(streetControl, addressTypeID == PkAddressTypes.Standart);\r\n CdUIHelper.SetConrolVisibility(houseControl, addressTypeID == PkAddressTypes.Standart);\r\n CdUIHelper.SetConrolVisibility(blockControl, addressTypeID == PkAddressTypes.Standart);\r\n CdUIHelper.SetConrolVisibility(flatControl, addressTypeID == PkAddressTypes.Standart);\r\n CdUIHelper.SetConrolVisibility(postalBoxControl, addressTypeID == PkAddressTypes.Box);\r\n CdUIHelper.SetConrolVisibility(addressHintControl, dispatchTypeID == PkDispatchTypes.LetterInternational);\r\n\r\n // устанавливаем доступность контролов\r\n addressControl.isReadOnly = isManualInput;\r\n manualInputControl.isReadOnly = dispatchTypeID == PkDispatchTypes.LetterInternational;\r\n postalCodeControl.isReadOnly = !isManualInput;\r\n countryControl.isReadOnly = !isManualInput || dispatchTypeID != PkDispatchTypes.LetterInternational;\r\n regionControl.isReadOnly = !isManualInput;\r\n settlementControl.isReadOnly = !isManualInput;\r\n streetControl.isReadOnly = !isManualInput;\r\n houseControl.isReadOnly = !isManualInput;\r\n blockControl.isReadOnly = !isManualInput;\r\n flatControl.isReadOnly = !isManualInput;\r\n postalBoxControl.isReadOnly = !isManualInput;\r\n\r\n // проверяем тип адреса\r\n switch (addressTypeID) {\r\n case null: {\r\n // сбрасываем поля\r\n // при установке AddressID = NULL у нас срабатывает метод ClearAddressFields \r\n PkCardHelper.UpdateRowKeyValue(row, \"AddressID\", null, DotNetType.String);\r\n\r\n // выходим\r\n break;\r\n }\r\n\r\n case PkAddressTypes.Box: {\r\n // сбрасываем поля\r\n PkCardHelper.UpdateRowKeyValue(row, \"Street\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"House\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Block\", null, DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Flat\", null, DotNetType.String);\r\n\r\n // выходим\r\n break;\r\n }\r\n\r\n case PkAddressTypes.Standart: {\r\n // сбрасываем поля\r\n PkCardHelper.UpdateRowKeyValue(row, \"PostalBox\", null, DotNetType.String);\r\n\r\n // выходим\r\n break;\r\n }\r\n }\r\n\r\n // если модель строки еще не инициализирована\r\n // (это нужно, чтобы не подписываться на события лишний раз)\r\n if (!isInitialized) {\r\n // подписываемся на выбор значения в поле \"Адрес\"\r\n addressControl.valueSet.addWithDispose((e) => {\r\n // устанавливаем поля\r\n PkCardHelper.UpdateRowKeyValue(row, \"PostalCode\", e.item.columnValues[1], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Region\", e.item.columnValues[2], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Settlement\", e.item.columnValues[3], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Street\", e.item.columnValues[4], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"House\", e.item.columnValues[5], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Block\", e.item.columnValues[6], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"Flat\", e.item.columnValues[7], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"CountryID\", e.item.columnValues[9], DotNetType.Guid);\r\n PkCardHelper.UpdateRowKeyValue(row, \"CountryName\", e.item.columnValues[10], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"CountryFullName\", e.item.columnValues[11], DotNetType.String);\r\n PkCardHelper.UpdateRowKeyValue(row, \"CountryCode\", e.item.columnValues[12], DotNetType.Int64);\r\n PkCardHelper.UpdateRowKeyValue(row, \"PostalBox\", e.item.columnValues[13], DotNetType.String);\r\n });\r\n\r\n // если тип отправления \"Международное письмо заказное\"\r\n if (dispatchTypeID == PkDispatchTypes.LetterInternational) {\r\n // задаем регулярное выражение\r\n const regExp = /[а-яёА-ЯЁ]/gi;\r\n \r\n // подписываемся на события ввода текста в контролы,\r\n // в которых будет запрещать ввод символов из регулярного выражения\r\n CdUIHelper.ForbiddingCharacterInput(postalCodeControl, regExp);\r\n CdUIHelper.ForbiddingCharacterInput(regionControl, regExp);\r\n CdUIHelper.ForbiddingCharacterInput(settlementControl, regExp);\r\n CdUIHelper.ForbiddingCharacterInput(streetControl, regExp);\r\n CdUIHelper.ForbiddingCharacterInput(houseControl, regExp);\r\n CdUIHelper.ForbiddingCharacterInput(blockControl, regExp);\r\n CdUIHelper.ForbiddingCharacterInput(flatControl, regExp);\r\n CdUIHelper.ForbiddingCharacterInput(postalBoxControl, regExp);\r\n }\r\n }\r\n }\r\n\r\n /** Установка логики контрола \"Опись вложения\". */\r\n private SetAttachmentsInventoryControlLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkeSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n const pkaiSection = card.sections.tryGet(\"PkAttachmentsInventory\");\r\n\r\n // проверяем секции\r\n if (pkeSection == null ||\r\n pkaiSection == null) {\r\n return;\r\n }\r\n\r\n // получаем контрол\r\n const attachmentsInventoryControl = CdUIHelper.GetUIControlFromModel(model, \"AttachmentsInventoryControl\");\r\n\r\n // проверяем наличие контрола\r\n if (attachmentsInventoryControl == null) {\r\n return;\r\n }\r\n\r\n // получаем тип отправления из карточки\r\n const dispatchTypeID = pkeSection.fields.tryGet(\"DispatchTypeID\") as number | null;\r\n\r\n // получаем видимость контрола\r\n const isAttachmentsInventoryControlVisible =\r\n dispatchTypeID == PkDispatchTypes.LetterValuable;\r\n\r\n // если контрол должен быть скрыт\r\n if (!isAttachmentsInventoryControlVisible) {\r\n // чистим табличку\r\n CdUIHelper.ClearSectionRows(pkaiSection);\r\n }\r\n\r\n // устанавливаем видимость контрола\r\n CdUIHelper.SetConrolVisibility(attachmentsInventoryControl, isAttachmentsInventoryControlVisible);\r\n\r\n // устанавливаем видимость блока\r\n attachmentsInventoryControl.block.blockVisibility = isAttachmentsInventoryControlVisible\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n }\r\n\r\n /** Чистка адреса таблички \"Получатели\". */\r\n private ClearRecipientsAddress(\r\n card: Card) {\r\n // получаем секции\r\n const pkeSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n const pkrvSection = card.sections.tryGet(\"PkRecipientsVirtual\");\r\n\r\n // проверяем секции\r\n if (pkeSection == null ||\r\n pkrvSection == null) {\r\n return;\r\n }\r\n\r\n // получаем тип отправления из карточки\r\n const dispatchTypeID = pkeSection.fields.tryGet(\"DispatchTypeID\") as number | null;\r\n\r\n // нам нужно чистить табличку только при выборе \"Международное письмо заказное\"\r\n if (dispatchTypeID != PkDispatchTypes.LetterInternational) {\r\n return;\r\n }\r\n\r\n // чистим адреса у строк\r\n pkrvSection.rows.forEach(x => PkCardHelper.UpdateRowKeyValue(x, \"AddressID\", null, DotNetType.String));\r\n }\r\n\r\n /** Установка логики вкладки \"Отслеживание отправления\". */\r\n private SetShipmentTrackingTabLogic(\r\n card: Card,\r\n model: ICardModel) {\r\n // получаем секции\r\n const pkeiSection = card.sections.tryGet(\"PkEnvelopeInfo\");\r\n\r\n // проверяем секции\r\n if (pkeiSection == null) {\r\n return;\r\n }\r\n\r\n // получаем ШПИ\r\n const shpi = pkeiSection.fields.tryGet(\"Shpi\") as string | null;\r\n\r\n // получаем вкладку\r\n const shipmentTrackingTab = model.forms.find(x => x.name == \"ShipmentTrackingTab\");\r\n\r\n // проверяем\r\n if (shipmentTrackingTab == null) {\r\n return;\r\n }\r\n\r\n // если ШПИ не задан\r\n if (PkCommonHelper.IsNullOrWhitespace(shpi)) {\r\n // скрываем вкладку\r\n shipmentTrackingTab.visibility = Visibility.Collapsed;\r\n }\r\n }\r\n}","import { PkCardTypes } from \"src/pkScripts/Helpers/PkCardTypes\";\r\nimport { PkRequestTypes } from \"src/pkScripts/Helpers/PkRequestTypes\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { Guid } from \"tessa/platform\";\r\nimport { showError, showMessage } from \"tessa/ui\";\r\nimport { CardUIExtension, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { ButtonViewModel } from \"tessa/ui/cards/controls\";\r\n\r\nexport class PkDocumentRecognitionServiceSettingsCardUIExtension extends CardUIExtension {\r\n\r\n \r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkDocumentRecognitionServiceSettingsCardTypeID)) {\r\n return;\r\n }\r\n\r\n let button = context.model.controls.get(\"ClearCacheButton\") as ButtonViewModel;\r\n if (button == null) {\r\n return;\r\n }\r\n\r\n button.onClick = async () => {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.DocumentRecognitionClearCacheRequest;\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful) {\r\n showError(\"Ошибка удаления кэша.\");\r\n }\r\n else\r\n {\r\n showMessage(\"Готово!\");\r\n }\r\n };\r\n }\r\n}","export class MatrixFdProcess {\r\n /// \r\n /// Уведомление.\r\n /// \r\n static Notification = \"a3f5ecce-9e67-4408-a359-5f796d17dea4\";\r\n\r\n /// \r\n /// Дополнительное согласование.\r\n /// \r\n static AdditionalApprovement = \"657fdb33-8c45-4676-b97c-84f7a677986e\";\r\n\r\n /// \r\n /// Доп. согласование о превышении стоимости договорного документа над стоимостью тендера.\r\n /// \r\n static ExceedingAmount = \"4044d1e1-980a-4e40-bd3d-1570afbeb09f\";\r\n\r\n /// \r\n /// Создание соглашения об ЭДО.\r\n /// \r\n static CreateAgreementEDO = \"b6120752-7d87-4fbc-ac63-efb1a797934a\";\r\n\r\n /// \r\n /// Согласование.\r\n /// \r\n static Approvement = \"62eca5a7-b142-4de5-97f6-215176590d7f\";\r\n\r\n /// \r\n /// Подписание.\r\n /// \r\n static Signing = \"15d27943-d8f5-4024-936a-a5a0d95510b5\";\r\n\r\n /// \r\n /// Запуск согласования договора.\r\n /// \r\n static StartApprovement = \"4781bf2f-edb0-4c43-850d-601243af5270\";\r\n}\r\n","import { CardUIExtension, ICardUIExtensionContext, ICardEditorModel, CardSavingRequest, CardSavingMode, ICardModel } from 'tessa/ui/cards';\r\nimport { tryGetFromInfo, UIButton, showNotEmpty, showConfirm, createCardModel, UIContext, IUIContext } from 'tessa/ui';\r\nimport { Card, CardRowState, CardSection, CardStoreMode } from 'tessa/cards';\r\nimport { GridRowAction, GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { CardNewRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { createTypedField, DotNetType, Guid, TypedField, Visibility } from 'tessa/platform';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { ArContractStageKinds } from 'src/pkScripts/Helpers/ArContractStageKinds';\r\nimport { MatrixFdProcess } from 'src/pkScripts/Helpers/MatrixFdProcess';\r\nimport { PkContractUIHelper } from 'src/pkScripts/Helpers/PkContractUIHelper';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { KrToken } from 'tessa/workflow';\r\n\r\n\r\nexport class ArContractMatrixRestartFromStageUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) \r\n {\r\n if (!context.model || !context.model.card) {\r\n return;\r\n }\r\n\r\n // пытаемся найти грид по алиасу\r\n const processesTableViewModel = context.model.controls.get('FdProcessesTable') as GridViewModel;\r\n\r\n if (!!processesTableViewModel) {\r\n\r\n // Добавим кнопку перезапуска с выбранного этапа, если есть права на перезапуск хотя бы одного процесса\r\n let availableProcessesToRestartObj = tryGetFromInfo(context.model.card.info, 'FdAvailableProcessesToRestart');\r\n let availableProcessesToRestart = Array.isArray(availableProcessesToRestartObj) ? (availableProcessesToRestartObj as Array).map(x => x.$value) : null;\r\n \r\n if (availableProcessesToRestart\r\n && availableProcessesToRestart.length > 0)\r\n {\r\n this.AddRestartFromStageButton(context, processesTableViewModel, availableProcessesToRestart);\r\n }\r\n }\r\n }\r\n\r\n private AddRestartFromStageButton(context: ICardUIExtensionContext, processesTableViewModel: GridViewModel, availableProcessesToRestart: string[])\r\n {\r\n let button = processesTableViewModel.leftButtons.find(x => x.caption == \"Отправить на этап\");\r\n\r\n if (button == null)\r\n {\r\n button = UIButton.create({\r\n caption:\"Отправить на этап\",\r\n isEnabled: () =>\r\n {\r\n let selectedRow = processesTableViewModel.selectedRow;\r\n if (selectedRow == null && processesTableViewModel.rows.length == 1)\r\n {\r\n selectedRow = processesTableViewModel.rows[0];\r\n }\r\n\r\n // выделена строка и есть права для перезапуска выделенного процесса \r\n return selectedRow != null && availableProcessesToRestart.some(x => Guid.equals(x, selectedRow!.rowId));\r\n }});\r\n processesTableViewModel.leftButtons.push(button);\r\n }\r\n\r\n button.onClick = async () =>\r\n {\r\n let editor: ICardEditorModel | null = context.uiContext?.cardEditor;\r\n if (editor == null)\r\n {\r\n return;\r\n }\r\n\r\n let selectedRow = processesTableViewModel.selectedRow;\r\n if (selectedRow == null && processesTableViewModel.rows.length == 1)\r\n {\r\n selectedRow = processesTableViewModel.rows[0];\r\n }\r\n\r\n if (selectedRow == null)\r\n {\r\n return;\r\n }\r\n\r\n if (!await showConfirm(\"Все активные задания по текущему процессу будут завершены. Продолжить?\"))\r\n {\r\n return;\r\n }\r\n\r\n let processIstanceRowID = selectedRow.row.tryGet(\"RowID\");\r\n let processTemplateRowID = selectedRow.row.tryGet(\"BasedOnProcessTemplateID\");\r\n\r\n // определим нужный для запуска этап из диалога\r\n let selected = await this.GetSelectedStageTemplateFromDialogAsync(context.model.card, processTemplateRowID);\r\n if (selected.selectedStageTemplateID == null || selected.selectedProcessTemplateID == null){\r\n return;\r\n }\r\n\r\n var partner = await this.GetSelectedPartnerFromDialogAsync(context.card, selected.selectedProcessTemplateID);\r\n if ((partner.isRequired == true) && (partner.id == null || partner.externalID == null)){\r\n return;\r\n }\r\n\r\n // добавляем проверку на наличие всех участников согласования\r\n if(!await PkContractUIHelper.IsRequiredRolesWithUsers(context, context.card, partner.externalID))\r\n {\r\n await showNotEmpty(context.validationResult.build());\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n let getInfo: IStorage = \r\n {\r\n \"pk_revoke_process_instance_row_id\": createTypedField(processIstanceRowID, DotNetType.Guid),\r\n \"pk_restart_process_instance_to_process_template_id\": createTypedField(selected.selectedProcessTemplateID, DotNetType.Guid),\r\n \"pk_restart_process_instance_to_stage_template_id\": createTypedField(selected.selectedStageTemplateID, DotNetType.Guid),\r\n \"pk_restart_process_instance_to_partner_id\": partner.externalID != null ? createTypedField(partner.id, DotNetType.Guid) : null,\r\n \"pk_restart_process_instance_to_partner_name\": partner.externalID != null ? createTypedField(partner.name, DotNetType.String) : null,\r\n \"pk_restart_process_instance_to_partner_external_id\": partner.externalID != null ? createTypedField(partner.externalID, DotNetType.Int64) : null,\r\n \"pk_restart_process_instance_to_new\": createTypedField(!Guid.equals(processTemplateRowID, selected.selectedProcessTemplateID), DotNetType.Boolean)\r\n };\r\n\r\n // если есть изменения, автосохранение карточки\r\n await this.OpenMarkedCard(context.uiContext, null, async () => true, null, null, getInfo);\r\n };\r\n }\r\n\r\n private async GetSelectedStageTemplateFromDialogAsync(card: Card, processTemplateID: string): Promise<{selectedStageTemplateID: string | null, selectedProcessTemplateID: string | null}>\r\n {\r\n let selectedStageTemplateID: string | null = null;\r\n let selectedProcessTemplateID: string | null = null;\r\n\r\n // Получаем вкладку\r\n let dialogType = await MetadataStorage.instance.cardMetadata.getCardTypeByName(PkCardTypes.FdDialogsTypeName);\r\n\r\n if (!dialogType)\r\n {\r\n return {selectedStageTemplateID, selectedProcessTemplateID};\r\n } \r\n\r\n let dialogForm = dialogType.forms.find(x => x.name == \"FdStageTemplatesTab\");\r\n\r\n if (dialogForm == null)\r\n {\r\n return {selectedStageTemplateID, selectedProcessTemplateID};\r\n }\r\n\r\n let request = new CardNewRequest();\r\n request.cardTypeId = dialogType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) \r\n {\r\n return {selectedStageTemplateID, selectedProcessTemplateID};\r\n }\r\n \r\n // Создаём модель окна\r\n const windowCardModel = createCardModel(response.card, response.sectionRows); \r\n\r\n // Секция с данными, которая будет использоваться внутри окна, и которую нужно потом получить снаружи.\r\n let dialogSection = windowCardModel.card.sections.tryGet(\"FdDialog_StageTemplatesVirtual\");\r\n if (dialogSection)\r\n {\r\n if (Guid.equals(processTemplateID, MatrixFdProcess.Signing)\r\n || Guid.equals(processTemplateID, MatrixFdProcess.Approvement)\r\n || Guid.equals(processTemplateID, MatrixFdProcess.StartApprovement))\r\n {\r\n if (!await this.AddRows(card, dialogSection, MatrixFdProcess.StartApprovement))\r\n {\r\n return {selectedStageTemplateID, selectedProcessTemplateID};\r\n }\r\n\r\n if (!await this.AddRows(card, dialogSection, MatrixFdProcess.Approvement))\r\n {\r\n return {selectedStageTemplateID, selectedProcessTemplateID};\r\n }\r\n\r\n if (!await this.AddRows(card, dialogSection, MatrixFdProcess.Signing))\r\n {\r\n return {selectedStageTemplateID, selectedProcessTemplateID};\r\n }\r\n }\r\n else\r\n {\r\n if (!await this.AddRows(card, dialogSection, processTemplateID))\r\n {\r\n return {selectedStageTemplateID, selectedProcessTemplateID};\r\n }\r\n }\r\n\r\n let cancelButton = new UIButton(\"Отмена\", async (button) => {\r\n button.close();\r\n }, null, true, Visibility.Collapsed);\r\n // Показываем диалог\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (form) =>\r\n {\r\n let block = form.blocks.find(x => x.name == \"MainBlock\");\r\n if (block == null)\r\n {\r\n return;\r\n }\r\n\r\n let ctrl = block.controls.find(f => f.name == \"FdStageTemplatesTable\");\r\n if (ctrl == null)\r\n {\r\n return;\r\n }\r\n\r\n let virtGrid = ctrl as GridViewModel;\r\n\r\n virtGrid.rowInvoked.add( (d) =>\r\n {\r\n if (d.action == GridRowAction.Opening)\r\n {\r\n selectedStageTemplateID = d.row.tryGet(\"StageTemplateID\");\r\n selectedProcessTemplateID = d.row.tryGet(\"ProcessTemplateID\");\r\n cancelButton.close();\r\n }\r\n });\r\n },\r\n [\r\n cancelButton\r\n ] \r\n );\r\n }\r\n\r\n return {selectedStageTemplateID, selectedProcessTemplateID};\r\n }\r\n\r\n private async AddRows(card: Card, dialogSection: CardSection, processTemplateID: string): Promise\r\n {\r\n // загрузим список этапов по заданному шаблону процесса\r\n let request = new CardRequest();\r\n request.cardId = processTemplateID;\r\n request.requestType = \"f232032a-0894-4cfa-bb5f-fd779b10b464\";\r\n\r\n const getStagesResponse = await CardService.instance.request(request);\r\n await showNotEmpty(getStagesResponse.validationResult.build());\r\n if (!getStagesResponse.validationResult.isSuccessful) \r\n { \r\n return false;\r\n }\r\n \r\n let dialogStageTemplates: [{ID, Name, Description, TaskTypeCaption, Participants}] = getStagesResponse.info.FdDialogStageTemplates;\r\n\r\n let stageTemplateIDList = [...new Set(card.sections.tryGet(\"FdCustomParticipantsVirtual\")?.rows.map(x => x.tryGet(\"StageTemplateID\") as string))];\r\n\r\n // заполним диалог данными\r\n for (let stage of dialogStageTemplates)\r\n {\r\n if (!Guid.equals(stage.ID.$value, ArContractStageKinds.Signing) \r\n && (!Guid.equals(processTemplateID, MatrixFdProcess.Approvement) \r\n || (stageTemplateIDList.some(x => Guid.equals(x, stage.ID.$value)) || !ArContractStageKinds.MatrixStageList.some(x => Guid.equals(x, stage.ID.$value)))))\r\n {\r\n let newRow = dialogSection.rows.add();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"StageTemplateID\", stage.ID.$value, DotNetType.Guid);\r\n newRow.set(\"StageTemplateName\", stage.Name?.$value, DotNetType.String);\r\n newRow.set(\"StageTemplateDescription\", stage.Description?.$value, DotNetType.String);\r\n newRow.set(\"StageTemplateTaskTypeCaption\", stage.TaskTypeCaption?.$value, DotNetType.String);\r\n newRow.set(\"StageTemplateParticipantsText\", stage.Participants?.$value, DotNetType.String);\r\n newRow.set(\"ProcessTemplateID\", processTemplateID, DotNetType.Guid);\r\n newRow.state = CardRowState.Inserted;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private async GetSelectedPartnerFromDialogAsync(card: Card, processTemplateID: string): Promise<{id: string | null, name: string | null, externalID: number | null, isRequired: boolean | null}>\r\n {\r\n let id: string | null = null;\r\n let name: string | null = null;\r\n let externalID: number | null = null;\r\n let isRequired: boolean | null = false;\r\n\r\n if (!Guid.equals(processTemplateID, MatrixFdProcess.Approvement)\r\n || !(card.sections.tryGet(\"ArContractsUser\")?.fields.tryGet(\"IsMultipleApprovalSides\") ?? false))\r\n {\r\n return {id, name, externalID, isRequired};\r\n }\r\n \r\n isRequired = true;\r\n // Получаем вкладку\r\n let dialogType = await MetadataStorage.instance.cardMetadata.getCardTypeByName(PkCardTypes.PkDialogsTypeName);\r\n\r\n if (!dialogType)\r\n {\r\n return {id, name, externalID, isRequired};\r\n } \r\n\r\n let dialogForm = dialogType.forms.find(x => x.name == \"ArContractPartnersTab\");\r\n\r\n if (dialogForm == null)\r\n {\r\n return {id, name, externalID, isRequired};\r\n }\r\n\r\n let request = new CardNewRequest();\r\n request.cardTypeId = dialogType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) \r\n {\r\n return {id, name, externalID, isRequired};\r\n }\r\n\r\n // Создаём модель окна\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n // Секция с данными, которая будет использоваться внутри окна, и которую нужно потом получить снаружи.\r\n let windowPartnersSection = windowCardModel.card.sections.tryGet(\"ArContractPartners\");\r\n let cardPartnersSection = card.sections.tryGet(\"ArContractPartners\");\r\n if (windowPartnersSection && cardPartnersSection)\r\n {\r\n for (let row of cardPartnersSection.rows.filter(x => x.tryGet(\"PartnerAutomated\") ?? false))\r\n {\r\n windowPartnersSection.rows.push(row);\r\n }\r\n\r\n let cancelButton = new UIButton(\"Отмена\", async (button) => {\r\n button.close();\r\n }, null, true, Visibility.Collapsed);\r\n // Показываем диалог\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (form) =>\r\n {\r\n let block = form.blocks.find(x => x.name == \"ArContractPartnersBlock\");\r\n if (block == null)\r\n {\r\n return;\r\n }\r\n\r\n let ctrl = block.controls.find(f => f.name == \"ArContractPartnersTable\");\r\n if (ctrl == null)\r\n {\r\n return;\r\n }\r\n\r\n let virtGrid = ctrl as GridViewModel;\r\n\r\n virtGrid.rowInvoked.add( (d) =>\r\n {\r\n if (d.action == GridRowAction.Opening)\r\n {\r\n id = d.row.tryGet(\"PartnerID\");\r\n name = d.row.tryGet(\"PartnerName\");\r\n externalID = d.row.tryGet(\"PartnerExternalID\");\r\n cancelButton.close();\r\n }\r\n });\r\n },\r\n [\r\n cancelButton\r\n ] \r\n );\r\n }\r\n\r\n return {id, name, externalID, isRequired};\r\n }\r\n\r\n private async OpenMarkedCard(\r\n context: IUIContext,\r\n mark: string | null,\r\n proceedConfirmation: (() => Promise) | null,\r\n proceedAndSaveCardConfirmation: ((cardIsNew: boolean) => Promise) | null,\r\n continuationOnSuccessFunc: (() => Promise) | null = null,\r\n getInfo: IStorage | null = null\r\n ): Promise {\r\n const editor = context.cardEditor;\r\n let model: ICardModel;\r\n\r\n if (!editor || editor.operationInProgress || !(model = editor.cardModel!)) {\r\n return;\r\n }\r\n\r\n const cardIsNew = model.card.storeMode === CardStoreMode.Insert;\r\n const hasChanges = cardIsNew || model.hasChanges();\r\n let saveCardBeforeOpening: boolean | null = false;\r\n\r\n if (hasChanges && proceedAndSaveCardConfirmation) {\r\n saveCardBeforeOpening = await proceedAndSaveCardConfirmation(cardIsNew);\r\n // Если не указана функция подтверждения с вариантом отмены - сохраняем карточку\r\n // если есть подтверждение основного действия\r\n } else if (hasChanges && proceedConfirmation) {\r\n saveCardBeforeOpening = (await proceedConfirmation()) ? true : null;\r\n // Если в карточке не было изменений - не вызываем сохранения\r\n } else if (proceedConfirmation) {\r\n saveCardBeforeOpening = (await proceedConfirmation()) ? false : null;\r\n // Если не указана функция подтверждения и нет изменений - вызываем основное действие\r\n // без подтверждения и сохранения\r\n } else {\r\n saveCardBeforeOpening = false;\r\n }\r\n\r\n if (saveCardBeforeOpening === null) {\r\n return;\r\n }\r\n\r\n if (!getInfo) {\r\n getInfo = {};\r\n }\r\n\r\n if (mark) {\r\n getInfo[mark] = createTypedField(true, DotNetType.Boolean);\r\n }\r\n\r\n if (saveCardBeforeOpening) {\r\n const token = KrToken.tryGet(editor.info);\r\n KrToken.remove(editor.info);\r\n\r\n const saveSuccess = await editor.saveCard(\r\n context,\r\n {\r\n '.SaveWithPermissionsCalc': createTypedField(true, DotNetType.Boolean)\r\n },\r\n new CardSavingRequest(CardSavingMode.KeepPreviousCard)\r\n );\r\n\r\n if (!saveSuccess) {\r\n return;\r\n }\r\n\r\n if (token) {\r\n token.setInfo(getInfo);\r\n }\r\n }\r\n\r\n const cardId = model.card.id;\r\n const cardType = model.cardType;\r\n\r\n const sendTaskSucceeded = await editor.openCard({\r\n cardId,\r\n cardTypeId: cardType.id!,\r\n cardTypeName: cardType.name!,\r\n context,\r\n info: getInfo\r\n });\r\n\r\n if (sendTaskSucceeded) {\r\n editor.isUpdatedServer = true;\r\n } else if (cardIsNew || saveCardBeforeOpening) {\r\n // если карточка новая или была сохранена, а также не удалось выполнить mark-действие при открытии,\r\n // то у нас будет \"висеть\" карточка с некорректной версией;\r\n // её надо обновить, на этот раз без mark'и\r\n\r\n await editor.openCard({\r\n cardId,\r\n cardTypeId: cardType.id!,\r\n cardTypeName: cardType.name!,\r\n context\r\n });\r\n }\r\n\r\n if (!continuationOnSuccessFunc) {\r\n return;\r\n }\r\n\r\n const contextInstance = UIContext.create(context);\r\n try {\r\n await continuationOnSuccessFunc();\r\n } finally {\r\n contextInstance.dispose();\r\n }\r\n }\r\n}","import { PkCardTypes } from \"src/pkScripts/Helpers/PkCardTypes\";\r\nimport { Visibility, DotNetType, createTypedField } from \"tessa/platform\";\r\nimport { Guid } from 'tessa/platform';\r\nimport { CardUIExtension, ICardUIExtensionContext, IControlViewModel } from \"tessa/ui/cards\";\r\nimport { GridViewModel } from \"tessa/ui/cards/controls\";\r\n\r\nexport class PkSettingsContractorInPerimetrUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkSettingsContractorInPerimetrTypeID)) {\r\n return;\r\n }\r\n\r\n const contractorSettingsGrid = context.model.controls.get(\"ContractorSettings\") as GridViewModel; \r\n\r\n if (contractorSettingsGrid == null) {\r\n return;\r\n }\r\n \r\n // скрываем кнопку \"Удалить\"\r\n contractorSettingsGrid.removeButton.setVisibility(Visibility.Collapsed);\r\n\r\n // Устанавливаем readOnly для строк, имеющих значение \"Установлено вручную\" = false\r\n contractorSettingsGrid.rowInitializing.add((e) =>\r\n {\r\n let inPerimetr = e.row.tryGet(\"InPerimetr\");\r\n if (inPerimetr == null){\r\n e.row.set('InPerimetr', createTypedField(false, DotNetType.Boolean));\r\n }\r\n\r\n const wasSetManually = e.row.tryGet(\"WasSetManually\");\r\n if (wasSetManually === false)\r\n {\r\n const contractorSettingsControl = e.rowModel!.controls.get(\"ContractorSettingsControl\") as IControlViewModel;\r\n const periodControl = e.rowModel!.controls.get(\"PeriodControl\") as IControlViewModel;\r\n const inPerimetrControl = e.rowModel!.controls.get(\"InPerimetrControl\") as IControlViewModel;\r\n const commentControl = e.rowModel!.controls.get(\"CommentControl\") as IControlViewModel;\r\n const accreditationPerimetrControl = e.rowModel!.controls.get(\"AccreditationPerimetrControl\") as IControlViewModel; \r\n\r\n if (contractorSettingsControl == null ||\r\n periodControl == null ||\r\n inPerimetrControl == null ||\r\n commentControl == null ||\r\n accreditationPerimetrControl == null) {\r\n return;\r\n }\r\n\r\n contractorSettingsControl.isReadOnly = true;\r\n periodControl.isReadOnly = true;\r\n inPerimetrControl.isReadOnly = true;\r\n commentControl.isReadOnly = true;\r\n accreditationPerimetrControl.isReadOnly = true;\r\n }\r\n });\r\n }\r\n}","import { CdCardTypes } from \"src/cdScripts/Helpers/CdCardTypes\";\r\nimport { Guid, Visibility } from \"tessa/platform\";\r\nimport { IStorage } from \"tessa/platform/storage\";\r\nimport { CardUIExtension, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { AutoCompleteEntryViewModel } from \"tessa/ui/cards/controls\";\r\nimport { openCard } from \"tessa/ui/uiHost\";\r\n\r\nexport class ArFinanceTaxAuthorityRegistrationUIExtension extends CardUIExtension {\r\n \r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArFinanceTaxAuthorityRegistrationTypeID)) {\r\n return;\r\n }\r\n\r\n await this.OverloadKCKLinksAsync(context);\r\n\r\n this.SetSystemInfoBlockVisibility(context);\r\n }\r\n \r\n private async OverloadKCKLinksAsync(context: ICardUIExtensionContext) {\r\n const KCKPartnerControl = context.model.controls.get('PartnerKckControl') as AutoCompleteEntryViewModel;\r\n KCKPartnerControl.openRefAction = async () => {\r\n await this.KCKOverloadButtonLogicAsync(KCKPartnerControl.name!, context);\r\n }\r\n\r\n const TaxAuthorityKckControl = context.model.controls.get('TaxAuthorityKckControl') as AutoCompleteEntryViewModel;\r\n TaxAuthorityKckControl.openRefAction = async () => {\r\n await this.KCKOverloadButtonLogicAsync(TaxAuthorityKckControl.name!, context);\r\n }\r\n }\r\n\r\n private async KCKOverloadButtonLogicAsync(controlName: string, context: ICardUIExtensionContext)\r\n {\r\n const mainSection = context.model.card.sections.tryGet('ArFinanceTaxAuthorityRegistrations');\r\n\r\n let fieldName : string | undefined;\r\n\r\n switch (controlName) {\r\n case 'PartnerKckControl':\r\n fieldName = 'PrincipalOrganizationExternalID';\r\n break;\r\n case 'TaxAuthorityKckControl':\r\n fieldName = 'TaxAuthorityOrganizationExternalID';\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (!fieldName) {\r\n return;\r\n }\r\n\r\n const externalID = mainSection?.tryGetFields()?.tryGetField(fieldName);\r\n if (!!externalID) {\r\n const infoDict: IStorage = {\r\n 'ExternalID': externalID\r\n };\r\n await openCard({\r\n cardId: Guid.newGuid(),\r\n cardTypeId: CdCardTypes.PkKCKPartnerTypeID,\r\n info: infoDict\r\n }); \r\n }\r\n }\r\n\r\n \r\n private SetSystemInfoBlockVisibility(context: ICardUIExtensionContext) {\r\n let systemInfoBlock = context.model.blocks.get(\"SystemInfo\");\r\n\r\n if (!systemInfoBlock) {\r\n return;\r\n }\r\n\r\n const mainSection = context.model.card.sections.tryGet('ArFinanceTaxAuthorityRegistrations');\r\n if (!mainSection) {\r\n return;\r\n }\r\n\r\n const deleted = mainSection.fields.tryGet(\"Deleted\");\r\n \r\n systemInfoBlock.blockVisibility = !!deleted ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { DotNetType, Guid, createTypedField } from 'tessa/platform';\r\nimport { ButtonViewModel } from 'tessa/ui/cards/controls';\r\nimport { LoadingOverlay, showError, showMessage, showNotEmpty } from 'tessa/ui';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { CardRequest, CardResponse, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class PkForceMessageHandlingByJsonUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkForceMessageHandlingByJsonTypeID)) {\r\n return;\r\n }\r\n \r\n const forceHandleButton = context.model.controls.get(\"ForceHandleButton\") as ButtonViewModel;\r\n\r\n // логика запуска обработки по имеющемуся JSON\r\n await this.TryHandleMessageAsync(context, forceHandleButton);\r\n }\r\n\r\n private async TryHandleMessageAsync(context: ICardUIExtensionContext, forceHandleButton: ButtonViewModel) {\r\n \r\n if (forceHandleButton == null) return;\r\n\r\n // кнопка \"Открыть документы в Диадок\"\r\n forceHandleButton.onClick = async () => {\r\n let pkMessageHandlingByJsonSection = context.model.card.sections.tryGet('PkMessageHandlingByJson');\r\n\r\n if (!pkMessageHandlingByJsonSection) return;\r\n\r\n const CardTypeID : string = pkMessageHandlingByJsonSection.fields.tryGet('CardTypeID');\r\n\r\n if (!CardTypeID) {\r\n showError('Выберите тип карточки для корректной обработки запроса!');\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n\r\n switch (CardTypeID) {\r\n case CdCardTypes.ArFinanceTaxAuthorityRegistrationTypeID:\r\n request.requestType = PkRequestTypes.PkUpdateFinanceTaxAuthorityRegistrationByMessageRequest;\r\n break;\r\n \r\n case PkCardTypes.ArHRPersonalDataTypeID:\r\n request.requestType = PkRequestTypes.PkUpdateHRPersonalDataByMessageRequest;\r\n break;\r\n default:\r\n showError('Для выбранного типа карточки не задан тип реквеста в веб-клиенте! Пожалуйста, обратитесь к разработчику.');\r\n return;\r\n }\r\n\r\n const jsonString : string = pkMessageHandlingByJsonSection.fields.tryGet('Json');\r\n\r\n if (!jsonString) {\r\n pkMessageHandlingByJsonSection.fields.set('Output', createTypedField('Значение запроса для обработки не задано', DotNetType.String));\r\n return;\r\n }\r\n\r\n let response : CardResponse | undefined;\r\n const formattedvalue = jsonString.replace(/[\\r\\n]*/g, '');\r\n request.info[\"message\"] = createTypedField(formattedvalue, DotNetType.String);\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n\r\n response = await CardService.instance.request(request);\r\n\r\n if (response.info) {\r\n if (response.info.error) {\r\n pkMessageHandlingByJsonSection!.fields.set('Output', createTypedField(response.info.error.$value, DotNetType.String));\r\n }\r\n else if (response.info.comment) { \r\n pkMessageHandlingByJsonSection!.fields.set('Output', createTypedField(response.info.comment.$value, DotNetType.String));\r\n } \r\n } \r\n\r\n }, 'Идёт обработка...');\r\n\r\n\r\n await showNotEmpty(response!.validationResult.build());\r\n if (response!.validationResult.isSuccessful) {\r\n showMessage('Готово!');\r\n }\r\n };\r\n }\r\n}","export class IrdDocumentFieldAliases {\r\n /// \r\n /// Номер.\r\n /// \r\n static Number = 'Number';\r\n /// \r\n /// Дата документа.\r\n /// \r\n static DocDate = 'DocDate';\r\n /// \r\n /// Автор.\r\n /// \r\n static CreatedBy = 'CreatedBy';\r\n /// \r\n /// Дата создания.\r\n /// \r\n static CreationDate = 'CreationDate';\r\n /// \r\n /// Вид документа.\r\n /// \r\n static DocKind = 'DocKind';\r\n /// \r\n /// Статус.\r\n /// \r\n static DocState = 'DocState';\r\n /// \r\n /// Проект.\r\n /// \r\n static Project = 'Project';\r\n /// \r\n /// Объекты.\r\n /// \r\n static Object = 'IrdObjects';\r\n /// \r\n /// Юр.лицо.\r\n /// \r\n static LegalEntity = 'LegalEntity';\r\n /// \r\n /// Срок действия.\r\n /// \r\n static UntilDate = 'UntilDate';\r\n /// \r\n /// Бессрочный.\r\n /// \r\n static Unlimited = 'Unlimited';\r\n /// \r\n /// Пользователи.\r\n /// \r\n static NotifyUsers = 'NotifyUsers';\r\n /// \r\n /// ЖК.\r\n /// \r\n static LivingComplex = 'LivingComplex';\r\n /// \r\n /// Общая площадь, кв.м..\r\n /// \r\n static TotalArea = 'TotalArea';\r\n /// \r\n /// Таблица Доли.\r\n /// \r\n static Parts = 'Parts';\r\n /// \r\n /// Кадастровый номер.\r\n /// \r\n static CadastralNumbers = 'CadastralNumbers';\r\n /// \r\n /// Таблица ТЭП.\r\n /// \r\n static TEPs = 'TEPs';\r\n /// \r\n /// Файловый контрол.\r\n /// \r\n static Files = 'Files';\r\n /// \r\n /// Код Tessa (ID).\r\n /// \r\n static TessaCode = 'TessaCode';\r\n /// \r\n /// Статус отправки в АвтоБОП.\r\n /// \r\n static AutoBopState = 'AutoBopState';\r\n /// \r\n /// Веха закрыта.\r\n /// \r\n static MilestoneClosed = 'MilestoneClosed';\r\n /// \r\n /// Версии документа.\r\n /// \r\n static IrdVersions = 'IrdVersions';\r\n /// \r\n /// Архивные версии документа.\r\n /// \r\n static IrdVersionsArchive = 'IrdVersionsArchive';\r\n}","/* eslint-disable max-len */\r\nexport class IrdDocumentKinds {\r\n /// \r\n /// Kind identifier for 'Договор о комплексном освоении территории (ДКОТ)': {2f9fbf29-de83-4f6f-a0b1-0071ae78c116}.\r\n /// \r\n static AgreementIntegratedDevelopmentTerritoryID = '2f9fbf29-de83-4f6f-a0b1-0071ae78c116';\r\n /// \r\n /// Kind name for 'Договор о комплексном освоении территории (ДКОТ)'.\r\n /// \r\n static AgreementIntegratedDevelopmentTerritoryName = 'Договор о комплексном освоении территории (ДКОТ)';\r\n /// \r\n /// Kind identifier for 'Договор о развитии застроенной территории (ДРЗТ)': {52cda4fe-dc98-4420-ba6c-b1f7a945fdaf}.\r\n /// \r\n static AgreementDevelopmentBuiltUpAreaID = '52cda4fe-dc98-4420-ba6c-b1f7a945fdaf';\r\n /// \r\n /// Kind name for 'Договор о развитии застроенной территории (ДРЗТ)'.\r\n /// \r\n static AgreementDevelopmentBuiltUpAreaName = 'Договор о развитии застроенной территории (ДРЗТ)';\r\n /// \r\n /// Kind identifier for 'Доп. соглашение ВРИ к ДАЗУ': {64a3bd36-3a8b-4569-8065-2cd6f79e50c1}.\r\n /// \r\n static AddAgreementVRIAndDAZID = '64a3bd36-3a8b-4569-8065-2cd6f79e50c1';\r\n /// \r\n /// Kind name for 'Доп. соглашение ВРИ к ДАЗУ'.\r\n /// \r\n static AddAgreementVRIAndDAZName = 'Доп. соглашение ВРИ к ДАЗУ';\r\n /// \r\n /// Kind identifier for 'Дорожная карта (Условия передачи/освобождения часть под реновацию)': {b7727876-04ed-4c75-9e9c-9d6915e1b641}.\r\n /// \r\n static RoadMapID = 'b7727876-04ed-4c75-9e9c-9d6915e1b641';\r\n /// \r\n /// Kind name for 'Дорожная карта (Условия передачи/освобождения часть под реновацию)'.\r\n /// \r\n static RoadMapName = 'Дорожная карта (Условия передачи/освобождения часть под реновацию)';\r\n /// \r\n /// Kind identifier for 'ЗОС': {17fad3af-0631-4294-a81f-a2f803b36793}.\r\n /// \r\n static ZOSID = '17fad3af-0631-4294-a81f-a2f803b36793';\r\n /// \r\n /// Kind name for 'ЗОС'.\r\n /// \r\n static ZOSName = 'ЗОС';\r\n /// \r\n /// Kind identifier for 'Корректировка АГР': {27caf71d-bc6a-46ff-9575-3255b1c0baaf}.\r\n /// \r\n static AGRAdjustmentID = '27caf71d-bc6a-46ff-9575-3255b1c0baaf';\r\n /// \r\n /// Kind name for 'Корректировка АГР'.\r\n /// \r\n static AGRAdjustmentName = 'Корректировка АГР';\r\n /// \r\n /// Kind identifier for 'Корректировка экспертизы': {906c2ce1-8bf2-4119-9127-c557f7e71008}.\r\n /// \r\n static ExpertiseAdjustmentID = '906c2ce1-8bf2-4119-9127-c557f7e71008';\r\n /// \r\n /// Kind name for 'Корректировка экспертизы'.\r\n /// \r\n static ExpertiseAdjustmentName = 'Корректировка экспертизы';\r\n /// \r\n /// Kind identifier for 'ППМ по ПЗЗ': {f72ee88f-0657-4714-afa0-2d38ea5115e1}.\r\n /// \r\n static PPMAccordingToPZZID = 'f72ee88f-0657-4714-afa0-2d38ea5115e1';\r\n /// \r\n /// Kind name for 'ППМ по ПЗЗ'.\r\n /// \r\n static PPMAccordingToPZZName = 'ППМ по ПЗЗ';\r\n /// \r\n /// Kind identifier for 'ППМ по ППТ': {7c42b703-64fb-4c7a-b27a-3e121cfe98d8}.\r\n /// \r\n static PPMAccordingToPPTID = '7c42b703-64fb-4c7a-b27a-3e121cfe98d8';\r\n /// \r\n /// Kind name for 'ППМ по ППТ'.\r\n /// \r\n static PPMAccordingToPPTName = 'ППМ по ППТ';\r\n /// \r\n /// Kind identifier for 'Разрешение на строительство': {f427fd6c-06ab-4d05-94db-c270b62a82a7}.\r\n /// \r\n static ConstructionPermitID = 'f427fd6c-06ab-4d05-94db-c270b62a82a7';\r\n /// \r\n /// Kind name for 'Разрешение на строительство'.\r\n /// \r\n static ConstructionPermitName = 'Разрешение на строительство';\r\n /// \r\n /// Kind identifier for 'Разрешение на ввод в эксплуатацию': {ad8c00e3-fb4a-4b8d-93ea-8de69afb9374}.\r\n /// \r\n static RVEID = 'ad8c00e3-fb4a-4b8d-93ea-8de69afb9374';\r\n /// \r\n /// Kind name for 'Разрешение на ввод в эксплуатацию'.\r\n /// \r\n static RVEName = 'РВЭ';\r\n /// \r\n /// Kind identifier for 'Свидетельство АГР': {ee2d4e23-885f-4a8b-a755-28daf7f19f14}.\r\n /// \r\n static AGRCertificateID = 'ee2d4e23-885f-4a8b-a755-28daf7f19f14';\r\n /// \r\n /// Kind name for 'Свидетельство АГР'.\r\n /// \r\n static AGRCertificateName = 'Свидетельство АГР';\r\n /// \r\n /// Kind identifier for 'Соглашение о реализации инвестиционного проекта': {f77cc326-3376-4481-b804-6a6a684bffdd}.\r\n /// \r\n static AgreementImplementationOfInvestmentProjectID = 'f77cc326-3376-4481-b804-6a6a684bffdd';\r\n /// \r\n /// Kind name for 'Соглашение о реализации инвестиционного проекта'.\r\n /// \r\n static AgreementImplementationOfInvestmentProjectName = 'Соглашение о реализации инвестиционного проекта';\r\n /// \r\n /// Kind identifier for 'Техплан': {E31748DB-7DE8-4DB8-8EBB-8E1B6BE409E4}.\r\n /// \r\n static TechnicalPlanID = 'e31748db-7de8-4db8-8ebb-8e1b6be409e4';\r\n /// \r\n /// Kind name for 'Техплан'.\r\n /// \r\n static TechnicalPlanName = 'Техплан';\r\n /// \r\n /// Kind identifier for 'Тома ППТ': {08A11274-7BE5-48C0-B452-9E655D5D2C3E}.\r\n /// \r\n static PPTVolumesID = '08a11274-7be5-48c0-b452-9e655d5d2c3e';\r\n /// \r\n /// Kind name for 'Тома ППТ'.\r\n /// \r\n static PPTVolumesName = 'Тома ППТ';\r\n /// \r\n /// Kind identifier for 'ТУ для проектной документации': {1E285A7D-E418-4275-8B01-09BF634F69F0}.\r\n /// \r\n static SpecificationsDesignDocumentationID = '1e285a7d-e418-4275-8b01-09bf634f69f0';\r\n /// \r\n /// Kind name for 'ТУ для проектной документации'.\r\n /// \r\n static SpecificationsDesignDocumentationName = 'ТУ для проектной документации';\r\n /// \r\n /// Kind identifier for 'Экспертиза': {F6FE4631-C649-41CE-A2D6-8C8EE804AA31}.\r\n /// \r\n static ExpertiseID = 'f6fe4631-c649-41ce-a2d6-8c8ee804aa31';\r\n /// \r\n /// Kind name for 'Экспертиза'.\r\n /// \r\n static ExpertiseName = 'Экспертиза';\r\n /// \r\n /// Kind identifier for 'ГЗК о подготовке ППТ (ПЗЗ)': {A37A2DA0-FEC2-4F90-A974-5914D75CE1C4}.\r\n /// \r\n static GZKOnPreparationOfPPTID = 'a37a2da0-fec2-4f90-a974-5914d75ce1c4';\r\n /// \r\n /// Kind name for 'ГЗК о подготовке ППТ (ПЗЗ)'.\r\n /// \r\n static GZKOnPreparationOfPPTName = 'ГЗК о подготовке ППТ (ПЗЗ)';\r\n /// \r\n /// Kind identifier for 'ГЗК об одобрении/утверждении ППТ': {E2D19147-85AC-4FD1-98E1-33070F1D1840}.\r\n /// \r\n static GZKOnApprovalOfPPTID = 'e2d19147-85ac-4fd1-98e1-33070f1d1840';\r\n /// \r\n /// Kind name for 'ГЗК об одобрении/утверждении ППТ'.\r\n /// \r\n static GZKOnApprovalOfPPTName = 'ГЗК об одобрении/утверждении ППТ';\r\n /// \r\n /// Kind identifier for 'ГПЗУ': {19E7577D-E37C-42E7-8A76-56806B751388}.\r\n /// \r\n static GPZUID = '19e7577d-e37c-42e7-8a76-56806b751388';\r\n /// \r\n /// Kind name for 'ГПЗУ'.\r\n /// \r\n static GPZUName = 'ГПЗУ';\r\n /// \r\n /// Kind identifier for 'ДАЗУ': {7782e3f7-6414-4481-8d03-20803e75ae2b}.\r\n /// \r\n static DAZUID = '7782e3f7-6414-4481-8d03-20803e75ae2b';\r\n /// \r\n /// Kind name for 'ДАЗУ'.\r\n /// \r\n static DAZUName = 'ДАЗУ';\r\n /// \r\n /// Kind identifier for \"Протокол предварительного распределения площадей\": {816a9cdf-8f82-4c21-aca8-93882667f331}.\r\n /// \r\n static ProtocolForPreliminaryAllocationOfAreasID = '816a9cdf-8f82-4c21-aca8-93882667f331';\r\n /// \r\n /// Kind name for \"Протокол предварительного распределения площадей\".\r\n /// \r\n static ProtocolForPreliminaryAllocationOfAreasName = 'Протокол предварительного распределения площадей';\r\n}","export class IrdKindsFields {\r\n visibleFields: string[];\r\n kinds: string[];\r\n constructor(_visibleFields: string[], _kinds: string[]) {\r\n this.visibleFields = _visibleFields;\r\n this.kinds = _kinds;\r\n }\r\n}\r\n\r\nexport class TableClontrolSectionAlias {\r\n fieldAlias: string;\r\n sectionAlias: string;\r\n constructor(_fieldAlias: string, _sectionAlias: string) {\r\n this.fieldAlias = _fieldAlias;\r\n this.sectionAlias = _sectionAlias;\r\n }\r\n}","import { IrdDocumentFieldAliases } from './IrdDocumentFieldAliases';\r\nimport { IrdDocumentKinds } from './IrdDocumentKinds';\r\nimport { IrdKindsFields, TableClontrolSectionAlias } from './IrdKindsFields';\r\n\r\nexport class IrdKindsFieldsSettings {\r\n static getKindVisibleFields(kindId: string | null): string[] {\r\n if (kindId === null) {\r\n return DefaultVisibleFields;\r\n } else {\r\n return KindsFieldsVisibility\r\n .filter((x) => x.kinds.includes(kindId))\r\n .map((x) => x.visibleFields)\r\n .reduce((acc, curr) => acc.concat(curr), DefaultVisibleFields)\r\n .filter((value, index, self) => self.indexOf(value) === index);\r\n }\r\n }\r\n\r\n static getDefaultVisibleFields(): string[] {\r\n return DefaultVisibleFields;\r\n }\r\n\r\n static getReadonlyFieldsOnNewVersion(): string[] {\r\n return ReadonlyFieldsOnNewVersion;\r\n }\r\n\r\n static getReadonlyFieldsOnNotProjectState(): string[] {\r\n return ReadonlyFieldsOnNotProjectState;\r\n }\r\n\r\n static getAllIRDFieldAliases(): string[] {\r\n return Object.values(IrdDocumentFieldAliases);\r\n }\r\n\r\n static getTableClontrolSectionAlias(irdDocumentFieldAlias: string | null): string[] {\r\n if (irdDocumentFieldAlias === null) {\r\n return [];\r\n } else {\r\n return TableClontrolSectionAliases\r\n .filter((x) => x.fieldAlias == irdDocumentFieldAlias)\r\n .map((x) => x.sectionAlias);\r\n }\r\n }\r\n}\r\n\r\nconst DefaultVisibleFields: string[] = [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.TessaCode,\r\n IrdDocumentFieldAliases.AutoBopState,\r\n IrdDocumentFieldAliases.Files,\r\n IrdDocumentFieldAliases.MilestoneClosed,\r\n IrdDocumentFieldAliases.IrdVersions,\r\n IrdDocumentFieldAliases.IrdVersionsArchive\r\n];\r\n\r\nconst ReadonlyFieldsOnNewVersion: string[] = [\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.LivingComplex\r\n];\r\n\r\nconst ReadonlyFieldsOnNotProjectState: string[] = [\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.CadastralNumbers\r\n];\r\n\r\nconst TableClontrolSectionAliases: TableClontrolSectionAlias[] = [\r\n new TableClontrolSectionAlias(IrdDocumentFieldAliases.CadastralNumbers, 'IrdDocCadastralNumbers'),\r\n new TableClontrolSectionAlias(IrdDocumentFieldAliases.NotifyUsers, 'IrdDocNotifyUsers'),\r\n new TableClontrolSectionAlias(IrdDocumentFieldAliases.Object, 'IrdDocObjects'),\r\n new TableClontrolSectionAlias(IrdDocumentFieldAliases.Parts, 'IrdDocParts'),\r\n new TableClontrolSectionAlias(IrdDocumentFieldAliases.TEPs, 'IrdDocTEPs'),\r\n];\r\n\r\nconst KindsFieldsVisibility: IrdKindsFields[] = [\r\n // Договор о развитии застроенной территории (ДРЗТ).\r\n // Договор о комплексном освоении территории (ДКОТ).\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.LegalEntity,\r\n IrdDocumentFieldAliases.UntilDate,\r\n IrdDocumentFieldAliases.Unlimited,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.TotalArea,\r\n IrdDocumentFieldAliases.Parts,\r\n IrdDocumentFieldAliases.Files,\r\n ],\r\n [\r\n IrdDocumentKinds.AgreementDevelopmentBuiltUpAreaID,\r\n IrdDocumentKinds.AgreementIntegratedDevelopmentTerritoryID,\r\n ]\r\n ),\r\n // Протокол предварительного распределения площадей.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.UntilDate,\r\n IrdDocumentFieldAliases.Unlimited,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.TotalArea,\r\n IrdDocumentFieldAliases.Parts,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.ProtocolForPreliminaryAllocationOfAreasID\r\n ]\r\n ),\r\n // Соглашение о реализации инвестиционного проекта.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.TotalArea,\r\n IrdDocumentFieldAliases.Parts,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.AgreementImplementationOfInvestmentProjectID\r\n ]\r\n ),\r\n\r\n // ГЗК о подготовке ППТ (ПЗЗ) - на основании МП - ПГ.\r\n // Тома ППТ.\r\n // ГЗК об одобрении/утверждении ППТ.\r\n // ППМ по ПЗЗ.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.TEPs,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.GZKOnPreparationOfPPTID,\r\n IrdDocumentKinds.PPTVolumesID,\r\n IrdDocumentKinds.GZKOnApprovalOfPPTID,\r\n IrdDocumentKinds.PPMAccordingToPZZID,\r\n ]\r\n ),\r\n\r\n // Дорожная карта (Условия передачи/освобождения часть под реновацию).\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.RoadMapID,\r\n ]\r\n ),\r\n\r\n // ППМ по ППТ.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.CadastralNumbers,\r\n IrdDocumentFieldAliases.TEPs,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.PPMAccordingToPPTID\r\n ]\r\n ),\r\n\r\n // ДАЗУ.\r\n new IrdKindsFields(\r\n [\r\n // Еще должен быть ВРИ. Но в ТЗ такое поле упоминается 1 раз.\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.CadastralNumbers,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.DAZUID\r\n ]\r\n ),\r\n\r\n // ГПЗУ.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.CadastralNumbers,\r\n IrdDocumentFieldAliases.LegalEntity,\r\n IrdDocumentFieldAliases.TEPs,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.GPZUID\r\n ]\r\n ),\r\n\r\n // Доп. соглашение ВРИ к ДАЗУ.\r\n new IrdKindsFields(\r\n [\r\n // Еще должен быть ВРИ. Но в ТЗ такое поле упоминается 1 раз.\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.CadastralNumbers,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.AddAgreementVRIAndDAZID\r\n ]\r\n ),\r\n\r\n // ТУ для проектной документации.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.SpecificationsDesignDocumentationID\r\n ]\r\n ),\r\n\r\n // Экспертиза.\r\n // Свидетельство АГР.\r\n // Корректировка экспертизы.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.LegalEntity,\r\n IrdDocumentFieldAliases.TEPs,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.ExpertiseID,\r\n IrdDocumentKinds.AGRCertificateID,\r\n IrdDocumentKinds.ExpertiseAdjustmentID,\r\n ]\r\n ),\r\n\r\n // Разрешение на строительство.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.UntilDate,\r\n IrdDocumentFieldAliases.Unlimited,\r\n IrdDocumentFieldAliases.CadastralNumbers,\r\n IrdDocumentFieldAliases.LegalEntity,\r\n IrdDocumentFieldAliases.TEPs,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.ConstructionPermitID\r\n ]\r\n ),\r\n\r\n // Корректировка АГР.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.LegalEntity,\r\n IrdDocumentFieldAliases.TEPs,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.AGRAdjustmentID\r\n ]\r\n ),\r\n\r\n // Техплан.\r\n // ЗОС.\r\n // Разрешение на ввод в эксплуатацию.\r\n new IrdKindsFields(\r\n [\r\n IrdDocumentFieldAliases.Number,\r\n IrdDocumentFieldAliases.DocDate,\r\n IrdDocumentFieldAliases.CreatedBy,\r\n IrdDocumentFieldAliases.CreationDate,\r\n IrdDocumentFieldAliases.DocKind,\r\n IrdDocumentFieldAliases.DocState,\r\n IrdDocumentFieldAliases.Project,\r\n IrdDocumentFieldAliases.Object,\r\n IrdDocumentFieldAliases.NotifyUsers,\r\n IrdDocumentFieldAliases.LivingComplex,\r\n IrdDocumentFieldAliases.TEPs,\r\n IrdDocumentFieldAliases.Files\r\n ],\r\n [\r\n IrdDocumentKinds.TechnicalPlanID,\r\n IrdDocumentKinds.ZOSID,\r\n IrdDocumentKinds.RVEID,\r\n ]\r\n )\r\n];\r\n","import { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { CardRowState, CardStoreMode, CardSection, CardRow, CardPermissionFlags, CardFieldChangedEventArgs } from 'tessa/cards';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { DotNetType, Guid, Visibility, createTypedField, hasFlag } from 'tessa/platform';\r\nimport { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { AutoCompleteEntryViewModel, AutoCompleteTableViewModel, CheckBoxViewModel, DateTimeViewModel, DecimalBoxViewModel, GridRowAction, GridViewModel, NumeratorViewModel, TextBoxViewModel } from 'tessa/ui/cards/controls';\r\nimport { showConfirm, showLoadingOverlay, tryGetFromInfo } from 'tessa/ui';\r\nimport { openCard } from 'tessa/ui/uiHost';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { IrdKindsFieldsSettings } from 'src/pkScripts/Helpers/IrdKindsFieldsSettings';\r\nimport { IrdDocumentFieldAliases } from 'src/pkScripts/Helpers/IrdDocumentFieldAliases';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { ArHelper } from 'src/pkScripts/helpers/ArHelper';\r\nimport { reaction } from 'mobx';\r\nimport { userSession } from \"common/utility\";\r\nimport { PkClientHelper } from 'src/pkScripts/Helpers/PkClientHelper';\r\n\r\nexport class IrdDocumentUIExtension extends CardUIExtension {\r\n private _disposerSelectRow: Function | null = null;\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (!context.card) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model?.card?.typeId, CdCardTypes.IrdDocumentTypeID)) {\r\n return;\r\n }\r\n let card = context.card;\r\n let irdDocumentInfo = card.sections.tryGet(\"IrdDocumentInfo\");\r\n let irdDocObjects = card.sections.tryGet(\"IrdDocObjects\");\r\n let irdDocCadastralNumbers = card.sections.tryGet(\"IrdDocCadastralNumbers\");\r\n if (!irdDocumentInfo || !irdDocObjects || !irdDocCadastralNumbers) {\r\n return;\r\n }\r\n\r\n await this.CheckIrdActualVersionAsync(context);\r\n \r\n ArHelper.ClearCollectionSection(context.card.storeMode, card.sections.tryGet(\"IrdDocKindTEPsVirtual\")!);\r\n ArHelper.ClearCollectionSection(context.card.storeMode, card.sections.tryGet(\"IrdDocTEPsInfoVirtual\")!);\r\n }\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n\r\n if (!context.card || !Guid.equals(context.model?.card?.typeId, CdCardTypes.IrdDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n let card = context.card;\r\n let irdDocParts = card.sections.tryGet(\"IrdDocParts\");\r\n let irdDocumentInfo = card.sections.tryGet(\"IrdDocumentInfo\");\r\n let irdDocNotifyUsers = card.sections.tryGet(\"IrdDocNotifyUsers\");\r\n\r\n if (!irdDocParts || !irdDocumentInfo || !irdDocNotifyUsers) {\r\n return;\r\n }\r\n let docKindID = irdDocumentInfo.fields.tryGet(\"DocKindID\");\r\n // Установка видимости полей. Должна идти раньше PartsLogic.\r\n await this.SetFieldsVisibilityAsync(context, docKindID);\r\n\r\n // Изменения в карточке при смене значений полей.\r\n await this.IrdDocumentFieldChangedAsync(context);\r\n\r\n this.PartsLogic(context, docKindID);\r\n\r\n this.SetFieldsIsReadOnly(context);\r\n\r\n this.CadastralNumbersLogic(context);\r\n\r\n this.IrdDocObjectsLogic(context);\r\n\r\n this.UntilDateUnlimitedControlsLogic(context);\r\n\r\n await this.IrdVersionsLogic(context);\r\n\r\n await this.ArchiveIrdVersionsLogic(context);\r\n\r\n CdUIHelper.HideTabs(context.model, \"Избранное\");\r\n\r\n // Логика обработки изменений значений ТЭПов\r\n this.IrdTEPsChangeLogic(context);\r\n\r\n // Показать ТЭПы по выделенному объекту в списке\r\n this.ShowTepsBySelectedObject(context);\r\n }\r\n \r\n private async ClearFieldsByVisibility(context: ICardUIExtensionContext, kindID: any) {\r\n const defaultVisibleFields = IrdKindsFieldsSettings.getKindVisibleFields(kindID);\r\n const allAliases = IrdKindsFieldsSettings.getAllIRDFieldAliases();\r\n for (const [key, control] of context.model.controls) {\r\n if (!defaultVisibleFields.includes(key) && allAliases.includes(key)) {\r\n if (control.controlVisibility === Visibility.Collapsed) {\r\n if (control instanceof NumeratorViewModel) {\r\n continue;\r\n }\r\n if (control instanceof AutoCompleteEntryViewModel) {\r\n control.selectedItem = null;\r\n }\r\n if (control instanceof DateTimeViewModel) {\r\n control.selectedDate = null;\r\n }\r\n if (control instanceof CheckBoxViewModel) {\r\n control.isChecked = false;\r\n }\r\n if (control instanceof TextBoxViewModel) {\r\n control.text = '';\r\n }\r\n if (control instanceof AutoCompleteTableViewModel) {\r\n control.selectedItem = null;\r\n }\r\n if (control instanceof DecimalBoxViewModel) {\r\n control.text = '';\r\n }\r\n\r\n if (control instanceof GridViewModel || control instanceof AutoCompleteTableViewModel) {\r\n // Все виды контролов отчищаются успешно кроме GridViewModel и AutoCompleteTableViewModel.\r\n const sectionsToClear = IrdKindsFieldsSettings.getTableClontrolSectionAlias(key);\r\n sectionsToClear.forEach(section => {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, context.card.sections.tryGet(section)!);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Проверка на существование дубликата по параметрам Проект-Вид-Объекты-Кадастровые номера. Построение диалога.*/\r\n private async CheckIrdActualVersionAsync(context: ICardUIExtensionContext) {\r\n const card = context.card;\r\n\r\n const isCreateNewArchiveIrd = tryGetFromInfo(card.info, \"IsCreateNewArchiveIrd\", false);\r\n\r\n // Для новых архивных карточек не проверяем совпадения. Т.к. проверка будет в after request и карточка встроится как версия 1.\r\n if (isCreateNewArchiveIrd) {\r\n return;\r\n }\r\n\r\n let irdDocumentInfo = card.sections.tryGet(\"IrdDocumentInfo\");\r\n let irdDocObjects = card.sections.tryGet(\"IrdDocObjects\");\r\n const isNewVersion = tryGetFromInfo(card.info, \"NewVersion\", false);\r\n let projectID = irdDocumentInfo?.fields.tryGetField(\"ProjectID\")?.$value;\r\n let docKindID = irdDocumentInfo?.fields.tryGetField(\"DocKindID\")?.$value;\r\n if (projectID == null || docKindID == null) {\r\n return;\r\n }\r\n let rootVersionID = irdDocumentInfo?.fields.tryGetField(\"RootVersionGuid\")?.$value ?? card.id;\r\n let objectsID = irdDocObjects?.rows.map(x => createTypedField(x.get(\"ObjectID\"), DotNetType.Guid));\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.IrdCheckExistingVersions;\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n request.info[\"ProjectID\"] = createTypedField(projectID, DotNetType.Guid);\r\n request.info[\"DocKindID\"] = createTypedField(docKindID, DotNetType.Guid);\r\n request.info[\"ObjectsID\"] = objectsID;\r\n request.info[\"RootVersionID\"] = createTypedField(rootVersionID, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n if (response.validationResult.isSuccessful === true) {\r\n let actualVersionGuid = response.info.ExistingVersion;\r\n let cadastralNotUniqueVersionGuid = response.info.ExistingVersionCadastralNumber;\r\n // Выдаем ошибку в случае если документ создается и это не новая версия ИРД.\r\n if ((context.card.storeMode === CardStoreMode.Insert && !isNewVersion) && actualVersionGuid !== null && actualVersionGuid.$value != null && actualVersionGuid.$value !== context.card.id) {\r\n // Строим диалог.\r\n let message = \"Для проекта \" + irdDocumentInfo!.fields.tryGet(\"ProjectName\") + \" документ \" + irdDocumentInfo!.fields.tryGet(\"DocKindDocumentKind\") + \" уже существует. Открыть последнюю версию?\";\r\n let confirmVersionOpen = await showConfirm(message);\r\n if (confirmVersionOpen) {\r\n await showLoadingOverlay(async () => {\r\n await openCard({\r\n cardId: actualVersionGuid.$value,\r\n cardTypeId: CdCardTypes.IrdDocumentTypeID,\r\n cardTypeName: CdCardTypes.IrdDocumentTypeName\r\n });\r\n }, \"Открывается карточка\");\r\n context.cancel = true;\r\n }\r\n else {\r\n context.uiContext.cardEditor?.close(true);\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n // Кадастровые номера проверяем на сохранении всегда.\r\n else if (cadastralNotUniqueVersionGuid && cadastralNotUniqueVersionGuid.$value !== context.card.id) {\r\n // Строим диалог.\r\n let message = \"Обнаружено совпадение в кадастровом номере в версии другого документа. Открыть карточку?\";\r\n let confirmVersionOpen = await showConfirm(message);\r\n if (confirmVersionOpen) {\r\n await showLoadingOverlay(async () => {\r\n await openCard({\r\n cardId: cadastralNotUniqueVersionGuid.$value,\r\n cardTypeId: CdCardTypes.IrdDocumentTypeID,\r\n cardTypeName: CdCardTypes.IrdDocumentTypeName\r\n });\r\n }, \"Открывается карточка\");\r\n context.cancel = true;\r\n }\r\n else {\r\n context.uiContext.cardEditor?.close(true);\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n else {\r\n }\r\n }\r\n /** Настройка видимости полей.*/\r\n private async SetFieldsVisibilityAsync(context: ICardUIExtensionContext, docKindID: any) {\r\n let visibleFields = IrdKindsFieldsSettings.getKindVisibleFields(docKindID);\r\n // Получаем все поля которыми хотим управлять.\r\n let allAliases = IrdKindsFieldsSettings.getAllIRDFieldAliases();\r\n\r\n for (const [key, control] of context.model.controls) {\r\n if (allAliases.includes(key)) {\r\n control.controlVisibility = visibleFields.includes(key) ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n /** Установка доступности полей карточки. */\r\n private SetFieldsIsReadOnly(context: ICardUIExtensionContext) {\r\n const pkDocumentCommonInfo = context.card.sections.tryGet('PkDocumentCommonInfo');\r\n const docState = pkDocumentCommonInfo!.fields.tryGet('StateID');\r\n const isProjectState = docState === CdDocStates.Project.id;\r\n const isNewVersion = tryGetFromInfo(context.card.info, \"NewVersion\", false);\r\n if (isNewVersion) {\r\n const readonlyNewVersionFields = IrdKindsFieldsSettings.getReadonlyFieldsOnNewVersion();\r\n for (const fieldAlias of readonlyNewVersionFields) {\r\n const controlVM = context.model.controls.get(fieldAlias);\r\n if (controlVM) {\r\n controlVM.isReadOnly = true;\r\n }\r\n }\r\n } else if (!isProjectState) {\r\n const readonlyNotProjectFields = IrdKindsFieldsSettings.getReadonlyFieldsOnNotProjectState();\r\n for (const fieldAlias of readonlyNotProjectFields) {\r\n const controlVM = context.model.controls.get(fieldAlias);\r\n if (controlVM) {\r\n controlVM.isReadOnly = true;\r\n }\r\n }\r\n }\r\n }\r\n /** Логика контролов бессрочный и срок.*/\r\n private async IrdVersionsLogic(context: ICardUIExtensionContext) {\r\n const irdVersions = CdUIHelper.GetUIControl(context, IrdDocumentFieldAliases.IrdVersions);\r\n if (irdVersions !== undefined) {\r\n irdVersions?.addButton.setVisibility(Visibility.Collapsed);\r\n irdVersions?.removeButton.setVisibility(Visibility.Collapsed);\r\n }\r\n const partsSection = context.card.sections.tryGet('IrdDocParts');\r\n if (partsSection === undefined) {\r\n return;\r\n }\r\n irdVersions?.rowInvoked.add(async e => {\r\n const docID = e.action === GridRowAction.Opening && e.row.tryGet('IrdVersionID');\r\n if (docID !== Guid.empty && docID !== undefined) {\r\n e.cancel = true;\r\n await openCard({\r\n cardId: docID,\r\n cardTypeId: CdCardTypes.IrdDocumentTypeID,\r\n cardTypeName: CdCardTypes.IrdDocumentTypeName\r\n });\r\n return;\r\n }\r\n });\r\n }\r\n /** Логика контролов бессрочный и срок.*/\r\n private async ArchiveIrdVersionsLogic(context: ICardUIExtensionContext) {\r\n const irdVersions = CdUIHelper.GetUIControl(context, IrdDocumentFieldAliases.IrdVersionsArchive);\r\n if (irdVersions !== undefined) {\r\n irdVersions?.addButton.setVisibility(Visibility.Collapsed);\r\n irdVersions?.removeButton.setVisibility(Visibility.Collapsed);\r\n }\r\n const partsSection = context.card.sections.tryGet('IrdDocParts');\r\n if (partsSection === undefined) {\r\n return;\r\n }\r\n irdVersions?.rowInvoked.add(async e => {\r\n const docID = e.action === GridRowAction.Opening && e.row.tryGet('IrdVersionID');\r\n if (docID !== Guid.empty && docID !== undefined) {\r\n e.cancel = true;\r\n await openCard({\r\n cardId: docID,\r\n cardTypeId: CdCardTypes.IrdDocumentTypeID,\r\n cardTypeName: CdCardTypes.IrdDocumentTypeName\r\n });\r\n return;\r\n }\r\n });\r\n }\r\n /** Логика контролов бессрочный и срок.*/\r\n private UntilDateUnlimitedControlsLogic(context: ICardUIExtensionContext) {\r\n if (hasFlag(context.card.permissions.cardPermissions, CardPermissionFlags.ProhibitModify)) {\r\n return;\r\n }\r\n let irdDocumentInfo = context.card.sections.tryGet(\"IrdDocumentInfo\");\r\n let untilDateControl = CdUIHelper.GetUIControl(context, \"UntilDate\")!;\r\n let unlimitedControl = CdUIHelper.GetUIControl(context, \"Unlimited\")!;\r\n let unlimited = irdDocumentInfo!.fields.tryGet('Unlimited');\r\n if (unlimited != null && unlimited === true) {\r\n untilDateControl.isReadOnly = true;\r\n }\r\n let docUntilDate = irdDocumentInfo!.fields.tryGet('DocUntilDate');\r\n if (docUntilDate != null) {\r\n unlimitedControl.isReadOnly = !userSession.isAdmin; // true;\r\n }\r\n }\r\n /** Логика контролов бессрочный и срок на изменения полей в карточке.*/\r\n private UntilDateUnlimitedControlsOnChangesLogic(context: ICardUIExtensionContext, fielName: string, fieldValue: any) {\r\n let untilDateControl = CdUIHelper.GetUIControl(context, \"UntilDate\")!;\r\n let unlimitedControl = CdUIHelper.GetUIControl(context, \"Unlimited\")!;\r\n if (!untilDateControl || !unlimitedControl) {\r\n return;\r\n }\r\n if (fielName === 'Unlimited') {\r\n untilDateControl.isReadOnly = fieldValue === true;\r\n }\r\n if (fielName === 'DocUntilDate') {\r\n unlimitedControl.isReadOnly = fieldValue != null;\r\n }\r\n }\r\n /** Логика связанная с контролом Объекты.*/\r\n private IrdDocObjectsLogic(context: ICardUIExtensionContext) {\r\n const objectTable = CdUIHelper.GetUIControl(context, IrdDocumentFieldAliases.Object);\r\n if (!objectTable) {\r\n return;\r\n }\r\n\r\n let irdDocumentInfo = context.card.sections.tryGet('IrdDocumentInfo');\r\n if (!irdDocumentInfo) {\r\n return;\r\n }\r\n objectTable.rowValidating.add((e) => {\r\n const row = e.row;\r\n const residentialComplexID = row.tryGet('ObjectResidentialComplexID');\r\n const residentialComplexName = row.tryGet('ObjectResidentialComplexName');\r\n const projectID = row.tryGet('ObjectProjectID');\r\n const projectName = row.tryGet('ObjectProjectName');\r\n if (irdDocumentInfo!.fields.tryGetField('ResidentialComplexID')?.$value !== residentialComplexID) {\r\n irdDocumentInfo!.fields.set('ResidentialComplexID', createTypedField(residentialComplexID, DotNetType.Guid));\r\n irdDocumentInfo!.fields.set('ResidentialComplexName', createTypedField(residentialComplexName, DotNetType.String));\r\n }\r\n if (irdDocumentInfo!.fields.tryGetField('ProjectID')?.$value !== projectID) {\r\n irdDocumentInfo!.fields.set('ProjectID', createTypedField(projectID, DotNetType.Guid));\r\n irdDocumentInfo!.fields.set('ProjectName', createTypedField(projectName, DotNetType.String));\r\n }\r\n if (irdDocumentInfo!.fields.tryGetField('ProjectResidentialComplexID')?.$value !== residentialComplexID) {\r\n irdDocumentInfo!.fields.set('ProjectResidentialComplexID', createTypedField(residentialComplexID, DotNetType.Guid));\r\n irdDocumentInfo!.fields.set('ProjectResidentialComplexName', createTypedField(residentialComplexName, DotNetType.String));\r\n }\r\n });\r\n\r\n if (this._disposerSelectRow == null) {\r\n this._disposerSelectRow = reaction(() => objectTable.selectedRow, () => { this.ShowTepsBySelectedObject(context) });\r\n }\r\n }\r\n\r\n /** Логика связанная с ТЧ \"Доли\".*/\r\n private CadastralNumbersLogic(context: ICardUIExtensionContext) {\r\n const cadastralNumbersControl = CdUIHelper.GetUIControl(context, IrdDocumentFieldAliases.CadastralNumbers);\r\n let cadastralNumbers = context.card.sections.tryGet('IrdDocCadastralNumbers');\r\n if (!cadastralNumbers || !cadastralNumbersControl) {\r\n return;\r\n }\r\n cadastralNumbersControl.rowValidating.add((args) => {\r\n const cadastralNumber: string | undefined = args.row.tryGet('CadastralNumber');\r\n if (!cadastralNumber) {\r\n args.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить поле \"Кадастровый номер\".');\r\n } else {\r\n const validator: RegExp = /^[0-9 :]+$/;\r\n if (!validator.test(cadastralNumber)) {\r\n args.validationResult.add(ValidationResultType.Error, 'Поле кадастровый номер может состоять только из цифр, пробелов и знака \\':\\'!');\r\n }\r\n }\r\n });\r\n cadastralNumbersControl.rowInvoked.add((args) => {\r\n if (args.action === GridRowAction.Deleting) {\r\n const deletedN: number = args.row.tryGetField('N')?.$value ?? 0;\r\n for (const row of cadastralNumbers!.rows) {\r\n const curN: number = row.tryGetField('N')?.$value ?? 0;\r\n if (curN && deletedN && curN > deletedN) {\r\n row.set('N', createTypedField(curN - 1, DotNetType.Int32));\r\n }\r\n }\r\n }\r\n if (args.action === GridRowAction.Inserted) {\r\n let cadastralNumbers = args.cardModel.card.sections.tryGet('IrdDocCadastralNumbers');\r\n let maxValue: number = 0;\r\n if (cadastralNumbers && cadastralNumbers.rows.length !== 0) {\r\n maxValue = Math.max.apply(null, cadastralNumbers!.rows!.map(x => x.tryGetField(\"N\")?.$value ?? 0)) ?? 0;\r\n }\r\n args.row.set('N', createTypedField(maxValue + 1, DotNetType.Int32));\r\n }\r\n if (args.action === GridRowAction.Inserted || args.action === GridRowAction.Opening) {\r\n const cadastralNumberControl = args.rowModel?.controls.get(IrdDocumentFieldAliases.CadastralNumbers);\r\n if (!cadastralNumberControl) {\r\n return;\r\n }\r\n cadastralNumberControl.validationFunc = (c) => {\r\n if (c.isEmpty) {\r\n return 'Заполните поле \"Кадастровый номер\"';\r\n } else {\r\n const validator: RegExp = /^[0-9 :]+$/;\r\n const text: string = (c as TextBoxViewModel).text;\r\n if (!validator.test(text)) {\r\n return 'Поле кадастровый номер может состоять только из цифр, пробелов и знака \\':\\'!';\r\n }\r\n }\r\n return null;\r\n };\r\n }\r\n });\r\n }\r\n\r\n /** Логика связанная с ТЧ \"Доли\".*/\r\n private PartsLogic(context: ICardUIExtensionContext, docKindID: any) {\r\n let partsControl = CdUIHelper.GetUIControl(context, \"Parts\");\r\n let irdDocParts = context.card.sections.getOrAdd(\"IrdDocParts\");\r\n if (!irdDocParts\r\n || docKindID == null\r\n || !IrdKindsFieldsSettings.getKindVisibleFields(docKindID).includes(IrdDocumentFieldAliases.Parts)) {\r\n return;\r\n }\r\n if (partsControl) {\r\n partsControl.addButton.setVisibility(Visibility.Collapsed);\r\n partsControl.removeButton.setVisibility(Visibility.Collapsed);\r\n }\r\n if (irdDocParts.rows != null && irdDocParts.rows.filter(x => x.state === CardRowState.Deleted).length > 0) {\r\n irdDocParts.rows.forEach(x => {\r\n x.set('Percentage', null);\r\n x.set('SqMeters', null);\r\n x.set('Amount', null);\r\n x.state = CardRowState.Inserted;\r\n });\r\n } else\r\n if (irdDocParts.rows != null && irdDocParts.rows.length === 0) {\r\n let pikPart: CardRow = new CardRow();\r\n pikPart.rowId = Guid.newGuid();\r\n pikPart.set('SideID', createTypedField(0, DotNetType.Int32));\r\n pikPart.set('SideName', createTypedField('Доля ПИК', DotNetType.String));\r\n pikPart.set('Percentage', null);\r\n pikPart.set('SqMeters', null);\r\n pikPart.set('Amount', null);\r\n pikPart.state = CardRowState.Inserted;\r\n irdDocParts.rows.add(pikPart);\r\n\r\n let notPikPart: CardRow = new CardRow();\r\n notPikPart.rowId = Guid.newGuid();\r\n notPikPart.set('SideID', createTypedField(1, DotNetType.Int32));\r\n notPikPart.set('SideName', createTypedField('Доля не ПИК', DotNetType.String));\r\n notPikPart.set('Percentage', null);\r\n notPikPart.set('SqMeters', null);\r\n notPikPart.set('Amount', null);\r\n notPikPart.state = CardRowState.Inserted;\r\n irdDocParts.rows.add(notPikPart);\r\n }\r\n }\r\n\r\n /** Изменения в карточке при смене значений полей.*/\r\n private async IrdDocumentFieldChangedAsync(context: ICardUIExtensionContext) {\r\n let card = context.card;\r\n let irdDocumentInfo = card.sections.tryGet(\"IrdDocumentInfo\");\r\n let irdDocNotifyUsers = card.sections.tryGet(\"IrdDocNotifyUsers\");\r\n let irdDocObjects = card.sections.tryGet(\"IrdDocObjects\");\r\n let untilDateControl = CdUIHelper.GetUIControl(context, \"UntilDate\")!;\r\n let unlimitedControl = CdUIHelper.GetUIControl(context, \"Unlimited\")!;\r\n irdDocumentInfo!.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"DocKindID\" && e.fieldValue != null) {\r\n await this.SetFieldsVisibilityAsync(context, e.fieldValue);\r\n await this.FillNotifyUsersAsync(irdDocNotifyUsers, e.fieldValue, irdDocumentInfo?.fields.tryGetField(\"ResidentialComplexID\")?.$value, context);\r\n await this.FillTepsAsync(e.fieldValue, context);\r\n await this.ClearFieldsByVisibility(context, e.fieldValue);\r\n // Добавляем строки \"ПИК\"/\"Не ПИК\" если таковых нет и контрол виден.\r\n this.PartsLogic(context, e.fieldValue);\r\n }\r\n if (e.fieldName === \"Unlimited\") {\r\n untilDateControl.isReadOnly = e.fieldValue === true;\r\n }\r\n if (e.fieldName === \"DocUntilDate\") {\r\n unlimitedControl.isReadOnly = e.fieldValue != null;\r\n }\r\n if (e.fieldName === 'ResidentialComplexID') {\r\n if (e.fieldValue === null) {\r\n irdDocumentInfo!.fields.set('ProjectID', null);\r\n irdDocumentInfo!.fields.set('ProjectName', null);\r\n irdDocumentInfo!.fields.set('ProjectResidentialComplexID', null);\r\n irdDocumentInfo!.fields.set('ProjectResidentialComplexName', null);\r\n if (irdDocObjects!.rows.length > 0) {\r\n ArHelper.ClearCollectionSection(context.card.storeMode, irdDocObjects!);\r\n }\r\n } else {\r\n const docKindID = irdDocumentInfo!.fields.tryGetField('DocKindID')?.$value;\r\n await this.FillNotifyUsersAsync(irdDocNotifyUsers, docKindID, e.fieldValue, context);\r\n }\r\n }\r\n if (e.fieldName === 'ProjectResidentialComplexID' && e.fieldValue !== null) {\r\n if (!Guid.equals(irdDocumentInfo!.fields.tryGetField('ResidentialComplexID')?.$value, e.fieldValue)) {\r\n irdDocumentInfo!.fields.set('ResidentialComplexID', createTypedField(e.fieldValue, DotNetType.Guid));\r\n }\r\n }\r\n if (e.fieldName === 'ProjectResidentialComplexName' && e.fieldValue !== null) {\r\n if (!irdDocumentInfo!.fields.tryGetField('ResidentialComplexName')?.$value !== e.fieldValue) {\r\n irdDocumentInfo!.fields.set('ResidentialComplexName', createTypedField(e.fieldValue, DotNetType.String));\r\n }\r\n }\r\n this.UntilDateUnlimitedControlsOnChangesLogic(context, e.fieldName, e.fieldValue);\r\n });\r\n }\r\n /**Заполнение пользователей по настроечной карточке из вида документа для рассылки уведомлений. */\r\n private async FillNotifyUsersAsync(irdDocNotifyUsers: CardSection | undefined, docKindID: any, residentialComplexID: any, context: ICardUIExtensionContext) {\r\n if (irdDocNotifyUsers?.name !== 'IrdDocNotifyUsers') {\r\n return;\r\n }\r\n\r\n ArHelper.ClearCollectionSection(context.card.storeMode, irdDocNotifyUsers!);\r\n if (residentialComplexID == null || docKindID == null ||\r\n !IrdKindsFieldsSettings.getKindVisibleFields(docKindID).includes(IrdDocumentFieldAliases.NotifyUsers)) {\r\n return;\r\n }\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.IrdGetNotifyUsersRequestID;\r\n request.info[\"KindID\"] = createTypedField(docKindID, DotNetType.Guid);\r\n request.info[\"ResidentialComplexID\"] = createTypedField(residentialComplexID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n context.validationResult.add(response.validationResult.build());\r\n\r\n if (response.validationResult.isSuccessful === true) {\r\n let listUsers = response.info.ListUsers;\r\n\r\n listUsers.forEach(user => {\r\n let newRow = irdDocNotifyUsers?.rows.add();\r\n if (newRow) {\r\n newRow.state = CardRowState.Inserted;\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"UserID\", createTypedField(user.RoleID.$value, DotNetType.Guid));\r\n newRow.set(\"UserName\", createTypedField(user.RoleName.$value, DotNetType.String));\r\n }\r\n });\r\n }\r\n }\r\n /**Заполнение тэпов по виду документа.*/\r\n private async FillTepsAsync(docKindID: any, context: ICardUIExtensionContext) {\r\n let irdDocTEPs = context.card.sections.tryGet(\"IrdDocTEPs\");\r\n ArHelper.ClearCollectionSection(context.card.storeMode, irdDocTEPs!);\r\n\r\n if (docKindID == null ||\r\n !IrdKindsFieldsSettings.getKindVisibleFields(docKindID).includes(IrdDocumentFieldAliases.TEPs)) {\r\n return;\r\n }\r\n\r\n const irdGetTepsByKindRequest = new CardRequest();\r\n irdGetTepsByKindRequest.requestType = PkRequestTypes.IrdGetTepsByKindRequest;\r\n irdGetTepsByKindRequest.info[\"KindID\"] = createTypedField(docKindID, DotNetType.Guid);\r\n\r\n const irdGetTepsByKindResponse = await CardService.instance.request(irdGetTepsByKindRequest);\r\n context.validationResult.add(irdGetTepsByKindResponse.validationResult.build());\r\n\r\n if (irdGetTepsByKindResponse.validationResult.isSuccessful === true) {\r\n let listTeps = irdGetTepsByKindResponse.info.ListTeps;\r\n\r\n var irdDocKindTEPsVirtual = context.card.sections.tryGet(\"IrdDocKindTEPsVirtual\");\r\n ArHelper.ClearCollectionSection(context.card.storeMode, irdDocKindTEPsVirtual!);\r\n\r\n listTeps.forEach(tep => {\r\n let newRow: CardRow = new CardRow();\r\n newRow.state = CardRowState.Inserted;\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"TepID\", createTypedField(tep.EntityID.$value, DotNetType.Guid));\r\n newRow.set(\"TepName\", createTypedField(tep.EntityName.$value, DotNetType.String));\r\n newRow.set(\"DocKindID\", createTypedField(docKindID, DotNetType.Guid));\r\n irdDocKindTEPsVirtual?.rows.add(newRow);\r\n });\r\n }\r\n\r\n // Сформируем новый список ТЭПов для объектов и покажем для выделенной строки\r\n this.ShowTepsBySelectedObject(context);\r\n }\r\n \r\n\r\n private IrdTEPsChangeLogic(context: ICardUIExtensionContext) {\r\n // изменившееся значение из вирт секции IrdDocTEPsInfoVirtual переносим в соответствующую строку IrdDocTEPs\r\n var irdDocTEPsInfoVirtual = context.card.sections.tryGet(\"IrdDocTEPsInfoVirtual\");\r\n var irdDocTEPs = context.card.sections.tryGet(\"IrdDocTEPs\");\r\n\r\n if (!irdDocTEPs || !irdDocTEPsInfoVirtual) {\r\n return;\r\n }\r\n\r\n\r\n const irdDocTEPsInfoListChangeHandler = (e: CardFieldChangedEventArgs) => {\r\n if (!e) {\r\n return;\r\n }\r\n\r\n let srcRow = e.storage;\r\n if (!srcRow) {\r\n return;\r\n }\r\n if (e.fieldName == \"Value\") {\r\n let targetRow = irdDocTEPs?.rows.find(r => r.tryGet(\"ObjectID\") == srcRow.tryGet(\"ObjectID\") && r.tryGet(\"TepID\") == srcRow.tryGet(\"TepID\"));\r\n if (targetRow) {\r\n targetRow.set('Value', createTypedField(srcRow.tryGet(\"Value\"), DotNetType.Decimal));\r\n }\r\n }\r\n\r\n };\r\n PkClientHelper.SubscribeForFieldChanging(irdDocTEPsInfoVirtual, irdDocTEPsInfoListChangeHandler);\r\n }\r\n\r\n\r\n\r\n private ShowTepsBySelectedObject(context: ICardUIExtensionContext) {\r\n\r\n this.CheckOrFillIrdDocTEPs(context);\r\n\r\n let irdObjectsGrid = CdUIHelper.GetUIControl(context, \"IrdObjects\");\r\n let dokKindTepsGrid = CdUIHelper.GetUIControl(context, \"DokKindTeps\");\r\n\r\n if (!irdObjectsGrid || !dokKindTepsGrid) {\r\n return;\r\n }\r\n\r\n dokKindTepsGrid.caption = \"ТЭП\";\r\n dokKindTepsGrid.addButton.setVisibility(Visibility.Collapsed);\r\n dokKindTepsGrid.removeButton.setVisibility(Visibility.Collapsed);\r\n\r\n\r\n let irdDocTEPsInfoVirtual = context.card.sections.tryGet(\"IrdDocTEPsInfoVirtual\");\r\n let irdDocObjects = context.card.sections.tryGet(\"IrdDocObjects\");\r\n let irdDocTEPs = context.card.sections.tryGet(\"IrdDocTEPs\");\r\n\r\n // читска виртуальной таблицы\r\n for (let rowToDelete of irdDocTEPsInfoVirtual!.rows) { rowToDelete.state = CardRowState.Deleted; }\r\n\r\n let selectedObject = irdObjectsGrid?.selectedRow?.row;\r\n if (!selectedObject) {\r\n selectedObject = irdDocObjects?.rows.find(x => x.state != CardRowState.Deleted && x.rowId == irdObjectsGrid?.selectedRow?.rowId);\r\n if (!selectedObject) {\r\n selectedObject = irdDocObjects?.rows.find(x => x.state != CardRowState.Deleted);\r\n }\r\n }\r\n\r\n if (!selectedObject || !selectedObject?.tryGet(\"ObjectID\")) {\r\n return;\r\n }\r\n\r\n dokKindTepsGrid.caption = \"ТЭП: \" + selectedObject?.tryGet(\"ObjectName\");\r\n\r\n let teps = irdDocTEPs?.rows.filter(x => x.state != CardRowState.Deleted && x.tryGet(\"ObjectID\") == selectedObject?.tryGet(\"ObjectID\"))\r\n if (!teps) {\r\n return;\r\n }\r\n\r\n teps!.forEach(objTep => {\r\n \r\n let newRow: CardRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set('ObjectID', createTypedField(objTep.tryGet(\"ObjectID\"), DotNetType.Guid));\r\n newRow.set('ObjectName', createTypedField(objTep.tryGet(\"ObjectName\"), DotNetType.String));\r\n newRow.set('TepID', createTypedField(objTep.tryGet(\"TepID\"), DotNetType.Guid));\r\n //newRow.set('TepDocID', null);\r\n newRow.set('TepName', createTypedField(objTep.tryGet(\"TepName\"), DotNetType.String));\r\n if (objTep.tryGet(\"Value\")) {\r\n newRow.set(\"Value\", createTypedField(objTep.tryGet(\"Value\"), DotNetType.Decimal));\r\n }\r\n else {\r\n newRow.set(\"Value\", null);\r\n }\r\n newRow.state = CardRowState.Inserted;\r\n irdDocTEPsInfoVirtual?.rows.add(newRow);\r\n });\r\n }\r\n\r\n private CheckOrFillIrdDocTEPs(context: ICardUIExtensionContext) {\r\n var irdDocumentInfo = context.card.sections.tryGet(\"IrdDocumentInfo\");\r\n var irdDocObjects = context.card.sections.tryGet(\"IrdDocObjects\");\r\n var irdDocKindTEPsVirtual = context.card.sections.tryGet(\"IrdDocKindTEPsVirtual\");\r\n var irdDocTEPs = context.card.sections.tryGet(\"IrdDocTEPs\");\r\n\r\n let kindID = irdDocumentInfo?.fields.tryGet(\"DocKindID\");\r\n let anyIrdDocKindTEPsVirtual = irdDocKindTEPsVirtual?.rows.find(x => x.state != CardRowState.Deleted);\r\n let anyIrdDocObjects = irdDocObjects?.rows.find(x => x.state != CardRowState.Deleted);\r\n\r\n if (!kindID || !anyIrdDocKindTEPsVirtual || !anyIrdDocObjects) {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, irdDocTEPs!);\r\n return;\r\n }\r\n\r\n // очистим ТЭПы по удаленным объектам и виду (если вид сменился)\r\n for (let rowToDelete of irdDocTEPs!.rows) {\r\n if (!irdDocObjects?.rows.find(x => x.tryGet(\"ObjectID\") == rowToDelete.tryGet(\"ObjectID\")) || rowToDelete.tryGet(\"DocKindID\") != kindID) {\r\n irdDocTEPs!.rows.remove(rowToDelete);\r\n }\r\n }\r\n\r\n // Создадим тэпы по объектам, которых нет в списке \r\n let docObjects = irdDocObjects?.rows.filter(x => x.state != CardRowState.Deleted)\r\n if (!docObjects) {\r\n return;\r\n }\r\n\r\n irdDocObjects?.rows.filter(o => o.state != CardRowState.Deleted)!.forEach(docObject => {\r\n irdDocKindTEPsVirtual?.rows.filter(t => t.state != CardRowState.Deleted)!.forEach(tep => {\r\n if (!irdDocTEPs?.rows.find(x => x.state != CardRowState.Deleted\r\n && x.tryGet(\"TepID\") == tep.tryGet(\"TepID\")\r\n && x.tryGet(\"ObjectID\") == docObject.tryGet(\"ObjectID\")\r\n )) {\r\n var newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set('ObjectID', createTypedField(docObject.tryGet(\"ObjectID\"), DotNetType.Guid));\r\n newRow.set('ObjectName', createTypedField(docObject.tryGet(\"ObjectName\"), DotNetType.String));\r\n newRow.set('TepID', createTypedField(tep.tryGet(\"TepID\"), DotNetType.Guid));\r\n newRow.set('TepName', createTypedField(tep.tryGet(\"TepName\"), DotNetType.String));\r\n newRow.set('DocKindID', createTypedField(tep.tryGet(\"DocKindID\"), DotNetType.Guid));\r\n newRow.set('Value', null);\r\n newRow.state = CardRowState.Inserted;\r\n irdDocTEPs?.rows.add(newRow);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { DotNetType, Guid, createTypedField } from 'tessa/platform';\r\nimport { ButtonViewModel } from 'tessa/ui/cards/controls';\r\nimport { LoadingOverlay, UIContext, showError, showMessage, showNotEmpty } from 'tessa/ui';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\n\r\nexport class ArKonturPoAApiSettingsUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArKonturPoAApiSettingsTypeID)) {\r\n return;\r\n }\r\n \r\n await this.SetAuthorizeButtonClickHandlerAsync(context); \r\n }\r\n \r\n private async SetAuthorizeButtonClickHandlerAsync(context: ICardUIExtensionContext) {\r\n const authorizeButton = context.model.controls.get('ExternAuthorize') as ButtonViewModel;\r\n if (authorizeButton == null) {\r\n return;\r\n }\r\n\r\n authorizeButton.onClick = async () => { \r\n \r\n let deviceCode : string | null = null;\r\n let verificationUriComplete : string | null = null;\r\n let expiresIn : number = 0;\r\n let isSuccessful : boolean = true;\r\n \r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArGetAuthorizationUrlForKonturExtern;\r\n \r\n const response = await CardService.instance.request(request);\r\n \r\n if (!response.validationResult.isSuccessful)\r\n {\r\n await showNotEmpty(response.validationResult.build());\r\n isSuccessful = false;\r\n return;\r\n }\r\n\r\n if (!response.info || response.info.length == 0) {\r\n await showError('Данные для дальнейшей авторизации не получены!');\r\n isSuccessful = false;\r\n return;\r\n }\r\n\r\n if (!response.info.deviceCode || !response.info.deviceCode.$value) {\r\n await showError('Код устройства получен некорректно!');\r\n isSuccessful = false;\r\n return;\r\n }\r\n\r\n deviceCode = response.info.deviceCode.$value;\r\n \r\n if (!response.info.verificationUriComplete || !response.info.verificationUriComplete.$value) {\r\n await showError('Адрес для перенаправления по авторизации получен некорректно!');\r\n isSuccessful = false;\r\n return;\r\n }\r\n\r\n verificationUriComplete = response.info.verificationUriComplete.$value;\r\n\r\n if (!response.info.expiresIn || !response.info.expiresIn.$value) {\r\n await showError('Время жизни кода авторизации получено некорректно!');\r\n isSuccessful = false;\r\n return;\r\n }\r\n\r\n expiresIn = response.info.expiresIn.$value;\r\n\r\n }, 'Получаем данные для авторизации...');\r\n\r\n if (!isSuccessful) {\r\n return;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n window.open(verificationUriComplete as string);\r\n\r\n for (let countOftryes = 0; countOftryes <= 3; countOftryes++) {\r\n await new Promise(r => setTimeout(r, (expiresIn / 3) * 1000));\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArAuthorizeWithKonturExtern;\r\n request.info[\"deviceCode\"] = createTypedField(deviceCode as string, DotNetType.String);\r\n request.info[\"initialAuthorization\"] = createTypedField(true, DotNetType.Boolean);\r\n \r\n const response = await CardService.instance.request(request);\r\n console.log(JSON.stringify(response));\r\n \r\n if (!response.validationResult.isSuccessful)\r\n {\r\n await showNotEmpty(response.validationResult.build());\r\n isSuccessful = false;\r\n return;\r\n }\r\n \r\n if (!!response.info\r\n && !!response.info.isSuccesful\r\n && response.info.isSuccesful.$value === true) {\r\n await showMessage('Готово!');\r\n isSuccessful = true;\r\n return;\r\n } \r\n }\r\n }, 'Авторизация в процессе...');\r\n\r\n \r\n if (!isSuccessful) {\r\n await showError('Истёк срок действия кода авторизации!');\r\n }\r\n\r\n \r\n await UIContext.current.cardEditor?.refreshCard();\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType, createTypedField } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { AutoCompleteEntryViewModel, GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { openCard } from 'tessa/ui/uiHost';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\n\r\nexport class ArPoASettingsUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.ArPoASettingsTypeID)) {\r\n return;\r\n }\r\n\r\n await this.PartnerKckOpenCardHandlerAsync(context);\r\n }\r\n\r\n private async PartnerKckOpenCardHandlerAsync(context: ICardUIExtensionContext) {\r\n const externMappingTable = context.model.controls.get('KonturExternMappingTable') as GridViewModel;\r\n if (externMappingTable == null) {\r\n return;\r\n }\r\n\r\n externMappingTable.rowInitializing.add(async(e) =>{\r\n const kckControl = e.rowModel?.controls.get('ExternKCKOrganizationLinkControl') as AutoCompleteEntryViewModel;\r\n \r\n if (kckControl == null) {\r\n return;\r\n }\r\n\r\n kckControl.openRefAction = async () => {\r\n let partnerExternalID = kckControl.item?.columnValues[1]; //\"KCKPartnerExternalID\";\r\n if (partnerExternalID) {\r\n const infoDict: IStorage = {\r\n 'ExternalID': createTypedField(partnerExternalID, DotNetType.Int64)\r\n };\r\n await openCard({\r\n cardId: Guid.newGuid(),\r\n cardTypeId: CdCardTypes.PkKCKPartnerTypeID,\r\n info: infoDict\r\n });\r\n } else {\r\n const info = {};\r\n await openCard({\r\n cardId: kckControl.item?.reference,\r\n info: info\r\n });\r\n } \r\n };\r\n })\r\n }\r\n}","import { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ButtonViewModel, GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { Card, CardGetMode, CardRow, CardRowState } from 'tessa/cards';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { CardGetRequest, CardNewRequest, CardRequest, CardService, CardStoreRequest } from 'tessa/cards/service';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { createCardModel, IUIContext, showConfirm, showError, showNotEmpty, UIButton } from 'tessa/ui';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\n\r\nexport class PkContractCategoryUIExtension extends CardUIExtension {\r\n\r\n private userID;\r\n \r\n public initialized(context: ICardUIExtensionContext) {\r\n\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkContractCategoryTypeID)) {\r\n return;\r\n }\r\n\r\n this.AvailabilityButtons(context);\r\n this.CopyFromParentContractCategoryButtonLogic(context);\r\n this.CopyToChildContractCategoryButtonLogic(context);\r\n this.DeleteInGroupAndChildContractCategoriesButtonLogic(context);\r\n this.CheckDuplicatePkDepartmentRolesUsersTable(context);\r\n\r\n }\r\n\r\n private AvailabilityButtons(context: ICardUIExtensionContext) {\r\n const copyFromParentContractCategoryButtonControl = CdUIHelper.GetUIControl(context, \"CopyFromParentContractCategoryButton\");\r\n const copyToChildContractCategoryButtonControl = CdUIHelper.GetUIControl(context, \"CopyToChildContractCategoryButton\");\r\n const deleteInGroupAndChildContractCategoriesButtonControl = CdUIHelper.GetUIControl(context, \"DeleteInGroupAndChildContractCategoriesButton\");\r\n \r\n if (!copyFromParentContractCategoryButtonControl\r\n || !copyToChildContractCategoryButtonControl \r\n || !deleteInGroupAndChildContractCategoriesButtonControl) {\r\n return;\r\n }\r\n\r\n copyFromParentContractCategoryButtonControl.isReadOnly = true;\r\n copyToChildContractCategoryButtonControl.isReadOnly = true;\r\n deleteInGroupAndChildContractCategoriesButtonControl.isReadOnly = true;\r\n\r\n const aCCSection = context.model.card.sections.tryGet(\"ArContractCategory\");\r\n if (!aCCSection) {\r\n return;\r\n }\r\n\r\n const parentIDField = aCCSection.fields.tryGet(\"ParentID\");\r\n const isGroupField = aCCSection.fields.tryGet(\"IsGroup\");\r\n\r\n if (parentIDField) {\r\n copyFromParentContractCategoryButtonControl.isReadOnly = false;\r\n }\r\n if (isGroupField == true) {\r\n copyToChildContractCategoryButtonControl.isReadOnly = false;\r\n deleteInGroupAndChildContractCategoriesButtonControl.isReadOnly = false;\r\n }\r\n }\r\n\r\n private CopyFromParentContractCategoryButtonLogic(context: ICardUIExtensionContext) {\r\n const copyFromParentContractCategoryButtonControl = CdUIHelper.GetUIControl(context, \"CopyFromParentContractCategoryButton\");\r\n\r\n if (!copyFromParentContractCategoryButtonControl) {\r\n return;\r\n }\r\n\r\n copyFromParentContractCategoryButtonControl.onClick = async () => {\r\n copyFromParentContractCategoryButtonControl.isReadOnly = true;\r\n const isConfirm = await showConfirm(\"Проверьте настройки участников прав доступа в родительской и дочерних категория. \" +\r\n \"Будет произведен перерасчет, дочерние категории пересчитаются согласно родительской. Продолжить?\",\r\n \"Копировать с родительской категории\");\r\n\r\n if (isConfirm) {\r\n const aCCSection = context.model.card.sections.tryGet(\"ArContractCategory\");\r\n\r\n if (!aCCSection) {\r\n return;\r\n }\r\n \r\n const parentIDField = aCCSection.fields.tryGet(\"ParentID\");\r\n\r\n if(parentIDField) {\r\n this.CopyContractCategoryAsync(context.card.id, parentIDField, context.uiContext);\r\n }\r\n }\r\n\r\n copyFromParentContractCategoryButtonControl.isReadOnly = false;\r\n }\r\n }\r\n\r\n private CopyToChildContractCategoryButtonLogic(context: ICardUIExtensionContext) {\r\n const copyToChildContractCategoryButtonControl = CdUIHelper.GetUIControl(context, \"CopyToChildContractCategoryButton\");\r\n\r\n if (!copyToChildContractCategoryButtonControl) {\r\n return;\r\n }\r\n\r\n copyToChildContractCategoryButtonControl.onClick = async () => {\r\n copyToChildContractCategoryButtonControl.isReadOnly = true;\r\n const isConfirm = await showConfirm(\"Проверьте настройки участников прав доступа в родительской и дочерних категория. \" +\r\n \"Будет произведен перерасчет, дочерние категории пересчитаются согласно родительской. Продолжить?\",\r\n \"Копировать в дочерние\");\r\n\r\n if (isConfirm) {\r\n this.CopyToChildContractCategoryAsync(context);\r\n }\r\n\r\n copyToChildContractCategoryButtonControl.isReadOnly = false;\r\n }\r\n }\r\n\r\n private DeleteInGroupAndChildContractCategoriesButtonLogic(context: ICardUIExtensionContext) {\r\n const deleteInGroupAndChildContractCategoriesButtonControl = CdUIHelper.GetUIControl(context, \"DeleteInGroupAndChildContractCategoriesButton\");\r\n \r\n if (!deleteInGroupAndChildContractCategoriesButtonControl) {\r\n return;\r\n }\r\n deleteInGroupAndChildContractCategoriesButtonControl.onClick = async () => {\r\n deleteInGroupAndChildContractCategoriesButtonControl.isReadOnly = true;\r\n this.ShowDialogAsync(context);\r\n deleteInGroupAndChildContractCategoriesButtonControl.isReadOnly = false;\r\n }\r\n }\r\n\r\n private CheckDuplicatePkDepartmentRolesUsersTable(context: ICardUIExtensionContext) {\r\n const pkDRUTableControl = CdUIHelper.GetUIControl(context, \"PkDepartmentRolesUsersTable\");\r\n\r\n if (!pkDRUTableControl) {\r\n return;\r\n }\r\n\r\n pkDRUTableControl.rowValidating.add(async e => {\r\n const aCCSection = context.model.card.sections.tryGet(\"ArContractCategoryUsers\");\r\n\r\n if (!aCCSection) {\r\n return;\r\n }\r\n\r\n if (e.row.state == CardRowState.Inserted) {\r\n\r\n let usersList = aCCSection!.rows.filter(x => x.rowId != e.row.rowId).map(x => x.tryGet(\"UsersID\"));\r\n let user = e.row.tryGet(\"UsersID\");\r\n if (usersList.some(x => Guid.equals(x, user))) {\r\n e.validationResult.add(ValidationResultType.Error, \"Данный сотрудник уже присутствует в таблице.\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n private async CopyContractCategoryAsync(childID: guid, parentID: guid, uiContext: IUIContext) {\r\n\r\n let card = await this.GetCard(childID);\r\n let parentCard = await this.GetCard(parentID);\r\n \r\n const aCCUParentSection = parentCard.sections.tryGet(\"ArContractCategoryUsers\");\r\n const aCCUDParentSection = parentCard.sections.tryGet(\"ArContractCategoryUsersDepartments\");\r\n const aCCUSection = card.sections.tryGet(\"ArContractCategoryUsers\");\r\n const aCCUDSection = card.sections.tryGet(\"ArContractCategoryUsersDepartments\");\r\n\r\n if (!aCCUSection || !aCCUDSection || !aCCUParentSection || !aCCUDParentSection) {\r\n return;\r\n }\r\n\r\n for (let row of aCCUParentSection.rows) {\r\n\r\n let tempRowID = Guid.newGuid();\r\n let currentUsersList = aCCUSection!.rows.map(x => x.tryGet('UsersID'));\r\n\r\n if (currentUsersList.some(x => Guid.equals(x, row.tryGet('UsersID')))) {\r\n let parentRowIDList = aCCUSection!.rows.filter(x => Guid.equals(x.tryGet('UsersID'), row.tryGet('UsersID'))).map(x => x.tryGet('RowID'));\r\n let parentRowID = parentRowIDList[0];\r\n tempRowID = parentRowID;\r\n }\r\n else {\r\n let newRow = new CardRow();\r\n newRow.rowId = tempRowID;\r\n newRow.set(\"UsersID\", row.get(\"UsersID\"), DotNetType.Guid);\r\n newRow.set(\"UsersName\", row.get(\"UsersName\"), DotNetType.String);\r\n newRow.state = CardRowState.Inserted;\r\n aCCUSection!.rows.push(newRow); \r\n }\r\n\r\n for (let rowDep of aCCUDParentSection!.rows.filter(x => Guid.equals(x.tryGet('ParentRowID'), row.tryGet('RowID'))))\r\n {\r\n var tempParentRowID = Guid.newGuid();\r\n if (aCCUDSection!.rows.filter((x => Guid.equals(x.tryGet('DepartmentID'), rowDep.tryGet('DepartmentID'))\r\n && Guid.equals(x.tryGet('ParentRowID'), tempRowID))).length > 0) {\r\n let parentDepartmentRowIDList = aCCUDSection!.rows.filter(x => Guid.equals(x.tryGet('DepartmentID'), rowDep.tryGet('DepartmentID'))).map(x => x.tryGet('ParentRowID'));\r\n let parentDepartmentRowID = parentDepartmentRowIDList[0];\r\n tempParentRowID = parentDepartmentRowID;\r\n }\r\n else {\r\n let newRowDep = new CardRow();\r\n newRowDep.rowId = tempParentRowID;\r\n newRowDep.set(\"ParentRowID\", tempRowID, DotNetType.Guid);\r\n newRowDep.set(\"DepartmentID\", rowDep.get(\"DepartmentID\"), DotNetType.Guid);\r\n newRowDep.set(\"DepartmentName\", rowDep.get(\"DepartmentName\"), DotNetType.String);\r\n newRowDep.state = CardRowState.Inserted;\r\n aCCUDSection!.rows.push(newRowDep); \r\n }\r\n }\r\n }\r\n\r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = card;\r\n await CardService.instance.store(storeRequest);\r\n \r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null) {\r\n return;\r\n }\r\n await editor!.refreshCard(uiContext);\r\n } \r\n\r\n private async CopyToChildContractCategoryAsync(context: ICardUIExtensionContext) {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetChildContractCategoryRequest;\r\n request.info[\"parentCardID\"] = createTypedField(context.card.id, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n let CCRList = response.info.CCRList;\r\n if(!CCRList) {\r\n return;\r\n }\r\n\r\n for (let CCR of CCRList) {\r\n this.CopyContractCategoryAsync(CCR.childID.$value, CCR.parentID.$value, context.uiContext);\r\n } \r\n }\r\n\r\n private async DeleteInGroupAndChildContractCategories(context: ICardUIExtensionContext) {\r\n\r\n const aCCUSection = context.model.card.sections.tryGet(\"ArContractCategoryUsers\");\r\n const aCCUDSection = context.model.card.sections.tryGet(\"ArContractCategoryUsersDepartments\");\r\n if (!aCCUSection || !aCCUDSection) {\r\n return;\r\n }\r\n let currentUsersList = aCCUSection!.rows.map(x => x.tryGet('UsersID'));\r\n\r\n if (currentUsersList.some(x => Guid.equals(x, this.userID.$value))) {\r\n\r\n // Удаление записи в родителе\r\n let parentRowIDList = aCCUSection!.rows.filter(x => Guid.equals(x.tryGet('UsersID'), this.userID.$value)).map(x => x.tryGet('RowID'));\r\n let parentRowID = parentRowIDList[0];\r\n\r\n let departmentsSectionRow = aCCUDSection!.rows.filter(x => Guid.equals(x.tryGet('ParentRowID'), parentRowID));\r\n departmentsSectionRow.forEach(x => {\r\n x.state = CardRowState.Deleted;\r\n });\r\n\r\n let usersSectionRow = aCCUSection!.rows.filter(x => Guid.equals(x.tryGet('UsersID'), this.userID.$value))\r\n usersSectionRow.forEach(x => {\r\n x.state = CardRowState.Deleted;\r\n });\r\n\r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = context.card;\r\n await CardService.instance.store(storeRequest);\r\n \r\n let uicontext = context.uiContext;\r\n let editor = uicontext.cardEditor;\r\n if (uicontext == null || editor == null) {\r\n return;\r\n }\r\n await editor!.refreshCard(uicontext);\r\n\r\n // Удаление записи в детях\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetChildContractCategoryRequest;\r\n request.info[\"parentCardID\"] = createTypedField(context.card.id, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n let CCRList = response.info.CCRList;\r\n if(!CCRList) {\r\n return;\r\n }\r\n\r\n for (let CCR of CCRList) {\r\n let card = await this.GetCard(CCR.childID.$value);\r\n const aCCUChildSection = card.sections.tryGet(\"ArContractCategoryUsers\");\r\n const aCCUDChildSection = card.sections.tryGet(\"ArContractCategoryUsersDepartments\");\r\n\r\n if (!aCCUChildSection || !aCCUDChildSection) {\r\n return;\r\n }\r\n\r\n try {\r\n let childParentRowIDList = aCCUChildSection!.rows.filter(x => Guid.equals(x.tryGet('UsersID'), this.userID.$value)).map(x => x.tryGet('RowID'));\r\n let childParentRowID = childParentRowIDList[0];\r\n \r\n let childDepartmentsSectionRow = aCCUDChildSection!.rows.filter(x => Guid.equals(x.tryGet('ParentRowID'), childParentRowID));\r\n childDepartmentsSectionRow.forEach(x => {\r\n x.state = CardRowState.Deleted;\r\n });\r\n \r\n let childUsersSectionRow = aCCUChildSection!.rows.filter(x => Guid.equals(x.tryGet('UsersID'), this.userID.$value))\r\n childUsersSectionRow.forEach(x => {\r\n x.state = CardRowState.Deleted;\r\n });\r\n } catch (err) {\r\n continue;\r\n } finally {\r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = card;\r\n await CardService.instance.store(storeRequest);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async ShowDialogAsync(context: ICardUIExtensionContext) {\r\n\r\n this.userID = null;\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n } \r\n const dialogForm = dialogsType.forms.find(x => x.name === 'SelectUser');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n \r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n let success:boolean | any = null;\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {},\r\n [ \r\n new UIButton('$UI_Common_Delete', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n success = true;\r\n let performerID = section.fields.tryGet(\"PerformerID\");\r\n if (performerID == null) {\r\n await showError(\"Поле \\\"Сотрудник\\\" обязательно для заполнения\");\r\n success = false;\r\n }\r\n if (success) {\r\n this.userID = performerID != null ? createTypedField(performerID, DotNetType.Guid) : null;\r\n this.DeleteInGroupAndChildContractCategories(context);\r\n }\r\n }\r\n btn.close();\r\n }),\r\n ],\r\n )\r\n }\r\n\r\n private async GetCard(cardID: guid): Promise {\r\n const request = new CardGetRequest();\r\n request.getMode = CardGetMode.ReadOnly;\r\n request.cardId = cardID;\r\n const response = await CardService.instance.get(request);\r\n return response.card;\r\n }\r\n\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { ArActUIExtension } from './ArActUIExtension';\r\nimport { ArContractUIExtension } from './ArContractUIExtension';\r\nimport { ArEDocumentUIExtension } from './ArEDocumentUIExtension';\r\nimport { ArPacketVirtualUIExtension } from './ArPacketVirtualUIExtension';\r\nimport { ChAssignmentUIExtension } from './ChAssignmentUIExtension';\r\nimport { ChIncommingUIExtension } from './ChIncommingUIExtension';\r\nimport { PkClientDocumentUIExtension } from './PkClientDocumentUIExtension';\r\nimport { PkClientPacketUIExtension } from './PkClientPacketUIExtension';\r\nimport { ChInternalDocumentUIExtension } from './ChInternalDocumentUIExtension';\r\nimport { ChLetterCreditUIExtension } from './ChLetterCreditUIExtension';\r\nimport { ChMemoUIExtension } from './ChMemoUIExtension';\r\nimport { ChOutgoingUIExtension } from './ChOutgoingUIExtension';\r\nimport { ChRdndUIExtension } from './ChRdndUIExtension';\r\nimport { PkPdFillNumberDateUIExtension } from './PkPdFillNumberDateUIExtension';\r\nimport { PkProtocolTenderUIExtension } from './PkProtocolTenderUIExtension';\r\nimport { PkProtocolUIExtension } from './PkProtocolUIExtension';\r\nimport { PkSzAdresseeFillAndReadonly } from './PkSzAdresseeFillAndReadonly';\r\nimport { PkWorkOrderUIExtension } from './PkWorkOrderUIExtension';\r\nimport { ArActSavingUIExtension } from './ArActSavingUIExtension';\r\nimport { PkRecevingDocumentsFromDiadocPluginSettingsUIExtension } from './PkRecevingDocumentsFromDiadocPluginSettingsUIExtension';\r\nimport { ChInstructionUIExtension } from './ChInstructionUIExtension';\r\nimport { ArUnitsOfDiadocUIExtension } from './ArUnitsOfDiadocUIExtension';\r\nimport { ArUsersOfDiadocUIExtension } from './ArUsersOfDiadocUIExtension';\r\nimport { PkPersonalRoleUIExtension } from './PkPersonalRoleUIExtension';\r\nimport { PkRequestForMaterialsUIExtension } from './PkRequestForMaterialsUIExtension';\r\nimport { ArPowerOfAttorneyUIExtension } from './ArPowerOfAttorneyUIExtension';\r\nimport { PkInnerDocumentUIExtension } from './PkInnerDocumentUIExtension';\r\nimport { PkPersonnelDocumentUIExtension } from './PkPersonnelDocumentUIExtension';\r\nimport { PkPersonnelPacketVirtualUIExtension } from './PkPersonnelPacketVirtualUIExtension';\r\nimport { DepartmentRoleUIExtension } from './DepartmentRoleUIExtension';\r\nimport { PkTCOfferUIExtension } from './PkTCOfferUIExtension';\r\nimport { PkArticleStickerUIExtension } from './PkArticleStickerUIExtension';\r\nimport { PkCovenantUIExtension } from './PkCovenantUIExtension';\r\nimport { PkPackageOfOriginalDocumentsUIExtension } from './PkPackageOfOriginalDocumentsUIExtension';\r\nimport { PkMdsSettingsCardUIExtension } from './PkMdsSettingsCardUIExtension';\r\nimport { ArRolePerformersUIExtension } from './ArRolePerformersUIExtension';\r\nimport { PkPartnerExceptionUIExtension } from './PkPartnerExceptionUIExtension';\r\nimport { PkMemoTemplateUIExtension } from './PkMemoTemplateUIExtension';\r\nimport { ArPowerOfAttorneyAuthorityUIExtension } from './ArPowerOfAttorneyAuthorityUIExtension';\r\nimport { ArContractCustomParticipantsUIExtension } from './ArContractCustomParticipantsUIExtension';\r\nimport { ECMPersonalControlUIExtension } from './ECMPersonalControlUIExtension';\r\nimport { ArHeadersBlanksForPowerOfAttorneyUIExtension } from './ArHeadersBlanksForPowerOfAttorneyUIExtension';\r\nimport { ArContractHiddenNotUserChanges } from './ArContractHiddenNotUserChanges';\r\nimport { PkCorrespondenceSendingRequestUIExtension } from './PkCorrespondenceSendingRequestUIExtension';\r\nimport { PkEnvelopeUIExtension } from './PkEnvelopeUIExtension';\r\nimport { PkDocumentRecognitionServiceSettingsCardUIExtension } from './PkDocumentRecognitionServiceSettingsCardUIExtension';\r\nimport { ArContractMatrixRestartFromStageUIExtension } from './ArContractMatrixRestartFromStageUIExtension';\r\nimport { PkSettingsContractorInPerimetrUIExtension } from './PkSettingsContractorInPerimetrUIExtension';\r\nimport { ArFinanceTaxAuthorityRegistrationUIExtension } from './ArFinanceTaxAuthorityRegistrationUIExtension';\r\nimport { PkForceMessageHandlingByJsonUIExtension } from \"./PkForceMessageHandlingByJsonUIExtension\";\r\nimport { IrdDocumentUIExtension } from './IrdDocumentUIExtension';\r\nimport { ArKonturPoAApiSettingsUIExtension } from './ArKonturPoAApiSettingsUIExtension';\r\nimport { ArPoASettingsUIExtension } from './ArPoASettingsUIExtension';\r\nimport { PkContractCategoryUIExtension } from './PkContractCategoryUIExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: ECMPersonalControlUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArActUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractUIExtension, stage: ExtensionStage.AfterPlatform, order: 13});\r\nExtensionContainer.instance.registerExtension({extension: ArEDocumentUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArPacketVirtualUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChAssignmentUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChIncommingUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkClientDocumentUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkClientPacketUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChInternalDocumentUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChLetterCreditUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChMemoUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChOutgoingUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChRdndUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkPdFillNumberDateUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkProtocolTenderUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkProtocolUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkSzAdresseeFillAndReadonly, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkWorkOrderUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArActSavingUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkRecevingDocumentsFromDiadocPluginSettingsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChInstructionUIExtension, stage: ExtensionStage.AfterPlatform, order: 15});\r\nExtensionContainer.instance.registerExtension({extension: ArUnitsOfDiadocUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArUsersOfDiadocUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkPersonalRoleUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkRequestForMaterialsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArPowerOfAttorneyUIExtension, stage: ExtensionStage.AfterPlatform, order: 1000});\r\nExtensionContainer.instance.registerExtension({extension: PkInnerDocumentUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkPersonnelDocumentUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkPersonnelPacketVirtualUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: DepartmentRoleUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkTCOfferUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkArticleStickerUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkCovenantUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkPackageOfOriginalDocumentsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkMdsSettingsCardUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArRolePerformersUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkPartnerExceptionUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkMemoTemplateUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArPowerOfAttorneyAuthorityUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractCustomParticipantsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArHeadersBlanksForPowerOfAttorneyUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractHiddenNotUserChanges, stage: ExtensionStage.AfterPlatform, order: 14});\r\nExtensionContainer.instance.registerExtension({extension: PkCorrespondenceSendingRequestUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkEnvelopeUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkDocumentRecognitionServiceSettingsCardUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractMatrixRestartFromStageUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkSettingsContractorInPerimetrUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArFinanceTaxAuthorityRegistrationUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkForceMessageHandlingByJsonUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: IrdDocumentUIExtension, stage: ExtensionStage.AfterPlatform, order: Number.MAX_VALUE});\r\nExtensionContainer.instance.registerExtension({extension: ArKonturPoAApiSettingsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArPoASettingsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkContractCategoryUIExtension, stage: ExtensionStage.AfterPlatform});\r\n","import fileDialog from \"file-dialog\";\r\nimport { CdFileTypes } from \"src/cdScripts/Helpers/CdFileTypes\";\r\nimport { CardRow, CardRowState } from \"tessa/cards\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { IFile, readFileContentAsBase64 } from \"tessa/files\";\r\nimport { createTypedField, DotNetType, Guid } from \"tessa/platform\";\r\nimport { LoadingOverlay, showError, showMessage } from \"tessa/ui\";\r\nimport { ICardModel } from \"tessa/ui/cards\";\r\nimport { ChFileCategories } from \"./ChFileCategories\";\r\nimport { PkClientHelper } from \"./PkClientHelper\";\r\nimport { PkIncomingKinds } from \"./PkIncomingKinds\";\r\nimport { PkRequestTypes } from \"./PkRequestTypes\";\r\n\r\nexport class PkDocumentRecognitionFileHelper {\r\n\r\n /** Запуск распознавания документа через сервис Correct на стороне сервера\r\n * При успешном запуске добавляем в info AwaitDocumentRecognitionPackageID по которому надо периодически проверять статус.\r\n */\r\n public static async UploadAndRecognizeDocumentStartAsync(model: ICardModel, pagesLimit: number)\r\n { \r\n await fileDialog({multiple: true}).then(async files => {\r\n // выбор количества страниц документа для распознавания\r\n // диалог пока отключаем, если надо будет для каких-то видов варьировать, доработаем\r\n let pagesCount = pagesLimit; // await this.showPagesCountDialog(model, pagesLimit);\r\n if (!pagesCount || pagesCount == 0) return;\r\n\r\n let category = ChFileCategories.Primary;\r\n\r\n const file: File = files[0]; //[i]\r\n \r\n // todo может файл не прикреплять, а резать его на стороне сервера и прикреплять обрезанный?\r\n let tessaFile: IFile = model.fileContainer.createFile(file, \r\n CdFileTypes.DefaultFileType,\r\n category,\r\n file.name);\r\n \r\n model.fileContainer.addFile(tessaFile);\r\n\r\n let fileContent = await readFileContentAsBase64(tessaFile.lastVersion.content!);\r\n if (fileContent) {\r\n console.info('[fileContent]: ' + fileContent.length);\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.DocumentRecognizeStartRequest;\r\n request.info[\"ContentBase64\"] = createTypedField(fileContent, DotNetType.String);\r\n request.info[\"Pages\"] = createTypedField(pagesCount, DotNetType.Int32);\r\n request.info[\"CardID\"] = createTypedField(model.card.id, DotNetType.Guid);\r\n \r\n let response = await CardService.instance.request(request);\r\n \r\n if (!response.validationResult.isSuccessful) {\r\n await showError(response.validationResult.build().toString());\r\n } \r\n\r\n const packageId = response.info[\"PackageID\"];\r\n if (packageId) {\r\n model.card.info[\"CurrentDocumentRecognitionPackageID\"] = packageId;\r\n model.card.info[\"CurrentDocumentRecognitionFileID\"] = tessaFile.id;\r\n }\r\n }, 'Идет обработка запроса по распознаванию документа.');\r\n } \r\n }); \r\n }\r\n\r\n\r\n //** Периодически проверям статус распознавания документа в течение первых 2х минут, записываем результат */\r\n public static async CheckingDocumentRecognitionStatus(model: ICardModel) {\r\n\r\n console.info('Запуск проверки статуса распознавания.');\r\n const error = \"Возникла ошибка при получении результата распознавания документа.\\n\"+\r\n \"Пожалуйста, обратитесь в службу технической поддержки (0911@pik.ru)\";\r\n\r\n showMessage(`Процесс распознавания документа может занять продолжительное время. По окончании операции, данные будут автоматически занесены в карточку. \r\n Пожалуйста, не совершайте никаких действий с документом до окончания распознавания, в противном случае операция будет прервана.`);\r\n new Timer(model, async (model) => {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.DocumentRecognizeCheckStatusRequest;\r\n if (!model.card.info.CurrentDocumentRecognitionPackageID) {\r\n return true;\r\n }\r\n const packageId = model.card.info.CurrentDocumentRecognitionPackageID;\r\n request.info[\"PackageID\"] = packageId; //createTypedField(packageId, DotNetType.String); \r\n request.info[\"CardID\"] = createTypedField(model.card.id, DotNetType.Guid);\r\n\r\n let response = await CardService.instance.request(request);\r\n \r\n if (!response.validationResult.isSuccessful) {\r\n showError(error + \"\\n\" + response.validationResult.build().toString());\r\n return true;\r\n } \r\n\r\n // если во время выполнения запроса уже пришло обновление (таймер асинхронно запускается каждые 5 сек)\r\n if (!model.card.info.CurrentDocumentRecognitionPackageID) {\r\n return true;\r\n }\r\n\r\n let status : RecognitionStatuses | undefined | null = RecognitionStatuses[response.info.Status.$value as keyof typeof RecognitionStatuses];\r\n \r\n if (status == null || status == undefined) {\r\n showError(error + \"\\n\" + \"Не удалось получить статус распознавания документа.\");\r\n return true;\r\n }\r\n\r\n // продолжаем ждать\r\n if (status == RecognitionStatuses.Recognizing) {\r\n return false;\r\n }\r\n\r\n // доумент распознан, записываем полученную инфу\r\n // или если истек срок, но документ был распознан ранее и взят из кэша\r\n if (status == RecognitionStatuses.Recognized || (status == RecognitionStatuses.Expired && response.info[\"CourtDocumentInfo\"])) { \r\n const section = model.card.sections.getOrAdd(\"PkDocumentRecognitionInfo\");\r\n if (!section) {\r\n showError(error + \"\\n\" + \"Отсутствует секция для записи информации по распознаванию документа.\");\r\n return true;\r\n }\r\n \r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n row.set(\"PackageID\", packageId);\r\n row.set(\"FileID\", createTypedField(model.card.info[\"CurrentDocumentRecognitionFileID\"], DotNetType.Guid));\r\n row.set(\"Json\", createTypedField(response.info[\"Json\"].$value, DotNetType.String));\r\n row.set(\"Status\", createTypedField(RecognitionStatuses[status], DotNetType.String));\r\n row.state = CardRowState.Inserted;\r\n section.rows.push(row);\r\n model.card.info[\"CurrentDocumentRecognitionPackageID\"] = null;\r\n model.card.info[\"CurrentDocumentRecognitionFileID\"] = null;\r\n this.FillDocumentInfo(response.info[\"CourtDocumentInfo\"] as Map, model); \r\n return true;\r\n }\r\n \r\n return false;\r\n });\r\n }\r\n\r\n public static async FillDocumentInfo(data: Map, model: ICardModel) { \r\n\r\n const incomingInfoSection = model.card.sections.tryGet(\"PkIncomingInfo\");\r\n const dciSection = model.card.sections.tryGet(\"DocumentCommonInfo\");\r\n const pkDciSection = model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n const pkAddresseesSection = model.card.sections.tryGet(\"PkAddressees\");\r\n incomingInfoSection?.fields.set(\"IsRecognized\", true, DotNetType.Boolean);\r\n incomingInfoSection?.fields.set(\"CourtTypeID\", data[\"CaseTypeID\"] ? data[\"CaseTypeID\"]?.$value : null, DotNetType.Int32);\r\n incomingInfoSection?.fields.set(\"CourtTypeName\", data[\"CaseTypeID\"] ? data[\"CaseTypeName\"]?.$value : null, DotNetType.String);\r\n incomingInfoSection?.fields.set(\"NumberCase\", data[\"CaseNumber\"] ? data[\"CaseNumber\"]?.$value : null, DotNetType.String);\r\n pkDciSection?.fields.set(\"IsMissingOutgoing\", true, DotNetType.Boolean);\r\n pkDciSection?.fields.set(\"IncomingNumber\", data[\"CaseNumber\"] ? data[\"CaseNumber\"]?.$value : null, DotNetType.String);\r\n \r\n // получатель - ответчик\r\n if ((data[\"DefendantID\"] as Array)?.length > 0) {\r\n const defendantDepartmentId = data[\"DefendantDepartmentID\"][0]?.$value;\r\n const defendantDepartmentName = data[\"DefendantDepartmentName\"][0]?.$value;\r\n if (defendantDepartmentId) {\r\n dciSection?.fields.set(\"DepartmentID\", defendantDepartmentId , DotNetType.Guid);\r\n dciSection?.fields.set(\"DepartmentName\", defendantDepartmentName, DotNetType.String);\r\n\r\n // проставляем адресатом вирутального подписанта\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetVirtualSignerByDepartment;\r\n request.info[\"DepartmentID\"] = createTypedField(defendantDepartmentId, DotNetType.Guid);\r\n let response = await CardService.instance.request(request); \r\n if (response.validationResult.isSuccessful && response.info[\"SignerID\"]) {\r\n PkClientHelper.ClearSection(pkAddresseesSection!);\r\n let addrRow = new CardRow();\r\n addrRow.rowId = Guid.newGuid(); \r\n addrRow.set(\"AddresseeID\", createTypedField(response.info[\"SignerID\"]?.$value, DotNetType.Guid));\r\n addrRow.set(\"AddresseeName\", createTypedField(response.info[\"SignerName\"]?.$value, DotNetType.String));\r\n addrRow.set(\"AddresseeDepartmentID\", createTypedField(defendantDepartmentId, DotNetType.Guid));\r\n addrRow.state = CardRowState.Inserted;\r\n pkAddresseesSection?.rows.push(addrRow); \r\n } \r\n }\r\n else {\r\n dciSection?.fields.set(\"DepartmentID\", null);\r\n dciSection?.fields.set(\"DepartmentName\", null);\r\n }\r\n }\r\n\r\n // отправитель - истец или суд, если решение суда или повестка\r\n const documentKindID = incomingInfoSection?.fields.get(\"KindID\");\r\n if (Guid.equals(documentKindID, PkIncomingKinds.JudgementID) || Guid.equals(documentKindID, PkIncomingKinds.AgendaID)) {\r\n if (data[\"CourtContractorID\"]?.$value != null) {\r\n incomingInfoSection?.fields.set(\"PartnerKCKID\", data[\"CourtContractorID\"]?.$value, DotNetType.Guid);\r\n //incomingInfoSection?.fields.set(\"PartnerKCKExternalID\", data[\"CourtContractorExternalID\"]?.$value , DotNetType.Int64);\r\n incomingInfoSection?.fields.set(\"PartnerKCKName\", data[\"CourtContractorName\"]?.$value, DotNetType.String);\r\n }\r\n } \r\n else if ((data[\"PlaintiffID\"] as Array)?.length > 0) {\r\n const id = data[\"PlaintiffID\"][0]?.$value;\r\n const externalId = data[\"PlaintiffExternalID\"][0]?.$value;\r\n const name = data[\"PlaintiffName\"][0]?.$value;\r\n\r\n if (id) {\r\n incomingInfoSection?.fields.set(\"PartnerKCKID\", id, DotNetType.Guid);\r\n incomingInfoSection?.fields.set(\"PartnerKCKExternalID\", externalId, DotNetType.Int64);\r\n incomingInfoSection?.fields.set(\"PartnerKCKName\", name, DotNetType.String);\r\n }\r\n else {\r\n incomingInfoSection?.fields.set(\"PartnerKCKID\", null);\r\n incomingInfoSection?.fields.set(\"PartnerKCKExternalID\", null);\r\n incomingInfoSection?.fields.set(\"PartnerKCKName\", null);\r\n }\r\n }\r\n \r\n // если договор найден, то участники берутся оттуда\r\n if (data[\"ContractID\"]?.$value != null) {\r\n incomingInfoSection?.fields.set(\"ContractCourtID\", data[\"ContractID\"]?.$value , DotNetType.Guid);\r\n incomingInfoSection?.fields.set(\"ContractCourtExtID\", data[\"ContractExtID\"]?.$value , DotNetType.Int64);\r\n incomingInfoSection?.fields.set(\"ContractCourtNumberVirtual\", data[\"ContractName\"]?.$value , DotNetType.String);\r\n }\r\n\r\n incomingInfoSection?.fields.set(\"CourtContractNumber\", data[\"ContractNumber\"] ? data[\"ContractNumber\"]?.$value : null, DotNetType.String);\r\n\r\n\r\n // иначе заполняем из распознанных данных\r\n let pkParticipantsCourtSection = model.card.sections.tryGet(\"PkParticipantsCourt\");\r\n let pkParticipantsCourtRecognizedInfoSection = model.card.sections.tryGet(\"PkParticipantsCourtRecognizedInfo\");\r\n PkClientHelper.ClearSection(pkParticipantsCourtRecognizedInfoSection!);\r\n \r\n if (data[\"ContractID\"]?.$value == null) {\r\n PkClientHelper.ClearSection(pkParticipantsCourtSection!);\r\n }\r\n\r\n let lenDefendant = (data[\"DefendantID\"] as Array)?.length;\r\n if (lenDefendant > 0) {\r\n for (let index = 0; index < lenDefendant; index++) {\r\n if (data[\"ContractID\"]?.$value == null) {\r\n AddRowToParticipantsCourt(index, 'Defendant');\r\n }\r\n AddRowToParticipantsCourtRecognizedInfo(index, 'Defendant');\r\n } \r\n }\r\n\r\n let lenPlaintiff = (data[\"PlaintiffID\"] as Array)?.length;\r\n if (lenPlaintiff > 0) {\r\n for (let index = 0; index < lenPlaintiff; index++) {\r\n if (data[\"ContractID\"]?.$value == null) {\r\n AddRowToParticipantsCourt(index, 'Plaintiff');\r\n }\r\n AddRowToParticipantsCourtRecognizedInfo(index, 'Plaintiff'); \r\n } \r\n }\r\n\r\n let lenPlaintiffRepresentative = (data[\"PlaintiffRepresentativeName\"] as Array)?.length;\r\n if (lenPlaintiffRepresentative > 0) {\r\n for (let index = 0; index < lenPlaintiffRepresentative; index++) { \r\n AddRowToParticipantsCourtRecognizedInfo(index, 'PlaintiffRepresentative'); \r\n } \r\n }\r\n\r\n if (data[\"CourtID\"]?.$value != null) {\r\n incomingInfoSection?.fields.set(\"CourtID\", data[\"CourtID\"]?.$value , DotNetType.Guid);\r\n incomingInfoSection?.fields.set(\"CourtName\", data[\"CourtName\"]?.$value , DotNetType.String);\r\n }\r\n\r\n incomingInfoSection?.fields.set(\"HallNumber\", data[\"HallNumber\"] ? data[\"HallNumber\"]?.$value : null, DotNetType.String);\r\n incomingInfoSection?.fields.set(\"JudgeName\", data[\"JudgeName\"] ? data[\"JudgeName\"]?.$value : null, DotNetType.String);\r\n incomingInfoSection?.fields.set(\"CourtDate\", data[\"SessionDateTime\"] \r\n ? data[\"SessionDateTime\"].$value\r\n : Guid.equals(documentKindID, PkIncomingKinds.JudgementID) && data[\"DocDateConverted\"]\r\n ? data[\"DocDateConverted\"]?.$value\r\n : null, DotNetType.DateTime);\r\n incomingInfoSection?.fields.set(\"CourtSum\", data[\"ClaimSum\"] ? data[\"ClaimSum\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"ClaimSum\", data[\"ClaimSum\"] ? data[\"ClaimSum\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"StateDuty\", data[\"StateDuty\"] ? data[\"StateDuty\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"ExaminationCostsSum\", data[\"ExaminationCostsSum\"] ? data[\"ExaminationCostsSum\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"MoralDamageSum\", data[\"MoralDamageSum\"] ? data[\"MoralDamageSum\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"PostageSum\", data[\"PostageSum\"] ? data[\"PostageSum\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"NotaryCostsSum\", data[\"NotaryCostsSum\"] ? data[\"NotaryCostsSum\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"Fine\", data[\"Fine\"] ? data[\"Fine\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"FinePercentage\", data[\"FinePercentage\"] ? data[\"FinePercentage\"]?.$value.replace(',', '.') : null, DotNetType.Decimal); \r\n incomingInfoSection?.fields.set(\"NotaryCostsSum\", data[\"NotaryCostsSum\"] ? data[\"NotaryCostsSum\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"PenaltySum\", data[\"PenaltySum\"] ? data[\"PenaltySum\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"MainRequirement\", data[\"MainRequirement\"] ? data[\"MainRequirement\"]?.$value.replace(',', '.') : null, DotNetType.Decimal);\r\n incomingInfoSection?.fields.set(\"SolutionResult\", data[\"SolutionResult\"] ? data[\"SolutionResult\"]?.$value : null, DotNetType.String);\r\n incomingInfoSection?.fields.set(\"DocDate\", data[\"DocDateConverted\"] ? data[\"DocDateConverted\"]?.$value : null, DotNetType.DateTime);\r\n incomingInfoSection?.fields.set(\"CourtAddress\", data[\"CourtAddress\"] ? data[\"CourtAddress\"]?.$value : null, DotNetType.DateTime);\r\n \r\n dciSection?.fields.set(\"Subject\", incomingInfoSection?.fields.get(\"KindDocumentKind\") + (data[\"ClaimSubject\"] ? ' '+data[\"ClaimSubject\"].$value : ''), DotNetType.String);\r\n incomingInfoSection?.fields.set(\"KindForASSSD\", true, DotNetType.Boolean);\r\n if (!pkDciSection?.fields.get(\"SheetQuantity\")) {\r\n pkDciSection?.fields.set(\"SheetQuantity\", 1, DotNetType.Int32)\r\n }\r\n showMessage(\"Документ успешно распознан.\");\r\n \r\n function AddRowToParticipantsCourtRecognizedInfo(index: number, role: string) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n const name = data[`${role}NameWithLegalType`] && data[`${role}NameWithLegalType`][index] ? data[`${role}NameWithLegalType`][index].$value : null;\r\n const passport = data[`${role}Passport`] && data[`${role}Passport`][index] ? data[`${role}Passport`][index].$value : null;\r\n const address = data[`${role}Address`] && data[`${role}Address`][index] ? data[`${role}Address`][index].$value : null;\r\n const inn = data[`${role}INN`] && data[`${role}INN`][index] ? data[`${role}INN`][index].$value : null;\r\n const ogrn = data[`${role}OGRN`] && data[`${role}OGRN`][index] ? data[`${role}OGRN`][index].$value : null;\r\n\r\n row.set(\"Role\", createTypedField(role == 'Defendant' ? \"Ответчик\" : (role == 'Plaintiff' ? \"Истец\" : \"Представитель истца\"), DotNetType.String));\r\n row.set(\"Name\", createTypedField(name, DotNetType.String));\r\n row.set(\"Passport\", createTypedField(passport, DotNetType.String));\r\n row.set(\"Address\", createTypedField(address, DotNetType.String));\r\n row.set(\"INN\", createTypedField(inn, DotNetType.String));\r\n row.set(\"OGRN\", createTypedField(ogrn, DotNetType.String));\r\n\r\n row.state = CardRowState.Inserted;\r\n pkParticipantsCourtRecognizedInfoSection!.rows.push(row);\r\n }\r\n\r\n function AddRowToParticipantsCourt(index: number, role: string) {\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n const Id = data[`${role}ID`][index]?.$value;\r\n const externalID = data[`${role}ExternalID`][index]?.$value;\r\n const name = data[`${role}Name`][index]?.$value;\r\n row.set(\"RoleID\", createTypedField(role == 'Defendant' ? 1 : 0, DotNetType.Int32));\r\n row.set(\"RoleName\", createTypedField(role == 'Defendant' ? \"Ответчик\" : \"Истец\", DotNetType.String));\r\n\r\n if (!Id) {\r\n row.set(\"Info\", createTypedField(name.substring(0, 49), DotNetType.String));\r\n row.set(\"PartnerID\", null);\r\n row.set(\"PartnerExternalID\", null);\r\n row.set(\"PartnerName\", null);\r\n }\r\n else {\r\n row.set(\"PartnerID\", createTypedField(Id, DotNetType.Guid));\r\n row.set(\"PartnerExternalID\", createTypedField(externalID, DotNetType.Int64));\r\n row.set(\"PartnerName\", createTypedField(name, DotNetType.String));\r\n row.set(\"Info\", null);\r\n }\r\n\r\n row.state = CardRowState.Inserted;\r\n pkParticipantsCourtSection!.rows.push(row);\r\n }\r\n }\r\n \r\n public static GetDateTimeNow(initialValue, addHours) {\r\n let dateNow = new Date(initialValue);\r\n const userTimezoneOffset = dateNow.getTimezoneOffset() * 60000;\r\n dateNow = new Date(dateNow.getTime() + userTimezoneOffset);\r\n if (!!addHours) {\r\n dateNow.setTime(dateNow.getTime() + (addHours*60*60*1000));\r\n }\r\n let result = dateNow.getFullYear() + \"-\" +\r\n PkDocumentRecognitionFileHelper.ConvertTwoSymbols(dateNow.getMonth() + 1) + \"-\" +\r\n PkDocumentRecognitionFileHelper.ConvertTwoSymbols(dateNow.getDate()) + \"T\" +\r\n dateNow.toLocaleTimeString('ru-RU') + \"Z\";\r\n return result;\r\n }\r\n\r\n private static ConvertTwoSymbols(value) {\r\n if (value.toString().length === 1) {\r\n value = \"0\" + value;\r\n }\r\n return value;\r\n }\r\n}\r\n\r\n//* Запускает таймер, в параметры передаем функцию, которая возвращает bool, если приходит true, то таймер останавливается*/\r\nclass Timer {\r\n constructor(model: ICardModel, func: ((model: ICardModel)=>Promise), public counter = 20, public interval = 5000) {\r\n let isBusy = false;\r\n let intervalId = setInterval(() => {\r\n try {\r\n this.counter = this.counter - 1; \r\n if (model == null) clearInterval(intervalId);\r\n if (this.counter <= 0) {\r\n if(confirm(\"Документ не удалось распознать за отведенное время. Ждать еще 2 минуты?\")) {\r\n this.counter = 20;\r\n }\r\n else {\r\n clearInterval(intervalId);\r\n }\r\n }\r\n if (isBusy) return; \r\n isBusy = true; \r\n func(model).then(result => {\r\n if(result) {\r\n clearInterval(intervalId);\r\n }\r\n isBusy = false;\r\n });\r\n }\r\n catch (e){\r\n showError(\"Возникла ошибка при получении результата распознавания документа.\\n\"+\r\n \"Пожалуйста, обратитесь в службу технической поддержки (0911@pik.ru)\\n\"+e);\r\n clearInterval(intervalId);\r\n }\r\n \r\n }, interval)\r\n }\r\n}\r\n\r\nexport enum RecognitionStatuses\r\n{\r\n NotExists,\r\n Error,\r\n Recognizing,\r\n Recognized,\r\n ReadyForRecognizing,\r\n Created,\r\n Expired\r\n}","import { CardGetExtension, ICardGetExtensionContext } from 'tessa/cards/extensions';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { DotNetType, createTypedField, Guid } from 'tessa/platform';\r\n\r\nexport class PkLetterCreditGetExtension extends CardGetExtension {\r\n\r\n public afterRequest(context: ICardGetExtensionContext) {\r\n if (context == null || context.response == null) return;\r\n\r\n let card = context.response.card;\r\n\r\n if (!Guid.equals(card.typeId, PkCardTypes.PkLetterCreditTypeID)) {\r\n return;\r\n }\r\n\r\n if (context.validationResult != null) {\r\n let tmp = context.validationResult.build();\r\n let isCleared = false;\r\n for (let i = context.validationResult.items.length - 1; i >= 0; i--) {\r\n if (context.validationResult.items[i].details === \"Notification\") {\r\n card.info[\"NotificationComment\"] = createTypedField(context.validationResult.items[i].message, DotNetType.String);\r\n context.validationResult.clear();\r\n isCleared = true;\r\n }\r\n }\r\n if (isCleared) {\r\n for (let item of tmp.items) {\r\n if (item.details !== \"Notification\") {\r\n context.validationResult.add(item.type, item.message, item.fieldName, item.objectName, item.objectType, item.details);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n}","import { CardGetExtension, ICardGetExtensionContext } from 'tessa/cards/extensions';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Guid } from 'tessa/platform';\r\nimport { UIContext } from 'tessa/ui';\r\n\r\nexport class PkPacketGetExtension extends CardGetExtension {\r\n\r\n public afterRequest(context: ICardGetExtensionContext) {\r\n if (context == null || context.response == null) return;\r\n\r\n let card = context.response.card;\r\n\r\n if (!Guid.equals(card.typeId, PkCardTypes.PkPacketVirtualTypeID)) {\r\n return;\r\n }\r\n\r\n if (context.requestIsSuccessful) {\r\n const section = card.sections.tryGet('PkPacketCompositionVirtual');\r\n if (section == null) return;\r\n if (section.rows.length < 1) {\r\n let editor = UIContext.current.cardEditor;\r\n if (editor != null && editor.cardModel != null && editor.cardModel.card != null &&\r\n editor.cardModel.card.typeId === PkCardTypes.PkPacketVirtualTypeID) {\r\n editor.closePending = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n}","import { CardGetExtension, ICardGetExtensionContext } from 'tessa/cards/extensions';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Card } from 'tessa/cards';\r\nimport { WorkspaceStorage } from 'tessa';\r\nimport { Guid, DotNetType } from 'tessa/platform';\r\n\r\nexport class PkRefreshOpenedCardsGetExtension extends CardGetExtension {\r\n\r\n public afterRequest(context: ICardGetExtensionContext) {\r\n if (context == null || context.response == null) {\r\n return;\r\n }\r\n\r\n const card = context.response.card;\r\n\r\n if (!Guid.equals(card.typeId, PkCardTypes.ArActTypeID) &&\r\n !Guid.equals(card.typeId, PkCardTypes.ArEDocumentTypeID) &&\r\n !Guid.equals(card.typeId, PkCardTypes.PkPacketVirtualTypeID) &&\r\n !Guid.equals(card.typeId, PkCardTypes.PkPersonnelDocumentTypeID) &&\r\n !Guid.equals(card.typeId, PkCardTypes.PkPersonnelPacketVirtualTypeID)) {\r\n return;\r\n }\r\n\r\n if (!context.requestIsSuccessful) {\r\n return;\r\n }\r\n\r\n this.RefreshOpenedPacketCard(context);\r\n }\r\n\r\n /** Обновление открытой карточки пакета. */\r\n public RefreshOpenedPacketCard(context: ICardGetExtensionContext) {\r\n // проверяем флаг обновления карточки\r\n if (context.request.info.RefreshingOpenedCard &&\r\n context.request.info.RefreshingOpenedCard.$value === true) {\r\n return;\r\n }\r\n\r\n // получаем ID карточек для обновления\r\n const cardsIDsToRefresh = this.GetCardsIDsToRefresh(context.response!.card);\r\n\r\n // если список пустой - выходим\r\n if (cardsIDsToRefresh == null || cardsIDsToRefresh.length === 0) {\r\n return;\r\n }\r\n\r\n // задаем флаг обновления карточки\r\n const info = {\r\n RefreshingOpenedCard: {$type: DotNetType.Boolean, $value: true}\r\n };\r\n\r\n // пробегаемся по ID карточек\r\n for (const cardIDToRefresh of cardsIDsToRefresh) {\r\n // получаем вкладку с пакетом\r\n const packetWorkPlace = WorkspaceStorage.instance.tryGetCardByCardId(cardIDToRefresh);\r\n\r\n // если нет открытой вкладки - выходим\r\n if (packetWorkPlace == null) {\r\n continue;\r\n }\r\n\r\n // обновляем карточку пакета\r\n packetWorkPlace.editor.refreshCard(packetWorkPlace.editor.context, info);\r\n }\r\n }\r\n\r\n /** Получение ID карточек для обновления в зависимости от типа карточки. */\r\n private GetCardsIDsToRefresh(card: Card): string[] | null {\r\n // для ЭД / ПД возвращаем ID карточки пакета\r\n if (card.typeId === PkCardTypes.ArActTypeID ||\r\n card.typeId === PkCardTypes.ArEDocumentTypeID) {\r\n // получаем секцию\r\n const pkdciSection = card.sections.tryGet(\"PkDiadocCommonInfo\");\r\n\r\n // выходим, если секции нет\r\n if (pkdciSection == null) {\r\n return null;\r\n }\r\n\r\n // получаем ID пакета\r\n const packetID = pkdciSection.fields.tryGet(\"PacketId\");\r\n\r\n // выходим, если ID пакета пустой\r\n if (packetID == null) {\r\n return null;\r\n }\r\n\r\n return new Array(packetID);\r\n }\r\n\r\n // для КД возвращаем ID карточки пакета кадровых документов\r\n if (card.typeId === PkCardTypes.PkPersonnelDocumentTypeID) {\r\n // получаем секцию\r\n const pkpdiSection = card.sections.tryGet(\"PkPersonnelDocumentInfo\");\r\n\r\n // выходим, если секции нет\r\n if (pkpdiSection == null) {\r\n return null;\r\n }\r\n\r\n // получаем ID пакета\r\n const packetID = pkpdiSection.fields.tryGet(\"PacketID\");\r\n\r\n // выходим, если ID пакета пустой\r\n if (packetID == null) {\r\n return null;\r\n }\r\n\r\n return new Array(packetID);\r\n }\r\n\r\n // для карточки пакета возвращаем список ID карточек ЭД / ПД\r\n if (card.typeId === PkCardTypes.PkPacketVirtualTypeID) {\r\n // получаем секцию\r\n const pkpcvSection = card.sections.tryGet(\"PkPacketCompositionVirtual\");\r\n\r\n // выходим, если секции нет\r\n if (pkpcvSection == null) {\r\n return null;\r\n }\r\n\r\n // получаем ID карточек документов пакета\r\n const docIDs = pkpcvSection.rows\r\n .map(x => x.tryGet(\"DocID\"))\r\n .filter(x => x != null);\r\n\r\n return docIDs;\r\n }\r\n\r\n // для карточки пакета возвращаем список ID карточек ЭД / ПД\r\n if (card.typeId === PkCardTypes.PkPersonnelPacketVirtualTypeID) {\r\n // получаем секцию\r\n const pkppcvSection = card.sections.tryGet(\"PkPersonnelPacketCompositionVirtual\");\r\n\r\n // выходим, если секции нет\r\n if (pkppcvSection == null) {\r\n return null;\r\n }\r\n\r\n // получаем ID карточек документов пакета\r\n const docIDs = pkppcvSection.rows\r\n .map(x => x.tryGet(\"DocID\"))\r\n .filter(x => x != null);\r\n\r\n return docIDs;\r\n }\r\n\r\n return null;\r\n }\r\n}","import { CardGetExtension, ICardGetExtensionContext } from 'tessa/cards/extensions';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { PkDocumentRecognitionFileHelper } from 'src/pkScripts/Helpers/PkDocumentRecognitionFileHelper';\r\n\r\nexport class PkIncomingGetExtension extends CardGetExtension {\r\n\r\n public afterRequest(context: ICardGetExtensionContext) {\r\n if (context == null || context.response == null) return;\r\n\r\n let card = context.response.card;\r\n\r\n if (!Guid.equals(card.typeId, PkCardTypes.PkIncomingTypeID)) {\r\n return;\r\n }\r\n\r\n if (context.requestIsSuccessful) {\r\n const incomingInfoSection = card.sections.tryGet('PkIncomingInfo');\r\n if (incomingInfoSection == null) return;\r\n\r\n const courtDate = incomingInfoSection.fields.tryGet(\"CourtDate\");\r\n if (!!courtDate)\r\n {\r\n incomingInfoSection.fields.rawSet(\"CourtDate\", createTypedField(PkDocumentRecognitionFileHelper.GetDateTimeNow(courtDate, 3), DotNetType.DateTime));\r\n }\r\n }\r\n }\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { PkLetterCreditGetExtension } from './PkLetterCreditGetExtension';\r\nimport { PkPacketGetExtension } from './PkPacketGetExtension';\r\nimport { PkRefreshOpenedCardsGetExtension } from './PkRefreshOpenedCardsGetExtension';\r\nimport { PkIncomingGetExtension } from './PkIncomingGetExtension';\r\n\r\n\r\nExtensionContainer.instance.registerExtension({extension: PkLetterCreditGetExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkPacketGetExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkRefreshOpenedCardsGetExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkIncomingGetExtension, stage: ExtensionStage.AfterPlatform});","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType, createTypedField } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { openCard, showViewsDialog } from 'tessa/ui/uiHost';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { CardRow, CardRowState } from 'tessa/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class ArTableUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!(\r\n Guid.equals(context.model.card.typeId, PkCardTypes.ArActTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.ArEDocumentTypeID)\r\n )) {\r\n return;\r\n }\r\n // Акт\r\n let aapvSection = context.model.card.sections.tryGet('ArActPartnersVirtual');\r\n if (aapvSection != null) {\r\n let refsTable = context.model.controls.get('DocumentsIDPPartners') as GridViewModel;\r\n if (refsTable != null) {\r\n refsTable.rowInitializing.add(async e => {\r\n let partnerExternalID = e.row.get(\"PartnerExternalID\");\r\n const infoDict: IStorage = {\r\n 'ExternalID': createTypedField(partnerExternalID, DotNetType.Int64)\r\n };\r\n await openCard({\r\n cardId: Guid.newGuid(),\r\n cardTypeId: CdCardTypes.PkKCKPartnerTypeID,\r\n info: infoDict\r\n });\r\n e.cancel = true;\r\n return;\r\n });\r\n refsTable.rowAdding.add(async e => {\r\n if (aapvSection == null) return;\r\n await showViewsDialog(\r\n 'PkKCKPartners',\r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n let selectedItem = value;\r\n\r\n if (selectedItem == null\r\n || selectedItem.selectedRow == null\r\n || aapvSection == null) {\r\n e.cancel = true;\r\n return;\r\n }\r\n \r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n let category = selectedItem.selectedRow.get(\"PartnerCategory\");\r\n if (category == null) row.set(\"Category\", null);\r\n else row.set(\"Category\", createTypedField(category, DotNetType.String));\r\n let inn = selectedItem.selectedRow.get(\"PartnerINN\");\r\n if (inn == null) row.set(\"INN\", null);\r\n else row.set(\"INN\", createTypedField(inn, DotNetType.String));\r\n row.set(\"IsVirtual\", createTypedField(false, DotNetType.Boolean));\r\n let partner = selectedItem.selectedRow.get(\"PartnerName\");\r\n if (partner == null) row.set(\"Partner\", null);\r\n else row.set(\"Partner\", createTypedField(partner, DotNetType.String));\r\n let partnerExternalID = selectedItem.selectedRow.get(\"PartnerExternalID\");\r\n if (partnerExternalID == null) row.set(\"PartnerExternalID\", null);\r\n else row.set(\"PartnerExternalID\", createTypedField(partnerExternalID, DotNetType.Int64));\r\n let partnerFullName = selectedItem.selectedRow.get(\"PartnerFullName\");\r\n if (partnerFullName == null) row.set(\"PartnerFullName\", null);\r\n else row.set(\"PartnerFullName\", createTypedField(partnerFullName, DotNetType.String));\r\n let partnerID = selectedItem.selectedRow.get(\"PartnerID\");\r\n if (partnerID == null) row.set(\"PartnerID\", null);\r\n else row.set(\"PartnerID\", createTypedField(partnerID, DotNetType.Guid));\r\n let partnerINN = selectedItem.selectedRow.get(\"PartnerINN\");\r\n if (partnerINN == null) row.set(\"PartnerINN\", null);\r\n else row.set(\"PartnerINN\", createTypedField(partnerINN, DotNetType.String));\r\n \r\n row.state = CardRowState.Inserted;\r\n aapvSection.rows.push(row);\r\n \r\n e.cancel = true;\r\n }\r\n );\r\n });\r\n }\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Guid, Visibility } from 'tessa/platform';\r\n\r\nexport class ChArStateHideUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!(\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkOutgoingTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkMemoTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkIncomingTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkDocVisionProtocolTypeID)\r\n )) {\r\n return;\r\n }\r\n\r\n let arStateControl = context.model.controls.get('ArStateControl');\r\n if (arStateControl == null) return;\r\n\r\n const pkdciSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pkdciSection == null) return;\r\n if (pkdciSection.fields.tryGet(\"DVID\") != null) {\r\n arStateControl.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Guid } from 'tessa/platform';\r\nimport { ChUIHelper } from './ChUIHelper';\r\n\r\nexport class ChCaseNomenclatureUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkCaseNewTypeID)) {\r\n return;\r\n }\r\n\r\n // Связка полей \"дело\" и \"дело верхнего уровня\"\r\n ChUIHelper.BundleCaseNomenclature(context);\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class PkAddVirtualFileUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.PkExecutiveDocumentationTypeID)) {\r\n return;\r\n }\r\n\r\n // TODO сделать, небыло в вебе\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class PkCardGridViewsUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.TechnicalDocumentationTypeID)) {\r\n return;\r\n }\r\n\r\n // TODO вроде небыло в вебе\r\n }\r\n}","export class PkCardPreviewHelper {\r\n /// \r\n /// Призкак работы предпросмотра\r\n /// \r\n public static readonly ShowPreview = true;\r\n \r\n /// \r\n /// Максимальный размер файла для отображения в превью (в байтах)\r\n /// \r\n public static readonly FileSize = 256 * 1024;\r\n \r\n /// \r\n /// Форматы допустимых файлов для отображения в превью\r\n /// \r\n public static readonly FileFormats = \r\n [\r\n \"png\",\r\n \"jpg\",\r\n \"jpeg\",\r\n \"htm\",\r\n \"html\",\r\n \"txt\",\r\n \"tif\",\r\n \"tiff\",\r\n \"pdf\",\r\n ];\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { createCardFileContainer, createCardFileSourceForCard, showNotEmpty } from 'tessa/ui';\r\nimport { IFile } from 'tessa/files';\r\nimport { FilePreviewViewModel } from 'tessa/ui/cards/controls';\r\nimport { Card } from 'tessa/cards';\r\nimport { PkCardPreviewHelper } from '../Helpers/PkCardPreviewHelper';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { Guid } from 'tessa/platform';\r\nimport { ChFileCategories } from '../Helpers/ChFileCategories';\r\nimport { CdApprovalListHelper } from 'src/cdScripts/Helpers/CdApprovalListHelper';\r\n\r\nexport class PkCardPreviewUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null || context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!context || !(context.card)) {\r\n return;\r\n }\r\n\r\n // получаем id карточки из выбранной строки\r\n let card: Card;\r\n if (context == null\r\n || (card = context.card) == null) {\r\n return;\r\n }\r\n\r\n const fileSource = createCardFileSourceForCard(card);\r\n const fileContainer = createCardFileContainer(fileSource);\r\n await fileContainer.init();\r\n let file: IFile | undefined;\r\n\r\n if(!fileContainer.files || fileContainer.files.length == 0){\r\n return;\r\n }\r\n file = fileContainer.files.find(x => { \r\n let ext = x.getExtension().toLowerCase();\r\n let availableInPreview = x.size <= PkCardPreviewHelper.FileSize && x.size > 0 && PkCardPreviewHelper.FileFormats.some(f => ext == f.toLowerCase());\r\n let availableForType = !Guid.equals(context.card.typeId, CdCardTypes.ArContractTypeID) || x.category?.id == ChFileCategories.Primary.id || x.name == CdApprovalListHelper.ApprovalListFileName;\r\n return availableInPreview && availableForType;\r\n });\r\n if(!file){\r\n return;\r\n }\r\n if(!context.model || !context.model.controls || !context.model.previewManager){\r\n return;\r\n }\r\n let view = context.model.controls.get('View') as FilePreviewViewModel;\r\n if (view && file) {\r\n let loadResult = await file.ensureContentLoaded();\r\n await showNotEmpty(loadResult);\r\n if (loadResult.isSuccessful)\r\n {\r\n view.fileControlManager.showPreview(file);\r\n } \r\n } \r\n // context.model.previewManager.enabled = true;\r\n // context.model.previewManager.showPreview(file);\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class PkContractFilesVirtualUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.TechnicalDocumentationTypeID)) {\r\n return;\r\n }\r\n\r\n // TODO вроде небыло в вебе\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardFile,CardFileState} from \"tessa/cards\";\r\nimport { FileListViewModel, FileTagViewModel } from 'tessa/ui/cards/controls';\r\nimport {CdEDSHelper} from '../../cdScripts/Helpers/CdEDSHelper';\r\n\r\nexport class AddSignedIconToVirtualFilesUIExtension extends CardUIExtension {\r\n \r\n public initialized(context: ICardUIExtensionContext)\r\n {\r\n if (!context.model || !context.model.card) \r\n {\r\n return;\r\n }\r\n\r\n let filesFileControl = context.model.controls.get('Files') as FileListViewModel;\r\n let approvalListFileControl = context.model.controls.get('FilesAdditional') as FileListViewModel;\r\n\r\n if (filesFileControl == null || approvalListFileControl == null) {\r\n return;\r\n }\r\n\r\n let card = context.model.card;\r\n for (let i = 0; i < card.files.length; i++) {\r\n let file: CardFile = card.files[i];\r\n if (file.state === CardFileState.Deleted || \r\n file.name.toLowerCase() === 'история согласования.html' ||\r\n file.isVirtual == false) continue; \r\n\r\n let fileViewModel = filesFileControl.files.find(x=>x.id === file.card.id);\r\n if (fileViewModel==null) continue;\r\n\r\n CdEDSHelper.CheckSignFile(file.versionRowId).then( result => \r\n {\r\n if (result !== null && result === false) return;\r\n fileViewModel!.tag = new FileTagViewModel(\"ta icon-thin-236\");\r\n }); \r\n \r\n }\r\n } \r\n\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { DotNetType, Guid, Visibility, createTypedField} from 'tessa/platform';\r\nimport { ButtonViewModel} from 'tessa/ui/cards/controls';\r\nimport { Card, CardPermissionFlags, CardRowsListener} from 'tessa/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { ArFileHelper } from 'src/pkScripts/Helpers/ArFileHelper';\r\nimport { ECMDefaultCardTypes } from 'src/comfortScripts/helpers/ComfortCardTypes';\r\nimport { PkContractUIHelper } from '../Helpers/PkContractUIHelper';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { TessaArContractKinds } from '../Helpers/PkPrimaryDocsHelper';\r\nimport { showError } from 'tessa/ui';\r\nimport { CardRequest } from 'tessa/cards/service/cardRequest';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { CardService } from 'tessa/cards/service/cardService';\r\nimport { ArContractTypes } from '../Helpers/PkEnums';\r\n\r\n/*\r\nРасширение кнопки Создать файл из КД для карточек договоров ГК и Договоров и Доп. соглашений ПИКК\r\n*/\r\nexport class ArDocumentConstructorUIExtension extends CardUIExtension {\r\n\r\n private disposer: Function | null = null;\r\n private _listener: CardRowsListener | null;\r\n public selectedRow: ReadonlyMap | null; \r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArContractTypeID) \r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ContractTypeID)\r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMContractDocumentTypeID)\r\n && !Guid.equals(context.model.card.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)\r\n && !Guid.equals(context.model.card.typeId, CdCardTypes.ArPowersOfAttorneyAuthorityTypeID)\r\n && !Guid.equals(context.model.card.typeId, PkCardTypes.PkOutgoingTypeID)) {\r\n return;\r\n }\r\n\r\n if (this._listener) {\r\n this._listener.stop();\r\n }\r\n \r\n this.FromDragAndDropLogicAsync(context);\r\n await this.FromFileButtonControlLogicAsync(context);\r\n await this.FromCDButtonControlLogicAsync(context);\r\n }\r\n\r\n /// \r\n /// Проверка на возможность загрузки файла АНТП через перетаскивание файла\r\n /// \r\n private FromDragAndDropLogicAsync(context: ICardUIExtensionContext)\r\n {\r\n context.fileContainer.containerFileChanging.add((e)=>{\r\n if(e.added != null && !ArFileHelper.IfCanUploadFileForCategory(context.model, e.added.category!)){\r\n e.cancel = true;\r\n }\r\n });\r\n }\r\n\r\n /** Обработчик кнопки 'Загрузить файлы'. */\r\n private async FromFileButtonControlLogicAsync(context: ICardUIExtensionContext){\r\n const btnCreate = CdUIHelper.GetUIControl(context, \"FromFileButtonControl\");\r\n if (!btnCreate) {\r\n return;\r\n }\r\n \r\n // для всех карточек кроме договорных и доверенности (на вебе в собственном UI расширении) видимость кнопок настраивается в настроечных карточках UI\r\n if (PkCardTypes.PkContractCardTypes.some(x => Guid.equals(context.card.typeId, x))) {\r\n let visible = Guid.equals(context.card.typeId, CdCardTypes.ArContractTypeID) \r\n ? (context.card.permissions.cardPermissions & CardPermissionFlags.AllowInsertFile)!=0 \r\n && (context.card.permissions.cardPermissions & CardPermissionFlags.ProhibitInsertFile)==0\r\n : ArFileHelper.IsFsButtonCanExecute(context.model.card);\r\n \r\n if (visible) {\r\n btnCreate.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n btnCreate.controlVisibility = Visibility.Hidden;\r\n \r\n return;\r\n } \r\n }\r\n\r\n btnCreate.onClick = async() => { \r\n if (PkCardTypes.PkContractCardTypes.some(x => Guid.equals(context.card.typeId, x)))\r\n {\r\n if (!ArFileHelper.IsFsButtonCanExecute(context.model.card))\r\n {\r\n return;\r\n }\r\n\r\n var isHistorical = PkContractUIHelper.IsLocked(context.model.card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n }\r\n await ArFileHelper.AddFileFromFsAsync(context.model);\r\n };\r\n }\r\n\r\n /** Обработчик кнопки 'Создать файл из КД'. */\r\n private async FromCDButtonControlLogicAsync(context: ICardUIExtensionContext){\r\n context.model.card.info['IsCantSendToCd'] = false;\r\n const btnCreate = CdUIHelper.GetUIControl(context, \"FromCDButtonControl\");\r\n if (!btnCreate){\r\n return;\r\n }\r\n\r\n if (PkCardTypes.PkContractCardTypes.some(x => Guid.equals(context.card.typeId, x))) {\r\n \r\n let visible = Guid.equals(context.model.card.typeId, CdCardTypes.ArContractTypeID) \r\n ? (context.card.permissions.cardPermissions & CardPermissionFlags.AllowInsertFile)!=0 \r\n && (context.card.permissions.cardPermissions & CardPermissionFlags.ProhibitInsertFile)==0\r\n : ArFileHelper.IsCdButtonVisibleByState(context.model.card);\r\n if (visible)\r\n {\r\n btnCreate.controlVisibility = Visibility.Visible;\r\n }\r\n else\r\n {\r\n btnCreate.controlVisibility = Visibility.Hidden;\r\n \r\n return;\r\n }\r\n }\r\n\r\n btnCreate.onClick = async() =>\r\n { \r\n if (PkCardTypes.PkContractCardTypes.some(x => Guid.equals(context.card.typeId, x)))\r\n {\r\n if (!ArFileHelper.IsCdButtonCanExecute(context.model.card))\r\n {\r\n return;\r\n }\r\n\r\n var isHistorical = ArFileHelper.CheckIsHistorical(context.model.card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n } \r\n\r\n if(await this.IsContractHasObjectAsync(context.card))\r\n {\r\n await ArFileHelper.AddFileFromCdAsync(context.uiContext, context.model, context.model.card);\r\n }\r\n };\r\n }\r\n\r\n /** Проверка наличия объекта у ИДП договора. */\r\n private async IsContractHasObjectAsync(card: Card)\r\n {\r\n let acu = card.sections.tryGet(\"ArContractsUser\");\r\n let acp = card.sections.tryGet(\"ArContractPartners\");\r\n let acai = card.sections.tryGet(\"ArContractArticleIdp\");\r\n if (acu \r\n && acu.fields.tryGet(\"ContractKindID\") != TessaArContractKinds.AssignmentKindTessaID // не уступка\r\n && !PkContractUIHelper.HasGuidCrm(card) // не CRM договор\r\n && acp?.rows.find(x => x.tryGet(\"ContractCategoryIsOIDP\") == true) // с признаком ИДП\r\n && (acu.fields.tryGet(\"ContractTypeID\") === ArContractTypes.Main || acu.fields.tryGet(\"ContractTypeID\") === ArContractTypes.Tariff) // договор основной или тарифный\r\n && (!acai || acai && (acai.rows.length == 0 || acai.rows.find(x => x.tryGet(\"ObjectID\") == null))) // нет объекта\r\n ) \r\n {\r\n let error = \"Для создания документа из КД необходимо добавить в договоре объект ИДП. При добавлении нескольких объектов ИДП в договор невозможно получение расчета ПДЦ и Акта\";\r\n\r\n let parentCardID = acu.fields.tryGet(\"ParentCardID\");\r\n if (parentCardID == null) // не дочерний документ\r\n {\r\n await showError(error);\r\n return false;\r\n }\r\n else if (parentCardID != null) // если договор дочерний, проверяем наличие объекта в родительском.\r\n {\r\n var request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetFieldValue;\r\n request.info[\"TableName\"] = createTypedField(\"ArContractArticleIdp\", DotNetType.String);\r\n request.info[\"FieldName\"] = createTypedField(\"ObjectID\", DotNetType.String);\r\n request.info[\"ID\"] = createTypedField(parentCardID, DotNetType.Guid); \r\n\r\n let response = await CardService.instance.request(request);\r\n \r\n if (response.info.tryGet(\"Value\") == null)\r\n {\r\n await showError(error);\r\n return false;\r\n } \r\n } \r\n }\r\n\r\n return true;\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this.disposer) {\r\n this.disposer();\r\n this.disposer = null;\r\n }\r\n if (this._listener) {\r\n this._listener.stop();\r\n this._listener = null;\r\n }\r\n }\r\n}\r\n\r\n","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, Visibility } from 'tessa/platform';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkUISettingsSharedHelper, UISettings } from '../Helpers/PkUISettingsSharedHelper';\r\nimport { ArHelper } from '../helpers/ArHelper';\r\n\r\n/*\r\nРасширение для карточек Настройки UI (папка Админ\\прочее)\r\nВ карточках Настроек UI можно задать простые условия для видимости контролов в зависимости от выбранного значения в другом контроле.\r\n*/\r\nexport class PkUISettingsUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!PkCardTypes.PkUISettingsEnabledCardTypes.some(x => Guid.equals(context.model.card.typeId, x))) {\r\n return;\r\n }\r\n\r\n var uiSettingsJson = context.card.info[\"UISettings\"];\r\n if (!uiSettingsJson || !uiSettingsJson.$value)\r\n {\r\n return;\r\n }\r\n \r\n let uiSettings = JSON.parse(uiSettingsJson.$value) as Array;\r\n\r\n // todo для потенциально большого количества настроек UI лучше сделать группировку по секциям для избежания добавления лишних хэндлеров\r\n uiSettings.forEach(async (uiSettingsGroup) => {\r\n \r\n // расчет свойств контролов при открытии\r\n this.evaluateControlsSettings(uiSettingsGroup, context);\r\n \r\n // подписываем расчет свойств контролов на изменение секций из условий\r\n uiSettingsGroup.Conditions.forEach(condition => {\r\n let section = context.model.card.sections.get(condition.SectionName);\r\n if (section == null) return;\r\n section.fields.fieldChanged.add(async e =>\r\n {\r\n if (e.fieldName != condition.FieldName) {\r\n return;\r\n }\r\n\r\n this.evaluateControlsSettings(uiSettingsGroup, context);\r\n });\r\n }) \r\n });\r\n }\r\n\r\n private evaluateControlsSettings(uiSettingsGroup: UISettings, context: ICardUIExtensionContext) {\r\n let conditionsSatisfied = PkUISettingsSharedHelper.EvaluateConditions(uiSettingsGroup, context.model.card);\r\n uiSettingsGroup.ControlSettings.forEach(x => {\r\n let control = context.model.controls.get(x.ControlName);\r\n let block = context.model.blocks.get(x.ControlName);\r\n if (!(control || block)) {\r\n return;\r\n }\r\n\r\n // условия выполнены и флаг \"видимый\" => открываем, условия НЕ выполнены и флаг \"невидимый\" => тоже открываем\r\n // условия выполнены и флаг \"невидимый\" => скрываем, условия НЕ выполнены и флаг \"видимый\" => тоже скрываем \r\n if (x.CheckVisible) {\r\n if (control)\r\n control.controlVisibility = conditionsSatisfied == (x.Visible ?? false) ? Visibility.Visible : Visibility.Collapsed;\r\n else if (block)\r\n block.blockVisibility = conditionsSatisfied == (x.Visible ?? false) ? Visibility.Visible : Visibility.Collapsed;\r\n } \r\n\r\n if (!control) {\r\n return\r\n }\r\n\r\n if (x.CheckEdit) {\r\n control.isReadOnly = conditionsSatisfied != (x.AllowEdit ?? false);\r\n } \r\n \r\n if (x.CheckRequired) {\r\n control.isRequired = conditionsSatisfied == (x.Required ?? false);\r\n } \r\n\r\n if (x.ActiveValidation == true) {\r\n // добавляем валидацию (красную рамку) на текстовый контрол\r\n control.hasActiveValidation = conditionsSatisfied;\r\n control.validationFunc = c =>\r\n conditionsSatisfied && c.hasEmptyValue\r\n ? \"Необходимо заполнить поле\"\r\n : null;\r\n }\r\n });\r\n\r\n // реализуем пока только очищение поля и только для строковой секции!!!\r\n uiSettingsGroup.SectionSettings.forEach(x => {\r\n if (!x.CheckValue) {\r\n return;\r\n } \r\n\r\n let section = context.model.card.sections.get(x.Section); \r\n if (!section) {\r\n return;\r\n } \r\n\r\n if ((x.CleanValueIfConditionsSatisfied ?? false) == conditionsSatisfied) {\r\n if (x.Field) {\r\n section.fields.set(x.Field, null);\r\n }\r\n else {\r\n ArHelper.ClearCollectionSection(context.model.card.storeMode, section);\r\n }\r\n }\r\n });\r\n }\r\n}","import { Card } from \"tessa/cards\";\r\n\r\nexport class PkUISettingsSharedHelper {\r\n\r\n public static EvaluateConditions(uISettingsGroup: UISettings, card : Card) : boolean\r\n {\r\n let conditionsSatisfied : boolean = true;\r\n for (let index = 0; index < uISettingsGroup.Conditions.length; index++) {\r\n const item = uISettingsGroup.Conditions[index];\r\n const section = card.sections.get(item.SectionName);\r\n let fieldValue : any = null;\r\n \r\n if (section && item.FieldName) {\r\n fieldValue = section.fields.get(item.FieldName);\r\n }\r\n\r\n if (!item.FieldName) {\r\n if (item.Values[0].toLowerCase() == \"null\" && section && section!.rows.length > 0) {\r\n conditionsSatisfied = false;\r\n break;\r\n }\r\n\r\n if (item.Values[0].toLowerCase() == \"notnull\" && (!section || section!.rows.length == 0)) {\r\n conditionsSatisfied = false;\r\n break;\r\n }\r\n }\r\n\r\n else if (fieldValue == null) {\r\n if (item.Values.length == 0) {\r\n continue;\r\n }\r\n else if (item.Values[0].toLowerCase() === \"null\") {\r\n continue;\r\n }\r\n else {\r\n conditionsSatisfied = false;\r\n break;\r\n }\r\n }\r\n\r\n if (item.Values.every(v => v.toLowerCase() !== \"notnull\" && v.toLowerCase() !== fieldValue.toString().toLowerCase())) {\r\n conditionsSatisfied = false;\r\n break;\r\n }\r\n } \r\n \r\n return conditionsSatisfied;\r\n }\r\n}\r\n\r\nexport class UISettings\r\n{\r\n public ControlSettings : ControlSettings[]\r\n\r\n public SectionSettings : SectionSettings[]\r\n\r\n public Conditions : Condition[]\r\n}\r\n\r\nexport class ControlSettings\r\n{\r\n public ControlName : string\r\n\r\n public CheckEdit : boolean \r\n\r\n public AllowEdit : boolean | null\r\n\r\n public CheckVisible : boolean\r\n\r\n public Visible : boolean | null\r\n\r\n public CheckRequired : boolean\r\n\r\n public Required : boolean | null\r\n\r\n public ActiveValidation : boolean | null\r\n}\r\n\r\nexport class SectionSettings\r\n{\r\n public Section : string\r\n\r\n public Field : string\r\n\r\n public CheckValue : boolean \r\n\r\n public CleanValueIfConditionsSatisfied : boolean | null\r\n\r\n public ValueIfConditionsSatisfied : string\r\n\r\n public CheckRequired : boolean\r\n\r\n public Required : boolean | null\r\n}\r\n\r\n\r\nexport class Condition\r\n{\r\n public SectionName : string\r\n\r\n public FieldName : string\r\n\r\n public Values : string[]\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, Visibility } from 'tessa/platform';\r\nimport { ButtonViewModel} from 'tessa/ui/cards/controls';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkDocumentRecognitionFileHelper } from '../Helpers/PkDocumentRecognitionFileHelper';\r\nimport { CardSection } from 'tessa/cards';\r\n\r\n/*\r\nРасширение кнопки распознавания файлов для карточек договоров ГК и Договоров и Доп. соглашений ПИКК\r\n*/\r\nexport class PkDocumentRecognitionUIExtension extends CardUIExtension {\r\n private _disposers: Array<() => void> = [];\r\n public selectedRow: ReadonlyMap | null; \r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkIncomingTypeID)) {\r\n return;\r\n }\r\n\r\n await this.UploadAndRecognizeDocumentButtonLogicAsync(context);\r\n }\r\n\r\n /** Обработчик кнопки 'Загрузить файлы'. */\r\n private async UploadAndRecognizeDocumentButtonLogicAsync(context: ICardUIExtensionContext){\r\n const btnCreate = CdUIHelper.GetUIControl(context, \"UploadAndRecognizeDocumentButton\");\r\n if (!btnCreate) {\r\n return;\r\n }\r\n\r\n // если в настроечной карточке указан вид\r\n const section = context.model.card.sections.tryGet(\"PkIncomingInfo\"); \r\n if (section) {\r\n this.addSetButtonVisibilityHandler(context, section, btnCreate);\r\n }\r\n\r\n btnCreate.onClick = async() => { \r\n let pagesLimit = context.model.card.info.Kinds.find(x => x[\"ID\"].$value === section!.fields.get('KindID'))['PagesLimit']; \r\n await PkDocumentRecognitionFileHelper.UploadAndRecognizeDocumentStartAsync(context.model, pagesLimit.$value); \r\n // запускаем периодическую проверку статуса \r\n if (context.model.card.info[\"CurrentDocumentRecognitionPackageID\"]) {\r\n PkDocumentRecognitionFileHelper.CheckingDocumentRecognitionStatus(context.model); \r\n }\r\n };\r\n }\r\n\r\n /* Видимость кнопки Загрузить и распознать*/\r\n private addSetButtonVisibilityHandler(context : ICardUIExtensionContext, section: CardSection, btnCreate: ButtonViewModel) {\r\n let func = (val) => {\r\n btnCreate.controlVisibility = section && \r\n context.model.card.info.Kinds && \r\n context.model.card.info.Kinds.find(x => x[\"ID\"].$value === val) \r\n ? Visibility.Visible \r\n : Visibility.Collapsed;\r\n };\r\n \r\n // проверяем видимость кнопки при открытии карточки\r\n func(section.fields.get('KindID'));\r\n\r\n // + подисываем изменение видимости на смену вида документа\r\n const dispose = section.fields.fieldChanged.addWithDispose(e => {\r\n if (e.fieldName == 'KindID') {\r\n func(e.fieldValue);\r\n }\r\n });\r\n\r\n if (dispose) {\r\n this._disposers.push(dispose);\r\n }\r\n } \r\n\r\n public finalized() {\r\n for (let dispose of this._disposers) {\r\n if (dispose) {\r\n dispose();\r\n }\r\n }\r\n this._disposers.length = 0;\r\n }\r\n}\r\n\r\n","export class PkMatrixStageHelper {\r\n static SigningID = \"35B99434-E2AE-4B85-B48E-10D34177294F\";\r\n static SigningName = \"Подписание\";\r\n static ConsolidationID = \"e6b0cf49-36c9-4f18-9a51-458f06488428\";\r\n static ConsolidationName = \"Консолидирующий юрист\";\r\n static ProcurementControlSpecialistApprovementID = \"f1401276-7b3c-4f52-aaf8-6ae6621b93d4\";\r\n static ProcurementControlSpecialistApprovementName = \"Согласование специалистом первичного контроля закупок\";\r\n}","export class PkMatrixApprovementRoleHelper {\r\n static ConsolidatingDepartmentID = \"D5331060-A89D-44F3-85FE-977897538B2A\";\r\n static ConsolidatingDepartmentName = \"Консолидирующий (УДО)\";\r\n\r\n static ProcurementControlSpecialistID = \"630AE866-3A10-4D91-B4C8-0BE5EDD98B57\";\r\n static ProcurementControlSpecialistName = \"Специалист первичного контроля закупок\";\r\n}","import { CardUIExtension, IBlockViewModel, ICardEditorModel, ICardModel, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { AutoCompleteEntryViewModel, AutoCompleteTableViewModel, ButtonViewModel, GridRowAction, GridRowViewModel, GridViewModel, RowAutoCompleteItem } from 'tessa/ui/cards/controls';\r\nimport { reaction } from 'mobx';\r\nimport { CardNewRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { createCardModel, IUIContext, showConfirm, showLoadingOverlay, showMessage, showNotEmpty, tryGetFromInfo, UIButton, UIContext } from 'tessa/ui';\r\nimport { openCard, showFormDialog } from 'tessa/ui/uiHost';\r\nimport { CardFieldChangedEventArgs, CardRow, CardRowState, CardSection } from 'tessa/cards';\r\nimport { PkMatrixStageHelper } from 'src/pkScripts/Helpers/PkMatrixStageHelper';\r\nimport { PkMatrixApprovementRoleHelper } from 'src/pkScripts/Helpers/PkMatrixApprovementRoleHelper';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\n\r\nexport class PkMatrixUIExtension extends CardUIExtension {\r\n private _disposer: Function | null = null;\r\n private rolesTable: GridViewModel;\r\n private departmentMatrixVirtualSection: CardSection;\r\n private matrixCriteriaListSectionVirtual: CardSection;\r\n private matrixCriteriaListSection: CardSection;\r\n private matrixCriteriaTaskTypeListSection: CardSection;\r\n private matrixCriteriaUserListSection: CardSection;\r\n private matrixCriteriaDefaultUserListSection: CardSection;\r\n private matrixDepartmentRoles: CardSection;\r\n private matrixCriteriaContractCategoryListSection: CardSection;\r\n private matrixCriteriaContractTypeListSection: CardSection;\r\n private matrixCriteriaCostItemListSection: CardSection;\r\n private matrixCriteriaPartnerListSection: CardSection;\r\n private matrixCriteriaDepartmentRolesUsersSectionVirtual: CardSection;\r\n private matrixCriteriaInitiatorListSection: CardSection;\r\n private matrixCriteriaSignedListSection: CardSection;\r\n private matrixCriteriaContractKindListSection: CardSection;\r\n private matrixCriteriaRegionListSection: CardSection;\r\n private matrixCriteriaProjectListSection: CardSection;\r\n private matrixCriteriaObjectListSection: CardSection;\r\n private matrixCriteriaBuyerListSection: CardSection;\r\n private matrixCriteriaSellerListSection: CardSection;\r\n private matrixCriteriaOtherListSection: CardSection;\r\n private model: ICardModel;\r\n private virtualFieldsBlock: IBlockViewModel;\r\n private criteriaBlock: IBlockViewModel;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.DepartmentRoleTypeID)) {\r\n return;\r\n }\r\n\r\n // Уведомление о замене матрицы на родительскую при добавлении в таблицу Связанные организации.\r\n await this.MatrixRelatedOrganizationsReplaceQuestionAsync(context);\r\n\r\n // Открытие карточки подразделения из таблицы Связанные организации\r\n await this.MatrixRelatedOrganizationsOpenCardAsync(context);\r\n\r\n await this.MatrixParentMatrixWithChildQuestionAsync(context);\r\n\r\n const card = context.card,\r\n model = context.model,\r\n rolesControl = model.controls.get(\"RolesControl\");\r\n\r\n this.virtualFieldsBlock = model.blocks.get(\"VirtualFields\")!;\r\n this.criteriaBlock = model.blocks.get(\"Criteria\")!;\r\n this.model = model;\r\n if (!context ||\r\n !model ||\r\n !card || \r\n !rolesControl || \r\n !this.virtualFieldsBlock || \r\n !this.criteriaBlock ||\r\n !card.sections.tryGet(\"PkMatrixDepartmentVirtual\") ||\r\n !card.sections.tryGet(\"PkMatrixCriteriaList\"))\r\n {\r\n return;\r\n }\r\n const copyFromDepartmentButton: ButtonViewModel = model.controls.get(\"CopyFromDepartment\") as ButtonViewModel;\r\n const copyToDepartmentButton: ButtonViewModel = model.controls.get(\"CopyToDepartment\") as ButtonViewModel;\r\n copyFromDepartmentButton.onClick = () => this.ShowDialogAsync(\"CopyFromDepartment\");\r\n copyToDepartmentButton.onClick = () => this.ShowDialogAsync(\"CopyToDepartment\");\r\n\r\n\r\n this.rolesTable = rolesControl as GridViewModel;\r\n this.departmentMatrixVirtualSection = model.card.sections.get(\"PkMatrixDepartmentVirtual\")!;\r\n if (!this.rolesTable) {return;}\r\n //this.rolesTable.PropertyChanged += this.SetVirtualFields;\r\n if (this._disposer == null) {\r\n this._disposer = reaction(() => this.rolesTable.selectedRow, () => {this.SetVirtualFields(this.rolesTable.selectedRow!)});\r\n }\r\n this.departmentMatrixVirtualSection!.fields.fieldChanged.add(this.SetFromVirtualFields);\r\n this.rolesTable.rowInvoked.add(e => {\r\n if (e.action == GridRowAction.Opening)\r\n {\r\n e.cancel = true;\r\n }\r\n\r\n });\r\n this.matrixCriteriaListSection = card.sections.getOrAdd(\"PkMatrixCriteriaList\");\r\n this.matrixDepartmentRoles = card.sections.getOrAdd(\"PkMatrixDepartmentRoles\");\r\n this.matrixCriteriaListSectionVirtual = card.sections.getOrAdd(\"PkMatrixCriteriaListVirtual\");\r\n this.matrixCriteriaTaskTypeListSection = card.sections.getOrAdd(\"PkMatrixCriteriaTaskTypeList\");\r\n this.matrixCriteriaUserListSection = card.sections.getOrAdd(\"PkMatrixCriteriaUserList\");\r\n this.matrixCriteriaDefaultUserListSection = card.sections.getOrAdd(\"PkMatrixCriteriaDefaultUserList\");\r\n this.matrixCriteriaContractCategoryListSection = card.sections.getOrAdd(\"PkMatrixCriteriaContractCategoryList\");\r\n this.matrixCriteriaContractTypeListSection = card.sections.getOrAdd(\"PkMatrixCriteriaContractTypeList\");\r\n this.matrixCriteriaCostItemListSection = card.sections.getOrAdd(\"PkMatrixCriteriaCostItemList\");\r\n this.matrixCriteriaPartnerListSection = card.sections.getOrAdd(\"PkMatrixCriteriaPartnerList\");\r\n this.matrixCriteriaDepartmentRolesUsersSectionVirtual = card.sections.getOrAdd(\"PkMatrixDepartmentRolesUsersVirtual\");\r\n this.matrixCriteriaInitiatorListSection = card.sections.getOrAdd(\"PkMatrixCriteriaInitiatorList\");\r\n this.matrixCriteriaSignedListSection = card.sections.getOrAdd(\"PkMatrixCriteriaSignedList\");\r\n this.matrixCriteriaContractKindListSection = card.sections.getOrAdd(\"PkMatrixCriteriaContractKindList\");\r\n this.matrixCriteriaRegionListSection = card.sections.getOrAdd(\"PkMatrixCriteriaRegionList\");\r\n this.matrixCriteriaProjectListSection = card.sections.getOrAdd(\"PkMatrixCriteriaProjectList\");\r\n this.matrixCriteriaObjectListSection = card.sections.getOrAdd(\"PkMatrixCriteriaObjectList\");\r\n this.matrixCriteriaBuyerListSection = card.sections.getOrAdd(\"PkMatrixCriteriaBuyerList\");\r\n this.matrixCriteriaSellerListSection = card.sections.getOrAdd(\"PkMatrixCriteriaSellerList\");\r\n this.matrixCriteriaOtherListSection = card.sections.getOrAdd(\"PkMatrixCriteriaOtherList\");\r\n\r\n const criteriaControl = model.controls.get(\"CriteriaControl\"),\r\n criteriaTable: GridViewModel = criteriaControl as GridViewModel;\r\n if (!criteriaControl || !criteriaTable) {return};\r\n\r\n this.SetCriteriaValue(criteriaTable);\r\n criteriaTable.rowInvoked.add(async e => {\r\n\r\n if (e.action == GridRowAction.Inserted)\r\n {\r\n let nullFields = new Array();\r\n\r\n if (!this.departmentMatrixVirtualSection || this.departmentMatrixVirtualSection.fields.getField(\"StageID\")==null)\r\n {\r\n nullFields.push(\"Этап согласования\");\r\n }\r\n \r\n if (!this.departmentMatrixVirtualSection || this.departmentMatrixVirtualSection.fields.getField(\"Limit\")==null)\r\n {\r\n nullFields.push(\"Срок\");\r\n }\r\n \r\n if (!this.departmentMatrixVirtualSection || this.departmentMatrixVirtualSection.fields.getField(\"Order\")==null)\r\n {\r\n nullFields.push(\"Порядок\");\r\n }\r\n \r\n if (nullFields.length>0)\r\n {\r\n \r\n await showMessage(\"Не заполнены поля: \"+nullFields.join());\r\n e.cancel = true;\r\n }\r\n\r\n e.row.set(\"ParentRowID\", this.rolesTable.selectedRow!.rowId, DotNetType.Guid); \r\n e.row.set(\"AmountCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"AmountCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"ANPTProcedureTypeCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"ANPTProcedureTypeCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"AutoApproveCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"AutoApproveCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"AutoCalculateCFOCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"AutoCalculateCFOCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"AutoCalculateCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"AutoCalculateCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"ExcludeApproveWithoutContract\", false, DotNetType.Boolean);\r\n e.row.set(\"ChiefAccountant\", false, DotNetType.Boolean);\r\n e.row.set(\"AccountantOHR\", false, DotNetType.Boolean);\r\n e.row.set(\"ContractCategoryCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"ContractCategoryCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"ContractKindCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"ContractKindCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"ContractTypeCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"ContractTypeCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"CostItemCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"CostItemCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"FromCDCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"FromCDCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"GroupCategoryCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"GroupCategoryCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"InitiatorCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"InitiatorCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"SignedCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"SignedCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"LandAssetCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"LandAssetCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"PaperCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"PaperCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"PartnerCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"PartnerCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"PDCFromKCCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"PDCFromKCCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"UserDefinedManuallyCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"UserDefinedManuallyCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"VGOCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"VGOCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"RegionCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"RegionCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"ProjectCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"ProjectCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"ObjectCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"ObjectCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"BuyerCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"BuyerCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"SellerCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"SellerCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n e.row.set(\"OtherCriteriaTypeID\", 0, DotNetType.Int32);\r\n e.row.set(\"OtherCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n }\r\n\r\n });\r\n \r\n criteriaTable.rowInitializing.add( e => {\r\n if(e.rowModel)\r\n {\r\n const amountToControlControl = e.rowModel.controlsBag.find(x => x.name == \"AmountToControl\");\r\n const amountToTextControlControl = e.rowModel.controlsBag.find(x => x.name == \"AmountToTextControl\");\r\n const userControl = e.rowModel.controlsBag.find(x => x.name == \"UserControl\") as AutoCompleteTableViewModel;\r\n const taskTypeControl = e.rowModel.controlsBag.find(x => x.name == \"TaskTypeControl\") as AutoCompleteTableViewModel;\r\n const defaultUserControl = e.rowModel.controlsBag.find(x => x.name == \"DefaultUserControl\") as AutoCompleteTableViewModel;\r\n\r\n if (amountToControlControl == null\r\n || amountToTextControlControl == null\r\n || userControl == null\r\n || defaultUserControl == null\r\n || taskTypeControl == null)\r\n {\r\n return;\r\n }\r\n\r\n const amountCriteriaTypeID = e.row.tryGet(\"AmountCriteriaTypeID\");\r\n\r\n switch (amountCriteriaTypeID)\r\n {\r\n case 3:\r\n case 4:\r\n case 6:\r\n case 7:\r\n {\r\n amountToControlControl.controlVisibility = Visibility.Collapsed;\r\n amountToTextControlControl.controlVisibility = Visibility.Collapsed;\r\n e.row.set('AmountTo',null); \r\n }\r\n\r\n break;\r\n\r\n case 5:\r\n {\r\n amountToControlControl.controlVisibility = Visibility.Visible;\r\n amountToTextControlControl.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n break;\r\n case 0:\r\n {\r\n e.row.set('AmountFrom',null); \r\n e.row.set('AmountTo',null); \r\n }\r\n\r\n break;\r\n }\r\n\r\n this.UsersLogic(e.rowModel, e.row, false);\r\n\r\n e.row.fieldChanged.add(s => {\r\n if(s.fieldValue == null) {return};\r\n\r\n switch (s.fieldName)\r\n {\r\n case \"ContractCategoryCriteriaTypeID\":\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaContractCategoryListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaContractCategoryListSection.rows.remove(x));\r\n this.matrixCriteriaContractCategoryListSection.rows\r\n .filter(x => x.parentRowId== e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n\r\n break;\r\n\r\n case \"ContractKindCriteriaTypeID\":\r\n if (s.fieldValue == 0)\r\n {\r\n e.row.set(\"ParentRowID\", this.rolesTable.selectedRow!.rowId, DotNetType.Guid); \r\n e.row.set(\"ContractKindID\", null);\r\n e.row.set(\"ContractKindDocumentKind\", null);\r\n\r\n this.matrixCriteriaContractKindListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaContractKindListSection.rows.remove(x));\r\n this.matrixCriteriaContractKindListSection.rows\r\n .filter(x => x.parentRowId== e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n\r\n break;\r\n\r\n case \"ContractTypeCriteriaTypeID\":\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaContractTypeListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaContractTypeListSection.rows.remove(x));\r\n this.matrixCriteriaContractTypeListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n\r\n break;\r\n\r\n case \"CostItemCriteriaTypeID\":\r\n if (s.fieldValue != null)\r\n {\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaCostItemListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaCostItemListSection.rows.remove(x));\r\n this.matrixCriteriaCostItemListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"AmountCriteriaTypeID\":\r\n switch (s.fieldValue)\r\n {\r\n case 3:\r\n case 4:\r\n case 6:\r\n case 7:\r\n {\r\n amountToControlControl.controlVisibility = Visibility.Collapsed;\r\n amountToTextControlControl.controlVisibility = Visibility.Collapsed;\r\n e.row.set(\"AmountTo\", null);\r\n }\r\n\r\n break;\r\n\r\n case 5:\r\n {\r\n amountToControlControl.controlVisibility = Visibility.Visible;\r\n amountToTextControlControl.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n break;\r\n case 0:\r\n {\r\n e.row.set(\"AmountFrom\", null);\r\n e.row.set(\"AmountTo\", null);\r\n }\r\n\r\n break;\r\n }\r\n\r\n break;\r\n\r\n case \"PartnerCriteriaTypeID\":\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaPartnerListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaPartnerListSection.rows.remove(x));\r\n this.matrixCriteriaPartnerListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n\r\n break;\r\n\r\n case \"InitiatorCriteriaTypeID\":\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaInitiatorListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaInitiatorListSection.rows.remove(x));\r\n this.matrixCriteriaInitiatorListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n\r\n break;\r\n\r\n case \"SignedCriteriaTypeID\":\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaSignedListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaSignedListSection.rows.remove(x));\r\n this.matrixCriteriaSignedListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n \r\n break;\r\n\r\n case \"GroupCategoryCriteriaTypeID\":\r\n if (s.fieldValue == 0)\r\n {\r\n e.row.set(\"GroupCategoryID\", null);\r\n e.row.set(\"GroupCategoryName\", null);\r\n }\r\n\r\n break;\r\n\r\n case \"GroupCategoryID\":\r\n if (s.fieldValue != null && e.row.getField(\"GroupCategoryCriteriaTypeID\")?.$value == 0)\r\n {\r\n e.row.set(\"GroupCategoryCriteriaTypeID\", 3, DotNetType.Int32);\r\n e.row.set(\"GroupCategoryCriteriaTypeName\", \"Равно\", DotNetType.String);\r\n }\r\n\r\n break;\r\n\r\n case \"RegionCriteriaTypeID\":\r\n if (s.fieldValue != null)\r\n {\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaRegionListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaRegionListSection.rows.remove(x));\r\n this.matrixCriteriaRegionListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"ProjectCriteriaTypeID\":\r\n if (s.fieldValue != null)\r\n {\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaProjectListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaProjectListSection.rows.remove(x));\r\n this.matrixCriteriaProjectListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"ObjectCriteriaTypeID\":\r\n if (s.fieldValue != null)\r\n {\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaObjectListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaObjectListSection.rows.remove(x));\r\n this.matrixCriteriaObjectListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"BuyerCriteriaTypeID\":\r\n if (s.fieldValue != null)\r\n {\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaBuyerListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaBuyerListSection.rows.remove(x));\r\n this.matrixCriteriaBuyerListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"SellerCriteriaTypeID\":\r\n if (s.fieldValue != null)\r\n {\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaSellerListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaSellerListSection.rows.remove(x));\r\n this.matrixCriteriaSellerListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"OtherCriteriaTypeID\":\r\n if (s.fieldValue != null)\r\n {\r\n if (s.fieldValue == 0)\r\n {\r\n this.matrixCriteriaOtherListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state == CardRowState.Inserted)\r\n .forEach(x => this.matrixCriteriaOtherListSection.rows.remove(x));\r\n this.matrixCriteriaOtherListSection.rows\r\n .filter(x => x.parentRowId == e.row.rowId && x.state != CardRowState.Inserted)\r\n .forEach(x => x.state=CardRowState.Deleted);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"UserDefinedManuallyCriteriaTypeID\":\r\n case \"AutoCalculateCriteriaTypeID\":\r\n case \"AutoCalculateCFOCriteriaTypeID\":\r\n if (s.fieldValue != null)\r\n {\r\n this.UsersLogic(e.rowModel!, e.row, true);\r\n }\r\n\r\n break;\r\n };\r\n });\r\n\r\n userControl.valueDeleted.add(() =>\r\n {\r\n this.UsersLogic(e.rowModel!, e.row, true);\r\n });\r\n\r\n userControl.valueSet.add(() =>\r\n {\r\n this.UsersLogic(e.rowModel!, e.row, true);\r\n });\r\n\r\n defaultUserControl.valueDeleted.add(() =>\r\n {\r\n this.UsersLogic(e.rowModel!, e.row, true);\r\n });\r\n\r\n defaultUserControl.valueSet.add(() =>\r\n {\r\n this.UsersLogic(e.rowModel!, e.row, true);\r\n });\r\n\r\n taskTypeControl.valueDeleted.add(() =>\r\n {\r\n this.UsersLogic(e.rowModel!, e.row, true);\r\n });\r\n\r\n taskTypeControl.valueSet.add(() =>\r\n {\r\n this.UsersLogic(e.rowModel!, e.row, true);\r\n });\r\n }\r\n });\r\n criteriaTable.rowInvoked.add( e => {\r\n if (e.action == GridRowAction.Deleting)\r\n {\r\n const realRow = this.matrixCriteriaListSection.rows.find(x => x.rowId == e.row.rowId);\r\n if (realRow)\r\n {\r\n if (realRow.state == CardRowState.Inserted)\r\n {\r\n this.matrixCriteriaListSection.rows.remove(realRow);\r\n }\r\n else\r\n {\r\n realRow.state = CardRowState.Deleted;\r\n }\r\n }\r\n\r\n if (this.matrixCriteriaListSection.rows.filter(x => x.state != CardRowState.Deleted).length == 0)\r\n {\r\n const departmentRole = this.matrixDepartmentRoles.rows.find(x => x.rowId == e.row.parentRowId);\r\n if (departmentRole) {\r\n this.departmentMatrixVirtualSection.fields.set(\"Limit\", null); \r\n this.departmentMatrixVirtualSection.fields.set(\"Order\", null); \r\n this.departmentMatrixVirtualSection.fields.set(\"StageID\", null); \r\n this.departmentMatrixVirtualSection.fields.set(\"StageName\", null); \r\n departmentRole.set(\"StageID\", null); \r\n departmentRole.set(\"StageName\", null); \r\n departmentRole.set(\"Order\", null); \r\n }\r\n }\r\n }\r\n });\r\n criteriaTable.rowValidating.add( e => {\r\n var taskTypesRows = this.matrixCriteriaTaskTypeListSection.rows.filter(x => x.parentRowId == e.row.rowId);\r\n\r\n if (taskTypesRows.length == 0)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Поле \\\"Тип задания\\\" обязательно для заполнения.\");\r\n }\r\n\r\n var userRows = this.matrixCriteriaUserListSection.rows.filter(x => x.parentRowId == e.row.rowId);\r\n var defaultUserRows = this.matrixCriteriaDefaultUserListSection.rows.filter(x => x.parentRowId == e.row.rowId);\r\n\r\n if (e.row.getField(\"AutoCalculateCriteriaTypeID\")?.$value == 0 && e.row.getField(\"AutoCalculateCFOCriteriaTypeID\")?.$value == 0 && userRows.length == 0 && e.row.getField(\"UserDefinedManuallyCriteriaTypeID\")?.$value == 0 && defaultUserRows.length == 0)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Необходимо указать как минимум одни критерий из полей \\\"Сотрудник\\\", \\\"Участник по умолчанию\\\", \\\"Автоматизированный расчет из справочника (для ЦФО)\\\", \\\"Автоматизированный расчет из справочника (для ЕФС и Юристов)\\\", \\\"Участник указывается вручную\\\".\");\r\n }\r\n });\r\n criteriaTable.rowEditorClosing.add( e => {\r\n var realRow = this.matrixCriteriaListSection.rows.find(x => x.rowId == e.row.rowId);\r\n if (realRow != null)\r\n {\r\n this.matrixCriteriaListSection.rows.remove(realRow);\r\n }\r\n\r\n this.matrixCriteriaListSection.rows.add(e.row.clone());\r\n });\r\n\r\n const usersStageControl = context.model.controls.get(\"UsersStageControl\") as AutoCompleteTableViewModel;\r\n if (usersStageControl != null)\r\n {\r\n usersStageControl.valueSet.add((args) => {\r\n const item = args.item as RowAutoCompleteItem;\r\n const parentRowID = this.rolesTable.selectedRow!.rowId;\r\n const virtualrow = this.matrixCriteriaDepartmentRolesUsersSectionVirtual.rows.find(x => x.rowId == item.row.rowId);\r\n\r\n const critery = this.matrixCriteriaListSection.rows.\r\n find(x => x.getField(\"ParentRowID\")?.$value == parentRowID && x.state != CardRowState.Deleted);\r\n const newrow = this.matrixCriteriaUserListSection.rows.add();\r\n if (virtualrow && critery) {\r\n newrow.rowId = virtualrow.rowId;\r\n newrow.set(\"ParentRowID\", critery.rowId, DotNetType.Guid);\r\n newrow.set(\"UserID\", virtualrow.getField(\"UserID\")?.$value, DotNetType.Guid);\r\n newrow.set(\"UserName\", virtualrow.getField(\"UserName\")?.$value, DotNetType.String);\r\n newrow.state = CardRowState.Inserted;\r\n }\r\n\r\n // Если добавлен сотрудник в роль Консолидирующий (УДО), устанавливаем этап согласования \"Подписание\"\r\n if (Guid.equals(this.rolesTable.selectedRow!.row.getField(\"RoleID\")?.$value, PkMatrixApprovementRoleHelper.ConsolidatingDepartmentID)\r\n && this.matrixCriteriaDepartmentRolesUsersSectionVirtual.rows.find(x => x.state != CardRowState.Deleted))\r\n {\r\n this.departmentMatrixVirtualSection.fields.set(\"StageID\", createTypedField(PkMatrixStageHelper.SigningID, DotNetType.Guid));\r\n this.departmentMatrixVirtualSection.fields.set(\"StageName\", createTypedField(PkMatrixStageHelper.SigningName, DotNetType.String));\r\n this.departmentMatrixVirtualSection.fields.set(\"Order\", createTypedField(1, DotNetType.Int32));\r\n }\r\n });\r\n\r\n usersStageControl.valueDeleted.add((args) => {\r\n const item = args.item as RowAutoCompleteItem;\r\n const realrow = this.matrixCriteriaUserListSection.rows.find(x => x.rowId == item.row.rowId);\r\n if (realrow!.state == CardRowState.Inserted)\r\n this.matrixCriteriaListSection.rows.remove(realrow!);\r\n else\r\n realrow!.state = CardRowState.Deleted;\r\n\r\n // Если нет сотрудников в роли, очищаем этап согласования\r\n if (Guid.equals(this.rolesTable.selectedRow!.row.getField(\"RoleID\")?.$value, PkMatrixApprovementRoleHelper.ConsolidatingDepartmentID)\r\n && !this.matrixCriteriaDepartmentRolesUsersSectionVirtual.rows.find(x => x.state != CardRowState.Deleted))\r\n {\r\n this.departmentMatrixVirtualSection.fields.set('StageID', null);\r\n this.departmentMatrixVirtualSection.fields.set('StageName', null);\r\n this.departmentMatrixVirtualSection.fields.set('Order', null);\r\n }\r\n });\r\n } \r\n\r\n this.departmentMatrixVirtualSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'Limit' && Guid.equals(this.rolesTable.selectedRow!.row.getField(\"RoleID\")?.$value, PkMatrixApprovementRoleHelper.ProcurementControlSpecialistID)) \r\n {\r\n if (e.fieldValue == null)\r\n {\r\n this.departmentMatrixVirtualSection.fields.set('StageID', null);\r\n this.departmentMatrixVirtualSection.fields.set('StageName', null);\r\n this.departmentMatrixVirtualSection.fields.set('Order', null);\r\n }\r\n else\r\n {\r\n this.departmentMatrixVirtualSection.fields.set(\"StageID\", createTypedField(PkMatrixStageHelper.ProcurementControlSpecialistApprovementID, DotNetType.Guid));\r\n this.departmentMatrixVirtualSection.fields.set(\"StageName\", createTypedField(PkMatrixStageHelper.ProcurementControlSpecialistApprovementName, DotNetType.String));\r\n this.departmentMatrixVirtualSection.fields.set(\"Order\", createTypedField(1, DotNetType.Int32));\r\n }\r\n }\r\n });\r\n } \r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n \r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.DepartmentRoleTypeID)) {\r\n return;\r\n }\r\n await this.CheckMatrixChanges(context);\r\n\r\n await this.CheckMatrixConsolidatindAsync(context);\r\n }\r\n\r\n private UsersLogic(rowModel: ICardModel, row: CardRow, clear: boolean)\r\n {\r\n let autoCalculateControl = rowModel.controlsBag.find(x => x.name == \"AutoCalculateControl\");\r\n let autoCalculateCFOControl = rowModel.controlsBag.find(x => x.name == \"AutoCalculateCFOControl\");\r\n let excludeApproveWithoutContractControl = rowModel.controlsBag.find(x => x.name == \"ExcludeApproveWithoutContractControl\");\r\n let chiefAccountantControl = rowModel.controlsBag.find(x => x.name == \"ChiefAccountantControl\");\r\n let accountantOHRControl = rowModel.controlsBag.find(x => x.name == \"AccountantOHRControl\");\r\n let userControl = rowModel.controlsBag.find(x => x.name == \"UserControl\");\r\n let taskTypeControl = rowModel.controlsBag.find(x => x.name == \"TaskTypeControl\");\r\n let defaultUserControl = rowModel.controlsBag.find(x => x.name == \"DefaultUserControl\");\r\n let userDefinedManuallyControl = rowModel.controlsBag.find(x => x.name == \"UserDefinedManuallyControl\");\r\n let autoApproveControl = rowModel.controlsBag.find(x => x.name == \"AutoApproveControl\");\r\n\r\n let userDefinedManuallyCriteriaTypeID = row.tryGet(\"UserDefinedManuallyCriteriaTypeID\");\r\n let autoCalculateCriteriaTypeID = row.tryGet(\"AutoCalculateCriteriaTypeID\");\r\n let taskTypesRows = this.matrixCriteriaTaskTypeListSection.rows.filter(x => x.parentRowId == row.rowId);\r\n let userRows = this.matrixCriteriaUserListSection.rows.filter(x => x.parentRowId == row.rowId);\r\n let defaultUserRows = this.matrixCriteriaDefaultUserListSection.rows.filter(x => x.parentRowId == row.rowId);\r\n\r\n if (autoCalculateControl == null\r\n || autoCalculateCFOControl == null\r\n || excludeApproveWithoutContractControl == null\r\n || chiefAccountantControl == null\r\n || accountantOHRControl == null\r\n || userControl == null\r\n || userDefinedManuallyControl == null\r\n || defaultUserControl == null\r\n || taskTypesRows == null\r\n || autoApproveControl == null\r\n || taskTypeControl == null\r\n )\r\n {\r\n return;\r\n }\r\n\r\n let parentRowID = row.tryGet(\"ParentRowID\");\r\n let parentRow = this.matrixDepartmentRoles.rows.find(x => Guid.equals(x.rowId, parentRowID));\r\n var roleID = parentRow != null ? parentRow.tryGet(\"RoleID\") : null;\r\n\r\n let isAutoCalculateCFORole = parentRow != null && \r\n (Guid.equals(roleID, \"a2be2b49-48e8-4d16-acde-da4a4dea96ad\") // ЦФО (владелец договора)\r\n || Guid.equals(roleID, \"0a0a8758-eeec-45e0-a0a4-ea6e7846d6e3\")); // ЦФО по БФ\r\n if (isAutoCalculateCFORole)\r\n {\r\n autoCalculateCFOControl.isReadOnly = false;\r\n }\r\n else\r\n {\r\n autoCalculateCFOControl.isReadOnly = true;\r\n }\r\n\r\n let isExcludeApproveWithoutContract = parentRow != null && \r\n Guid.equals(roleID, \"90c9cbce-5527-45ab-b5d9-690793823541\"); // Консолидирующий (юрист) ИДП\r\n excludeApproveWithoutContractControl.isReadOnly = !isExcludeApproveWithoutContract;\r\n\r\n let isAccountant = parentRow != null &&\r\n Guid.equals(roleID, \"de67d5de-9550-42a0-8972-f8bc74f80fc8\"); // Бухгалтерская служба / Финансовая служба\r\n chiefAccountantControl.isReadOnly = !isAccountant;\r\n accountantOHRControl.isReadOnly = !isAccountant;\r\n \r\n autoApproveControl.isReadOnly = false;\r\n \r\n for (let i = 0; i < taskTypesRows.length; i++)\r\n {\r\n if ((taskTypesRows[i].tryGet(\"TaskTypeID\") == 0 || taskTypesRows[i].tryGet(\"TaskTypeID\") == 1)\r\n && taskTypesRows[i].state != CardRowState.Deleted)\r\n {\r\n autoApproveControl.isReadOnly = true;\r\n break;\r\n }\r\n }\r\n\r\n if (userDefinedManuallyCriteriaTypeID == 1)\r\n {\r\n autoCalculateControl.isReadOnly = true;\r\n autoCalculateCFOControl.isReadOnly = true;\r\n userControl.isReadOnly = true;\r\n userDefinedManuallyControl.isReadOnly = false;\r\n defaultUserControl.isReadOnly = true;\r\n\r\n if (clear)\r\n {\r\n this.matrixCriteriaDefaultUserListSection.rows.clear();\r\n }\r\n }\r\n else if (autoCalculateCriteriaTypeID == 1)\r\n {\r\n autoCalculateControl.isReadOnly = false;\r\n userControl.isReadOnly = true;\r\n userDefinedManuallyControl.isReadOnly = true;\r\n defaultUserControl.isReadOnly = false;\r\n }\r\n else if (userRows.some(x => x.state != CardRowState.Deleted))\r\n {\r\n autoCalculateControl.isReadOnly = true;\r\n userControl.isReadOnly = false;\r\n userDefinedManuallyControl.isReadOnly = true;\r\n defaultUserControl.isReadOnly = false;\r\n }\r\n else if (defaultUserRows.some(x => x.state != CardRowState.Deleted))\r\n {\r\n autoCalculateControl.isReadOnly = false;\r\n userControl.isReadOnly = false;\r\n userDefinedManuallyControl.isReadOnly = true;\r\n defaultUserControl.isReadOnly = false;\r\n }\r\n else\r\n {\r\n let isAutoCalculateRole = parentRow != null && \r\n (Guid.equals(roleID, \"90c9cbce-5527-45ab-b5d9-690793823541\") // Консолидирующий (юрист) ИДП\r\n || Guid.equals(roleID, \"4ad2e4a7-9458-4e28-96bd-e49c98140e58\") // Юридическая служба\r\n || Guid.equals(roleID, \"de67d5de-9550-42a0-8972-f8bc74f80fc8\")); // Бухгалтерская служба / Финансовая служба\r\n if (isAutoCalculateRole)\r\n {\r\n autoCalculateControl.isReadOnly = false;\r\n }\r\n else\r\n {\r\n autoCalculateControl.isReadOnly = true;\r\n }\r\n\r\n userControl.isReadOnly = false;\r\n userDefinedManuallyControl.isReadOnly = false;\r\n defaultUserControl.isReadOnly = false;\r\n }\r\n\r\n if (autoCalculateCFOControl.isReadOnly)\r\n {\r\n row.set(\"AutoCalculateCFOCriteriaTypeID\", 0, DotNetType.Int32);\r\n row.set(\"AutoCalculateCFOCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n }\r\n }\r\n\r\n private SetCriteriaValue(criteriaTable: GridViewModel)\r\n {\r\n this.matrixCriteriaContractCategoryListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"ContractCategoryCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"ContractCategoryCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"ContractCategoryCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaContractKindListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"ContractKindCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"ContractKindCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"ContractKindCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaContractTypeListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"ContractTypeCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"ContractTypeCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"ContractTypeCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaCostItemListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"CostItemCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"CostItemCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"CostItemCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaPartnerListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"PartnerCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"PartnerCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"PartnerCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaInitiatorListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"InitiatorCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"InitiatorCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"InitiatorCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaSignedListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"SignedCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"SignedCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"SignedCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaRegionListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"RegionCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"RegionCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"RegionCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaProjectListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"ProjectCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"ProjectCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"ProjectCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaObjectListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"ObjectCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"ObjectCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"ObjectCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaBuyerListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n \r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"BuyerCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"BuyerCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"BuyerCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaSellerListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n\r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"SellerCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"SellerCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"SellerCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n\r\n this.matrixCriteriaOtherListSection.rows.collectionChanged.add( e => {\r\n let row = e.added[ e.added.length-1];\r\n\r\n criteriaTable.rows.forEach(item => {\r\n if(item.row.rowId == row.parentRowId)\r\n {\r\n if(item.row.getField(\"OtherCriteriaTypeID\")?.$value == 0)\r\n {\r\n item.row.set(\"OtherCriteriaTypeID\", 3, DotNetType.Int32)\r\n item.row.set(\"OtherCriteriaTypeName\", \"Равно\", DotNetType.String)\r\n }\r\n }\r\n })\r\n });\r\n }\r\n\r\n private SetVirtualFields = (row: GridRowViewModel) => {\r\n if (row != null) \r\n {\r\n if (this.virtualFieldsBlock.blockVisibility != Visibility.Visible)\r\n {\r\n this.virtualFieldsBlock.blockVisibility = Visibility.Visible;\r\n }\r\n\r\n if (Guid.equals(row.row.getField(\"RoleID\")?.$value, PkMatrixApprovementRoleHelper.ConsolidatingDepartmentID))\r\n {\r\n this.matrixCriteriaDepartmentRolesUsersSectionVirtual.rows.clear();\r\n this.matrixCriteriaListSectionVirtual.rows.clear();\r\n const critery = this.matrixCriteriaListSection.rows.find(x => x.getField(\"ParentRowID\")?.$value == row.rowId \r\n && x.state != CardRowState.Deleted);\r\n if (critery != null)\r\n {\r\n let rows = this.matrixCriteriaUserListSection.rows.\r\n filter(x => x.tryGetField(\"ParentRowID\") != null \r\n && x.tryGetField(\"ParentRowID\")!.$value == critery!.rowId)\r\n\r\n rows.forEach(item => {\r\n let clone = item.clone();\r\n this.matrixCriteriaDepartmentRolesUsersSectionVirtual.rows.add(clone);\r\n })\r\n }\r\n else\r\n {\r\n const newrow = this.matrixCriteriaListSection.rows.add();\r\n newrow.rowId = Guid.newGuid();\r\n newrow.parentRowId = row.rowId;\r\n newrow.set(\"AutoCalculateCFOCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"AutoCalculateCFOCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"AutoCalculateCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"AutoCalculateCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"ExcludeApproveWithoutContract\", false, DotNetType.Boolean);\r\n newrow.set(\"ChiefAccountant\", false, DotNetType.Boolean);\r\n newrow.set(\"AccountantOHR\", false, DotNetType.Boolean);\r\n newrow.set(\"AutoApproveCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"AutoApproveCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"UserDefinedManuallyCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"UserDefinedManuallyCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"ContractCategoryCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"ContractCategoryCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"ContractKindCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"ContractKindCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"ContractTypeCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"ContractTypeCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"CostItemCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"CostItemCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"AmountCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"AmountCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"PartnerCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"PartnerCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"InitiatorCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"InitiatorCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"SignedCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"SignedCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"GroupCategoryCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"GroupCategoryCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"FromCDCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"FromCDCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"PDCFromKCCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"PDCFromKCCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"VGOCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"VGOCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"ANPTProcedureTypeCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"ANPTProcedureTypeCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"PaperCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"PaperCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"LandAssetCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"LandAssetCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"RegionCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"RegionCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"ProjectCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"ProjectCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"ObjectCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"ObjectCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"BuyerCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"BuyerCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"SellerCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"SellerCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.set(\"OtherCriteriaTypeID\", 0, DotNetType.Int32);\r\n newrow.set(\"OtherCriteriaTypeName\", \"Неактивно\", DotNetType.String);\r\n newrow.state = CardRowState.Inserted;\r\n\r\n let newrowtasktype = this.matrixCriteriaTaskTypeListSection.rows.add();\r\n newrowtasktype.rowId = Guid.newGuid();\r\n newrowtasktype.parentRowId = newrow.rowId;\r\n newrowtasktype.set(\"TaskTypeID\", 1, DotNetType.Int32);\r\n newrowtasktype.set(\"TaskTypeName\", \"Выполнить задание\", DotNetType.String);\r\n }\r\n\r\n if (row.row.getField(\"StageID\")?.$value != null)\r\n {\r\n this.departmentMatrixVirtualSection.fields.set(\"StageID\", row.row.getField(\"StageID\")?.$value, DotNetType.Guid);\r\n this.departmentMatrixVirtualSection.fields.set(\"StageName\", row.row.getField(\"StageName\")?.$value, DotNetType.String);\r\n }\r\n else\r\n {\r\n this.departmentMatrixVirtualSection.fields.set(\"StageID\", PkMatrixStageHelper.SigningID, DotNetType.Guid);\r\n this.departmentMatrixVirtualSection.fields.set(\"StageName\", PkMatrixStageHelper.SigningName, DotNetType.String);\r\n }\r\n const limitValue = row.row.getField(\"Limit\")?.$value != null ? 1 : row.row.getField(\"Limit\")?.$value;\r\n this.departmentMatrixVirtualSection.fields.set(\"Limit\", limitValue, DotNetType.Int32); \r\n \r\n\r\n const orderValue = row.row.getField(\"Order\")?.$value != null ? 1 : row.row.getField(\"Order\")?.$value;\r\n this.departmentMatrixVirtualSection.fields.set(\"Order\", orderValue, DotNetType.Int32); \r\n \r\n const isActiveValue = row.row.getField(\"IsActive\")?.$value != null ? row.row.getField(\"IsActive\")?.$value : false;\r\n this.departmentMatrixVirtualSection.fields.set(\"IsActive\", isActiveValue, DotNetType.Boolean); \r\n\r\n let isActiveRole : boolean = this.rolesTable.selectedRow!.row.getField(\"IsActive\")?.$value ?? false;\r\n \r\n const stageControl = this.model.controls.get(\"StageControl\");\r\n const orderStageControl = this.model.controls.get(\"OrderStageControl\");\r\n const limitStageControl = this.model.controls.get(\"LimitStageControl\");\r\n const usersStageControl = this.model.controls.get(\"UsersStageControl\");\r\n\r\n if (stageControl && orderStageControl && limitStageControl && usersStageControl)\r\n {\r\n stageControl.isReadOnly = true;\r\n orderStageControl.controlVisibility = Visibility.Collapsed;\r\n limitStageControl.controlVisibility = Visibility.Collapsed;\r\n usersStageControl.controlVisibility = Visibility.Visible;\r\n this.criteriaBlock.blockVisibility = Visibility.Collapsed;\r\n \r\n usersStageControl.isReadOnly = !isActiveRole;\r\n }\r\n\r\n // Если нет сотрудников в роли, очищаем этап согласования\r\n if (!this.matrixCriteriaDepartmentRolesUsersSectionVirtual.rows.find(x => x.state != CardRowState.Deleted))\r\n {\r\n this.departmentMatrixVirtualSection.fields.set('StageID', null);\r\n this.departmentMatrixVirtualSection.fields.set('StageName', null);\r\n this.departmentMatrixVirtualSection.fields.set('Order', null);\r\n }\r\n }\r\n else\r\n {\r\n this.departmentMatrixVirtualSection.fields.fieldChanged.remove(this.SetFromVirtualFields);\r\n this.matrixCriteriaDepartmentRolesUsersSectionVirtual.rows.clear();\r\n this.matrixCriteriaListSectionVirtual.rows.clear();\r\n \r\n let rows = this.matrixCriteriaListSection.rows.\r\n filter(x => x.tryGetField(\"ParentRowID\") != null \r\n && x.tryGetField(\"ParentRowID\")!.$value == row.rowId)\r\n\r\n rows.forEach(item => {\r\n let clone = item.clone();\r\n this.matrixCriteriaListSectionVirtual.rows.add(clone);\r\n })\r\n\r\n this.departmentMatrixVirtualSection.fields.set(\"StageID\", row.row.getField(\"StageID\")?.$value, DotNetType.Guid); \r\n this.departmentMatrixVirtualSection.fields.set(\"StageName\", row.row.getField(\"StageName\")?.$value, DotNetType.String); \r\n this.departmentMatrixVirtualSection.fields.set(\"Limit\", row.row.getField(\"Limit\")?.$value, DotNetType.Int32); \r\n this.departmentMatrixVirtualSection.fields.set(\"Order\", row.row.getField(\"Order\")?.$value, DotNetType.Int32); \r\n this.departmentMatrixVirtualSection.fields.set(\"IsActive\", row.row.getField(\"IsActive\")?.$value, DotNetType.Boolean); \r\n\r\n const stageControl = this.model.controls.get(\"StageControl\");\r\n const orderStageControl = this.model.controls.get(\"OrderStageControl\");\r\n const limitStageControl = this.model.controls.get(\"LimitStageControl\");\r\n const usersStageControl = this.model.controls.get(\"UsersStageControl\");\r\n const criteriaControl = this.model.controls.get(\"CriteriaControl\");\r\n\r\n if (stageControl && orderStageControl && limitStageControl && usersStageControl && criteriaControl)\r\n {\r\n stageControl.isReadOnly = tryGetFromInfo(this.model.card.info,\"StageControlReadonly\", true);\r\n orderStageControl.controlVisibility = Visibility.Visible;\r\n limitStageControl.controlVisibility = Visibility.Visible;\r\n usersStageControl.controlVisibility = Visibility.Collapsed;\r\n this.criteriaBlock.blockVisibility = Visibility.Visible;\r\n\r\n if (Guid.equals(this.rolesTable.selectedRow!.row.getField(\"RoleID\")?.$value, PkMatrixApprovementRoleHelper.ProcurementControlSpecialistID))\r\n {\r\n stageControl.isReadOnly = true;\r\n orderStageControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n let isActiveRole : boolean = this.rolesTable.selectedRow!.row.getField(\"IsActive\")?.$value ?? false;\r\n \r\n stageControl.isReadOnly = !isActiveRole;\r\n orderStageControl.isReadOnly = !isActiveRole;\r\n limitStageControl.isReadOnly = !isActiveRole;\r\n criteriaControl.isReadOnly = !isActiveRole;\r\n\r\n let criteriaTable = criteriaControl as GridViewModel;\r\n criteriaTable.rowInitializing.add(async (e) => {\r\n if(e.action === GridRowAction.Opening)\r\n {\r\n e.cancel = !isActiveRole;\r\n }\r\n });\r\n }\r\n\r\n this.departmentMatrixVirtualSection.fields.fieldChanged.add(this.SetFromVirtualFields);\r\n }\r\n }\r\n else \r\n {\r\n if (this.virtualFieldsBlock.blockVisibility == Visibility.Visible)\r\n {\r\n this.virtualFieldsBlock.blockVisibility = Visibility.Hidden;\r\n }\r\n\r\n if (this.criteriaBlock.blockVisibility == Visibility.Visible)\r\n {\r\n this.criteriaBlock.blockVisibility = Visibility.Hidden;\r\n }\r\n }\r\n }\r\n\r\n private SetFromVirtualFields = (e: CardFieldChangedEventArgs) => {\r\n if (e.fieldName == \"StageID\" || e.fieldName == \"StageName\" || e.fieldName == \"Limit\" || e.fieldName == \"Order\" || e.fieldName == \"IsActive\")\r\n {\r\n this._disposer = null;\r\n if(e.fieldTypedValue != null)\r\n {\r\n this.rolesTable.selectedRow!.row\r\n .set(e.fieldName, \r\n this.departmentMatrixVirtualSection.fields.getField(e.fieldName)?.$value, \r\n e.fieldTypedValue!.$type);\r\n }\r\n else\r\n {\r\n this.rolesTable.selectedRow!.row\r\n .set(e.fieldName, \r\n this.departmentMatrixVirtualSection.fields.getField(e.fieldName)?.$value);\r\n }\r\n\r\n this._disposer = reaction(() => this.rolesTable.selectedRow, () => {this.SetVirtualFields(this.rolesTable.selectedRow!)});\r\n\r\n if (e.fieldName == \"IsActive\")\r\n {\r\n const stageControl = this.model.controls.get(\"StageControl\");\r\n const orderStageControl = this.model.controls.get(\"OrderStageControl\");\r\n const limitStageControl = this.model.controls.get(\"LimitStageControl\");\r\n const usersStageControl = this.model.controls.get(\"UsersStageControl\");\r\n const criteriaControl = this.model.controls.get(\"CriteriaControl\");\r\n\r\n if (stageControl && orderStageControl && limitStageControl && usersStageControl && criteriaControl)\r\n {\r\n if (Guid.equals(this.rolesTable.selectedRow!.row.getField(\"RoleID\")?.$value, PkMatrixApprovementRoleHelper.ConsolidatingDepartmentID))\r\n {\r\n usersStageControl.isReadOnly = !e.fieldValue;\r\n }\r\n else\r\n {\r\n stageControl.isReadOnly = !e.fieldValue;\r\n orderStageControl.isReadOnly = !e.fieldValue;\r\n limitStageControl.isReadOnly = !e.fieldValue;\r\n criteriaControl.isReadOnly = !e.fieldValue;\r\n\r\n let criteriaTable = criteriaControl as GridViewModel;\r\n criteriaTable.rowInitializing.add(async (c) => {\r\n if(c.action === GridRowAction.Opening)\r\n {\r\n c.cancel = !e.fieldValue;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n } \r\n }\r\n\r\n public async ShowDialogAsync(tabAlias)\r\n {\r\n let context: IUIContext = UIContext.current;\r\n let editor: ICardEditorModel | null = context.cardEditor;\r\n const dialogType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkMatrixDialogs');\r\n if (!dialogType) {\r\n return;\r\n }\r\n const dialogForm = dialogType.forms.find(x => x.name === tabAlias);\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {return;}\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n const copyOnlySelectedRolesControl = windowCardModel.controls.get(\"CopyOnlySelectedRoles\");\r\n if (!copyOnlySelectedRolesControl) {return;}\r\n const sectionPkMatrixDialogs = windowCardModel.card.sections.get(\"PkMatrixDialogs\");\r\n if (sectionPkMatrixDialogs)\r\n {\r\n copyOnlySelectedRolesControl.isReadOnly =sectionPkMatrixDialogs.fields.getField(\"CopyFullMatrix\")?.$value as boolean;\r\n\r\n sectionPkMatrixDialogs.fields.fieldChanged.add(e =>\r\n {\r\n if (e.fieldName == \"CopyFullMatrix\")\r\n {\r\n copyOnlySelectedRolesControl.isReadOnly = e.fieldValue as boolean;\r\n\r\n if (e.fieldValue as boolean)\r\n {\r\n windowCardModel.card.sections.get(\"PkMatrixDepartmentRoles\")?.rows.clear();\r\n }\r\n }\r\n });\r\n } \r\n },\r\n [\r\n new UIButton('Копировать', async (btn) => {\r\n await btn.close();\r\n if (!editor) {return;}\r\n\r\n var departmentList : object[] = [];\r\n var rolesList : object[] = [];\r\n\r\n const filedDepartmentID = windowCardModel.card.sections.get(\"PkMatrixDialogs\")?.fields.getField(\"DepartmentID\")?.$value as guid;\r\n if (filedDepartmentID)\r\n {\r\n departmentList.push(createTypedField(filedDepartmentID, DotNetType.Guid));\r\n }\r\n\r\n windowCardModel.card.sections.get(\"PkMatrixDialogsDepartments\")?.rows.map(x => x.getField(\"DepartmentID\")?.$value as guid).forEach(x =>\r\n {\r\n departmentList.push(createTypedField(x, DotNetType.Guid));\r\n }\r\n );\r\n\r\n windowCardModel.card.sections.get(\"PkMatrixDepartmentRoles\")?.rows.map(x => x.getField(\"RoleID\")?.$value as guid).forEach(x =>\r\n {\r\n rolesList.push(createTypedField(x, DotNetType.Guid));\r\n }\r\n );\r\n\r\n // подтверждение копирования, если родительская матрица заполнена.\r\n let confirmationMessage = '';\r\n if (tabAlias == \"CopyFromDepartment\") {\r\n let pkDepartmentsSection = editor.cardModel?.card.sections.get(\"PkDepartments\");\r\n if (pkDepartmentsSection && pkDepartmentsSection.fields.get(\"ParentMatrixID\") != null) {\r\n confirmationMessage = \"Вы собираетесь внести изменение в матрицу, связь с родительской будет разорвана и матрица станет индивидуальной. Продолжить?\";\r\n }\r\n }\r\n else {\r\n let depNames = windowCardModel.card.sections.get(\"PkMatrixDialogsDepartments\")?.rows.map(x => x.getField(\"DepartmentName\")?.$value as string).join(', ');\r\n confirmationMessage = `У следующих подразделений может существовать связь с родительской матрицей: ${depNames}. Связь в них будет разорвана и матрица станет индивидуальной. Продолжить?`;\r\n }\r\n\r\n if (confirmationMessage.length > 0 && !await showConfirm(confirmationMessage)) {\r\n return; \r\n }\r\n\r\n const storeInfo = {\r\n \"CopyFullMatrix\": windowCardModel.card.sections.get(\"PkMatrixDialogs\")?.fields.get(\"CopyFullMatrix\") as boolean,\r\n \"TabAlias\": tabAlias,\r\n \"RoleList\": rolesList,\r\n \"DepartmentList\": departmentList\r\n };\r\n await editor.saveCard(context, storeInfo);\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n } \r\n private async CheckMatrixChanges(context: ICardUIExtensionContext)\r\n {\r\n // Если есть родительская матрица и внесены изменения в дочернюю\r\n const PkDepartmentsSection = context.card.sections.get(\"PkDepartments\");\r\n if (PkDepartmentsSection \r\n && PkDepartmentsSection.fields.getField(\"ParentMatrixID\")\r\n && (context.card.sections.get(\"PkMatrixDepartmentRoles\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaContractCategoryList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaContractTypeList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaContractKindList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaCostItemList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaDefaultUserList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaInitiatorList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaSignedList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaPartnerList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaTaskTypeList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaUserList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaRegionList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaProjectList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaObjectList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaBuyerList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaSellerList\")?.hasChanges()\r\n || context.card.sections.get(\"PkMatrixCriteriaOtherList\")?.hasChanges())) {\r\n let answer = await showConfirm(\"Вы собираетесь внести изменение в дочернюю матрицу, связь с родительской будет разорвана и матрица станет индивидуальной. Разорвать связь?\")\r\n if (answer) {\r\n // Очищаем поле \"Родительская матрица\". Из родительской матрицы дочерняя удалится в серверном расширении\r\n const PkDepartmentsSection = context.card.sections.get(\"PkDepartments\");\r\n if (PkDepartmentsSection) {\r\n PkDepartmentsSection.fields.set(\"ParentMatrixID\", null);\r\n PkDepartmentsSection.fields.set(\"ParentMatrixINN\", null);\r\n PkDepartmentsSection.fields.set(\"ParentMatrixName\", null);\r\n PkDepartmentsSection.fields.set(\"ParentMatrixKPP\", null);\r\n }\r\n }\r\n else {\r\n context.cancel = true;\r\n }\r\n }\r\n else if (PkDepartmentsSection\r\n && PkDepartmentsSection.hasChanges() \r\n && PkDepartmentsSection.getAllChanges().indexOf(\"ParentMatrixID\") !== -1\r\n && PkDepartmentsSection.fields.getField(\"ParentMatrixID\") == null) {\r\n if (!await showConfirm(\"Вы собираетесь внести изменение в дочернюю матрицу, связь с родительской будет разорвана и матрица станет индивидуальной. Разорвать связь?\")) {\r\n context.cancel = true;\r\n }\r\n }\r\n } \r\n\r\n /** Уведомление о замене матрицы на родительскую при добавлении в таблицу Связанные организации. */\r\n private async MatrixRelatedOrganizationsReplaceQuestionAsync(context: ICardUIExtensionContext)\r\n {\r\n const pkMatrixRelatedOrganizationsControl = context.model.controls.get('PkMatrixRelatedOrganizationsControl') as GridViewModel;\r\n\r\n pkMatrixRelatedOrganizationsControl.rowEditorClosing.add(async e =>\r\n {\r\n if (!e.cancel)\r\n {\r\n if(context.model.card.id == e.row.getField(\"OrganizationID\")?.$value)\r\n {\r\n await showMessage(\"Карточка не может ссылаться на саму себя\")\r\n e.cancel = true;\r\n }\r\n else if(context.card.sections.get(\"PkDepartments\")?.fields.tryGetField(\"ParentMatrixID\")?.$value == e.row.getField(\"OrganizationID\")?.$value)\r\n {\r\n await showMessage(\"Организация не может быть добавлена в родительскую и дочернюю одновременно.\");\r\n e.cancel = true;\r\n }\r\n else\r\n { \r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractCheckFilledMatrixExistsRequest;\r\n request.info[\"CardID\"] = createTypedField(e.row.getField(\"OrganizationID\")?.$value, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n \r\n if (!response.validationResult.isSuccessful) { \r\n showNotEmpty(response.validationResult.build());\r\n return;\r\n }\r\n \r\n let responseInfo = response.tryGetInfo();\r\n let isFilledMatrixExists:boolean = responseInfo!.isFilledMatrixExists.$value ?? false;\r\n \r\n if (isFilledMatrixExists && !await showConfirm(\"Старая матрица будет заменена на родительскую. Продолжить?\"))\r\n {\r\n e.cancel = true;\r\n }\r\n }\r\n } \r\n });\r\n }\r\n\r\n /** Открытие карточки подразделения из таблицы Связанные организации */\r\n private async MatrixRelatedOrganizationsOpenCardAsync(context: ICardUIExtensionContext)\r\n {\r\n let pkMatrixRelatedOrganizationsControl = context.model.controls.get(\"PkMatrixRelatedOrganizationsControl\") as GridViewModel; \r\n\r\n if (!pkMatrixRelatedOrganizationsControl) {\r\n return;\r\n }\r\n pkMatrixRelatedOrganizationsControl.rowInitializing.add(async (e) => {\r\n \r\n if(e.action === GridRowAction.Opening)\r\n {\r\n const cardID = e.row.tryGetField(\"OrganizationID\")?.$value;\r\n if(cardID){ \r\n e.cancel = true;\r\n await showLoadingOverlay(async () => {\r\n await openCard({\r\n cardId : cardID,\r\n cardTypeId: PkCardTypes.DepartmentRoleTypeID,\r\n context: context.uiContext\r\n });\r\n });\r\n }\r\n }\r\n });\r\n } \r\n\r\n /** Если в связанных матрицах уже указаны дочерние организации и пользователь выберет в поле “родительская матрица” значение, тогда система должна отобразить окно-уведомление */\r\n private async MatrixParentMatrixWithChildQuestionAsync(context: ICardUIExtensionContext)\r\n {\r\n const parentMatrixControl = context.model.controls.get('ParentMatrixControl') as AutoCompleteEntryViewModel;\r\n const pkMatrixRelatedOrganizationsControl = context.model.controls.get('PkMatrixRelatedOrganizationsControl') as GridViewModel;\r\n const pkMatrixRelatedOrganizationsSection = context.model.card.sections.tryGet(\"PkMatrixRelatedOrganizations\"); \r\n\r\n if(parentMatrixControl && pkMatrixRelatedOrganizationsSection)\r\n {\r\n \r\n if(context.card.sections.get(\"PkDepartments\")?.fields.tryGetField(\"ParentMatrixID\"))\r\n {\r\n pkMatrixRelatedOrganizationsControl.isReadOnly = true;\r\n }\r\n\r\n parentMatrixControl.valueSet.add(async(e) =>\r\n {\r\n if(pkMatrixRelatedOrganizationsSection.rows.find(x => x.tryGet('OrganizationName') == e.item.displayText))\r\n {\r\n await showMessage(\"Организация не может быть добавлена в родительскую и дочернюю одновременно.\");\r\n parentMatrixControl.deleteItem();\r\n }\r\n else if (pkMatrixRelatedOrganizationsSection?.tryGetRows() != null\r\n && !await showConfirm(\"Данное подразделение является родительским. \\rПри внесении в поле “родительский документ” значения связь с имеющимися связанными дочерними организациями будет разорвана. Связанные организации будут наследовать матрицу организации, которую вы выбрали в поле “родительская матрица”.\\rПродолжить?\"))\r\n {\r\n parentMatrixControl.deleteItem();\r\n }\r\n else\r\n {\r\n pkMatrixRelatedOrganizationsControl.isReadOnly = true;\r\n } \r\n });\r\n\r\n parentMatrixControl.valueDeleted.add(() =>\r\n {\r\n pkMatrixRelatedOrganizationsControl.isReadOnly = false;\r\n })\r\n }\r\n }\r\n\r\n /** Проверка наличия роли Консолидирующий УДО */\r\n private async CheckMatrixConsolidatindAsync(context: ICardUIExtensionContext)\r\n {\r\n let card = context.model.card;\r\n if (card == null)\r\n {\r\n return;\r\n }\r\n\r\n let pkMatrixDepartmentRoles = card.sections.tryGet(\"PkMatrixDepartmentRoles\");\r\n\r\n if(pkMatrixDepartmentRoles)\r\n {\r\n // Если нет ни одного активного критерия\r\n // или реквизит \"Сотрудник\" для роли \"Консолидирующий УДО\" заполнен - изменения сохраняются по матрице\r\n if(pkMatrixDepartmentRoles?.rows.find(x => x.tryGet(\"StageID\") != null) == null\r\n || pkMatrixDepartmentRoles?.rows.find(x => Guid.equals(x.tryGet(\"RoleID\"), PkMatrixApprovementRoleHelper.ConsolidatingDepartmentID) && x.tryGet(\"StageID\") != null))\r\n {\r\n return;\r\n }\r\n\r\n if(await showConfirm(\"Для данной матрицы согласования не определены сотрудники, выступающие в роли \\\"Консолидирующий (УДО)\\\". Сотрудники в данной роли необходимы для расчета этапа \\\"Подписание\\\" по формируемым договорным документам. Сохранить настройки матрицы без данной роли?\"))\r\n {\r\n return;\r\n }\r\n else\r\n {\r\n context.cancel = true;\r\n } \r\n }\r\n }\r\n}","import { ICardModel, CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { DefaultFormMainViewModel } from 'tessa/ui/cards/forms';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { showMessage, showNotEmpty, tryGetFromInfo } from 'tessa/ui';\r\nimport { reaction } from 'mobx';\r\nimport { Card, CardSection, CardRowState } from 'tessa/cards';\r\nimport { Visibility } from 'tessa/platform';\r\nimport { IStorage } from 'tessa/platform/storage';\r\n\r\nexport class ChangesUIExtension extends CardUIExtension {\r\n private disposer: (Function | null) = null;\r\n private getCardChangesDataRequestID = '5a06efb6-cb03-4566-b932-d6cf3a32f875';\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (!context.model || !context.model.card) {\r\n return;\r\n }\r\n\r\n const model = context.model;\r\n\r\n const changesTab = context.model.forms.find(x => x.name === 'ChangesTab');\r\n if (!changesTab) {\r\n return;\r\n }\r\n\r\n const fdChangesTab = context.model.forms.find(x => x.name === 'FdChangesTab');\r\n if (fdChangesTab) {\r\n fdChangesTab.visibility = Visibility.Hidden;\r\n }\r\n\r\n const isFdChangesTabVisible: boolean = tryGetFromInfo(model.card.info, 'IsChangesTabVisible', false);\r\n const fdChangesTableVirtualSection = model.card.sections.tryGet('ChangesTableVirtual');\r\n // скроем вкладку, если в Info карточки явно не указано, что вкладка доступна пользователю\r\n // либо если по какой то причине нет секции для отчетов\r\n if (!isFdChangesTabVisible || !fdChangesTableVirtualSection) {\r\n changesTab.visibility = Visibility.Hidden;\r\n return;\r\n }\r\n\r\n const mainView = context.model.mainForm as DefaultFormMainViewModel;\r\n if (!mainView) {\r\n return;\r\n }\r\n\r\n // загружать будем только один раз с момента загрузки карточки\r\n let dataWasLoaded: boolean = false;\r\n this.disposer = reaction(\r\n () => mainView.selectedTab,\r\n async tab => {\r\n if (tab === changesTab && !dataWasLoaded) {\r\n dataWasLoaded = true;\r\n await this.loadChangesTableData(model, fdChangesTableVirtualSection);\r\n }\r\n });\r\n }\r\n\r\n public finalized() {\r\n if (this.disposer) {\r\n this.disposer();\r\n this.disposer = null;\r\n }\r\n }\r\n\r\n private async tryGetFdChangesData(cardID: string, cardTypeID: string): Promise {\r\n let card: Card | null = null;\r\n const request = new CardRequest();\r\n request.requestType = this.getCardChangesDataRequestID;\r\n request.cardId = cardID;\r\n request.cardTypeId = cardTypeID;\r\n const response = await CardService.instance.request(request);\r\n const responseResult = response.validationResult.build();\r\n if (!responseResult.isSuccessful) {\r\n await showNotEmpty(responseResult);\r\n }\r\n else {\r\n const data = tryGetFromInfo(response.info, 'ChangesCardStorage');\r\n if (data) {\r\n card = new Card(data);\r\n }\r\n }\r\n return card;\r\n }\r\n\r\n private async loadChangesTableData(model: ICardModel, fdChangesTableVirtualSection: CardSection) {\r\n const changesCard = await this.tryGetFdChangesData(model.card.id, model.card.typeId);\r\n if (!changesCard) {\r\n showMessage(\"no change\");\r\n return;\r\n }\r\n const sourceChangesTableVirtualSection = changesCard.sections.tryGet('ChangesTableVirtual');\r\n if (!sourceChangesTableVirtualSection) {\r\n showMessage(\"no section \" + changesCard.id.toString() + \" ,\" + changesCard.typeId.toString());\r\n return;\r\n }\r\n fdChangesTableVirtualSection.rows.collectionChanged.clear();\r\n const loopTable = sourceChangesTableVirtualSection.rows;\r\n for (let i = 0; i < loopTable.length; ++i) {\r\n loopTable[i].state = CardRowState.None;\r\n fdChangesTableVirtualSection.rows.add(loopTable[i]);\r\n }\r\n }\r\n}","import { FileExtension, IFileExtensionContext } from 'tessa/ui/files';\r\nimport { MenuAction, } from 'tessa/ui';\r\nimport { FileViewModel } from 'tessa/ui/cards/controls';\r\nimport { showView } from 'tessa/ui/uiHost';\r\nimport { RequestParameterBuilder, ViewService } from 'tessa/views';\r\nimport { equalsCriteriaOperator, RequestParameter } from 'tessa/views/metadata';\r\n\r\nexport class HistoryContextMenuFileExtensions extends FileExtension {\r\n public async openingMenu(context: IFileExtensionContext) {\r\n let action = context.actions.find(action => action.name === \"FileHistory\");\r\n if (!action) {\r\n context.actions.push(new MenuAction(\r\n \"FileHistory\",\r\n \"История\",\r\n \"ta icon-thin-093\",\r\n async () => await this.GetFileHistory(context.file),\r\n null,\r\n false));\r\n return;\r\n }\r\n\r\n let checkEDSActionIndex = context.actions.indexOf(action);\r\n context.actions[checkEDSActionIndex] = new MenuAction(\r\n \"FileHistory\",\r\n \"История\",\r\n \"ta icon-thin-093\",\r\n async () => await this.GetFileHistory(context.file),\r\n null,\r\n false);\r\n }\r\n\r\n private async GetFileHistory(file: FileViewModel) {\r\n const view = await ViewService.instance.getByName('FileHistory');\r\n if (!view) {\r\n return;\r\n }\r\n\r\n let parameter = new RequestParameterBuilder()\r\n .withMetadata(view.metadata.parameters.get('FileId')!)\r\n .addCriteria(equalsCriteriaOperator(), '', file.id)\r\n .asRequestParameter();\r\n let requestparameters: RequestParameter[] = [parameter];\r\n await showView(\r\n {\r\n viewAlias: 'FileHistory',\r\n displayValue: 'История работы с электронным документом.',\r\n parameters: requestparameters\r\n }\r\n );\r\n }\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { ArTableUIExtension } from './ArTableUIExtension';\r\nimport { ChArStateHideUIExtension } from './ChArStateHideUIExtension';\r\nimport { ChCaseNomenclatureUIExtension } from './ChCaseNomenclatureUIExtension';\r\nimport { PkAddVirtualFileUIExtension } from './PkAddVirtualFileUIExtension';\r\nimport { PkCardGridViewsUIExtension } from './PkCardGridViewsUIExtension';\r\nimport { PkCardPreviewUIExtension } from './PkCardPreviewUIExtension';\r\nimport { PkContractFilesVirtualUIExtension } from './PkContractFilesVirtualUIExtension';\r\nimport { AddSignedIconToVirtualFilesUIExtension } from './AddSignedIconToVirtualFilesUIExtension';\r\nimport { ArDocumentConstructorUIExtension } from './ArDocumentConstructorUIExtension';\r\nimport { PkUISettingsUIExtension } from './PkUISettingsUIExtension';\r\nimport { PkDocumentRecognitionUIExtension } from './PkDocumentRecognitionUIExtension';\r\nimport { PkMatrixUIExtension } from './PkMatrixUIExtension';\r\nimport { ChangesUIExtension } from './ChangesUIExtension';\r\nimport { HistoryContextMenuFileExtensions } from './HistoryContextMenuFileExtensions';\r\n\r\n\r\nExtensionContainer.instance.registerExtension({extension: ArTableUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChangesUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChArStateHideUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChCaseNomenclatureUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkAddVirtualFileUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkCardGridViewsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkCardPreviewUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkContractFilesVirtualUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArDocumentConstructorUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: AddSignedIconToVirtualFilesUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkUISettingsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkDocumentRecognitionUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkMatrixUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: HistoryContextMenuFileExtensions, stage: ExtensionStage.AfterPlatform});","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType, getTypedFieldValue } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ArrayStorage, IStorage } from 'tessa/platform/storage';\r\nimport { CardTask, CardTaskAction, CardRowState } from 'tessa/cards';\r\nimport { ChTaskTypes } from 'src/pkScripts/Helpers/ChTaskTypes';\r\nimport { ChProcessHelper } from 'src/pkScripts/Helpers/ChProcessHelper';\r\nimport { showNotEmpty, showConfirm, showMessage, UIContext, LoadingOverlay, createCardModel, UIButton } from 'tessa/ui';\r\nimport { ArTaskTypes } from 'src/pkScripts/Helpers/ArTaskTypes';\r\nimport { ArCompleteOptions } from 'src/pkScripts/Helpers/ArCompleteOptions';\r\nimport { TessaEDocumentKinds } from 'src/pkScripts/Helpers/PkPrimaryDocsHelper';\r\nimport { CardNewRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { createCard, openCard, showFormDialog } from 'tessa/ui/uiHost';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { KrToken } from 'tessa/workflow';\r\n\r\nexport class ChCompleteTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if (!(\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkIncomingTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkMemoTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkOutgoingTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.RdndTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkInternalDocumentationTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkAssignmentTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkLetterCreditTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.InstructionTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.ArActTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.ArDocumentIdpTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.TechnicalDocumentationTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkProtocolTenderTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.ArEDocumentTypeID) ||\r\n Guid.equals(context.model.card.typeId, PkCardTypes.PkPacketVirtualTypeID)\r\n )) {\r\n return;\r\n }\r\n let tasks = context.card.tasks;\r\n if (tasks == null || tasks.length < 1) {\r\n return;\r\n }\r\n\r\n await this.CheckCreateCopyCard(context,tasks);\r\n await this.CheckDateRegistration(context,tasks);\r\n await this.CheckApprovers(context, tasks);\r\n await this.CheckDocumentIsSignedEvent(context, tasks);\r\n await this.SendToESUD(context, tasks);\r\n await this.CheckDefineDocumentType(context, tasks);\r\n await this.CheckTaskUsers(context, tasks);\r\n }\r\n\r\n private async CheckApprovers(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (t.typeId === ChTaskTypes.PkStartAgreementProcessTypeID ||\r\n t.typeId === ChTaskTypes.PkRejectApprovalTypeID) &&\r\n (t.action === CardTaskAction.Complete) &&\r\n (t.optionId === ChProcessHelper.ForApproval ||\r\n t.optionId === ChProcessHelper.SendForResubscriptionID));\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n let ptcuSection = task.card.sections.tryGet('PkTaskChanceryUsers');\r\n if (ptcuSection == null) return;\r\n let exist = false;\r\n for (let r of ptcuSection.rows) {\r\n if (r.state === CardRowState.Deleted) {\r\n continue;\r\n }\r\n exist = true;\r\n }\r\n if (!exist) {\r\n const result = await showConfirm(\"Вы уверены что хотите отправить документ без списка согласующих?\");\r\n if (!result) {\r\n context.cancel = true;\r\n }\r\n }\r\n }\r\n\r\n public async copyCardAction() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n if (uiContext == null || editor == null ||\r\n (model = editor.cardModel) == null ||\r\n model.card == null) {\r\n return;\r\n }\r\n \r\n const baseCard = editor.cardModel!.card;\r\n const requestInfo: IStorage = {};\r\n requestInfo['KrCreateBasedOnCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n requestInfo['KrCreateBasedOnCopyFiles'] = createTypedField(true, DotNetType.Boolean);\r\n requestInfo['CustomCopyFiles'] = createTypedField(true, DotNetType.Boolean);\r\n const baseCardToken = KrToken.tryGet(baseCard.info);\r\n if (baseCardToken != null) {\r\n const tokenStorage: IStorage = {};\r\n baseCardToken.setInfo(tokenStorage);\r\n requestInfo['KrCreateBasedOnToken'] = tokenStorage;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: model.cardType.id,\r\n cardTypeName: model.cardType.name,\r\n info: requestInfo,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn'\r\n });\r\n });\r\n }\r\n\r\n private async CheckCreateCopyCard(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (t.typeId === ChTaskTypes.PkReviewOutgoingTypeID) &&\r\n (t.action === CardTaskAction.Complete) &&\r\n (t.optionId === ChProcessHelper.PkSendRepeat));\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n let ptcuSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (ptcuSection == null) return;\r\n \r\n var receivingMethodID = ptcuSection.fields.get(\"ReceivingMethodID\"); \r\n\r\n if (receivingMethodID == null || receivingMethodID != 13) //ЭДО\r\n {\r\n return;\r\n }\r\n \r\n await this.copyCardAction();\r\n \r\n }\r\n\r\n private async CheckDateRegistration(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (t.typeId === ChTaskTypes.PkRegisterFirstTastTypeID) &&\r\n (t.action === CardTaskAction.Complete) &&\r\n (t.optionId === ChProcessHelper.PkRegisterDocument));\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n let ptcuSection = context.model.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (ptcuSection == null) return;\r\n \r\n var receivingMethodID = ptcuSection.fields.get(\"ReceivingMethodID\"); \r\n\r\n if (receivingMethodID == null || receivingMethodID != 13) //ЭДО\r\n {\r\n return;\r\n }\r\n \r\n let dateNow = new Date(); \r\n \r\n if(dateNow.getHours()>=17)\r\n {\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'PkOldRegistration');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n let needrefresh=false;\r\n \r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n \r\n context.cancel = true;\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n },\r\n [\r\n new UIButton('Отправить на подписание', async (btn) => {\r\n context.cancel = false;\r\n btn.close();\r\n }),\r\n new UIButton('Поставить в очередь', async (btn) => {\r\n context.cancel = true;\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkPrepareOutgoingForSendingDiadoc;\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n request.info[\"TaskID\"] = createTypedField(task?.rowId, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n response.validationResult.build();\r\n \r\n btn.close();\r\n\r\n if (response.validationResult.isSuccessful) \r\n {\r\n needrefresh=true; \r\n \r\n }\r\n\r\n }),\r\n ]\r\n );\r\n if(needrefresh)\r\n {\r\n window.setTimeout(function(){\r\n let uiContext = context.uiContext;\r\n let editor = uiContext.cardEditor;\r\n if(editor!=null)\r\n editor?.refreshCard(context.uiContext); \r\n }, 1000);\r\n \r\n }\r\n }\r\n \r\n\r\n }\r\n\r\n private async CheckDocumentIsSignedEvent(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n if (context.model.card.typeId === PkCardTypes.RdndTypeID ||\r\n context.model.card.typeId === PkCardTypes.PkInternalDocumentationTypeID) {\r\n return;\r\n }\r\n\r\n let task = tasks.find(t => (t.typeId === ChTaskTypes.PkStartAgreementProcessTypeID) &&\r\n (t.action === CardTaskAction.Complete) &&\r\n (t.optionId === ChProcessHelper.DocumentIsSigned));\r\n if (task == null) {\r\n return;\r\n }\r\n const result = await showConfirm(\"Вы точно хотите отправить подписанный на бумажном экземпляре документ?\");\r\n if (!result) {\r\n context.cancel = true;\r\n }\r\n}\r\n\r\n // Отправка в ЕСУД (заглушка)\r\n private async SendToESUD(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (t.typeId === ArTaskTypes.PkEDocumentSendToEsudTypeID) &&\r\n (t.action === CardTaskAction.Complete) &&\r\n (t.optionId === ArCompleteOptions.SendToEsud));\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n await showMessage(\"Передача в ЕСУД невозможна на Web-клиенте.\\nПожалуйста, перейдите в Windows-клиент.\");\r\n\r\n context.cancel = true;\r\n }\r\n\r\n // Определить вид документа\r\n private async CheckDefineDocumentType(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (t.typeId === ArTaskTypes.PkEDocumentProcessingTypeID) &&\r\n (t.action === CardTaskAction.Complete) &&\r\n (t.optionId === ArCompleteOptions.DefineDocumentType));\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n let archiveActSection = context.model.card.sections.tryGet('ArchiveAct');\r\n if (archiveActSection == null) return;\r\n\r\n let documentKindID = archiveActSection.fields.tryGet(\"DocumentKindID\");\r\n let uiContext = UIContext.current;\r\n if (uiContext == null) return;\r\n let editor = uiContext.cardEditor;\r\n if (editor == null) return;\r\n let model = editor.cardModel;\r\n if (model == null) return;\r\n\r\n // конвертация ЭД в ПД\r\n if (TessaEDocumentKinds.EDocumentShouldBeConverted.some(x => x === documentKindID)) {\r\n let changesMessage = model.hasChanges() ?\r\n \"\\nВ карточке имеются несохраненные данные. При конвертации они будут потеряны.\" : \"\";\r\n\r\n // предупреждение\r\n let dialogResult = await showConfirm(\r\n \"Выбранный вид документа предполагает конвертацию в первичный документ.\" +\r\n changesMessage +\r\n \"\\nВы уверены, что хотите продолжить?\");\r\n\r\n if (!dialogResult) {\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n // реквест на конвертацию ЭД в ПД\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.EDocumentConvertToAct;\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n request.info[\"DocumentKindID\"] = createTypedField(documentKindID, DotNetType.Guid);\r\n\r\n // проверка ответа\r\n let response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful) {\r\n context.validationResult.add(response.validationResult);\r\n return;\r\n }\r\n\r\n // получение полей из ответа\r\n let convertedNewCardID = getTypedFieldValue(response.info.ConvertedNewCardID);\r\n\r\n // проверка ID новой карточки\r\n if (convertedNewCardID == null) {\r\n return;\r\n }\r\n \r\n LoadingOverlay.instance.show(async() => {\r\n // открытие карточки\r\n await openCard({\r\n cardId: convertedNewCardID,\r\n context: uiContext\r\n });\r\n editor!.close(true);\r\n });\r\n // показываем сообщение\r\n showMessage(\"Карточка успешно была сконвертирована в первичный документ!\");\r\n }\r\n\r\n // отклонение в диадок\r\n else if (TessaEDocumentKinds.EDocumentShouldSendRejectToDiadoc.some(x => x === documentKindID)) {\r\n // предупреждение\r\n let dialogResult = await showConfirm(\r\n \"Выбранный вид документа предполагает отправку отклонения в Диадок.\" +\r\n \"\\nВы уверены, что хотите продолжить?\");\r\n\r\n if (!dialogResult) {\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n \r\n private async CheckTaskUsers(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n if(context.card.typeId !=PkCardTypes.PkOutgoingTypeID && context.card.typeId != PkCardTypes.PkIncomingTypeID) return\r\n let task = tasks.find(t => t.typeId.toLowerCase() === ChTaskTypes.PkStartPerformanceProcessTaskTypeID.toLowerCase() &&\r\n t.action === CardTaskAction.Complete &&\r\n t.optionId === ChProcessHelper.SendToPerformer.toLowerCase());\r\n \r\n if (task == null) {\r\n return;\r\n }\r\n var usersID : object[] = [];\r\n let pktpSection = task.card.sections.tryGet('PkTaskPerformers');\r\n if(pktpSection==null) return;\r\n pktpSection!.rows.forEach(row =>\r\n {\r\n if (row.state != CardRowState.Deleted)\r\n { \r\n usersID.push(createTypedField(row.tryGet(\"RoleID\"),DotNetType.Guid)); \r\n }\r\n });\r\n if(usersID!=null && usersID.length>0)\r\n {\r\n const request = new CardRequest();\r\n\r\n request.requestType = PkRequestTypes.PkCheckActiveTasks;\r\n request.info[\"Users\"] = usersID; \r\n request.cardId=context.card.id;\r\n \r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (response.validationResult.isSuccessful) \r\n { \r\n if(response.info!=null && response.info.ResultText!=null) \r\n {\r\n let resulttext = response.info.ResultText;\r\n const result = await showConfirm(resulttext.$value);\r\n if (!result) {\r\n context.cancel = true;\r\n }\r\n } \r\n } \r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { ChTaskTypes } from 'src/pkScripts/Helpers/ChTaskTypes';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\n\r\n\r\nexport class PkApproversAgreementUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks == null || tasks.length < 1) return;\r\n let hideAddAgreementOprion = context.model.card.typeId !== PkCardTypes.ArActTypeID &&\r\n context.model.card.typeId !== PkCardTypes.ArEDocumentTypeID &&\r\n context.model.card.typeId !== PkCardTypes.PkWorkOrderTypeID &&\r\n context.model.card.typeId !== PkCardTypes.PkLetterCreditTypeID;\r\n for (let task of tasks) {\r\n // при инциализации формы\r\n this.HideCreateAddAgreement(task, hideAddAgreementOprion);\r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(e => this.HideCreateAddAgreement(e.task, hideAddAgreementOprion));\r\n }\r\n }\r\n\r\n private HideCreateAddAgreement(task: TaskViewModel, hideAddAgreementOprion: boolean) {\r\n if (task.taskModel.cardType.id !== ChTaskTypes.PkApproversAgreementTypeID || !hideAddAgreementOprion) {\r\n return;\r\n }\r\n const actionIndexToRemove = task.taskWorkspace.actions\r\n .findIndex(x => x.completionOption !== null && x.completionOption.id === PkFdProcessHelper.CreateAddAgreement);\r\n if (actionIndexToRemove >= 0) {\r\n task.taskWorkspace.actions.splice(actionIndexToRemove, 1);\r\n }\r\n else {\r\n const additionalActionIndexToRemove = task.taskWorkspace.additionalActions\r\n .findIndex(x => x.completionOption !== null && x.completionOption.id === PkFdProcessHelper.CreateAddAgreement);\r\n if (additionalActionIndexToRemove >= 0) {\r\n task.taskWorkspace.additionalActions.splice(additionalActionIndexToRemove, 1);\r\n }\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { Card } from 'tessa/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { ChTaskTypes } from 'src/pkScripts/Helpers/ChTaskTypes';\r\nimport { ChProcessHelper } from 'src/pkScripts/Helpers/ChProcessHelper';\r\n\r\nexport class PkHideOptionsUIExtension extends CardUIExtension {\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (!context.model || !context.model.card) {\r\n return;\r\n }\r\n if (!Guid.equals(context.card.typeId, PkCardTypes.PkIncomingTypeID)) \r\n return;\r\n \r\n const card = context.model.card;\r\n\r\n // скроем кнопки заданий\r\n this.HideTaskOptions(context, card);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n \r\n private HideTaskOptions(context: ICardUIExtensionContext, card: Card) {\r\n let cardSection = card.sections.tryGet(\"PkIncomingInfo\");\r\n if (cardSection == null || cardSection.fields.get('IsReApproval') != 1) \r\n return;\r\n \r\n\r\n // пытаемся получить все задания\r\n let tasks = context.model.tryGetTasks();\r\n if (!tasks) {\r\n return;\r\n }\r\n\r\n for (let task of tasks) {\r\n if(task.taskModel.card.typeId==ChTaskTypes.PkApprovalByCoordinator) \r\n this.RemoveHiddenActions(task);\r\n \r\n //task.workspaceChanged.add(e => this.removeHiddenActions(hiddenOptionsList, e.task));\r\n }\r\n }\r\n\r\n private RemoveHiddenActions(task: TaskViewModel) { \r\n let actionIndexToRemove = task.taskWorkspace.actions.findIndex(x => x.completionOption !== null && x.completionOption.id === ChProcessHelper.PkReturnToCoordinator);\r\n if (actionIndexToRemove >= 0) \r\n task.taskWorkspace.actions.splice(actionIndexToRemove, 1);\r\n actionIndexToRemove = task.taskWorkspace.actions.findIndex(x => x.completionOption !== null && x.completionOption.id === ChProcessHelper.PkReturnToCoordinators);\r\n if (actionIndexToRemove >= 0) \r\n task.taskWorkspace.actions.splice(actionIndexToRemove, 1); \r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { CdFdProcessHelper } from 'src/cdScripts/Helpers/CdFdProcessHelper';\r\nimport { CdFdTaskTypes } from 'src/cdScripts/Helpers/CdFdTaskTypes';\r\n\r\nexport class PkSignInDiadocTaskUIExtension extends CardUIExtension {\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (!context.model || !context.model.card) {\r\n return;\r\n }\r\n if (!Guid.equals(context.card.typeId, PkCardTypes.PkInnerDocumentTypeID))\r\n return;\r\n\r\n // скроем кнопки заданий\r\n this.HideTaskOptions(context);\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n\r\n private HideTaskOptions(context: ICardUIExtensionContext) {\r\n // пытаемся получить все задания\r\n let tasks = context.model.tryGetTasks();\r\n if (!tasks) {\r\n return;\r\n }\r\n\r\n for (let task of tasks) {\r\n if (task.taskModel.card.typeId === CdFdTaskTypes.PkSignInDiadocTypeID)\r\n this.RemoveHiddenActions(task);\r\n }\r\n }\r\n\r\n private RemoveHiddenActions(task: TaskViewModel) {\r\n let paperIndexToRemove = task.taskWorkspace.actions.findIndex(x => x.completionOption !== null\r\n && x.completionOption.id === CdFdProcessHelper.PkSignPaper);\r\n\r\n if (paperIndexToRemove >= 0)\r\n task.taskWorkspace.actions.splice(paperIndexToRemove, 1);\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardRowState } from 'tessa/cards';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\nimport { showError } from 'tessa/ui';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { PkMemoKinds } from 'src/pkScripts/Helpers/PkMemoKinds';\r\nimport { CdFdProcessHelper } from 'src/cdScripts/Helpers/CdFdProcessHelper';\r\nimport { ArUIHelper } from '../ArUIHelper';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { CardFilesInfo } from 'src/pkScripts/Helpers/PkCardHelper';\r\nimport { userSession } from 'common/utility';\r\n\r\n\r\nexport class PkSigningTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n let card = context.model.card;\r\n let tasks = context.card.tasks;\r\n if (tasks == null || tasks.length < 1) {\r\n return;\r\n }\r\n\r\n // Проверка файлов\r\n let intTask = tasks.find(t => (\r\n t.typeId.toLowerCase() === PkTaskTypes.PkSigningInitiationTypeID.toLowerCase() &&\r\n t.state === CardRowState.Deleted &&\r\n t.optionId !== null && t.optionId !== undefined &&\r\n t.optionId.toLowerCase() === CdFdProcessHelper.PkSendForSigning.toLowerCase()));\r\n if (intTask) {\r\n if (card.files.filter(x => x.categoryId !== null).length === 0) {\r\n context.cancel = true;\r\n showError('Отсутствуют файлы для подписания', 'Ошибка');\r\n return;\r\n }\r\n }\r\n\r\n // Подписание ПЭП/НЭП\r\n let task = tasks.find(t => (\r\n t.typeId.toLowerCase() === PkTaskTypes.PkSignTaskTypeID.toLowerCase() &&\r\n t.state === CardRowState.Deleted &&\r\n t.optionId !== null && t.optionId !== undefined &&\r\n t.optionId.toLowerCase() === PkFdProcessHelper.Sign.toLowerCase()));\r\n if (task) {\r\n let memoSection = card.sections.tryGet('PkMemoInfo');\r\n if (memoSection) {\r\n let kindID: string | null | undefined = memoSection.fields.tryGet('KindID');\r\n if (kindID) {\r\n // Подписание ПЭП\r\n if (kindID.toLocaleLowerCase() === PkMemoKinds.EdoTypeID.toLocaleLowerCase()) {\r\n context.card.info[\"AddSDSStamp\"] = true;\r\n }\r\n\r\n // Подписание НЭП\r\n if (kindID.toLocaleLowerCase() === PkMemoKinds.PersonnelDocumentsTypeID.toLocaleLowerCase()) {\r\n // инициализируем объект для подписания файлов карточки\r\n const cardFilesInfo = await CardFilesInfo.CreateAsync(\r\n context.card,\r\n context.fileContainer,\r\n userSession.UserID);\r\n\r\n // подписываем файлы\r\n await this.SignFilesAsync(context, cardFilesInfo);\r\n\r\n // добавляем ПФ\r\n await this.AddPrintFormsAsync(context, cardFilesInfo);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Подписание файлов. */\r\n private async SignFilesAsync(\r\n context: ICardUIExtensionContext,\r\n cardFilesInfo: CardFilesInfo) {\r\n // если не требуется добавление ПФ\r\n if (!cardFilesInfo.SigningInfo.IsNeedSigning) {\r\n return;\r\n }\r\n\r\n // подписание файлов\r\n const signingResult = await ArUIHelper.SignFilesAsync(\r\n Array.of(cardFilesInfo),\r\n context.model.edsProvider);\r\n\r\n // проверяем результат валидации\r\n if (!signingResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n signingResult.build().toString());\r\n\r\n // отменяем сохранение карточки\r\n context.cancel = true;\r\n }\r\n }\r\n\r\n /** Добавление ПФ. */\r\n private async AddPrintFormsAsync(\r\n context: ICardUIExtensionContext,\r\n cardFilesInfo: CardFilesInfo) {\r\n // проверяем наличие ошибок в контексте\r\n if (!context.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n // если не требуется добавление ПФ\r\n if (!cardFilesInfo.PrintFormsInfo.IsNeedAddPrintForms) {\r\n return;\r\n }\r\n\r\n // способ установки штампа\r\n const inserModeID: number = 0;\r\n\r\n // добавление файлов печатных форм\r\n const addPrintFormsResult = await ArUIHelper.AddPrintFormsAsync(\r\n Array.of(cardFilesInfo),\r\n inserModeID,\r\n \"Подписан неквалифицированной электронной подписью в системе Tessa\",\r\n false,\r\n false);\r\n\r\n // проверяем результат валидации\r\n if (!addPrintFormsResult.isSuccessful) {\r\n // записываем результат валидации в контекст\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при формировании печатных форм.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \\n\" +\r\n \"либо открыть его двойным кликом по ошибке и скопировать стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n addPrintFormsResult.build().toString());\r\n\r\n // отменяем сохранение карточки\r\n context.cancel = true;\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdTaskTypes } from 'src/cdScripts/Helpers/CdTaskTypes';\r\nimport { CdCommonHelper } from 'src/cdScripts/Helpers/CdCommonHelper';\r\nimport { createTypedField, DotNetType } from 'tessa/platform';\r\n\r\n\r\nexport class ArContractTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n if(context.model.card.typeId!=CdCardTypes.ArContractTypeID)\r\n return;\r\n\r\n if(context.model.card.tasks!=null)\r\n {\r\n context.model.card.tasks.forEach(x=>{\r\n if(x.typeId.toLowerCase() == CdTaskTypes.ArPreparationForSigningTypeID)\r\n {\r\n if(x.card!=null && x.card.sections.tryGet('ArTaskVirtual')!=null)\r\n {\r\n let t = x.card.sections.tryGet('ArTaskVirtual');\r\n if(t!=null) \r\n t.fields.fieldChanged.add(async e => {\r\n if(e.fieldName=='PartnerAutomated')\r\n { \r\n if(t!=null && e.fieldValue!=null) \r\n CdCommonHelper.SetFieldToSection(t, \"IsPartnerAutomated\", createTypedField(e.fieldValue,DotNetType.Boolean));\r\n if(t!=null && e.fieldValue==null)\r\n t.fields.set('IsPartnerAutomated',null);\r\n }\r\n });\r\n \r\n }\r\n }\r\n });\r\n }\r\n\r\n }\r\n \r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardRowState } from 'tessa/cards';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { CardGetRequest, CardService } from 'tessa/cards/service';\r\nimport { showNotEmpty } from 'tessa/ui';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { ChProcessHelper } from 'src/pkScripts/Helpers/ChProcessHelper';\r\n\r\nexport class PkTCOfferTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n let card = context.model.card;\r\n let tasks = context.card.tasks;\r\n if (tasks == null || tasks.length < 1) {\r\n return;\r\n }\r\n\r\n // Получаем карточку.\r\n\r\n var getRequest = new CardGetRequest;\r\n getRequest.cardId = card.id;\r\n var getResponse = await CardService.instance.get(getRequest);\r\n var getCard = getResponse.card;\r\n await showNotEmpty(getResponse.validationResult.build());\r\n if (!getResponse.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n // Проверка файлов.\r\n\r\n var contractorTask = tasks.find(t => t.typeId.toLowerCase() == PkTaskTypes.PkWorkScopeApprovingTypeID\r\n && t.state == CardRowState.Deleted\r\n && t.optionId != null\r\n && t.optionId == PkFdProcessHelper.Disapprove);\r\n if (contractorTask != null)\r\n {\r\n var cardUnsignedFileHash = card.files.find(\r\n f => f.categoryId?.toLowerCase() == ChFileCategories.PkTCOfferUnsigned.id)?.hash;\r\n\r\n var storedUnsignedFileHash = getCard.files.find(\r\n f => f.categoryId?.toLowerCase() == ChFileCategories.PkTCOfferUnsigned.id)?.hash;\r\n\r\n if (storedUnsignedFileHash != null\r\n && cardUnsignedFileHash == storedUnsignedFileHash)\r\n {\r\n if (confirm(\"Добавить файл ТКП?\"))\r\n {\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // Подтверждение прекращения согласования.\r\n\r\n var cancelTask = tasks.find(t => t.state == CardRowState.Deleted\r\n && t.optionId != null\r\n && t.optionId == ChProcessHelper.PkStopAgreement);\r\n if (cancelTask != null) {\r\n if (!confirm(\"Согласование прекратится. Продолжить?\")) {\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, Visibility} from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\n\r\nexport class PkHideControlTaskUIExtension extends CardUIExtension {\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null || context.model.card == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.PkLetterCreditTypeID)) {\r\n return;\r\n }\r\n\r\n let cardSection = context.model.card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n if (cardSection == null || cardSection.fields.get('StateID') != CdDocStates.OnApprovalDirectorOfInitiator.id) \r\n return;\r\n\r\n let tasks = context.model.tryGetTasks();\r\n if (tasks == null || tasks.length < 1) return;\r\n for (let task of tasks) {\r\n this.HideControl(task);\r\n task.workspaceChanged.add(e => this.HideControl(e.task));\r\n }\r\n }\r\n private async HideControl(taskModel: TaskViewModel) {\r\n const block = taskModel.taskModel.blocks.get('Block2');\r\n if (block == null)\r\n return;\r\n\r\n const control = block!.controls.find(x => x.name === 'PkDirectorOnDemand');\r\n\r\n if (control == null)\r\n return;\r\n\r\n control.controlVisibility = Visibility.Visible;\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from '../../Helpers/PkCardTypes';\r\nimport { Card, CardFileState, CardRowState } from 'tessa/cards';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\n\r\nexport class PkWorkOrderTaskUIExtension extends CardUIExtension {\r\n private _disposer: Function | null = null;\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n let card: Card;\r\n if ((card = context.model.card) == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkWorkOrderTypeID)) {\r\n return;\r\n }\r\n\r\n if (context.card.tasks.findIndex(x =>\r\n x.state === CardRowState.Deleted &&\r\n (x.typeId === PkTaskTypes.PkAdditionalOrderConsiderationTypeID ||\r\n x.typeId === PkTaskTypes.PkStartAdditionalOrderConsiderationTypeID) &&\r\n x.optionId !== null &&\r\n (x.optionId === PkFdProcessHelper.SubmitForExecution ||\r\n x.optionId === PkFdProcessHelper.SubmitForReview)) >= 0 &&\r\n card.files.findIndex(x =>\r\n x.state !== CardFileState.Deleted &&\r\n x.categoryId !== null &&\r\n x.categoryId.toLowerCase() === ChFileCategories.Primary.id) < 0) {\r\n context.cancel = true;\r\n context.validationResult.add(ValidationResultType.Error, 'Загрузите файл в категорию \"' + ChFileCategories.Primary.caption + '\"');\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { ArrayStorage } from 'tessa/platform/storage';\r\nimport { CardTask, CardTaskAction } from 'tessa/cards';\r\nimport { showMessage } from 'tessa/ui';\r\nimport { ArTaskTypes } from 'src/pkScripts/Helpers/ArTaskTypes';\r\nimport { ArCompleteOptions } from 'src/pkScripts/Helpers/ArCompleteOptions';\r\n\r\nexport class PkArticleStickerTaskUIExtension extends CardUIExtension {\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n }\r\n \r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n \r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkArticleStickerTypeID)) {\r\n return;\r\n }\r\n\r\n let tasks = context.card.tasks;\r\n if (tasks == null || tasks.length < 1) {\r\n return;\r\n }\r\n\r\n await this.CheckSendToESUDAsync(context, tasks);\r\n }\r\n\r\n // Отправка в ЕСУД (заглушка)\r\n private async CheckSendToESUDAsync(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n let task = tasks.find(t => Guid.equals(t.typeId, ArTaskTypes.PkArticleStickerSendToEsudTypeID) &&\r\n (t.action === CardTaskAction.Complete) &&\r\n Guid.equals(t.optionId, ArCompleteOptions.SendToEsud));\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n await showMessage(\"Передача в ЕСУД невозможна на Web-клиенте.\\nПожалуйста, перейдите в Windows-клиент.\");\r\n context.cancel = true;\r\n\r\n // откроем в толстом клиенте\r\n let location = window.location.pathname;\r\n location = location[0] == '/' ? location.substr(1) : location;\r\n location = location.slice(0, location.indexOf('/'));\r\n let openUrl = 'tessa://tessaclient.' + location + '/?Action=OpenCard&ID=' + context.model.card.id;\r\n window.open(openUrl, '_blank');\r\n }\r\n}","import { DotNetType, Guid } from 'tessa/platform';\r\nimport { CardRow, CardRowState } from 'tessa/cards';\r\nimport { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\n\r\nexport class PkActBecameResponsibleTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null ||\r\n context.model.card.tasks == null) {\r\n return;\r\n }\r\n \r\n context.model.card.tasks.forEach(x=>{\r\n if(x.typeId.toLowerCase() == PkTaskTypes.PkActBecameResponsibleTypeID \r\n && x.card != null \r\n && x.card.sections.tryGet('PkTaskResponsibles') != null)\r\n {\r\n x.card.sections.get('PkTaskResponsibles')?.rows.clear();\r\n\r\n let taskAuthorCardRow = new CardRow();\r\n taskAuthorCardRow.rowId = Guid.newGuid();\r\n taskAuthorCardRow.set('UserID', x.authorId, DotNetType.Guid);\r\n taskAuthorCardRow.set('UserName', x.authorName, DotNetType.String);\r\n taskAuthorCardRow.state = CardRowState.Inserted;\r\n\r\n x.card.sections.get('PkTaskResponsibles')?.rows.push(taskAuthorCardRow);\r\n }\r\n });\r\n\r\n }\r\n \r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\n\r\nexport class PkEksSettingsUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context?.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkEksSettingsCardTypeID)) {\r\n return;\r\n }\r\n\r\n this.InitializeProcessingSentTasksErrorsTable(context.model);\r\n this.InitializeProcessingReceiveTasksErrorsTable(context.model);\r\n }\r\n\r\n /** Инициализация таблички с ошибками отправки заданий. */\r\n private InitializeProcessingSentTasksErrorsTable(model: ICardModel) {\r\n // получаем контрл с табличкой\r\n const processingSentTasksErrorsTable = CdUIHelper\r\n .GetUIControlFromModel(model, \"PkEksSettingsProcessingSentTasksErrorsControl\");\r\n\r\n // проверяем наличие контрола\r\n if (processingSentTasksErrorsTable == null) {\r\n return;\r\n }\r\n\r\n // получаем колонку с кол-вом заданий\r\n const tasksCountColumnIndex = processingSentTasksErrorsTable.columns.findIndex(x =>\r\n x.header === \"Кол-во заданий с ошибкой\");\r\n\r\n // проверяем наличие колонки\r\n if (tasksCountColumnIndex === -1) {\r\n return;\r\n }\r\n\r\n // сортируем по колонке по убыванию\r\n processingSentTasksErrorsTable.setSortingColumn(tasksCountColumnIndex, true);\r\n }\r\n\r\n /** Инициализация таблички с ошибками получения заданий. */\r\n private InitializeProcessingReceiveTasksErrorsTable(model: ICardModel) {\r\n // получаем контрл с табличкой\r\n const processingReceiveTasksErrorsTable = CdUIHelper\r\n .GetUIControlFromModel(model, \"PkEksSettingsProcessingReceiveTasksErrorsControl\");\r\n\r\n // проверяем наличие контрола\r\n if (processingReceiveTasksErrorsTable == null) {\r\n return;\r\n }\r\n\r\n // получаем колонку с кол-вом заданий\r\n const tasksCountColumnIndex = processingReceiveTasksErrorsTable.columns.findIndex(x =>\r\n x.header === \"Кол-во заданий с ошибкой\");\r\n\r\n // проверяем наличие колонки\r\n if (tasksCountColumnIndex === -1) {\r\n return;\r\n }\r\n\r\n // сортируем по колонке по убыванию\r\n processingReceiveTasksErrorsTable.setSortingColumn(tasksCountColumnIndex, true);\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardRowState } from 'tessa/cards';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { showConfirm } from 'tessa/ui';\r\n\r\nexport class ArActTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n let card = context.model.card;\r\n let tasks = context.card.tasks;\r\n if (card.typeId != PkCardTypes.ArActTypeID || tasks == null || tasks.length < 1) {\r\n return;\r\n }\r\n\r\n let archiveActSection = card.sections.get('ArchiveAct');\r\n let pkRequiredApproversSection = card.sections.get('PkRequiredApprovers');\r\n let pkDocumentCommonInfoSection = card.sections.get('PkDocumentCommonInfo');\r\n let task = tasks.find(t => t.typeId == PkTaskTypes.PkApproversAgreementTypeID\r\n && t.state == CardRowState.Deleted\r\n && t.optionId != null\r\n && t.optionId == PkFdProcessHelper.Approve);\r\n if (task != null\r\n && archiveActSection != null\r\n && archiveActSection.fields.tryGet('ReceiverKCKExternalID') == 308821\r\n && pkRequiredApproversSection != null\r\n && pkRequiredApproversSection.rows.find(r => r.state != CardRowState.Deleted) == null\r\n && pkDocumentCommonInfoSection != null\r\n && pkDocumentCommonInfoSection.fields.tryGet('StateID') == CdDocStates.AtTheResponsibleForAct.id)\r\n {\r\n if (!await showConfirm(\"Не удалось определить согласующих для ролей \\\"Ответственный за прочие объекты инвестирования\\\" и \\\"Ответственный за ЦФО по БФ\\\". Отправить карточку на следующий этап согласования?\"))\r\n {\r\n context.cancel = true;\r\n }\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CardRowState } from 'tessa/cards';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { showConfirm, showNotEmpty } from 'tessa/ui';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { ChTaskTypes } from 'src/pkScripts/Helpers/ChTaskTypes';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\n\r\nexport class PkInnerDocumentTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (!Guid.equals(context.model.card.typeId, PkCardTypes.PkInnerDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n let card = context.model.card;\r\n let tasks = context.card.tasks;\r\n\r\n if (card == null\r\n || tasks == null\r\n || tasks.length < 1\r\n || !card.sections.has('DocumentCommonInfo')\r\n || !card.sections.has('Pk1CSignatureInfo')) {\r\n return;\r\n }\r\n\r\n let signTypeSelectingTask = tasks.find(t => t.typeId.toLowerCase() == ChTaskTypes.PkSignTypeSelectingTypeID.toLowerCase()\r\n && t.state == CardRowState.Deleted\r\n && t.optionId != null\r\n && t.optionId == PkFdProcessHelper.DigitalSigning.toLowerCase());\r\n if (signTypeSelectingTask == null) {\r\n return;\r\n }\r\n\r\n let documentCommonInfoSection = card.sections.get('DocumentCommonInfo');\r\n let pk1CSignatureInfoSection = card.sections.get('Pk1CSignatureInfo');\r\n if (!documentCommonInfoSection\r\n || !pk1CSignatureInfoSection) {\r\n return;\r\n }\r\n\r\n let departmentID = documentCommonInfoSection.fields.get('DepartmentID');\r\n const signerIDs: Array = [];\r\n for (const row of pk1CSignatureInfoSection.rows) {\r\n const userID = row.tryGet('UserID') as string | undefined | null;\r\n\r\n if (userID == null || row.state == CardRowState.Deleted) {\r\n continue;\r\n }\r\n\r\n if (signerIDs.indexOf(userID) >= 0) {\r\n continue;\r\n }\r\n\r\n signerIDs.push(userID);\r\n }\r\n\r\n if (signerIDs.length == 0) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n 'Необходимо заполнить таблицу \\\"Процесс подписания\\\".');\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkValidateSignTypeSelecting;\r\n request.cardId = card.id;\r\n request.info[\"DepartmentID\"] = createTypedField(departmentID, DotNetType.Guid);\r\n request.info[\"CardTypeID\"] = createTypedField(card.typeId, DotNetType.Guid);\r\n request.info[\"SignerIDs\"] = signerIDs.map(x => createTypedField(x, DotNetType.Guid));\r\n\r\n let response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n if (!response.info.Signers) {\r\n return;\r\n }\r\n\r\n const errors: Array = [];\r\n const warnings: Array = [];\r\n let signers = response.info.Signers;\r\n signers.forEach((signer) => {\r\n let userName: string = signer.UserName.$value;\r\n if (!signer.IsAllowedToSign.$value) {\r\n errors.push(`Пользователь ${userName} не может подписывать данный тип карточки, с указанной организацией.`);\r\n }\r\n\r\n if (!signer.HasDiadocAndCertificate.$value) {\r\n warnings.push(`У подписанта ${userName} не настроен Диадок. Обратитесь на 0911@pik.ru с заявкой о настройке возможности подписания в Диадок.`);\r\n }\r\n });\r\n\r\n if (errors.length > 0) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n errors.join('\\r\\n'),\r\n );\r\n return;\r\n }\r\n\r\n if (warnings.length > 0) {\r\n warnings.push('Нажмите \\\"Нет\\\" и \\\"Бумажное подписание\\\" для подписания документа в Тессе. Если необходимо подписать документ в Диадок, после настройки возможности подписания повторно завершите задание, выбрав тип подписания \\\"Электронный\\\".');\r\n if (!await showConfirm(warnings.join('\\r\\n'), 'Подтверждение выбора электронного подписания.')) {\r\n context.cancel = true;\r\n }\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","\r\n// Справочник \"Замечания для договорных документов\".\r\n\r\nexport class PkMatrixRemark {\r\n ID: guid\r\n Name: string\r\n IsCritical: boolean\r\n IsHidden: boolean\r\n}\r\n\r\nexport class PkMatrixRemarks {\r\n public static ANTP: PkMatrixRemark =\r\n {\r\n ID: \"2111FD90-A225-4080-A084-9478F21BB30D\",\r\n Name: \"АНПТ\",\r\n IsCritical: true,\r\n IsHidden: false\r\n }\r\n\r\n\r\n public static NoRemarks: PkMatrixRemark =\r\n {\r\n ID: \"10E9567C-97EC-45EA-B058-EB9DCF6787F9\",\r\n Name: \"Без замечаний\",\r\n IsCritical: false,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static OutOfAppreverResponsibility: PkMatrixRemark =\r\n {\r\n ID: \"F58727C1-73A5-4450-B341-D09C5F0C3FAC\",\r\n Name: \"В зоны ответственности согласующего\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static DateOrNumber: PkMatrixRemark =\r\n {\r\n ID: \"CCAD5277-FA84-4BAF-8CBF-A80AEF59E3AE\",\r\n Name: \"Дата / номер документа\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static ForInfo: PkMatrixRemark =\r\n {\r\n ID: \"14346EDF-070C-404D-A2C5-E0918F5CB002\",\r\n Name: \"Для сведения\",\r\n IsCritical: false,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static AccesOrAccreditation: PkMatrixRemark =\r\n {\r\n ID: \"2B83DE86-F510-4212-8F4B-B193E986825D\",\r\n Name: \"Допуск / аккредитация\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static ConsolidatorDecisionNotCritical: PkMatrixRemark =\r\n {\r\n ID: \"73D0DFFB-A1BD-43D9-80D7-FF3C741040AB\",\r\n Name: \"Заключение консолидирующего\",\r\n IsCritical: false,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static ConsolidatorDecisionCritical: PkMatrixRemark =\r\n {\r\n ID: \"1848AA00-D869-4494-8525-DF51FD255411\",\r\n Name: \"Заключение консолидирующего\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static KDorKC: PkMatrixRemark =\r\n {\r\n ID: \"D8166CF3-7DA5-4D4E-91C2-BEB75E0E9F1C\",\r\n Name: \"КД / КЦ\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static KSD: PkMatrixRemark =\r\n {\r\n ID: \"1E685121-F0C7-4B93-9C99-9033EE48A9F5\",\r\n Name: \"КСД\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static ApprovementPath: PkMatrixRemark =\r\n {\r\n ID: \"ED9A8845-62A1-4C83-BEE4-B25448DD3270\",\r\n Name: \"Маршрут согласования\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static NDS: PkMatrixRemark =\r\n {\r\n ID: \"7FAFBCB2-B377-43D1-9FC5-A83662D528B7\",\r\n Name: \"НДС\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static OtherNotCritical: PkMatrixRemark =\r\n {\r\n ID: \"341DF001-0DDF-4D88-AD83-D485ECD77E2C\",\r\n Name: \"Прочее\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static OtherCritical: PkMatrixRemark =\r\n {\r\n ID: \"EE93CCC0-459B-45E6-8633-E27A985BACA4\",\r\n Name: \"Прочее\",\r\n IsCritical: false,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static ItemsOrSignatories: PkMatrixRemark =\r\n {\r\n ID: \"EAC4FEC9-309B-4A95-840E-61443E11027B\",\r\n Name: \"Реквизиты / Подписанты\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static Limits: PkMatrixRemark =\r\n {\r\n ID: \"340046B1-BEA3-4CA5-B79F-A97D35D5E4CC\",\r\n Name: \"Сроки\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static TechnicalTypo: PkMatrixRemark =\r\n {\r\n ID: \"581E4032-76CB-42E7-9474-E130B1758731\",\r\n Name: \"Техническая опечатка\",\r\n IsCritical: false,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static ContractConditionsOrDSOrAdditions: PkMatrixRemark =\r\n {\r\n ID: \"A7C63B99-3C22-4A81-8E2F-4F3CB238029E\",\r\n Name: \"Условия договора, ДС, приложения\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static PriceOrCalculation: PkMatrixRemark =\r\n {\r\n ID: \"A2024300-19F5-4845-9EAF-7843626622F3\",\r\n Name: \"Цена / порядок расчетов\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n\r\n\r\n public static DigitalSignatures: PkMatrixRemark =\r\n {\r\n ID: \"1FD9052F-108F-4351-A70A-C75ACA85E7F8\",\r\n Name: \"Цифровые подписи\",\r\n IsCritical: true,\r\n IsHidden: false\r\n };\r\n}","import { CardUIExtension, ICardUIExtensionContext, IFormViewModel } from 'tessa/ui/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { createTypedField, DotNetType, Guid, hasNotFlag, Visibility } from 'tessa/platform';\r\nimport { DefaultFormTabWithTasksViewModel } from 'tessa/ui/cards/forms';\r\nimport { CardTypeFlags } from 'tessa/cards/types';\r\nimport { Card, CardRowState, CardTask, CardTaskAction } from 'tessa/cards';\r\nimport { TaskActionType, TaskGroupingType, TaskViewModel, TaskWorkspaceState, TaskActionViewModel, TaskAction, TaskNavigator, saveCardWithTaskModifier, createNavigateBackAction, getCaptionWithRightArrow } from 'tessa/ui/cards/tasks';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { PkContractUIHelper } from 'src/pkScripts/Helpers/PkContractUIHelper';\r\nimport { CdFdProcessHelper } from 'src/cdScripts/Helpers/CdFdProcessHelper';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\nimport { CdTaskTypes } from 'src/cdScripts/Helpers/CdTaskTypes';\r\nimport { PkFdProcessHelper } from 'src/pkScripts/Helpers/PkFdProcessHelper';\r\nimport { AutoCompleteEntryViewModel, TaskInfoViewModel } from 'tessa/ui/cards/controls';\r\nimport { CdProcessHelper } from 'src/cdScripts/Helpers/CdProcessHelper';\r\nimport { userSession } from 'common/utility';\r\nimport { PkMatrixRemarks } from 'src/pkScripts/Helpers/PkMatrixRemarks';\r\nimport { PkMatrixStageHelper } from 'src/pkScripts/Helpers/PkMatrixStageHelper';\r\nimport { ChTaskTypes } from \"src/pkScripts/Helpers/ChTaskTypes\";\r\n\r\n\r\nexport class ArContractMatrixTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n const model = context.model;\r\n if (model == null\r\n || model.card == null\r\n || context.model.card.typeId != CdCardTypes.ArContractTypeID\r\n || !(model.mainForm instanceof DefaultFormTabWithTasksViewModel)\r\n || hasNotFlag(model.cardType.flags, CardTypeFlags.AllowTasks)\r\n ) {\r\n return;\r\n }\r\n\r\n const formWithTasks = model.mainForm as DefaultFormTabWithTasksViewModel;\r\n\r\n if(formWithTasks.tasks != null)\r\n {\r\n for (let taskViewModel of formWithTasks.tasks) { \r\n\r\n taskViewModel.modifyWorkspace(async e => {\r\n\r\n if (Guid.equals(taskViewModel.taskModel.cardType.id, PkTaskTypes.ArMatrixApproveTypeID))\r\n {\r\n this.ChangeInitialFormForMatrixOwner(taskViewModel, taskViewModel.taskModel.card);\r\n let form = e.task.taskWorkspace.form;\r\n if (form == null)\r\n {\r\n return;\r\n } \r\n \r\n if (e?.task?.taskWorkspace?.state === TaskWorkspaceState.OptionForm) {\r\n let cardTask: CardTask | null = e.task.taskModel.cardTask;\r\n if (!cardTask) return;\r\n\r\n let taskAssignedUserID: string = cardTask.userId!\r\n let currentUserID: guid = userSession.UserID\r\n let isTaskForThisUser: boolean = taskAssignedUserID == currentUserID\r\n\r\n this.SetRemark(form, e.task.taskModel.card, isTaskForThisUser);\r\n }\r\n\r\n this.DelegateAction(form, e.task, e.task.taskModel.card);\r\n\r\n this.AdditionalApprovementAction(e.task, e.task.taskModel.card);\r\n\r\n this.ChangeFormForMatrixOwner(form, e.task, e.task.taskModel.card)\r\n }\r\n\r\n });\r\n }\r\n }\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n let card = context.model.card;\r\n let tasks = context.card.tasks;\r\n if (!Guid.equals(card.typeId, PkCardTypes.ArContractTypeID) || tasks == null || tasks.length < 1) {\r\n return;\r\n }\r\n\r\n let taskTypesForChecking = \r\n [\r\n PkTaskTypes.ArMatrixApproveTypeID,\r\n PkTaskTypes.ArMatrixConfirmStartProcessTypeID,\r\n PkTaskTypes.ArMatrixConfirmVgoStartProcessTypeID,\r\n PkTaskTypes.ArMatrixEditTypeID,\r\n CdTaskTypes.ArApproveUDOTypeID,\r\n CdTaskTypes.ArPrintingTheContractTypeID,\r\n PkTaskTypes.ArMatrixEditForProcurementControlTypeID,\r\n CdTaskTypes.ArEditBeforeSigningTypeID,\r\n CdTaskTypes.ArSigningTypeID,\r\n ChTaskTypes.PkSignTypeSelectingTypeID\r\n ] as string[];\r\n\r\n let taskCompletionOptionsForChecking = [\r\n CdProcessHelper.FdApprove,\r\n CdFdProcessHelper.ForApproval,\r\n CdFdProcessHelper.SendForResubscription\r\n ] as string[];\r\n\r\n let task = tasks.find(t => taskTypesForChecking.some(x => Guid.equals(t.typeId, x))\r\n && t.state == CardRowState.Deleted\r\n && t.optionId != null\r\n && taskCompletionOptionsForChecking.some(x => Guid.equals(t.optionId, x)));\r\n\r\n if (task != null)\r\n {\r\n let partnerExtID: number | null = null;\r\n if (Guid.equals(task.typeId, PkTaskTypes.ArMatrixConfirmVgoStartProcessTypeID))\r\n {\r\n partnerExtID = task.card.sections.tryGet(\"ArTaskVirtual\")?.fields.tryGet(\"PartnerExternalID\") as number | null;\r\n }\r\n else\r\n {\r\n partnerExtID = card.sections.tryGet(\"ArContractsUser\")?.fields.tryGet(\"CurrentApprovingPartnerExternalID\") as number | null;\r\n }\r\n\r\n if(!await PkContractUIHelper.IsRequiredRolesWithUsers(context, card, partnerExtID))\r\n {\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n \r\n private SetRemark(form: IFormViewModel, taskCard: Card, isTaskForThisUser: boolean)\r\n {\r\n let currentStageID: guid = taskCard.sections.get(\"PkMatrixTask\")?.fields.tryGet(\"CurrentStageID\") as guid\r\n if (currentStageID == null) currentStageID = Guid.empty;\r\n\r\n let taskSection = taskCard.sections.get(\"PkMatrixTask\");\r\n if (!taskSection) return;\r\n\r\n var remarkSelector =\r\n form.blocks.find(b => b.name == \"CommentBlock\")?.controls.find(c => c.name == \"RemarkSelector\") as AutoCompleteEntryViewModel;\r\n\r\n if (currentStageID == PkMatrixStageHelper.ConsolidationID &&\r\n isTaskForThisUser &&\r\n (form.name == \"Approve\" || form.name == \"Disapprove\")) {\r\n\r\n if (form.name == \"Approve\") {\r\n taskSection.fields.set(\"RemarkID\", PkMatrixRemarks.ConsolidatorDecisionNotCritical.ID, DotNetType.Guid);\r\n taskSection.fields.set(\"RemarkName\", PkMatrixRemarks.ConsolidatorDecisionNotCritical.Name, DotNetType.String);\r\n }\r\n if (form.name == \"Disapprove\") {\r\n taskSection.fields.set(\"RemarkID\", PkMatrixRemarks.ConsolidatorDecisionCritical.ID, DotNetType.Guid);\r\n taskSection.fields.set(\"RemarkName\", PkMatrixRemarks.ConsolidatorDecisionCritical.Name, DotNetType.String);\r\n }\r\n if (remarkSelector)\r\n remarkSelector.isReadOnly = true;\r\n return;\r\n }\r\n\r\n if (form.name == \"Approve\") {\r\n taskSection.fields.set(\"RemarkID\", PkMatrixRemarks.NoRemarks.ID, DotNetType.Guid);\r\n taskSection.fields.set(\"RemarkName\", PkMatrixRemarks.NoRemarks.Name, DotNetType.String);\r\n return;\r\n }\r\n\r\n taskSection.fields.set(\"RemarkID\", null);\r\n taskSection.fields.set(\"RemarkName\", null);\r\n }\r\n\r\n private DelegateAction(form: IFormViewModel, taskModel: TaskViewModel, taskCard: Card)\r\n {\r\n let delegated = taskCard.sections.get(\"PkMatrixTask\")?.fields.tryGet(\"Delegated\") as boolean;\r\n\r\n if (taskModel?.taskWorkspace?.state === TaskWorkspaceState.DefaultForm\r\n || (taskModel?.taskWorkspace?.state === TaskWorkspaceState.OptionForm && form.name == \"Delegate\")) {\r\n let actions = taskModel.taskWorkspace.actions;\r\n\r\n if (delegated && form.name === \"ArMatrixApprove\") {\r\n let taskAction = this.createNotMyDocTaskAction (\r\n form.name,\r\n taskModel.taskNavigator,\r\n PkFdProcessHelper.FdDelegate,\r\n \"Не мой документ\");\r\n\r\n if (taskAction !== undefined) {\r\n actions.splice(\r\n actions.length - 1,\r\n 0,\r\n taskAction);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private AdditionalApprovementAction(taskModel: TaskViewModel, taskCard: Card)\r\n {\r\n let delegated = taskCard.sections.get(\"PkMatrixTask\")?.fields.tryGet(\"Delegated\") as boolean;\r\n let additionalApprovement = taskCard.sections.get(\"PkMatrixTask\")?.fields.tryGet(\"AdditionalApprovement\") as boolean;\r\n\r\n if (taskModel?.taskWorkspace?.state === TaskWorkspaceState.DefaultForm)\r\n {\r\n let actions = taskModel.taskWorkspace.actions;\r\n let actionToHide = actions\r\n .find(x =>\r\n x.completionOption != null\r\n && Guid.equals(x.completionOption.id, PkFdProcessHelper.PkNotMyDoc));\r\n\r\n if (actionToHide != null && (!additionalApprovement || (additionalApprovement && delegated))) {\r\n actions.splice(actions.indexOf(actionToHide), 1);\r\n }\r\n }\r\n }\r\n\r\n private ChangeFormForMatrixOwner(form: IFormViewModel, taskModel: TaskViewModel, taskCard: Card)\r\n {\r\n let isMatrixOwner = taskCard.sections.get(\"PkMatrixTask\")?.fields.tryGet(\"IsMatrixOwner\") as boolean;\r\n\r\n let actions = taskModel.taskWorkspace.actions;\r\n\r\n if (isMatrixOwner)\r\n {\r\n if (taskModel?.taskWorkspace?.state === TaskWorkspaceState.DefaultForm)\r\n {\r\n let actionsToHide = actions\r\n .filter(x =>\r\n x.completionOption != null\r\n && (Guid.equals(x.completionOption.id, CdProcessHelper.FdApprove) || Guid.equals(x.completionOption.id, CdProcessHelper.FdDisapprove) || Guid.equals(x.completionOption.id, CdProcessHelper.FdAdditionalExecution)));\r\n\r\n for (let actionToHide of actionsToHide)\r\n {\r\n actions.splice(actions.indexOf(actionToHide), 1);\r\n }\r\n\r\n let block = taskModel?.taskWorkspace?.form?.blocks[0];\r\n\r\n if (block != null)\r\n {\r\n (block?.controls.find(x => x.name == \"TaskInfo\") as TaskInfoViewModel).displayRoleName = \"Владелец матриц\";\r\n\r\n var matrixOwnerInfoControl = block?.controls.find(x => x.name == \"MatrixOwnerInfo\");\r\n var approveInfoControl = block?.controls.find(x => x.name == \"ApproveInfo\");\r\n var disapproveInfoControl = block?.controls.find(x => x.name == \"DisapproveInfo\");\r\n\r\n if (matrixOwnerInfoControl != null\r\n && approveInfoControl != null\r\n && disapproveInfoControl != null)\r\n {\r\n matrixOwnerInfoControl.controlVisibility = Visibility.Visible;\r\n approveInfoControl.controlVisibility = Visibility.Collapsed;\r\n disapproveInfoControl.controlVisibility = Visibility.Collapsed;\r\n } \r\n }\r\n }\r\n\r\n if (taskModel?.taskWorkspace?.state === TaskWorkspaceState.OptionForm && form.name == \"Delegate\")\r\n {\r\n let block = taskModel?.taskWorkspace?.form?.blocks[0];\r\n\r\n if (block != null)\r\n {\r\n (block?.controls.find(x => x.name == \"TaskInfo\") as TaskInfoViewModel).displayRoleName = \"Владелец матриц\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n private ChangeInitialFormForMatrixOwner(taskModel: TaskViewModel, taskCard: Card)\r\n {\r\n let pkMatrixTask = taskCard.sections.tryGet(\"PkMatrixTask\");\r\n\r\n if (!pkMatrixTask)\r\n {\r\n return;\r\n }\r\n\r\n let isMatrixOwner = pkMatrixTask.fields.tryGet(\"IsMatrixOwner\") as boolean;\r\n\r\n if (isMatrixOwner && taskModel?.taskWorkspace?.state === TaskWorkspaceState.Initial)\r\n {\r\n (taskModel?.taskWorkspace?.content as TaskInfoViewModel).displayRoleName = \"Владелец матриц\";\r\n }\r\n }\r\n\r\n private createNotMyDocTaskAction(\r\n formName: string,\r\n navigator: TaskNavigator,\r\n optionId: guid,\r\n caption: string\r\n ): TaskAction | undefined {\r\n if (formName === \"Delegate\") {\r\n return new TaskActionViewModel(\r\n caption,\r\n () =>\r\n saveCardWithTaskModifier(navigator.taskModel, task => {\r\n const pkMatrixTaskSection = task.card.sections.tryGet(\"PkMatrixTask\");\r\n const fdTaskSection = task.card.sections.tryGet(\"FdTask\");\r\n if (pkMatrixTaskSection !== null\r\n && fdTaskSection !== null\r\n && fdTaskSection !== undefined) {\r\n const initialDelegateId = pkMatrixTaskSection?.fields.tryGet(\"InitialDelegateID\");\r\n const initialDelegateName = pkMatrixTaskSection?.fields.tryGet(\"InitialDelegateName\");\r\n if (initialDelegateId != null\r\n && initialDelegateName != null) {\r\n fdTaskSection.fields.set(\"DelegateID\", initialDelegateId, DotNetType.Guid);\r\n fdTaskSection.fields.set(\"DelegateName\", initialDelegateName, DotNetType.String);\r\n }\r\n }\r\n\r\n task.info[\"IsNotMyDocumentOption\"] = createTypedField(true, DotNetType.Boolean);\r\n task.action = CardTaskAction.Complete;\r\n task.state = CardRowState.Deleted;\r\n task.optionId = optionId;\r\n }),\r\n TaskActionType.Complete,\r\n TaskGroupingType.Default,\r\n null,\r\n navigator.taskModel\r\n );\r\n }\r\n else if (formName === \"ArMatrixApprove\") {\r\n return new TaskActionViewModel(\r\n getCaptionWithRightArrow(caption),\r\n () => {\r\n navigator.navigateToForm(\r\n TaskWorkspaceState.OptionForm,\r\n \"Delegate\",\r\n [\r\n this.createNotMyDocTaskAction(\"Delegate\", navigator, optionId, caption)!,\r\n createNavigateBackAction(navigator)\r\n ]);\r\n let newTaskModel = navigator.taskModel;\r\n const blockVM = newTaskModel.blocks.get('Block2');\r\n if (newTaskModel.blocks.get(\"Block2\") != null) {\r\n const control = blockVM!.controls.find(x => x.name === 'DelegateRoleControl');\r\n if (control != null) {\r\n control.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n },\r\n TaskActionType.NavigateToForm,\r\n TaskGroupingType.Default,\r\n null,\r\n navigator.taskModel);\r\n }\r\n else {\r\n return undefined;\r\n }\r\n }\r\n\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposer) {\r\n this._disposer();\r\n this._disposer = null;\r\n }\r\n }\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { ChCompleteTaskUIExtension } from './ChCompleteTaskUIExtension';\r\nimport { PkApproversAgreementUIExtension } from './PkApproversAgreementUIExtension';\r\nimport { PkHideOptionsUIExtension } from './PkHideOptionsTaskUIExtension';\r\nimport { PkSignInDiadocTaskUIExtension } from './PkSignInDiadokTaskUIExtension';\r\nimport { PkSigningTaskUIExtension } from './PkSigningTaskUIExtension';\r\nimport { ArContractTaskUIExtension } from './ArContractTaskUIExtension';\r\nimport { PkTCOfferTaskUIExtension } from './PkTCOfferTaskUIExtension';\r\nimport { PkHideControlTaskUIExtension} from './PkHideControlTaskUIExtension';\r\nimport { PkWorkOrderTaskUIExtension} from './PkWorkOrderTaskUIExtension';\r\nimport { PkArticleStickerTaskUIExtension } from './PkArticleStickerTaskUIExtension';\r\nimport { PkActBecameResponsibleTaskUIExtension } from './PkActBecameResponsibleTaskUIExtension';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { PkEksSettingsUIExtension } from '../Cards/PkEksSettingsUIExtension';\r\nimport { ArActTaskUIExtension } from './ArActTaskUIExtension';\r\nimport { PkInnerDocumentTaskUIExtension } from './PkInnerDocumentTaskUIExtension';\r\nimport { ArContractMatrixTaskUIExtension } from './ArContractMatrixTaskUIExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: ChCompleteTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkApproversAgreementUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkHideOptionsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkSigningTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkSignInDiadocTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkTCOfferTaskUIExtension, stage: ExtensionStage.AfterPlatform, type: PkCardTypes.PkTCOfferTypeID});\r\nExtensionContainer.instance.registerExtension({extension: PkHideControlTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkWorkOrderTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkArticleStickerTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkActBecameResponsibleTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkEksSettingsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArActTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkInnerDocumentTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractMatrixTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\n","import { CardStoreExtension, ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Guid } from 'tessa/platform';\r\nimport { tryGetFromInfo } from 'tessa/ui';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class OpenDiadocDocumentStoreExtension extends CardStoreExtension {\r\n\r\n public afterRequest(context: ICardStoreExtensionContext) {\r\n if (context == null || context.response == null) return;\r\n\r\n if (!context.requestIsSuccessful) {\r\n return;\r\n }\r\n\r\n if (!(\r\n Guid.equals(context.response.cardTypeId, PkCardTypes.PkOutgoingTypeID) ||\r\n Guid.equals(context.response.cardTypeId, PkCardTypes.RdndTypeID) ||\r\n Guid.equals(context.response.cardTypeId, PkCardTypes.ArActTypeID) ||\r\n Guid.equals(context.response.cardTypeId, PkCardTypes.PkInternalDocumentationTypeID) ||\r\n Guid.equals(context.response.cardTypeId, PkCardTypes.ArEDocumentTypeID) ||\r\n Guid.equals(context.response.cardTypeId, PkCardTypes.PkPacketVirtualTypeID) ||\r\n Guid.equals(context.response.cardTypeId, PkCardTypes.PkInnerDocumentTypeID) ||\r\n Guid.equals(context.response.cardTypeId, CdCardTypes.ArPowerOfAttorneyTypeID)\r\n )) {\r\n return;\r\n }\r\n\r\n if (context.response.cardTypeId === PkCardTypes.PkPacketVirtualTypeID) {\r\n let cardUrlList;\r\n if ((cardUrlList = tryGetFromInfo(context.response.info, \"CardUrlList\")) == null) return;\r\n for (let url in cardUrlList) {\r\n window.open(url);\r\n }\r\n }\r\n else {\r\n let url;\r\n if ((url = tryGetFromInfo(context.response.info, \"OpenDiadocUrl\")) == null) return;\r\n window.open(url);\r\n }\r\n }\r\n\r\n}","import { CardStoreExtension, ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { CardStoreMode } from 'tessa/cards';\r\nimport { PkDocumentRecognitionFileHelper } from 'src/pkScripts/Helpers/PkDocumentRecognitionFileHelper';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { tryGetFromInfo } from 'tessa/ui';\r\n\r\nexport class PkIncomingStoreExtension extends CardStoreExtension {\r\n\r\n public beforeRequest(context: ICardStoreExtensionContext) {\r\n var card = context.request.card;\r\n \r\n if (!Guid.equals(card.typeId, PkCardTypes.PkIncomingTypeID)) {\r\n return;\r\n }\r\n\r\n const incomingInfoSection = card.sections.tryGet(\"PkIncomingInfo\");\r\n if (!incomingInfoSection)\r\n return;\r\n\r\n let recognitionKinds : object[] = tryGetFromInfo(card.info, \"Kinds\");\r\n if (!recognitionKinds || recognitionKinds.length === 0) {\r\n return;\r\n }\r\n recognitionKinds = recognitionKinds.map(item => item[\"ID\"].$value);\r\n const docKind = incomingInfoSection.fields.tryGet(\"KindID\");\r\n const courtDate = incomingInfoSection.fields.tryGet(\"CourtDate\");\r\n const docDate = incomingInfoSection.fields.tryGet(\"DocDate\");\r\n\r\n // На вебе, и только на вебе, при первичном сохранении распознанного документа, где DocDate проставляется в результате распознавания,\r\n // почему-то откатывает эту конкретную дату на несколько часов назад, что в коротком формате приводит к потере в день.\r\n // Для вышеозначенных условий докидываем время при сохранении, чтобы получить корректный день.\r\n if (!!docKind && !!docDate && recognitionKinds.includes(docKind) && card.storeMode === CardStoreMode.Insert) {\r\n incomingInfoSection.fields.set(\"DocDate\", createTypedField(PkDocumentRecognitionFileHelper.GetDateTimeNow(docDate, 3), DotNetType.DateTime));\r\n }\r\n\r\n if (!!courtDate && card.storeMode === CardStoreMode.Update)\r\n {\r\n incomingInfoSection.fields.set(\"CourtDate\", createTypedField(PkDocumentRecognitionFileHelper.GetDateTimeNow(courtDate, -3), DotNetType.DateTime));\r\n }\r\n }\r\n\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { OpenDiadocDocumentStoreExtension } from './OpenDiadocDocumentStoreExtension';\r\nimport { PkIncomingStoreExtension } from './PkIncomingStoreExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: OpenDiadocDocumentStoreExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkIncomingStoreExtension, stage: ExtensionStage.AfterPlatform, order: Number.MAX_VALUE});","import { CardStoreExtension, ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { Guid, DotNetType, createTypedField, getTypedFieldValue } from 'tessa/platform';\r\nimport { showNotEmpty, showMessage, showConfirm } from 'tessa/ui';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\n\r\nexport class PkCheckPacketFieldsStoreExtension extends CardStoreExtension {\r\n\r\n public async beforeRequest(context: ICardStoreExtensionContext) {\r\n if (context == null) return;\r\n\r\n if (!(\r\n Guid.equals(context.request.card.typeId, PkCardTypes.ArActTypeID) ||\r\n Guid.equals(context.request.card.typeId, PkCardTypes.ArEDocumentTypeID)\r\n )) {\r\n return;\r\n }\r\n let tmp = context.request.card;\r\n\r\n if (tmp == null) return;\r\n let card = tmp.clone();\r\n card.removeAllButChanged();\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetPacketID;\r\n request.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n request.info[\"NeedToGetMainPacketDocsInfo\"] = true;\r\n\r\n const aaSection = card.sections.tryGet(\"ArchiveAct\");\r\n if (aaSection != null && aaSection.fields != null &&\r\n aaSection.fields.has('DocumentKindID') &&\r\n aaSection.fields.has('DocumentKindDocumentKind')) {\r\n const currentDocumentKindID = aaSection.fields.tryGet(\"DocumentKindID\");\r\n const currentDocumentKindName = aaSection.fields.tryGet(\"DocumentKindDocumentKind\");\r\n\r\n if (currentDocumentKindID != null)\r\n request.info[\"CurrentDocumentKindID\"] = createTypedField(currentDocumentKindID, DotNetType.Guid);\r\n else request.info[\"CurrentDocumentKindID\"] = null;\r\n\r\n if (currentDocumentKindID != null)\r\n request.info[\"CurrentDocumentKindName\"] = createTypedField(currentDocumentKindName, DotNetType.String);\r\n else request.info[\"CurrentDocumentKindName\"] = null;\r\n }\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) return;\r\n\r\n let packetID = response.info!.PacketID;\r\n\r\n if (packetID == null) return;\r\n\r\n let packetfillInfo = \"\";\r\n let packetfillQuestion = \"\";\r\n let contractChanged = false;\r\n let requestInfoParams: string[] = [];\r\n let requestInfoOptionalParams: string[] = [];\r\n const aaSect = card.sections.tryGet('ArchiveAct');\r\n if (aaSect != null) {\r\n if (aaSect.fields.has(\"SenderKCKID\") ||\r\n aaSect.fields.has(\"SenderKCKName\") ||\r\n aaSect.fields.has(\"SenderKCKExternalID\")) {\r\n packetfillInfo += \", \\\"Исполнитель\\\"\";\r\n requestInfoParams.push(\"IsSenderFill\");\r\n }\r\n if (aaSect.fields.has(\"BuilderKCKID\") ||\r\n aaSect.fields.has(\"BuilderKCKName\") ||\r\n aaSect.fields.has(\"BuilderKCKExternalID\")) {\r\n packetfillInfo += \", \\\"Застройщик\\\"\";\r\n requestInfoParams.push(\"IsBuilderFill\");\r\n }\r\n if (aaSect.fields.has(\"ContractWithTheDeveloperID\") ||\r\n aaSect.fields.has(\"ContractWithTheDeveloperNumberVirtual\")) {\r\n packetfillInfo += \", \\\"Договор с Застройщиком\\\"\";\r\n requestInfoParams.push(\"IsContractWithTheDeveloperFill\");\r\n }\r\n if (aaSect.fields.has(\"ContractID\") ||\r\n aaSect.fields.has(\"ContractNameVirtual\")) {\r\n packetfillQuestion += \", \\\"Договор\\\"\";\r\n contractChanged = true;\r\n requestInfoOptionalParams.push(\"IsContractFill\");\r\n }\r\n if (aaSect.fields.has(\"SignerID\") ||\r\n aaSect.fields.has(\"SignerName\") ||\r\n aaSect.fields.has(\"SignerDiadocID\")) {\r\n packetfillQuestion += \", \\\"Подписант\\\"\";\r\n requestInfoOptionalParams.push(\"IsSignerFill\");\r\n }\r\n }\r\n\r\n const prbSect = card.sections.tryGet('PkResponsibleBookkeepers');\r\n if (prbSect != null) {\r\n packetfillQuestion += \", \\\"Ответственный бухгалтер\\\"\";\r\n requestInfoOptionalParams.push(\"IsPkResponsibleBookkeepersFill\");\r\n }\r\n const preSect = card.sections.tryGet('PkResponsibleExecutors');\r\n if (preSect != null) {\r\n packetfillQuestion += \", \\\"Ответственные\\\"\";\r\n requestInfoOptionalParams.push(\"IsPkResponsibleExecutorsFill\");\r\n }\r\n const paSect = card.sections.tryGet('PkApprovers');\r\n if (paSect != null) {\r\n packetfillQuestion += \", \\\"Согласующие\\\"\";\r\n requestInfoOptionalParams.push(\"IsPkApproversFill\");\r\n }\r\n const praSect = card.sections.tryGet('PkRequiredApprovers');\r\n if (praSect != null) {\r\n packetfillQuestion += \", \\\"Обязательные согласующие\\\"\";\r\n requestInfoOptionalParams.push(\"IsPkRequiredApproversFill\");\r\n }\r\n\r\n if (!contractChanged) {\r\n const idpSect = card.sections.tryGet('ArArticleIDPList');\r\n if (idpSect != null) {\r\n if (idpSect.rows != null) {\r\n for (let row of idpSect.rows) {\r\n if (row.has(\"ActivityKindID\") ||\r\n row.has(\"ActivityKindName\")) {\r\n packetfillInfo += \", \\\"Вид деятельности\\\"\";\r\n requestInfoParams.push(\"IsActivityKindFill\");\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(packetfillInfo)) {\r\n packetfillInfo = \"Поля \" + packetfillInfo + \" изменены во всех документах пакета.\";\r\n showMessage(packetfillInfo, \"Пакетное заполнение полей\");\r\n }\r\n\r\n if (!PkCommonHelper.IsNullOrWhitespace(packetfillQuestion)) {\r\n const packetMainDocumentsCount = getTypedFieldValue(response.info!.PacketMainDocumentsCount);\r\n const packetMainDocumentsMessage = getTypedFieldValue(response.info!.PacketMainDocumentsMessage);\r\n let needToUpdateFields = true;\r\n\r\n if (packetMainDocumentsCount > 1) {\r\n packetfillQuestion =\r\n \"Пакет содержит несколько основных документов (\" + packetMainDocumentsCount + \"), которые необходимо разделить:\\n\" +\r\n packetMainDocumentsMessage +\r\n \"\\nЗаполнить поля \" + packetfillQuestion + \" в других документах пакета по текущему?\";\r\n\r\n needToUpdateFields = await showConfirm(packetfillQuestion, \"Пакетное заполнение полей\");\r\n }\r\n\r\n if (needToUpdateFields) requestInfoParams = requestInfoParams.concat(requestInfoOptionalParams);\r\n }\r\n\r\n if (requestInfoParams.length > 0) {\r\n context.request.info[\"IsPacketFill\"] = createTypedField(true, DotNetType.Boolean);\r\n for (let i = 0; i < requestInfoParams.length; i++) {\r\n context.request.info[requestInfoParams[i]] = createTypedField(true, DotNetType.Boolean);\r\n }\r\n }\r\n }\r\n\r\n}","import { CardStoreExtension, ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { ArUIHelper } from 'src/pkScripts/UI/ArUIHelper';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\n\r\nexport class ArActStoreExtension extends CardStoreExtension {\r\n\r\n public async beforeRequest(context: ICardStoreExtensionContext) {\r\n if (context == null) {\r\n return;\r\n }\r\n\r\n if (context.request.card.typeId !== PkCardTypes.ArActTypeID) {\r\n return;\r\n }\r\n\r\n ArUIHelper.SetRejectingIgnorePermissionsWarningFlag(context.request);\r\n\r\n ArUIHelper.CheckOtherPayments(context);\r\n }\r\n}","import { CardStoreExtension, ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { ArUIHelper } from 'src/pkScripts/UI/ArUIHelper';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\n\r\nexport class ArEDocumentStoreExtension extends CardStoreExtension {\r\n\r\n public async beforeRequest(context: ICardStoreExtensionContext) {\r\n if (context == null) {\r\n return;\r\n }\r\n\r\n if (context.request.card.typeId !== PkCardTypes.ArEDocumentTypeID) {\r\n return;\r\n }\r\n\r\n ArUIHelper.SetRejectingIgnorePermissionsWarningFlag(context.request);\r\n }\r\n}","export class PkValidationKeys {\r\n\r\n /// \r\n /// Контрагент не найден в организациях диадок\r\n /// \r\n public static PartnerInDiadocMissing = '1A226A07-8AD0-4692-BC7A-18EAF668084A';\r\n public static PartnerInDiadocMissingText = 'не найден в организациях диадок';\r\n\r\n /// \r\n /// Для указанного подписанта отправителя не найден BoxID диадок.\r\n /// \r\n public static DiadocBoxIDMissing = '43955038-F514-4B58-A12D-C765BE25B7EC';\r\n public static DiadocBoxIDMissingText = 'для указанного подписанта отправителя не найден id диадок';\r\n\r\n /// \r\n /// Существуют незавершенные задания.\r\n /// \r\n public static UncompletedExecutionTasks = '398FBC7F-3D63-4AE8-9A5F-CAEC9511DB0A';\r\n public static UncompletedExecutionTasksText = 'существуют незавершенные подзадачи. необходимо отозвать подзадачи.';\r\n}","/** Причины изменения договора */\r\nexport class ArContractReasonChange {\r\n /** Реорганизация или изменение названия предприятия */\r\n static ReorganizationID = \"ebd11c65-82de-4f47-b300-33dac6a217ea\";\r\n\r\n /** Ошибка пользователя */\r\n static UserErrorID = \"38a13d50-f18e-49ba-9984-b0c41b519647\";\r\n\r\n /**Уступка */\r\n static AssignmentID = \"aa0c73f6-19c5-42b8-ba96-34f1b1ea62dc\";\r\n\r\n /**Аннулирован */\r\n static VoidedID = \"89acb7d8-5602-492e-a00a-da88b7149baa\";\r\n}","import { CardStoreExtension, ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { PkValidationKeys } from 'src/pkScripts/helpers/PkValidationKeys';\r\nimport { CardNewRequest, CardRequest, CardService, CardStoreRequest } from 'tessa/cards/service';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { createCardModel, showError, showNotEmpty, tryGetFromInfo, UIButton } from 'tessa/ui';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { CardRowState, CardSectionType, CardStoreMode } from 'tessa/cards';\r\nimport { TessaArContractKinds } from 'src/pkScripts/Helpers/PkPrimaryDocsHelper';\r\nimport { PkContractUIHelper } from 'src/pkScripts/Helpers/PkContractUIHelper';\r\nimport { ArContractCategory } from 'src/pkScripts/Helpers/ArContractCategory';\r\nimport { ArContractReasonChange } from 'src/pkScripts/Helpers/ArContractReasonChange';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { ChRequestTypes } from 'src/pkScripts/Helpers/ChRequestTypes';\r\nimport { userSession } from 'common/utility';\r\nimport { ChStaticRoles } from 'src/pkScripts/Helpers/ChStaticRoles';\r\n\r\nexport class ArContractStoreExtension extends CardStoreExtension {\r\n\r\n private NeedDialog = false;\r\n private Reason;\r\n private StartDate;\r\n private ReasonChangeID;\r\n private ReasonChangeName;\r\n\r\n public async afterRequest(context: ICardStoreExtensionContext) {\r\n if (context == null) {\r\n return;\r\n }\r\n\r\n if (context.request.card.typeId !== CdCardTypes.ArContractTypeID) {\r\n return;\r\n }\r\n\r\n let responseResult = context.response?.validationResult.build();\r\n \r\n if(this.NeedDialog == true && context.validationResult.isSuccessful)\r\n {\r\n this.Reason = tryGetFromInfo(context.request.card.info, \"Reason\", null);\r\n this.StartDate = tryGetFromInfo(context.request.card.info, \"StartDate\", null);\r\n this.ReasonChangeID = tryGetFromInfo(context.request.card.info, \"ReasonChangeID\", null);\r\n this.ReasonChangeName = tryGetFromInfo(context.request.card.info, \"ReasonChangeName\", null);\r\n\r\n if(this.Reason !=null || this.StartDate != null || this.ReasonChangeID != null || this.ReasonChangeName != null)\r\n {\r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArContractSetReasonChanges;\r\n request.info[\"ContractID\"] = createTypedField(context.request.card.id,DotNetType.Guid);\r\n request.info[\"Reason\"] = this.Reason;\r\n request.info[\"StartDate\"] = this.StartDate;\r\n request.info[\"ReasonChangeID\"] = this.ReasonChangeID;\r\n request.info[\"ReasonChangeName\"] = this.ReasonChangeName;\r\n await CardService.instance.request(request);\r\n }\r\n }\r\n \r\n if (!responseResult!.isSuccessful && tryGetFromInfo(context.info, \"ShowEdoSendingNotAvailableDialog\", false)) {\r\n for (let i = responseResult!.items.length - 1; i >= 0; i--) {\r\n var item = responseResult!.items[i];\r\n \r\n // todo почему не сохраняются изменения в карточке?\r\n // if (item.objectType == PkValidationKeys.DiadocBoxIDMissing || item.objectType == PkValidationKeys.PartnerInDiadocMissing) { перстало работать\r\n if (item.message.toLowerCase().includes(PkValidationKeys.PartnerInDiadocMissingText) || item.message.toLowerCase().includes(PkValidationKeys.DiadocBoxIDMissingText)) { \r\n var msg = 'Сервисному центру необходимо настроить обмен с данным контрагентом (срок до двух недель).'\r\n +'Нажмите Да, если готовы ожидать. Нажмите Нет, чтобы перевести на бумажное подписание. Документ в любом случае отправится на согласование.';\r\n var result = await confirm(msg);\r\n if (result == true) { \r\n let card = context.request.card;\r\n \r\n // удаляем, чтобы не завершилось задание \"отправка на согласование\" \r\n // card.tasks!.splice(i,1); // пока убираем, меняем процесс по таску #75350\r\n\r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = card; \r\n storeRequest.info[\"StartDiadocServiceProcess\"] = true;\r\n await CardService.instance.store(storeRequest);\r\n }\r\n else if (result == false) {\r\n let card = context.request.card;\r\n var arContractsUser = card!.sections.getOrAdd(\"ArContractsUser\");\r\n\r\n // меняем тип подписания на бумажное и завершаем задание, процесс идет дальше по ветке бумажного подписания \r\n arContractsUser.fields.set(\"IsSigningInDiadoc\", createTypedField(false, DotNetType.Boolean));\r\n \r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = card;\r\n storeRequest.info[\"StartDiadocServiceProcess\"] = true;\r\n await CardService.instance.store(storeRequest); \r\n }\r\n\r\n // убираем из валидации, чтобы не показывать повторно\r\n context!.response!.validationResult.items.splice(i, 1); \r\n break;\r\n }\r\n } \r\n }\r\n }\r\n\r\n public async beforeRequest(context: ICardStoreExtensionContext) {\r\n if (context == null) {\r\n return;\r\n }\r\n\r\n if (context.request.card.typeId !== CdCardTypes.ArContractTypeID) {\r\n return;\r\n }\r\n\r\n await this.CheckExistsContractEdo(context);\r\n\r\n this.ValidateFields(context);\r\n\r\n this.NeedDialog =false;\r\n \r\n if(await this.CheckNeedDialogAsync(context))\r\n {\r\n this.NeedDialog = true;\r\n context.request.info['StoreChanges'] = createTypedField(true, DotNetType.Boolean); \r\n }\r\n\r\n if(this.NeedDialog){\r\n await this.ShowDialogAsync(context);\r\n \r\n context.request.card.info[\"Reason\"] = this.Reason;\r\n context.request.card.info[\"StartDate\"] = this.StartDate;\r\n context.request.card.info[\"ReasonChangeID\"] = this.ReasonChangeID;\r\n context.request.card.info[\"ReasonChangeName\"] = this.ReasonChangeName; \r\n }\r\n\r\n }\r\n\r\n private async CheckExistsContractEdo(context: ICardStoreExtensionContext) {\r\n let card = context.request.card;\r\n if (card.sections.has(\"ArContractPartners\") &&\r\n card.sections.get(\"ArContractPartners\")!.rows.find(r => Guid.equals(r.get(\"ContractCategoryID\"), ArContractCategory.DocumentManagementAgreement)) != null)\r\n {\r\n let ArContractPartnersRows = card!.sections.get(\"ArContractPartners\")!.rows;\r\n var partner1ExtID = ArContractPartnersRows[0].get(\"PartnerExternalID\");\r\n var partner2ExtID = ArContractPartnersRows[1].get(\"PartnerExternalID\");\r\n \r\n let request = new CardRequest();\r\n request.requestType = PkRequestTypes.ArGetExistContractEdoRequestID;\r\n request.info[\"partner1ExtID\"] = createTypedField(partner1ExtID, DotNetType.Int64);\r\n request.info[\"partner2ExtID\"] = createTypedField(partner2ExtID, DotNetType.Int64); \r\n let response = await CardService.instance.request(request);\r\n\r\n if(!response.validationResult.build().isSuccessful){\r\n return;\r\n }\r\n\r\n var acuSection = card.sections.get(\"ArContractsUser\");\r\n var contractAcuCki = acuSection?.fields.get(\"ContractKindID\");\r\n var cardID = tryGetFromInfo(response.info, \"CardID\");\r\n\r\n if (cardID != null && cardID != card.id\r\n && contractAcuCki == TessaArContractKinds.ContractKindTessaID)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, \"Соглашение об ЭДО между данными контрагентами уже заключено.\");\r\n }\r\n }\r\n }\r\n\r\n private ValidateFields(context: ICardStoreExtensionContext) {\r\n let card = context.request.card;\r\n\r\n var isHistorical = PkContractUIHelper.IsLocked(card);\r\n if (isHistorical)\r\n {\r\n return;\r\n }\r\n\r\n let acuSection = card.sections.tryGet(\"ArContractsUser\");\r\n if (!acuSection)\r\n { \r\n return;\r\n }\r\n\r\n let rate = acuSection.fields.tryGet(\"Rate\");\r\n if (!rate || rate < 0)\r\n { \r\n context.validationResult.add(ValidationResultType.Error,\r\n 'Значение \\\"Курс к рублю\\\" не может быть отрицательным.');\r\n }\r\n\r\n this.ValidateDateField(context, acuSection.fields.tryGet(\"DocDate\"), 2199, 'Дата документа');\r\n this.ValidateDateField(context, acuSection.fields.tryGet(\"DateValidityPeriodFrom\"), 2099, 'Период действия с');\r\n this.ValidateDateField(context, acuSection.fields.tryGet(\"DateValidityPeriodUntil\"), 2199, 'Период действия по');\r\n\r\n let contractKindID = acuSection.fields.tryGet(\"ContractKindID\");\r\n if (contractKindID && contractKindID == TessaArContractKinds.CancellationAgreementKindTessaID)\r\n {\r\n let dateCancelletion = acuSection.fields.tryGet(\"DateCancelletion\");\r\n if (!dateCancelletion) {\r\n context.validationResult.add(ValidationResultType.Error,\r\n 'Поле \"Дата расторжения\" обязательно к заполнению!');\r\n } \r\n }\r\n }\r\n\r\n private ValidateDateField(context: ICardStoreExtensionContext, dateValue: string, maxYear: number, fieldCaption: string){\r\n if (!dateValue){\r\n return;\r\n }\r\n\r\n let currentYear = new Date(dateValue).getFullYear();\r\n if (currentYear <= maxYear){\r\n return;\r\n }\r\n\r\n context.validationResult.add(ValidationResultType.Error, `Поле \\\"${fieldCaption}\\\" заполнено некорректно. Укажите дату не позднее 31.12.${maxYear}.`);\r\n }\r\n\r\n private async CheckNeedDialogAsync(context: ICardStoreExtensionContext)\r\n { \r\n if(context.request.card.storeMode == CardStoreMode.Insert){\r\n return false;\r\n }\r\n\r\n if (context.request.info.VoidTheContract &&\r\n context.request.info.VoidTheContract.$value === true) {\r\n return true;\r\n }\r\n\r\n let NeedDialog=false; \r\n let pdciSection = context.request.card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pdciSection) {\r\n let stateID = pdciSection.fields.tryGet('StateID');\r\n if (stateID == CdDocStates.Project.id || stateID == CdDocStates.Rework.id) {\r\n return false;\r\n }\r\n }\r\n\r\n if (!await this.IsUserInRoleAsync(userSession.UserID, ChStaticRoles.SupportAdministratorID))\r\n {\r\n return false;\r\n }\r\n\r\n let dict:{[key:string]:string[]} = {\r\n 'ArContractPartners': \r\n [\r\n 'PartnerName',\r\n 'RoleName',\r\n 'PerformerName',\r\n 'SignedName',\r\n 'ContractCategoryName',\r\n 'LandAsset',\r\n 'PartnerINN',\r\n 'DepartmentName',\r\n 'AccountantName'\r\n ],\r\n 'ArContractsUser':\r\n [\r\n 'ParentCardID',\r\n 'ContractKindDocumentKind',\r\n 'ConcessionKindName',\r\n 'DocNumber',\r\n 'DocDate',\r\n 'DateCancelletion',\r\n 'DateValidityPeriodFrom',\r\n 'DateValidityPeriodUntil',\r\n 'IsFromKD',\r\n 'ContractTypeName',\r\n 'TypeProcedureName',\r\n 'SubjectName',\r\n 'Subject',\r\n 'IsPdcFromKC',\r\n 'IsSigningInDiadoc',\r\n 'AmountLimit',\r\n 'AmountBeginning',\r\n 'FirstPartnerName',\r\n 'SecondPartnerName',\r\n 'AuthorDepartmentName',\r\n 'IsWithoutAgreementButton',\r\n 'IsWithoutAgreementTechnical',\r\n 'DocComment',\r\n 'MethodEmbroideryOnStickersName',\r\n 'AmountTotal',\r\n 'AmountCurrent',\r\n 'CurrencyName',\r\n 'Rate',\r\n 'IsYE',\r\n 'TenderName',\r\n 'ReasonsWithoutPDCName'\r\n ],\r\n 'ArContractArticleIdpInitial':\r\n [\r\n 'ObjectName',\r\n 'CostItemName',\r\n 'AmountWithoutVat',\r\n 'Amount',\r\n 'PaymentTerm',\r\n 'PercentPrepayment',\r\n 'AmountPrepayment',\r\n 'VatRateCaption',\r\n 'TypeName',\r\n 'PartnerName',\r\n 'PartnerRelatedName',\r\n 'ProjectName',\r\n 'ResidentialComplexName',\r\n 'StageName',\r\n 'CostItemMdsID',\r\n 'Balance'\r\n ],\r\n 'ArContractVirtual':\r\n [\r\n 'IsAvailableForUS'\r\n ],\r\n 'ArContractCustomParticipantsVirtual':\r\n [\r\n 'ContractorName',\r\n 'StageTemplateName',\r\n 'RoleName',\r\n 'OrderCustom',\r\n 'TaskTimeLimitationInWorkingDaysNormal',\r\n 'Users'\r\n ],\r\n \r\n 'ArContractArticleStickers':\r\n [\r\n 'CostItemName',\r\n 'CostItemIdpItemCode',\r\n 'Amount'\r\n ],\r\n \r\n 'ArContractArticleStickersInitial':\r\n [\r\n 'CostItemName',\r\n 'CostItemIdpItemCode',\r\n 'Amount'\r\n ]\r\n }\r\n \r\n\r\n for(let t in context.request.card.sections.getStorage())\r\n { \r\n if(dict[t]==null) continue;\r\n let section = context.request.card.sections.tryGet(t); \r\n if(section!=null && section.type!=null && section.type != CardSectionType.Table)\r\n {\r\n let k = section.getAllChanges(); \r\n k.forEach(field=>\r\n { \r\n let p= dict[t].find(x=>x==field);\r\n if(p!=null)\r\n NeedDialog = true;\r\n });\r\n } else\r\n if(section!=null && section.rows!=null && section.type!=null && section.type == CardSectionType.Table)\r\n { \r\n section.rows.forEach(row=>{\r\n if(row.state==CardRowState.Deleted) NeedDialog = true;\r\n let pro = row.getAllChanges();\r\n pro.forEach(field=>\r\n { \r\n let p= dict[t].find(x=>x==field);\r\n if(p!=null)\r\n NeedDialog = true;\r\n }); \r\n });\r\n }\r\n if(NeedDialog) break;\r\n }\r\n\r\n for(let f of context.request.card.files)\r\n {\r\n if (f.hasChanges())\r\n {\r\n NeedDialog = true;\r\n }\r\n if(NeedDialog) continue;\r\n }\r\n \r\n\r\n return NeedDialog;\r\n}\r\n private async ShowDialogAsync(context: ICardStoreExtensionContext)\r\n {\r\n //let uiContext = UIContext.current;\r\n //let editor = uiContext.cardEditor;\r\n //if (uiContext == null || editor == null ) {\r\n // return;\r\n //}\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'PkCommentByChanges');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n let card = context.request.card;\r\n let arContractPartnersSection = card.sections.tryGet(\"ArContractPartners\");\r\n let isRequiredReasonChangeControl = (arContractPartnersSection!.rows.length > 0)\r\n && arContractPartnersSection!.rows.find(x => x.has(\"PartnerID\")) != null;\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n if (isRequiredReasonChangeControl)\r\n {\r\n var reasonChangesControl = dialogForm.blocks[0].controls.find(x => x.name == \"ReasonChangeControl\");\r\n reasonChangesControl!.setRequired(isRequiredReasonChangeControl);\r\n }\r\n \r\n let success:boolean | any = null;\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n let section;\r\n if ((section = _form.cardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n section.fields.set(\"RearDate\", new Date(), DotNetType.DateTime);\r\n }\r\n \r\n let rearDateControl = windowCardModel.controls.get(\"RearDateControl\");\r\n let commentControl = windowCardModel.controls.get(\"CommentControl\");\r\n\r\n section.fields.fieldChanged.add(async f => {\r\n if(f.fieldName != \"ReasonChangeID\")\r\n { \r\n return; \r\n }\r\n rearDateControl!.isReadOnly = f.fieldValue != ArContractReasonChange.ReorganizationID;\r\n rearDateControl!.isRequired = f.fieldValue == ArContractReasonChange.ReorganizationID;\r\n commentControl!.isRequired = f.fieldValue == ArContractReasonChange.VoidedID;\r\n })\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n let section;\r\n if ((section = windowCardModel.card.sections.tryGet('PkDialogs')) != null) {\r\n success = true;\r\n let rearDate = section.fields.get(\"RearDate\");\r\n let comment = section.fields.get(\"Comment\");\r\n let reasonChangeID = section.fields.tryGet(\"ReasonChangeID\");\r\n let reasonChangeName = section.fields.tryGet(\"ReasonChangeName\");\r\n\r\n if (rearDate == null) {\r\n await showError(\"Дата начала действия обязательна для заполнения\");\r\n success = false;\r\n }\r\n // if (comment == null) {\r\n // await showError(\"Причина обязательна для заполнения\");\r\n // success = false;\r\n // }\r\n if (isRequiredReasonChangeControl && reasonChangeID == null)\r\n {\r\n await showError(\"Причина обязательна для заполнения\");\r\n success = false;\r\n }\r\n\r\n if (reasonChangeID != null && reasonChangeID == ArContractReasonChange.VoidedID && comment == null)\r\n {\r\n await showError(\"Комментарий обязателен для заполнения\");\r\n success = false;\r\n }\r\n\r\n if (success) {\r\n /* const storeInfo: IStorage = {\r\n 'ReasonChanges': createTypedField(comment, DotNetType.String),\r\n 'DateChanges': createTypedField(rearDate, DotNetType.DateTime)\r\n }; */\r\n this.Reason = createTypedField(comment, DotNetType.String);\r\n this.StartDate = createTypedField(rearDate, DotNetType.DateTime);\r\n this.ReasonChangeID = reasonChangeID != null ? createTypedField(reasonChangeID, DotNetType.Guid) : null;\r\n this.ReasonChangeName = reasonChangeName != null ? createTypedField(reasonChangeName, DotNetType.String) : null;\r\n }\r\n }\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n success = false;\r\n btn.close();\r\n }),\r\n ], \r\n false,\r\n (() => { \r\n if(success == null || success == false)\r\n { context.validationResult.add(ValidationResultType.Error,\"Не заполнена форма внесения причины изменения договора\") } \r\n })\r\n );\r\n }\r\n\r\n private async IsUserInRoleAsync(userId: string, roleId: string)\r\n { \r\n let request = new CardRequest();\r\n request.requestType = ChRequestTypes.CheckUserInRole;\r\n request.info[\"UserID\"] = createTypedField(userId, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(roleId, DotNetType.Guid);\r\n\r\n let response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.build().isSuccessful)\r\n {\r\n return response.info.IsUserInRole.$value as boolean ?? false;\r\n }\r\n \r\n return false;\r\n }\r\n}","import { CardStoreExtension, ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { CardRowState } from 'tessa/cards';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { PkTaskTypes } from 'src/pkScripts/Helpers/PkTaskTypes';\r\nimport { CdProcessHelper } from 'src/cdScripts/Helpers/CdProcessHelper';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\nimport { showNotEmpty } from 'tessa/ui';\r\n\r\n/// \r\n/// Проверка незавершенных подзадач, при завершении задания на согласование.\r\n/// \r\nexport class ArContractAdditionalExecutionStoreExtension extends CardStoreExtension {\r\n\r\n public async beforeRequest(context: ICardStoreExtensionContext) {\r\n \r\n if (context.request.card.typeId !== CdCardTypes.ArContractTypeID) {\r\n return;\r\n }\r\n\r\n if (context == null) {\r\n return;\r\n }\r\n\r\n const optionsToCheckChildExecution = [\r\n CdProcessHelper.FdApprove,\r\n CdProcessHelper.FdDisapprove\r\n ];\r\n\r\n let card = context.request.card;\r\n let task = card.tasks.find(x => x.state == CardRowState.Deleted && Guid.equals(x.typeId, PkTaskTypes.ArMatrixApproveTypeID)\r\n && x.optionId != null\r\n && optionsToCheckChildExecution.some(opt => Guid.equals(opt, x.optionId)));\r\n\r\n if (!task) {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetUncomplitedChildTasksRequest;\r\n request.cardId = card.id;\r\n request.info[\"TaskID\"] = createTypedField(task?.rowId, DotNetType.Guid);\r\n \r\n let response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n if (!response.info.Tasks || (response.info.Tasks as string[]).length == 0) {\r\n return;\r\n }\r\n \r\n var msg = 'Существуют незавершенные подзадачи. Для завершения задания все подзадачи будут отозваны. '\r\n +'Нажмите Да, чтобы продолжить. Нажмите Нет, чтобы отменить завершение задания.';\r\n var result = await confirm(msg);\r\n if (result == true) { \r\n context.request.info[\"RecallAddExecution\"] = true;\r\n }\r\n else {\r\n context.validationResult.add(ValidationResultType.Error, \"Сохранение отменено.\"); \r\n }\r\n }\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { PkCheckPacketFieldsStoreExtension } from './PkCheckPacketFieldsStoreExtension';\r\nimport { ArActStoreExtension } from './ArActStoreExtension';\r\nimport { ArEDocumentStoreExtension } from './ArEDocumentStoreExtension';\r\nimport { ArContractStoreExtension } from './ArContractStoreExtension';\r\nimport { ArContractAdditionalExecutionStoreExtension } from './ArContractAdditionalExecutionStoreExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: PkCheckPacketFieldsStoreExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArActStoreExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractStoreExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArEDocumentStoreExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractAdditionalExecutionStoreExtension, stage: ExtensionStage.AfterPlatform});","import { CardNewExtension, ICardNewExtensionContext } from 'tessa/cards/extensions';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { UIContext } from 'tessa/ui';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from 'src/pkScripts/Helpers/PkRequestTypes';\r\n\r\nexport class PkExpertNewExtension extends CardNewExtension {\r\n\r\n public async afterRequest(context: ICardNewExtensionContext) {\r\n if (context == null || !context.requestIsSuccessful) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.response?.card?.typeId, PkCardTypes.PkExpertTypeID)) {\r\n return;\r\n }\r\n // если создается из представления, то автоматически подтягивается организация из фильтра\r\n let viewContext = UIContext.current?.parent?.viewContext;\r\n\r\n if (viewContext &&\r\n viewContext.view &&\r\n viewContext.view.metadata.alias == \"PkExperts\") {\r\n var selectedExpertOrganizationId = viewContext.parameters.parameters.find(x => x.name == \"ExpertOrganization\");\r\n if (!selectedExpertOrganizationId) return;\r\n let partnerExternalID = selectedExpertOrganizationId.criteriaValues[0]?.values[0].value;\r\n if (partnerExternalID)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetPartnerKCKByExternalID; \r\n request.info[\"PartnerKCKExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64); \r\n \r\n const response = await CardService.instance.request(request); \r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n } \r\n\r\n let partnerKCK = response.info.PartnerKCK;\r\n let organizationName = partnerKCK.Name.$value;\r\n let organizationId = partnerKCK.ID.$value;\r\n let organizationExtId = partnerKCK.ExtID.$value;\r\n\r\n let card = context.response?.card;\r\n var pkExperts = card!.sections.tryGet(\"PkExperts\");\r\n if (pkExperts) {\r\n\r\n pkExperts.fields.set(\"PartnerID\", organizationId, DotNetType.Guid);\r\n pkExperts.fields.set(\"PartnerExternalID\", organizationExtId, DotNetType.Int64);\r\n pkExperts.fields.set(\"PartnerName\", organizationName, DotNetType.String);\r\n } \r\n }\r\n }\r\n }\r\n}","/*import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { PkDialogsNewExtension } from './PkDialogsNewExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: PkDialogsNewExtension, stage: ExtensionStage.AfterPlatform});*/\r\n\r\nimport { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { PkExpertNewExtension } from './PkExpertNewExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: PkExpertNewExtension, stage: ExtensionStage.AfterPlatform});\r\n\r\n","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { IconButton, RaisedButton } from 'ui';\r\nimport { MyTasksViewModel } from './MyTasksViewModel';\r\n\r\ninterface MyTasksViewProps {\r\n viewModel: MyTasksViewModel;\r\n}\r\n\r\n@observer\r\nclass MyTasksView extends React.Component {\r\n public render() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private UnselectRows = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.UnselectRowsAsync();\r\n }\r\n\r\n private ButtonCommandDelegate = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.ShowDialogAsync();\r\n }\r\n\r\n private MarkAsReadCommand = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.MarkAsReadAsync();\r\n }\r\n\r\n private MarkAllAsExecuteCommand = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.MarkAllAsExecuteAsync();\r\n }\r\n\r\n private MarkAsExecuteCommand = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.MarkAsExecuteAsync();\r\n }\r\n}\r\n\r\nexport default MyTasksView;","import { userSession } from 'common/utility';\r\nimport { Card, CardGetMode, CardRowState, CardGetRestrictionFlags, CardTaskAction } from 'tessa/cards';\r\nimport { CardGetRequest, CardNewRequest, CardService, CardStoreRequest } from 'tessa/cards/service';\r\nimport { showMessage, showLoadingOverlay, showConfirm, showNotEmpty, createCardModel, UIButton } from 'tessa/ui';\r\nimport { IWorkplaceViewComponent } from 'tessa/ui/views';\r\nimport {\r\n BaseContentItem,\r\n ContentPlaceArea,\r\n ContentPlaceOrder,\r\n FilterButtonViewModel,\r\n TableGridViewModel\r\n} from 'tessa/ui/views/content';\r\nimport { ValidationResultBuilder, ValidationResultType, ValidationResult } from 'tessa/platform/validation';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { TessaViewRequest, RequestParameterBuilder, ITessaViewResult } from 'tessa/views';\r\nimport { equalsCriteriaOperator, RequestParameter } from 'tessa/views/metadata';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { ICardModel } from 'tessa/ui/cards';\r\nimport { PkFdProcessHelper } from '../Helpers/PkFdProcessHelper';\r\nimport { autorun } from 'mobx';\r\nimport { IViewParameters } from 'tessa/ui/views/parameters';\r\n\r\nexport class MyTasksViewModel extends BaseContentItem {\r\n constructor(\r\n viewComponent: IWorkplaceViewComponent,\r\n area: ContentPlaceArea = ContentPlaceArea.ToolBarPanel,\r\n order: number = ContentPlaceOrder.Middle\r\n ) {\r\n super(viewComponent, area, order);\r\n this._tableView = viewComponent.content.get(\"Table\") as TableGridViewModel;\r\n this._filterButton = viewComponent.content.get(\"FilterButton\") as FilterButtonViewModel;\r\n this._component = viewComponent;\r\n }\r\n\r\n private readonly _tableView: TableGridViewModel;\r\n\r\n private readonly _component: IWorkplaceViewComponent;\r\n\r\n private readonly _selectedDocsIDs: Array = [];\r\n\r\n private readonly _selectedDocs: Map> = new Map>();\r\n private _filterButton: FilterButtonViewModel;\r\n private viewParams: IViewParameters;\r\n\r\n private _pageRowsChangingDisposer: Function | null = null;\r\n\r\n private _pageRowsSelectionChangingDisposer: Function | null = null;\r\n\r\n public initiailize() {\r\n super.initiailize();\r\n this.SetSelectionLogic();\r\n }\r\n\r\n public dispose() {\r\n super.dispose();\r\n if (this._pageRowsChangingDisposer) {\r\n this._pageRowsChangingDisposer();\r\n this._pageRowsChangingDisposer = null;\r\n }\r\n if (this._pageRowsSelectionChangingDisposer) {\r\n this._pageRowsSelectionChangingDisposer();\r\n this._pageRowsSelectionChangingDisposer = null;\r\n }\r\n }\r\n\r\n private UpdateContextInfo() {\r\n this._component.workplace.context.info[\"PkActDownloadReportVM\"] = this._selectedDocs;\r\n }\r\n\r\n private SetSelectionLogic() {\r\n\r\n // подписываемся на изменение строк в табличке\r\n // это происходит при обновлении / изменении номера страницы\r\n this._pageRowsChangingDisposer = autorun(() => {\r\n\r\n if (this.viewParams !== null && !this.IViewParametersEqual(this.viewParams, this._filterButton.parameters.cloneAsReadOnly())) {\r\n this._selectedDocsIDs.splice(0);\r\n this._selectedDocs.clear();\r\n this.UpdateContextInfo();\r\n }\r\n this.viewParams = this._filterButton.parameters.cloneAsReadOnly();\r\n // проверяем наличие строк (при изменении страницы сначала 0, затем заполняется)\r\n if (this._tableView.rows.length == 0) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // получаем флаг выделения строки\r\n // посредством проверки наличия DocID в списке _selectedDocsIDs\r\n const isSelected = this._selectedDocsIDs.some(x => x == row.data.get(\"ActID\"));\r\n\r\n // выделяем / сбрасываем выделение у строки\r\n row.selectRow(isSelected);\r\n }\r\n });\r\n\r\n // подписываемся на изменение строк в табличке (конкретно на их выделение)\r\n this._pageRowsSelectionChangingDisposer = autorun(() => {\r\n // проверяем наличие строк\r\n if (this._tableView.rows.length == 0) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // получаем DocID строки\r\n const docID = row.data.get(\"ActID\");\r\n\r\n // если строка выделилась\r\n if (row.isSelected) {\r\n // и DocID нет в списке _selectedDocsIDs\r\n if (!this._selectedDocsIDs.some(x => x == docID)) {\r\n // добавляем DocID в список _selectedDocsIDs\r\n this._selectedDocsIDs.push(docID);\r\n this._selectedDocs.set(docID, row.data);\r\n\r\n }\r\n }\r\n // иначе если было снято выделение\r\n else {\r\n // пытаемся найти DocID в списке _selectedDocsIDs\r\n const index = this._selectedDocsIDs.findIndex(x => x == docID);\r\n // если нашли\r\n if (index != -1) {\r\n // удалаяем DocID из списка _selectedDocsIDs по индексу\r\n this._selectedDocsIDs.splice(index, 1);\r\n this._selectedDocs.delete(docID);\r\n\r\n }\r\n }\r\n }\r\n this.UpdateContextInfo();\r\n });\r\n }\r\n\r\n private RequestParameterEqual(first: RequestParameter | null, second: RequestParameter | null): boolean {\r\n if (first == null && second == null) {\r\n return true;\r\n }\r\n if (first == null || second == null) {\r\n return false;\r\n }\r\n if (first.name !== second.name) {\r\n return false;\r\n }\r\n const fCrit = first.criteriaValues;\r\n const sCrit = second.criteriaValues;\r\n if (fCrit.length !== sCrit.length) {\r\n return false;\r\n }\r\n if (\r\n !fCrit.every(f =>\r\n sCrit.find(s =>\r\n s.criteriaName === f.criteriaName &&\r\n s.values.length === f.values.length &&\r\n f.values.every(fv =>\r\n s.values.find(sv =>\r\n fv.value === sv.value\r\n ) != null\r\n )\r\n ) != null\r\n )\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n private IViewParametersEqual(first: IViewParameters | null, second: IViewParameters | null): boolean {\r\n if (first == null && second == null) {\r\n return true;\r\n }\r\n if (first == null || second == null) {\r\n return false;\r\n }\r\n const arrFirst = first.parameters;\r\n const arrSecond = second.parameters;\r\n if (arrFirst.length !== arrSecond.length) {\r\n return false;\r\n }\r\n for (const elf of arrFirst) {\r\n const els = arrSecond.find(x => x.name === elf.name);\r\n if (els == null) {\r\n return false;\r\n }\r\n if (!this.RequestParameterEqual(elf, els)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n \r\n public async ShowDialogAsync() {\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeById(PkCardTypes.PkDialogsTypeID);\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'PkDelegateMyTasksDialog');\r\n if (!dialogForm) {\r\n return;\r\n }\r\n\r\n // получаем новую карточку\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n // await showNotEmpty(response.validationResult.build());\r\n // if (!response.validationResult.isSuccessful) {\r\n // return;\r\n // }\r\n\r\n // создаем модель карточки\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n // показываем диалог\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n // тут можно управлять и расширить все контролы формы\r\n },\r\n [\r\n new UIButton('Делегировать', async (btn) => {\r\n if (!await showConfirm('Делегировать выбранные задачи?', 'Предупреждение')){\r\n return;\r\n }\r\n\r\n const listTasks = new Array();\r\n if (this.viewComponent.selectedRows) {\r\n // пробегаемся по выбанным строкам таблицы\r\n for (const row of this.viewComponent.selectedRows) {\r\n let cardID = row.get('CardID');\r\n let taskID = row.get('TaskID');\r\n let typeID = row.get('TypeID');\r\n let typeCaption = row.get('TypeCaption');\r\n let isBreak = !cardID || !taskID || !typeID || !typeCaption;\r\n if (isBreak) {\r\n continue;\r\n }\r\n\r\n let task = this.GetTaskInfo(taskID, typeID, typeCaption, cardID);\r\n listTasks.push(task);\r\n }\r\n }\r\n\r\n let count = await this.TasksDelegatedAsync(windowCardModel, listTasks, 'Делегирование выбранных заданий');\r\n await showMessage(`Делегировано ${count}/${this.viewComponent.selectedRows?.length} задач`);\r\n this.viewComponent.refreshView();\r\n btn.close();\r\n }),\r\n new UIButton('$UI_Common_Cancel', (btn) => {\r\n console.log('Cancel');\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n private async TasksDelegatedAsync(windowCardModel: ICardModel, tasks: any[], caption: string) {\r\n let tasksCount = 0;\r\n let validationResult = new ValidationResultBuilder();\r\n tasks = tasks.filter(m => m['TaskID'] && m['TypeID'] && m['CardID'] && m['TypeCaption']);\r\n const tasksInCards = this.groupBy(tasks, 'CardID');\r\n\r\n await showLoadingOverlay(async () => {\r\n for (let cardID of tasksInCards.keys()) {\r\n let currentCard = await this.GetCardAsync(cardID);\r\n if (!currentCard) {\r\n continue;\r\n }\r\n\r\n // обработка задач для одной карточки\r\n for (let task of tasksInCards.get(cardID)) {\r\n let taskID = task['TaskID'];\r\n let typeID = task['TypeID'];\r\n const taskType = MetadataStorage.instance.cardMetadata.getCardTypeById(typeID);\r\n // выбираем подходящую опцию завершения (для уведомлений - обычно одна)\r\n const completionOption = taskType?.completionOptions.find(x => x.typeId == PkFdProcessHelper.FdDelegate)\r\n if (!completionOption) {\r\n continue;\r\n }\r\n\r\n // завершаем задания\r\n await this.DelegateTaskInCardAsync(\r\n windowCardModel,\r\n currentCard!,\r\n taskID,\r\n completionOption!.typeId ?? '');\r\n\r\n // Ограничение - делегирование максимум 10 задач.\r\n if (tasksCount++ >= 10) {\r\n return --tasksCount;\r\n }\r\n }\r\n\r\n // сохраняем измененную карточку\r\n let result = await this.StoreCardAsync(currentCard!);\r\n\r\n if (result) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n 'Не удалось сохранить карточку \"' + cardID + '\"',\r\n undefined,\r\n undefined,\r\n undefined,\r\n result);\r\n }\r\n }\r\n }, caption);\r\n\r\n if (!validationResult.isSuccessful) {\r\n // формируем сообщение с ошибками\r\n const errorsString = validationResult.items.map(x =>\r\n x.message + \"\\n\" +\r\n x.details).join(\"\\n\\n\");\r\n\r\n // пробрасываем исключение\r\n throw new Error(errorsString);\r\n }\r\n\r\n return tasksCount;\r\n }\r\n\r\n private async DelegateTaskInCardAsync(\r\n windowCardModel: ICardModel,\r\n card: Card,\r\n taskID: string,\r\n optionID: string) {\r\n // получаем задание для завершения\r\n const task = card.tasks.find(x =>\r\n x.rowId === taskID);\r\n\r\n // проверяем наличие задания\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n // завершаем задание\r\n task.optionId = optionID;\r\n task.action = CardTaskAction.Complete;\r\n task.state = CardRowState.Deleted;\r\n task.userId = userSession.UserID;\r\n task.userName = userSession.UserName;\r\n\r\n // пишем комментарий\r\n const pktccSection = task.card.sections.getOrAdd(\"PkTaskChanceryComment\");\r\n pktccSection.fields.set(\"Comment\", windowCardModel.card.sections.tryGet(\"PkDelegateMyTasks\")?.fields.tryGet(\"Comment\"));\r\n\r\n // фиксируем пользователя\r\n const fdTask = task.card.sections.getOrAdd(\"FdTask\");\r\n const employeeId = windowCardModel.card.sections.tryGet(\"PkDelegateMyTasks\")?.fields.tryGet(\"EmployeeID\");\r\n fdTask.fields.set(\"DelegateID\", createTypedField(employeeId, DotNetType.Guid));\r\n fdTask.fields.set(\"DelegateName\", windowCardModel.card.sections.tryGet(\"PkDelegateMyTasks\")?.fields.tryGet(\"EmployeeName\"));\r\n }\r\n\r\n /** Обработка выделенных задач (прочтение). */\r\n public async MarkAsReadAsync()\r\n {\r\n if(this.viewComponent.selectedRows)\r\n {\r\n this.viewComponent.selectedRows.forEach(row => {\r\n let cardID = row.get('CardID');\r\n let cardTypeID = row.get('CardTypeID');\r\n\r\n if(cardID && cardTypeID)\r\n {\r\n const request = new CardGetRequest();\r\n request.cardId = cardID;\r\n request.cardTypeId = cardTypeID;\r\n request.getMode = CardGetMode.ReadOnly;\r\n request.restrictionFlags = CardGetRestrictionFlags.RestrictTaskHistory\r\n | CardGetRestrictionFlags.RestrictSections\r\n | CardGetRestrictionFlags.RestrictFiles\r\n | CardGetRestrictionFlags.RestrictTasks;\r\n\r\n CardService.instance.get(request);\r\n }\r\n })\r\n\r\n this.viewComponent.refreshView();\r\n }\r\n else\r\n {\r\n await showMessage('Не выбрано ни одного задания.');\r\n }\r\n }\r\n\r\n /** Обработка выделенных уведомлений (выполнение). */\r\n public async MarkAsExecuteAsync()\r\n {\r\n if (!await showConfirm('Отметить выбранные уведомления как выполненные?', 'Предупреждение')){\r\n return;\r\n }\r\n\r\n const listTasks = new Array();\r\n if(this.viewComponent.selectedRows) {\r\n // пробегаемся по выбанным строкам таблицы\r\n for (const row of this.viewComponent.selectedRows) {\r\n let cardID = row.get('CardID');\r\n let taskID = row.get('TaskID');\r\n let typeID = row.get('TypeID');\r\n let typeCaption = row.get('TypeCaption');\r\n let isBreak = !cardID || !taskID || !typeID || !(typeCaption?.indexOf('Уведомление') > -1);\r\n if (isBreak) {\r\n continue;\r\n }\r\n\r\n let task = this.GetTaskInfo(taskID, typeID, typeCaption, cardID);\r\n listTasks.push(task);\r\n }\r\n }\r\n\r\n let count = await this.TasksCompletedAsync(listTasks, 'Обработка выделенных уведомлений');\r\n if (count > 0){\r\n await showMessage('Обработано ' + count + ' уведомлений.');\r\n this.viewComponent.refreshView();\r\n }\r\n else{\r\n await showMessage('Не выбрано ни одного уведомления.');\r\n }\r\n }\r\n\r\n /** Обработка всех уведомлений (выполнение). */\r\n public async MarkAllAsExecuteAsync()\r\n {\r\n if (!await showConfirm('Отметить все уведомления как выполненные?', 'Предупреждение')){\r\n return;\r\n }\r\n\r\n const listTasks = new Array();\r\n\r\n await showLoadingOverlay(async () => {\r\n const view = this!.viewComponent!.view;\r\n var tessaViewRequest = new TessaViewRequest(view!.metadata);\r\n\r\n var typeParam = new RequestParameterBuilder()\r\n .withMetadata(view!.metadata.parameters.get('TaskType')!)\r\n .addCriteria(equalsCriteriaOperator(), '', 'Уведомление')\r\n .asRequestParameter();\r\n tessaViewRequest.values.push(typeParam);\r\n\r\n let viewResult: ITessaViewResult;\r\n try {\r\n viewResult = await view!.getData(tessaViewRequest);\r\n } catch (err) {\r\n await showNotEmpty(ValidationResult.fromError(err));\r\n return;\r\n }\r\n\r\n const iTaskID: number = viewResult.getColumnIndex('TaskID');\r\n const iCardID: number = viewResult.getColumnIndex('CardID');\r\n const iTypeID: number = viewResult.getColumnIndex('TypeID');\r\n const iTypeCaption: number = viewResult.getColumnIndex('TypeCaption');\r\n\r\n if (iTaskID >-1 && iCardID >-1 && iTypeID >-1 && iTypeCaption > -1){\r\n viewResult.rows.forEach(row => {\r\n let task = this.GetTaskInfo(row[iTaskID], row[iTypeID], row[iTypeCaption], row[iCardID]);\r\n listTasks.push(task);\r\n });\r\n }\r\n }, 'Формирование списка уведомлений');\r\n\r\n let count = await this.TasksCompletedAsync(listTasks, 'Обработка всех уведомлений для пользователя');\r\n if (count > 0){\r\n await showMessage('Обработано ' + count + ' уведомлений.');\r\n this.viewComponent.refreshView();\r\n }\r\n else{\r\n await showMessage('Не выбрано ни одного уведомления.');\r\n }\r\n }\r\n\r\n /** Завершение списка заданий. */\r\n private async TasksCompletedAsync(\r\n tasks: Array, \r\n caption: string): Promise {\r\n let tasksCount = 0;\r\n let validationResult = new ValidationResultBuilder();\r\n tasks = tasks.filter(m => m['TaskID'] && m['TypeID'] && m['CardID'] && m['TypeCaption'] && m['TypeCaption'].indexOf('Уведомление')==0);\r\n const tasksInCards = this.groupBy(tasks, 'CardID');\r\n\r\n await showLoadingOverlay(async () => {\r\n for (let cardID of tasksInCards.keys()) {\r\n let currentCard = await this.GetCardAsync(cardID);\r\n if (!currentCard) {\r\n continue;\r\n }\r\n\r\n // обработка задач для одной карточки\r\n for (let task of tasksInCards.get(cardID)) {\r\n let taskID = task['TaskID'];\r\n let typeID = task['TypeID'];\r\n const taskType = MetadataStorage.instance.cardMetadata.getCardTypeById(typeID);\r\n // выбираем подходящую опцию завершения (для уведомлений - обычно одна)\r\n const completionOption = taskType?.completionOptions[0];\r\n if (!completionOption){\r\n continue;\r\n }\r\n\r\n // завершаем задания\r\n await this.CompleteTaskInCardAsync(\r\n currentCard!,\r\n taskID,\r\n completionOption!.typeId ?? '');\r\n\r\n tasksCount++;\r\n }\r\n\r\n // сохраняем измененную карточку\r\n let result = await this.StoreCardAsync(currentCard!);\r\n if (result > '') {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n 'Не удалось сохранить карточку \"' + cardID + '\"',\r\n undefined,\r\n undefined,\r\n undefined,\r\n result);\r\n }\r\n }\r\n }, caption);\r\n\r\n if (!validationResult.isSuccessful) {\r\n // формируем сообщение с ошибками\r\n const errorsString = validationResult.items.map(x =>\r\n x.message + \"\\n\" +\r\n x.details).join(\"\\n\\n\");\r\n\r\n // пробрасываем исключение\r\n throw new Error(errorsString);\r\n }\r\n\r\n return tasksCount;\r\n }\r\n\r\n /** Завершение задания по карточке. */\r\n private async CompleteTaskInCardAsync(\r\n card: Card,\r\n taskID: string,\r\n optionID: string) {\r\n // получаем задание для завершения\r\n const task = card.tasks.find(x =>\r\n x.rowId === taskID);\r\n\r\n // проверяем наличие задания\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n // завершаем задание\r\n task.optionId = optionID;\r\n task.action = CardTaskAction.Complete;\r\n task.state = CardRowState.Deleted;\r\n task.userId = userSession.UserID;\r\n task.userName = userSession.UserName;\r\n }\r\n\r\n /** Получение карточки. */\r\n private async GetCardAsync(\r\n cardID: string) {\r\n // получаем карточку\r\n const getRequest = new CardGetRequest();\r\n getRequest.cardId = cardID;\r\n getRequest.getMode = CardGetMode.Edit;\r\n const getResponse = await CardService.instance.get(getRequest);\r\n\r\n // проверяем результат получения\r\n if (!getResponse.validationResult.isSuccessful) {\r\n // выходим\r\n return null;\r\n }\r\n\r\n // возвращаем карточку\r\n return getResponse.card;\r\n }\r\n\r\n /** Сохранение карточек. */\r\n private async StoreCardAsync(card: Card) : Promise {\r\n // оставляем только изменения, удаляем все лишнее\r\n card.removeAllButChanged();\r\n\r\n // создаем запрос на сохранение карточки\r\n const request = new CardStoreRequest();\r\n request.card = card;\r\n request.info['SkipValidation'] = true;\r\n\r\n // сохраняем карточку\r\n const response = await CardService.instance.store(request);\r\n\r\n // проверяем результат сохранения\r\n if (!response.validationResult.isSuccessful) {\r\n return response.validationResult.build().toString();\r\n }\r\n\r\n return '';\r\n }\r\n\r\n // формирование объекта - информации о карточке.\r\n private GetTaskInfo(taskID: string, typeID: string, typeCaption: string, cardID: string) : Object\r\n {\r\n const obj = {\r\n TaskID: taskID,\r\n TypeID: typeID,\r\n TypeCaption: typeCaption,\r\n CardID: cardID\r\n };\r\n\r\n return obj;\r\n }\r\n\r\n /** Снятие выделения строк. */\r\n public async UnselectRowsAsync() {\r\n // проверяем\r\n if (this._tableView?.rows == null) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // сбрасываем выделение у строки\r\n row.selectRow(false);\r\n const docID = row.data.get(\"ActID\");\r\n const index = this._selectedDocsIDs.findIndex(x => x == docID);\r\n // если нашли\r\n if (index != -1) {\r\n // удалаяем DocID из списка _selectedDocsIDs по индексу\r\n this._selectedDocsIDs.splice(index, 1);\r\n this._selectedDocs.delete(docID);\r\n }\r\n }\r\n this.UpdateContextInfo();\r\n }\r\n\r\n /* реализация метода groupBy по ключу */\r\n private groupBy(items, key) {\r\n // initialize our map\r\n const map = new Map();\r\n items.forEach((item) => {\r\n // get the value we're grouping by\r\n const keyValue = item[key];\r\n // get the array of items for this key value. default to an empty array\r\n const currArr = map.has(keyValue) ? map.get(keyValue) : [];\r\n // add the current item\r\n currArr.push(item);\r\n // update the array\r\n map.set(keyValue, currArr);\r\n });\r\n return map;\r\n }\r\n}","import { WorkplaceViewComponentExtension } from 'tessa/ui/views/extensions';\r\nimport { IWorkplaceViewComponent, ViewComponentRegistry } from 'tessa/ui/views';\r\nimport { ContentPlaceArea } from 'tessa/ui/views/content';\r\nimport { ApplicationExtension } from 'tessa';\r\nimport MyTasksView from './MyTasksView';\r\nimport { MyTasksViewModel } from './MyTasksViewModel';\r\n\r\nexport class MyTasksExtension extends WorkplaceViewComponentExtension {\r\n public getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.MyTasksExtension';\r\n }\r\n\r\n public initialize(model: IWorkplaceViewComponent) {\r\n model.contentFactories.set(\r\n 'MyTasksExtension',\r\n c => new MyTasksViewModel(c, ContentPlaceArea.ToolBarPanel, -2147483648)\r\n );\r\n }\r\n}\r\n\r\nexport class MyTasksInitializeExtension extends ApplicationExtension {\r\n public initialize() {\r\n ViewComponentRegistry.instance.register(\r\n MyTasksViewModel,\r\n () => MyTasksView);\r\n }\r\n}","import { userSession } from 'common/utility';\r\nimport { CdUIHelper } from 'src/cdScripts/UI/CdUIHelper';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { Card, CardGetMode, CardRowState, CardTaskAction, CardValidatorTypes } from 'tessa/cards';\r\nimport { CardGetRequest, CardNewRequest, CardRequest, CardService, CardStoreRequest } from 'tessa/cards/service';\r\nimport { LocalizationManager } from 'tessa/localization';\r\nimport { createTypedField, DotNetType, Visibility } from 'tessa/platform';\r\nimport { IValidationResultBuilder, ValidationResult, ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { createCardModel, showConfirm, showLoadingOverlay, showMessage, showNotEmpty, tryGetFromInfo, tryGetFromSettings, UIButton } from 'tessa/ui';\r\nimport { IControlViewModel } from 'tessa/ui/cards';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { IWorkplaceViewComponent } from 'tessa/ui/views';\r\nimport { BaseContentItem, ContentPlaceArea, ContentPlaceOrder, TableGridViewModel } from 'tessa/ui/views/content';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkCommonHelper } from '../Helpers/PkCommonHelper';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { autorun } from 'mobx';\r\n\r\nexport class PkCompleteTasksWorkplaceComponentViewModel extends BaseContentItem {\r\n constructor(\r\n viewComponent: IWorkplaceViewComponent,\r\n area: ContentPlaceArea = ContentPlaceArea.ToolBarPanel,\r\n order: number = ContentPlaceOrder.Middle\r\n ) {\r\n super(viewComponent, area, order);\r\n this._tableView = viewComponent.content.get(\"Table\") as TableGridViewModel;\r\n }\r\n\r\n public initiailize() {\r\n super.initiailize();\r\n this.SetSelectionLogic();\r\n }\r\n\r\n public dispose() {\r\n super.dispose();\r\n if (this._pageRowsChangingDisposer) {\r\n this._pageRowsChangingDisposer();\r\n this._pageRowsChangingDisposer = null;\r\n }\r\n if (this._pageRowsSelectionChangingDisposer) {\r\n this._pageRowsSelectionChangingDisposer();\r\n this._pageRowsSelectionChangingDisposer = null;\r\n }\r\n }\r\n\r\n private readonly _tableView: TableGridViewModel;\r\n\r\n private readonly _selectedDocsIDs: Array = [];\r\n\r\n private _pageRowsChangingDisposer: Function | null = null;\r\n\r\n private _pageRowsSelectionChangingDisposer: Function | null = null;\r\n\r\n /** Установка логики выделения строк в табличке. */\r\n private SetSelectionLogic() {\r\n // подписываемся на изменение строк в табличке\r\n // это происходит при обновлении / изменении номера страницы\r\n this._pageRowsChangingDisposer = autorun(() => {\r\n // проверяем наличие строк (при изменении страницы сначала 0, затем заполняется)\r\n if (this._tableView.rows.length == 0) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // получаем флаг выделения строки\r\n // посредством проверки наличия DocID в списке _selectedDocsIDs\r\n const isSelected = this._selectedDocsIDs.some(x => x == row.data.get(\"DocID\"));\r\n\r\n // выделяем / сбрасываем выделение у строки\r\n row.selectRow(isSelected);\r\n }\r\n });\r\n\r\n // подписываемся на изменение строк в табличке (конкретно на их выделение)\r\n this._pageRowsSelectionChangingDisposer = autorun(() => {\r\n // проверяем наличие строк\r\n if (this._tableView.rows.length == 0) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // получаем DocID строки\r\n const docID = row.data.get(\"DocID\");\r\n\r\n // если строка выделилась\r\n if (row.isSelected) {\r\n // и DocID нет в списке _selectedDocsIDs\r\n if (!this._selectedDocsIDs.some(x => x == docID)) {\r\n // добавляем DocID в список _selectedDocsIDs\r\n this._selectedDocsIDs.push(docID);\r\n }\r\n }\r\n // иначе если было снято выделение\r\n else {\r\n // пытаемся найти DocID в списке _selectedDocsIDs\r\n const index = this._selectedDocsIDs.findIndex(x => x == docID);\r\n // если нашли\r\n if (index != -1) {\r\n // удалаяем DocID из списка _selectedDocsIDs по индексу\r\n this._selectedDocsIDs.splice(index, 1);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Снятие выделения строк. */\r\n public async UnselectRowsAsync() {\r\n // проверяем\r\n if (this._tableView?.rows == null) {\r\n return;\r\n }\r\n\r\n // выводим диалоговое окно пользователю для подтверждения\r\n const result = await showConfirm(\"Вы уверены, что хотите снять выделение?\");\r\n\r\n // если пользователь нажал \"Нет\"\r\n if (!result) {\r\n // выходим\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // сбрасываем выделение у строки\r\n row.selectRow(false);\r\n }\r\n\r\n // чистим список _selectedDocsIDs\r\n this._selectedDocsIDs.splice(0, this._selectedDocsIDs.length);\r\n }\r\n\r\n /** Завершение заданий. */\r\n public async CompleteTasksAsync() {\r\n try {\r\n // если список выбранных карточек пустой\r\n if (this._selectedDocsIDs.length == 0) {\r\n // отображаем сообщение пользователю\r\n await showMessage(\r\n \"Пожалуйста, выберите карточки и заново повторите действие.\",\r\n \"Завершение заданий\");\r\n\r\n // и выходим\r\n return;\r\n }\r\n\r\n // получаем список данных по типам активных заданий\r\n // для текущего пользователя по выбранным карточкам\r\n const taskTypesInfo = await this.GetActiveTaskTypesInfoAsync();\r\n\r\n // если активных заданий нет\r\n if (taskTypesInfo.length == 0) {\r\n // отображаем сообщение пользователю\r\n await showMessage(\r\n \"По выбранным карточкам нет активных заданий, предназначенных для вас.\",\r\n \"Завершение заданий\");\r\n\r\n // и выходим\r\n return;\r\n }\r\n\r\n // группируем данные по ID типа задания\r\n const taskTypesInfoGroups = Object.entries(PkCommonHelper.GroupBy(taskTypesInfo, x => x.TaskTypeID));\r\n\r\n // определяем ID типа задания для завершения\r\n // если определена только одна группа - тогда берем из нее\r\n // если несколько - даем пользователю выбрать тип задания\r\n var taskTypeID = taskTypesInfoGroups.length == 1\r\n ? taskTypesInfoGroups[0][0]\r\n : await this.ShowTaskTypeChoosingDialogAsync(taskTypesInfoGroups.map(x => x[0]));\r\n\r\n // проверяем задался ли тип задания (если нет, тогда была отмена)\r\n if (taskTypeID == null) {\r\n return;\r\n }\r\n\r\n // отображаем диалоговое окно для завершения заданий\r\n await this.ShowCompleteTasksDialogAsync(\r\n taskTypeID,\r\n taskTypesInfoGroups\r\n .find(x => x[0] == taskTypeID)![1]\r\n .map(x => x.CardID));\r\n\r\n // обновляем представление вне зависимости от того,\r\n // были ли какие-нибудь ошибки при обработке документов (ShowCompleteTasksDialogAsync = false)\r\n // т.к. по 1 из 5 документов может возникнуть ошибка, при это 4 документа обработаются\r\n // и нам нужно обновить представление, чтобы отобразить новый статус по этим 4 документам\r\n await this.viewComponent.refreshView();\r\n }\r\n catch (e) {\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при завершении заданий по документам.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\",\\n\" +\r\n \"либо открыв его двойным кликом по ошибке и скопировав стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n ValidationResult.fromError(e).toString());\r\n\r\n await showNotEmpty(validationResult.build());\r\n }\r\n }\r\n\r\n /** Получение информации по активным типам заданий для текущего пользователя по указанным карточкам. */\r\n private async GetActiveTaskTypesInfoAsync () : Promise<{TaskTypeID: string, CardID: string}[]> {\r\n return await showLoadingOverlay(async () => {\r\n // создаем запрос\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCheckUserHasTasks;\r\n request.info[\"IsNeedTasksTypesInfo\"] = createTypedField(true, DotNetType.Boolean);\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"CardIDs\"] = this._selectedDocsIDs.map(x => createTypedField(x, DotNetType.Guid));\r\n\r\n // получаем ответ\r\n const response = await CardService.instance.request(request);\r\n\r\n // проверяем\r\n if (!response.validationResult.isSuccessful) {\r\n // прокидываем исключение\r\n throw new Error(response.validationResult.build().toString());\r\n }\r\n\r\n // парсим ответ\r\n return response.info.TasksTypesInfo\r\n .map(x => {\r\n return {\r\n TaskTypeID: x.TaskTypeID.$value as string,\r\n CardID: x.CardID.$value as string\r\n }\r\n });\r\n }, \"Получение данных по заданиям\");\r\n }\r\n\r\n /** Отображение диалогового окна для выбора типа задания. */\r\n private async ShowTaskTypeChoosingDialogAsync(\r\n taskTypesIDs: string[]): Promise {\r\n // инициализируем возвращаемые данные\r\n let taskTypeID: string | null = null;\r\n\r\n // получаем тип карточки и форму комментария\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeById(PkCardTypes.PkDialogsTypeID);\r\n const form = dialogsType?.forms?.find(x => x.name == \"CompleteTasks\");\r\n\r\n // если форма не найдена\r\n if (form == null) {\r\n return null;\r\n }\r\n\r\n // создаем запрос на создание карточки\r\n const request = new CardNewRequest();\r\n request.cardTypeId = PkCardTypes.PkDialogsTypeID;\r\n\r\n // отправляем запрос и получаем ответ\r\n const response = await CardService.instance.new(request);\r\n\r\n // создаем модель карточки\r\n const model = createCardModel(\r\n response.card,\r\n response.sectionRows);\r\n\r\n // если секция не найдена\r\n const pkdSection = model.card.sections.tryGet(\"PkDialogs\");\r\n if (pkdSection == null) {\r\n return null;\r\n }\r\n\r\n // устанавливаем фильтр для выбора типа задания\r\n pkdSection.fields.set(\"Filter\", createTypedField(taskTypesIDs.join(\",\"), DotNetType.String));\r\n\r\n // инициализируем контрол с выбором типа задания\r\n let taskTypeControl: IControlViewModel | null = null;\r\n\r\n // отображаем диалоговое окно\r\n await showFormDialog(\r\n form,\r\n model,\r\n async (viewModel) => {\r\n // пробегаемся по блокам формы\r\n for (const block of viewModel.blocks) {\r\n // устанавливаем видимость блоков\r\n block.blockVisibility = block.name == \"TaskTypeChoosing\"\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n }\r\n\r\n // задаем контрол для выбора типа задания\r\n taskTypeControl = CdUIHelper.GetUIControlFromForm(\r\n viewModel,\r\n \"TaskTypeControl\");\r\n },\r\n [\r\n new UIButton(\"Применить\", async (button) => {\r\n // получаем ID выбранного типа задания\r\n taskTypeID = pkdSection.fields.tryGet(\"ValueID\") as string | null;\r\n\r\n // проверяем\r\n if (taskTypeID == null) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // определяем текст ошибки\r\n const errorMessage = taskTypeControl != null\r\n ? `Поле \\\"${taskTypeControl.caption}\\\" обязательно для заполнения.`\r\n : \"Поле \\\"Тип задания\\\" обязательно для заполнения.\";\r\n\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n errorMessage);\r\n\r\n // выводим сообщение об ошибке\r\n await showNotEmpty(validationResult.build());\r\n\r\n // выходим\r\n return;\r\n }\r\n\r\n // закрываем форму\r\n button.close();\r\n }),\r\n new UIButton(\"Отмена\", async (button) => {\r\n button.close();\r\n }),\r\n ],\r\n true);\r\n\r\n // возвращаем результат\r\n return taskTypeID;\r\n }\r\n\r\n /** Отображение диалогового окна для завершения заданий. */\r\n private async ShowCompleteTasksDialogAsync(\r\n taskTypeID: string,\r\n cardIDs: string[]): Promise {\r\n // инициализируем ответ формы\r\n let result = false;\r\n\r\n // получаем тип карточки и форму комментария\r\n const taskType = MetadataStorage.instance.cardMetadata.getCardTypeById(taskTypeID);\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeById(PkCardTypes.PkDialogsTypeID);\r\n const form = dialogsType?.forms?.find(x => x.name == \"CompleteTasks\");\r\n\r\n // если форма не найдена\r\n if (form == null || taskType == null) {\r\n return false;\r\n }\r\n\r\n // создаем запрос на создание карточки\r\n const request = new CardNewRequest();\r\n request.cardTypeId = PkCardTypes.PkDialogsTypeID;\r\n\r\n // отправляем запрос и получаем ответ\r\n const response = await CardService.instance.new(request);\r\n\r\n // создаем модель карточки\r\n const model = createCardModel(\r\n response.card,\r\n response.sectionRows);\r\n\r\n // если секция не найдена\r\n const pkdSection = model.card.sections.tryGet(\"PkDialogs\");\r\n if (pkdSection == null) {\r\n return false;\r\n }\r\n\r\n // инициализируем контрол с комментарием\r\n let commentControl: IControlViewModel | null = null;\r\n\r\n // инициализируем список кнопок\r\n const buttons: UIButton[] = [];\r\n\r\n // пробегаемся по вариантам завершения задания\r\n // и формируем список кнопок для диалогового окна\r\n for (const completionOption of taskType.completionOptions) {\r\n // получаем имя кнопки\r\n const caption = await this.GetCompleteOptionCaptionAsync(completionOption.typeId!);\r\n\r\n // создаем кнопку\r\n const button = new UIButton(caption, async x => {\r\n try {\r\n // получаем комментарий из диалогового окна\r\n const dialogComment = pkdSection.fields.tryGet(\"Comment\") as string | null;\r\n\r\n // если комментарий не задан\r\n if (PkCommonHelper.IsNullOrWhitespace(dialogComment)) {\r\n // ID колонки комментария (PkTaskChanceryComment.Comment)\r\n const commentColumnID = \"ae374286-1a6e-4687-9a0e-a0126af12f4d\";\r\n\r\n // пытаемся получить валидатор комментария\r\n const commentValidator = completionOption.validators.find(y =>\r\n y.type == CardValidatorTypes.notNullField &&\r\n tryGetFromSettings(y.validatorSettings, \"ColumnID\") == commentColumnID);\r\n\r\n // если валидатор есть\r\n if (commentValidator != null) {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // определяем тип валидации\r\n const validationResultType = tryGetFromSettings(commentValidator.validatorSettings, \"Warning\")\r\n ? ValidationResultType.Warning\r\n : ValidationResultType.Error;\r\n\r\n // определяем текст ошибки\r\n const errorMessage = commentControl != null\r\n ? `Поле \\\"${commentControl.caption}\\\" обязательно для заполнения.`\r\n : \"Поле \\\"Комментарий\\\" обязательно для заполнения.\";\r\n\r\n // добавляем ошибку в результат валидации\r\n validationResult.add(\r\n validationResultType,\r\n errorMessage);\r\n\r\n // выводим сообщение об ошибке\r\n await showNotEmpty(validationResult.build());\r\n\r\n // выходим\r\n return;\r\n }\r\n }\r\n\r\n // получаем список карточек\r\n const cards = await this.GetCardsAsync(cardIDs);\r\n\r\n // завершаем задания\r\n await this.CompleteTasksInCardsAsync(\r\n cards,\r\n taskTypeID,\r\n completionOption.typeId!,\r\n dialogComment);\r\n\r\n // сохраняем карточки\r\n await this.StoreCardsAsync(cards);\r\n\r\n // задаем результат\r\n result = true;\r\n\r\n // закрываем диалоговое окно\r\n x.close();\r\n }\r\n catch (e) {\r\n var validationResult = new ValidationResultBuilder();\r\n\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при завершении заданий по документам.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\",\\n\" +\r\n \"либо открыв его двойным кликом по ошибке и скопировав стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n ValidationResult.fromError(e).toString());\r\n\r\n await showNotEmpty(validationResult.build());\r\n }\r\n });\r\n\r\n // добавляем кнопку в список\r\n buttons.push(button);\r\n }\r\n\r\n // отображаем диалоговое окно\r\n await showFormDialog(\r\n form,\r\n model,\r\n async (viewModel) => {\r\n // пробегаемся по блокам формы\r\n for (const block of viewModel.blocks) {\r\n // устанавливаем видимость блоков\r\n block.blockVisibility = block.name == \"CompleteTasks\"\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n }\r\n\r\n // задаем контрол для выбора типа задания\r\n commentControl = CdUIHelper.GetUIControlFromForm(\r\n viewModel,\r\n \"CommentControl\");\r\n },\r\n buttons,\r\n true);\r\n\r\n // возвращаем результат\r\n return result;\r\n }\r\n\r\n /** Получение наименования варианта завершения. */\r\n private async GetCompleteOptionCaptionAsync(\r\n completionOptionID: string) : Promise {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkGetFieldValue;\r\n request.info[\"TableName\"] = createTypedField(\"CompletionOptions\", DotNetType.String);\r\n request.info[\"FieldName\"] = createTypedField(\"Caption\", DotNetType.String);\r\n request.info[\"ID\"] = createTypedField(completionOptionID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n return LocalizationManager.instance.localize(tryGetFromInfo(response.info, \"Value\"));\r\n }\r\n\r\n /** Завершение задания по карточкам. */\r\n private async CompleteTasksInCardsAsync(\r\n cards: Card[],\r\n taskTypeID: string,\r\n optionID: string,\r\n comment: string | null) {\r\n await showLoadingOverlay(async () => {\r\n // пробегаемся по карточкам\r\n for (const card of cards) {\r\n // завершаем задание\r\n await this.CompleteTaskInCardAsync(\r\n card,\r\n taskTypeID,\r\n optionID,\r\n comment);\r\n }\r\n }, \"Завершение заданий\");\r\n }\r\n\r\n /** Завершение задания по карточке. */\r\n private async CompleteTaskInCardAsync(\r\n card: Card,\r\n taskTypeID: string,\r\n optionID: string,\r\n comment: string | null) {\r\n // получаем задание для завершения\r\n const task = card.tasks.find(x =>\r\n x.typeId === taskTypeID);\r\n\r\n // проверяем наличие задания\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n // завершаем задание\r\n task.optionId = optionID;\r\n task.action = CardTaskAction.Complete;\r\n task.state = CardRowState.Deleted;\r\n task.userId = userSession.UserID;\r\n task.userName = userSession.UserName;\r\n\r\n // пишем комментарий\r\n if (comment != null) {\r\n const pktccSection = task.card.sections.getOrAdd(\"PkTaskChanceryComment\");\r\n pktccSection.fields.set(\"Comment\", createTypedField(comment, DotNetType.String));\r\n }\r\n }\r\n\r\n /** Получение моделей карточек по данным из представления. */\r\n private async GetCardsAsync(\r\n cardIDs: string[]) {\r\n return await showLoadingOverlay(async () => {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // инициализируем список моделей карточек\r\n const cards = new Array();\r\n\r\n // пробегаемся по данным\r\n for (const cardID of cardIDs) {\r\n // получаем карточку\r\n const card = await this.GetCardAsync(\r\n cardID,\r\n validationResult,\r\n `Не удалось получить карточку \\\"${cardID}\\\".`);\r\n\r\n // если не удалось получить карточку\r\n if (card == null) {\r\n continue;\r\n }\r\n\r\n // добавляем карточку в список\r\n cards.push(card);\r\n }\r\n\r\n // проверяем ошибки\r\n if (!validationResult.isSuccessful) {\r\n // формируем сообщение с ошибками\r\n const errorsString = validationResult.items.map(x =>\r\n x.message + \"\\n\" +\r\n x.details).join(\"\\n\\n\");\r\n\r\n // пробрасываем исключение\r\n throw new Error(errorsString);\r\n }\r\n\r\n // возвращаем список карточек\r\n return cards;\r\n }, \"Получение документов\");\r\n }\r\n\r\n /** Получение карточки. */\r\n private async GetCardAsync(\r\n cardID: string,\r\n validationResult: IValidationResultBuilder,\r\n errorMessage: string) {\r\n // получаем карточку\r\n const getRequest = new CardGetRequest();\r\n getRequest.cardId = cardID;\r\n getRequest.getMode = CardGetMode.Edit;\r\n const getResponse = await CardService.instance.get(getRequest);\r\n\r\n // проверяем результат получения\r\n if (!getResponse.validationResult.isSuccessful) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n errorMessage,\r\n undefined,\r\n undefined,\r\n undefined,\r\n getResponse.validationResult.build().toString());\r\n\r\n // выходим\r\n return null;\r\n }\r\n\r\n // возвращаем карточку\r\n return getResponse.card;\r\n }\r\n\r\n /** Сохранение карточек. */\r\n private async StoreCardsAsync(cards: Card[]) {\r\n await showLoadingOverlay(async () => {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // пробегаемся по карточкам\r\n for (const card of cards) {\r\n // оставляем только изменения, удаляем все лишнее\r\n card.removeAllButChanged();\r\n\r\n // создаем запрос на сохранение карточки\r\n const request = new CardStoreRequest();\r\n request.card = card;\r\n\r\n // сохраняем карточку\r\n const response = await CardService.instance.store(request);\r\n\r\n // проверяем результат сохранения\r\n if (!response.validationResult.isSuccessful) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n `Не удалось сохранить карточку \\\"${card.id}\\\".`,\r\n undefined,\r\n undefined,\r\n undefined,\r\n response.validationResult.build().toString());\r\n }\r\n }\r\n\r\n // проверяем ошибки\r\n if (!validationResult.isSuccessful) {\r\n // формируем сообщение с ошибками\r\n const errorsString = validationResult.items.map(x =>\r\n x.message + \"\\n\" +\r\n x.details).join(\"\\n\\n\");\r\n\r\n // пробрасываем исключение\r\n throw new Error(errorsString);\r\n }\r\n }, \"Сохранение документов\");\r\n }\r\n}","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { IconButton } from 'ui';\r\nimport { PkCompleteTasksWorkplaceComponentViewModel } from './PkCompleteTasksWorkplaceComponentViewModel';\r\n\r\ninterface PkCompleteTasksWorkplaceComponentViewProps {\r\n viewModel: PkCompleteTasksWorkplaceComponentViewModel;\r\n}\r\n\r\n@observer\r\nclass PkCompleteTasksWorkplaceComponentView extends React.Component {\r\n public render() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private CompleteTasksAsync = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.CompleteTasksAsync();\r\n }\r\n\r\n private UnselectRows = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.UnselectRowsAsync();\r\n }\r\n}\r\n\r\nexport default PkCompleteTasksWorkplaceComponentView;","import { WorkplaceViewComponentExtension } from 'tessa/ui/views/extensions';\r\nimport { IWorkplaceViewComponent, ViewComponentRegistry } from 'tessa/ui/views';\r\nimport { ContentPlaceArea } from 'tessa/ui/views/content';\r\nimport { ApplicationExtension } from 'tessa';\r\nimport { PkCompleteTasksWorkplaceComponentViewModel } from './PkCompleteTasksWorkplaceComponentViewModel';\r\nimport PkCompleteTasksWorkplaceComponentView from './PkCompleteTasksWorkplaceComponentView';\r\n\r\nexport class PkCompleteTasksWorkplaceComponentExtension extends WorkplaceViewComponentExtension {\r\n public getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.PkCompleteTasksWorkplaceComponentExtension';\r\n }\r\n\r\n public initialize(model: IWorkplaceViewComponent) {\r\n model.contentFactories.set(\r\n 'PkCompleteTasksWorkplaceComponentExtension',\r\n c => new PkCompleteTasksWorkplaceComponentViewModel(c, ContentPlaceArea.ToolBarPanel, -2147483648)\r\n );\r\n }\r\n}\r\n\r\nexport class PkCompleteTasksWorkplaceComponentInitializeExtension extends ApplicationExtension {\r\n public initialize() {\r\n ViewComponentRegistry.instance.register(\r\n PkCompleteTasksWorkplaceComponentViewModel,\r\n () => PkCompleteTasksWorkplaceComponentView);\r\n }\r\n}","import { IWorkplaceViewComponent } from 'tessa/ui/views';\r\nimport { BaseContentItem, ContentPlaceArea, ContentPlaceOrder, TableGridViewModel } from 'tessa/ui/views/content';\r\nimport { autorun } from 'mobx';\r\nimport { IViewParameters } from 'tessa/ui/views/parameters';\r\nimport { RequestParameter } from 'tessa/views/metadata';\r\nimport { FilterButtonViewModel } from 'tessa/ui/views/content/filterButtonViewModel';\r\n\r\nexport class PkContractDownloadReportComponentViewModel extends BaseContentItem {\r\n constructor(\r\n viewComponent: IWorkplaceViewComponent,\r\n area: ContentPlaceArea = ContentPlaceArea.ContentPanel,\r\n order: number = ContentPlaceOrder.Middle\r\n ) {\r\n super(viewComponent, area, order);\r\n this._tableView = viewComponent.content.get(\"Table\") as TableGridViewModel;\r\n this._filterButton = viewComponent.content.get(\"FilterButton\") as FilterButtonViewModel;\r\n this._component = viewComponent;\r\n }\r\n\r\n public initiailize() {\r\n super.initiailize();\r\n this.SetSelectionLogic();\r\n }\r\n\r\n public dispose() {\r\n super.dispose();\r\n if (this._pageRowsChangingDisposer) {\r\n this._pageRowsChangingDisposer();\r\n this._pageRowsChangingDisposer = null;\r\n }\r\n if (this._pageRowsSelectionChangingDisposer) {\r\n this._pageRowsSelectionChangingDisposer();\r\n this._pageRowsSelectionChangingDisposer = null;\r\n }\r\n }\r\n\r\n private readonly _tableView: TableGridViewModel;\r\n\r\n private readonly _component: IWorkplaceViewComponent;\r\n\r\n private readonly _selectedDocsIDs: Array = [];\r\n\r\n private readonly _selectedDocs: Map> = new Map>();\r\n private _filterButton: FilterButtonViewModel;\r\n private viewParams: IViewParameters;\r\n\r\n private _pageRowsChangingDisposer: Function | null = null;\r\n\r\n private _pageRowsSelectionChangingDisposer: Function | null = null;\r\n\r\n /** Установка логики выделения строк в табличке. */\r\n private SetSelectionLogic() {\r\n\r\n // подписываемся на изменение строк в табличке\r\n // это происходит при обновлении / изменении номера страницы\r\n this._pageRowsChangingDisposer = autorun(() => {\r\n\r\n if (this.viewParams !== null && !this.IViewParametersEqual(this.viewParams, this._filterButton.parameters.cloneAsReadOnly())) {\r\n this._selectedDocsIDs.splice(0);\r\n this._selectedDocs.clear();\r\n this.UpdateContextInfo();\r\n }\r\n this.viewParams = this._filterButton.parameters.cloneAsReadOnly();\r\n // проверяем наличие строк (при изменении страницы сначала 0, затем заполняется)\r\n if (this._tableView.rows.length == 0) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // получаем флаг выделения строки\r\n // посредством проверки наличия DocID в списке _selectedDocsIDs\r\n const isSelected = this._selectedDocsIDs.some(x => x == row.data.get(\"ContractID\"));\r\n\r\n // выделяем / сбрасываем выделение у строки\r\n row.selectRow(isSelected);\r\n }\r\n });\r\n\r\n // подписываемся на изменение строк в табличке (конкретно на их выделение)\r\n this._pageRowsSelectionChangingDisposer = autorun(() => {\r\n // проверяем наличие строк\r\n if (this._tableView.rows.length == 0) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // получаем DocID строки\r\n const docID = row.data.get(\"ContractID\");\r\n\r\n // если строка выделилась\r\n if (row.isSelected) {\r\n // и DocID нет в списке _selectedDocsIDs\r\n if (!this._selectedDocsIDs.some(x => x == docID)) {\r\n // добавляем DocID в список _selectedDocsIDs\r\n this._selectedDocsIDs.push(docID);\r\n this._selectedDocs.set(docID, row.data);\r\n\r\n }\r\n }\r\n // иначе если было снято выделение\r\n else {\r\n // пытаемся найти DocID в списке _selectedDocsIDs\r\n const index = this._selectedDocsIDs.findIndex(x => x == docID);\r\n // если нашли\r\n if (index != -1) {\r\n // удалаяем DocID из списка _selectedDocsIDs по индексу\r\n this._selectedDocsIDs.splice(index, 1);\r\n this._selectedDocs.delete(docID);\r\n\r\n }\r\n }\r\n }\r\n this.UpdateContextInfo();\r\n });\r\n }\r\n\r\n /** Снятие выделения строк. */\r\n public async UnselectRowsAsync() {\r\n // проверяем\r\n if (this._tableView?.rows == null) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // сбрасываем выделение у строки\r\n row.selectRow(false);\r\n const docID = row.data.get(\"ContractID\");\r\n const index = this._selectedDocsIDs.findIndex(x => x == docID);\r\n // если нашли\r\n if (index != -1) {\r\n // удалаяем DocID из списка _selectedDocsIDs по индексу\r\n this._selectedDocsIDs.splice(index, 1);\r\n this._selectedDocs.delete(docID);\r\n }\r\n }\r\n this.UpdateContextInfo();\r\n }\r\n\r\n /** Выделение строк. */\r\n public async SelectRowsAsync() {\r\n // проверяем\r\n if (this._tableView?.rows == null) {\r\n return;\r\n }\r\n \r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // сбрасываем выделение у строки\r\n row.selectRow(true);\r\n const docID = row.data.get(\"ContractID\");\r\n if (!this._selectedDocsIDs.some(x => x == docID)) {\r\n // добавляем DocID в список _selectedDocsIDs\r\n this._selectedDocsIDs.push(docID);\r\n this._selectedDocs.set(docID, row.data);\r\n }\r\n }\r\n this.UpdateContextInfo();\r\n }\r\n\r\n private UpdateContextInfo() {\r\n this._component.workplace.context.info[\"PkContractDownloadReportVM\"] = this._selectedDocs;\r\n }\r\n\r\n private IViewParametersEqual(first: IViewParameters | null, second: IViewParameters | null): boolean {\r\n if (first == null && second == null) {\r\n return true;\r\n }\r\n if (first == null || second == null) {\r\n return false;\r\n }\r\n const arrFirst = first.parameters;\r\n const arrSecond = second.parameters;\r\n if (arrFirst.length !== arrSecond.length) {\r\n return false;\r\n }\r\n for (const elf of arrFirst) {\r\n const els = arrSecond.find(x => x.name === elf.name);\r\n if (els == null) {\r\n return false;\r\n }\r\n if (!this.RequestParameterEqual(elf, els)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n private RequestParameterEqual(first: RequestParameter | null, second: RequestParameter | null): boolean {\r\n if (first == null && second == null) {\r\n return true;\r\n }\r\n if (first == null || second == null) {\r\n return false;\r\n }\r\n if (first.name !== second.name) {\r\n return false;\r\n }\r\n const fCrit = first.criteriaValues;\r\n const sCrit = second.criteriaValues;\r\n if (fCrit.length !== sCrit.length) {\r\n return false;\r\n }\r\n if (\r\n !fCrit.every(f =>\r\n sCrit.find(s =>\r\n s.criteriaName === f.criteriaName &&\r\n s.values.length === f.values.length &&\r\n f.values.every(fv =>\r\n s.values.find(sv =>\r\n fv.value === sv.value\r\n ) != null\r\n )\r\n ) != null\r\n )\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { RaisedButton } from 'ui';\r\nimport { PkContractDownloadReportComponentViewModel } from './PkContractDownloadReportComponentViewModel';\r\n\r\ninterface PkContractDownloadReportComponentViewProps {\r\n viewModel: PkContractDownloadReportComponentViewModel;\r\n}\r\n\r\n@observer\r\nclass PkContractDownloadReportComponentView extends React.Component {\r\n public render() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private SelectRows = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.SelectRowsAsync();\r\n }\r\n\r\n private UnselectRows = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.UnselectRowsAsync();\r\n }\r\n}\r\n\r\nexport default PkContractDownloadReportComponentView;","import { WorkplaceViewComponentExtension } from 'tessa/ui/views/extensions';\r\nimport { IWorkplaceViewComponent, ViewComponentRegistry } from 'tessa/ui/views';\r\nimport { ContentPlaceArea } from 'tessa/ui/views/content';\r\nimport { ApplicationExtension } from 'tessa';\r\nimport { PkContractDownloadReportComponentViewModel } from './PkContractDownloadReportComponentViewModel';\r\nimport PkContractDownloadReportComponentView from './PkContractDownloadReportComponentView';\r\n\r\nexport class PkContractDownloadReportComponentExtension extends WorkplaceViewComponentExtension {\r\n public getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.PkContractDownloadReportComponentExtension';\r\n }\r\n\r\n public initialize(model: IWorkplaceViewComponent) {\r\n model.contentFactories.set(\r\n 'PkContractDownloadReportComponentExtension',\r\n c => new PkContractDownloadReportComponentViewModel(c, ContentPlaceArea.ContentPanel, -2147483648)\r\n );\r\n }\r\n}\r\n\r\nexport class PkContractDownloadReportComponentInitializeExtension extends ApplicationExtension {\r\n public initialize() {\r\n ViewComponentRegistry.instance.register(\r\n PkContractDownloadReportComponentViewModel,\r\n () => PkContractDownloadReportComponentView);\r\n }\r\n}","import { IWorkplaceViewComponent } from 'tessa/ui/views';\r\nimport { BaseContentItem, ContentPlaceArea, ContentPlaceOrder, TableGridViewModel } from 'tessa/ui/views/content';\r\nimport { autorun } from 'mobx';\r\nimport { IViewParameters } from 'tessa/ui/views/parameters';\r\nimport { RequestParameter } from 'tessa/views/metadata';\r\nimport { FilterButtonViewModel } from 'tessa/ui/views/content/filterButtonViewModel';\r\n\r\nexport class PkActDownloadReportComponentViewModel extends BaseContentItem {\r\n constructor(\r\n viewComponent: IWorkplaceViewComponent,\r\n area: ContentPlaceArea = ContentPlaceArea.ContentPanel,\r\n order: number = ContentPlaceOrder.Middle\r\n ) {\r\n super(viewComponent, area, order);\r\n this._tableView = viewComponent.content.get(\"Table\") as TableGridViewModel;\r\n this._filterButton = viewComponent.content.get(\"FilterButton\") as FilterButtonViewModel;\r\n this._component = viewComponent;\r\n }\r\n\r\n public initiailize() {\r\n super.initiailize();\r\n this.SetSelectionLogic();\r\n }\r\n\r\n public dispose() {\r\n super.dispose();\r\n if (this._pageRowsChangingDisposer) {\r\n this._pageRowsChangingDisposer();\r\n this._pageRowsChangingDisposer = null;\r\n }\r\n if (this._pageRowsSelectionChangingDisposer) {\r\n this._pageRowsSelectionChangingDisposer();\r\n this._pageRowsSelectionChangingDisposer = null;\r\n }\r\n }\r\n\r\n private readonly _tableView: TableGridViewModel;\r\n\r\n private readonly _component: IWorkplaceViewComponent;\r\n\r\n private readonly _selectedDocsIDs: Array = [];\r\n\r\n private readonly _selectedDocs: Map> = new Map>();\r\n private _filterButton: FilterButtonViewModel;\r\n private viewParams: IViewParameters;\r\n\r\n private _pageRowsChangingDisposer: Function | null = null;\r\n\r\n private _pageRowsSelectionChangingDisposer: Function | null = null;\r\n\r\n /** Установка логики выделения строк в табличке. */\r\n private SetSelectionLogic() {\r\n\r\n // подписываемся на изменение строк в табличке\r\n // это происходит при обновлении / изменении номера страницы\r\n this._pageRowsChangingDisposer = autorun(() => {\r\n\r\n if (this.viewParams !== null && !this.IViewParametersEqual(this.viewParams, this._filterButton.parameters.cloneAsReadOnly())) {\r\n this._selectedDocsIDs.splice(0);\r\n this._selectedDocs.clear();\r\n this.UpdateContextInfo();\r\n }\r\n this.viewParams = this._filterButton.parameters.cloneAsReadOnly();\r\n // проверяем наличие строк (при изменении страницы сначала 0, затем заполняется)\r\n if (this._tableView.rows.length == 0) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // получаем флаг выделения строки\r\n // посредством проверки наличия DocID в списке _selectedDocsIDs\r\n const isSelected = this._selectedDocsIDs.some(x => x == row.data.get(\"ActID\"));\r\n\r\n // выделяем / сбрасываем выделение у строки\r\n row.selectRow(isSelected);\r\n }\r\n });\r\n\r\n // подписываемся на изменение строк в табличке (конкретно на их выделение)\r\n this._pageRowsSelectionChangingDisposer = autorun(() => {\r\n // проверяем наличие строк\r\n if (this._tableView.rows.length == 0) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // получаем DocID строки\r\n const docID = row.data.get(\"ActID\");\r\n\r\n // если строка выделилась\r\n if (row.isSelected) {\r\n // и DocID нет в списке _selectedDocsIDs\r\n if (!this._selectedDocsIDs.some(x => x == docID)) {\r\n // добавляем DocID в список _selectedDocsIDs\r\n this._selectedDocsIDs.push(docID);\r\n this._selectedDocs.set(docID, row.data);\r\n\r\n }\r\n }\r\n // иначе если было снято выделение\r\n else {\r\n // пытаемся найти DocID в списке _selectedDocsIDs\r\n const index = this._selectedDocsIDs.findIndex(x => x == docID);\r\n // если нашли\r\n if (index != -1) {\r\n // удалаяем DocID из списка _selectedDocsIDs по индексу\r\n this._selectedDocsIDs.splice(index, 1);\r\n this._selectedDocs.delete(docID);\r\n\r\n }\r\n }\r\n }\r\n this.UpdateContextInfo();\r\n });\r\n }\r\n\r\n /** Снятие выделения строк. */\r\n public async UnselectRowsAsync() {\r\n // проверяем\r\n if (this._tableView?.rows == null) {\r\n return;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // сбрасываем выделение у строки\r\n row.selectRow(false);\r\n const docID = row.data.get(\"ActID\");\r\n const index = this._selectedDocsIDs.findIndex(x => x == docID);\r\n // если нашли\r\n if (index != -1) {\r\n // удалаяем DocID из списка _selectedDocsIDs по индексу\r\n this._selectedDocsIDs.splice(index, 1);\r\n this._selectedDocs.delete(docID);\r\n }\r\n }\r\n this.UpdateContextInfo();\r\n }\r\n\r\n /** Выделение строк. */\r\n public async SelectRowsAsync() {\r\n // проверяем\r\n if (this._tableView?.rows == null) {\r\n return;\r\n }\r\n \r\n // пробегаемся по строкам\r\n for (const row of this._tableView.rows) {\r\n // сбрасываем выделение у строки\r\n row.selectRow(true);\r\n const docID = row.data.get(\"ActID\");\r\n if (!this._selectedDocsIDs.some(x => x == docID)) {\r\n // добавляем DocID в список _selectedDocsIDs\r\n this._selectedDocsIDs.push(docID);\r\n this._selectedDocs.set(docID, row.data);\r\n }\r\n }\r\n this.UpdateContextInfo();\r\n }\r\n\r\n private UpdateContextInfo() {\r\n this._component.workplace.context.info[\"PkActDownloadReportVM\"] = this._selectedDocs;\r\n }\r\n\r\n private IViewParametersEqual(first: IViewParameters | null, second: IViewParameters | null): boolean {\r\n if (first == null && second == null) {\r\n return true;\r\n }\r\n if (first == null || second == null) {\r\n return false;\r\n }\r\n const arrFirst = first.parameters;\r\n const arrSecond = second.parameters;\r\n if (arrFirst.length !== arrSecond.length) {\r\n return false;\r\n }\r\n for (const elf of arrFirst) {\r\n const els = arrSecond.find(x => x.name === elf.name);\r\n if (els == null) {\r\n return false;\r\n }\r\n if (!this.RequestParameterEqual(elf, els)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n private RequestParameterEqual(first: RequestParameter | null, second: RequestParameter | null): boolean {\r\n if (first == null && second == null) {\r\n return true;\r\n }\r\n if (first == null || second == null) {\r\n return false;\r\n }\r\n if (first.name !== second.name) {\r\n return false;\r\n }\r\n const fCrit = first.criteriaValues;\r\n const sCrit = second.criteriaValues;\r\n if (fCrit.length !== sCrit.length) {\r\n return false;\r\n }\r\n if (\r\n !fCrit.every(f =>\r\n sCrit.find(s =>\r\n s.criteriaName === f.criteriaName &&\r\n s.values.length === f.values.length &&\r\n f.values.every(fv =>\r\n s.values.find(sv =>\r\n fv.value === sv.value\r\n ) != null\r\n )\r\n ) != null\r\n )\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { RaisedButton } from 'ui';\r\nimport { PkActDownloadReportComponentViewModel } from './PkActDownloadReportComponentViewModel';\r\n\r\ninterface PkActDownloadReportComponentViewProps {\r\n viewModel: PkActDownloadReportComponentViewModel;\r\n}\r\n\r\n@observer\r\nclass PkActDownloadReportComponentView extends React.Component {\r\n public render() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private SelectRows = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.SelectRowsAsync();\r\n }\r\n\r\n private UnselectRows = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.UnselectRowsAsync();\r\n }\r\n}\r\n\r\nexport default PkActDownloadReportComponentView;","import { WorkplaceViewComponentExtension } from 'tessa/ui/views/extensions';\r\nimport { IWorkplaceViewComponent, ViewComponentRegistry } from 'tessa/ui/views';\r\nimport { ContentPlaceArea } from 'tessa/ui/views/content';\r\nimport { ApplicationExtension } from 'tessa';\r\nimport { PkActDownloadReportComponentViewModel } from './PkActDownloadReportComponentViewModel';\r\nimport PkActDownloadReportComponentView from './PkActDownloadReportComponentView';\r\n\r\nexport class PkActDownloadReportComponentExtension extends WorkplaceViewComponentExtension {\r\n public getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.PkActDownloadReportComponentExtension';\r\n }\r\n\r\n public initialize(model: IWorkplaceViewComponent) {\r\n model.contentFactories.set(\r\n 'PkActDownloadReportComponentExtension',\r\n c => new PkActDownloadReportComponentViewModel(c, ContentPlaceArea.ContentPanel, -2147483648)\r\n );\r\n }\r\n}\r\n\r\nexport class PkActDownloadReportComponentInitializeExtension extends ApplicationExtension {\r\n public initialize() {\r\n ViewComponentRegistry.instance.register(\r\n PkActDownloadReportComponentViewModel,\r\n () => PkActDownloadReportComponentView);\r\n }\r\n}","import { MetadataStorage } from 'tessa';\r\nimport { CardDeleteRequest, CardGetRequest, CardNewRequest, CardService, CardStoreRequest } from 'tessa/cards/service';\r\nimport { Guid } from 'tessa/platform';\r\nimport { createCardModel, showConfirm, showError, showLoadingOverlay, UIButton } from 'tessa/ui';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { DoubleClickInfo, IWorkplaceViewComponent, openCardDoubleClickAction } from 'tessa/ui/views';\r\nimport { BaseContentItem, ContentPlaceArea, ContentPlaceOrder } from 'tessa/ui/views/content';\r\nimport { getCardId } from 'tessa/views';\r\nimport { ViewReferenceMetadataSealed } from 'tessa/views/metadata/viewReferenceMetadata';\r\nimport { PkMatrixWorkplaceHelper } from './PkMatrixWorkplaceHelper';\r\n\r\nexport class PkMatrixWorkplaceComponentViewModel extends BaseContentItem {\r\n constructor(\r\n viewComponent: IWorkplaceViewComponent,\r\n area: ContentPlaceArea = ContentPlaceArea.ToolBarPanel,\r\n order: number = ContentPlaceOrder.Middle\r\n ) {\r\n super(viewComponent, area, order);\r\n this.viewComponent.doubleClickAction = async (info: DoubleClickInfo) => {\r\n await openCardDoubleClickAction(info, async (cardId) => {\r\n await this.OpenCardAsync(cardId, info)\r\n });\r\n };\r\n }\r\n\r\n private async OpenCardAsync(cardID: string, info: DoubleClickInfo)\r\n {\r\n const selectedRow = info.context.viewContext?.selectedRow;\r\n if (selectedRow != null)\r\n {\r\n let cardType = PkMatrixWorkplaceHelper.GetCardTypeByAlias(this.viewComponent.view?.metadata.alias);\r\n let roleID = PkMatrixWorkplaceHelper.GetRoleIDByAlias(this.viewComponent.view?.metadata.alias);\r\n\r\n if (cardType == null)\r\n {\r\n return;\r\n }\r\n\r\n if (!await PkMatrixWorkplaceHelper.CheckUserInRoleAsync(roleID))\r\n {\r\n await showError(\"У вас отсутствуют права на редактирование данной карточки\");\r\n return;\r\n }\r\n\r\n // Построение диалога\r\n const dialogType = MetadataStorage.instance.cardMetadata.getCardTypeById(cardType);\r\n if (dialogType == null) {\r\n return;\r\n }\r\n \r\n const dialogForm = dialogType.forms[0];\r\n \r\n if (dialogForm == null) {\r\n return;\r\n }\r\n\r\n const request = new CardGetRequest();\r\n request.cardId = cardID;\r\n const response = await CardService.instance.get(request);\r\n\r\n // создаем модель карточки\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async () => {\r\n },\r\n [\r\n new UIButton(\r\n \"Сохранить\",\r\n async (btn) => {\r\n await btn.close();\r\n \r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = response.card;\r\n await CardService.instance.store(storeRequest);\r\n \r\n await this.viewComponent.refreshView();\r\n }),\r\n new UIButton(\"$UI_Common_Cancel\", (button) => { button.close(); })\r\n ]);\r\n }\r\n }\r\n\r\n public async DeleteAsync()\r\n {\r\n let roleID = PkMatrixWorkplaceHelper.GetRoleIDByAlias(this.viewComponent.view?.metadata.alias);\r\n let cardType = PkMatrixWorkplaceHelper.GetCardTypeByAlias(this.viewComponent.view?.metadata.alias);\r\n\r\n if (!await PkMatrixWorkplaceHelper.CheckUserInRoleAsync(roleID))\r\n {\r\n await showError(\"У вас отсутствуют права на удаление данной карточки\");\r\n return;\r\n }\r\n\r\n let confirmDelete = await showConfirm(\"Удалить выбранные карточки?\");\r\n\r\n if (confirmDelete)\r\n {\r\n await showLoadingOverlay(async () => \r\n {\r\n if (this.viewComponent.selectedRows != null)\r\n {\r\n for (let row of this.viewComponent.selectedRows)\r\n {\r\n const references: ViewReferenceMetadataSealed[] = [];\r\n this.viewComponent.view?.metadata.references.forEach(x => references.push(x));\r\n const ref = references.find(x => x.isCard && x.openOnDoubleClick);\r\n let cardID = getCardId(row, ref?.colPrefix!);\r\n\r\n const deleteRequest = new CardDeleteRequest();\r\n deleteRequest.cardId = cardID;\r\n deleteRequest.cardTypeId = cardType;\r\n await CardService.instance.delete(deleteRequest);\r\n } \r\n } \r\n }\r\n ,\"Удаление\");\r\n\r\n await this.viewComponent.refreshView();\r\n }\r\n }\r\n\r\n public async ShowDialogAsync()\r\n {\r\n let cardType = PkMatrixWorkplaceHelper.GetCardTypeByAlias(this.viewComponent.view?.metadata.alias);\r\n let roleID = PkMatrixWorkplaceHelper.GetRoleIDByAlias(this.viewComponent.view?.metadata.alias);\r\n\r\n if (!await PkMatrixWorkplaceHelper.CheckUserInRoleAsync(roleID))\r\n {\r\n await showError(\"У вас отсутствуют права на создание данной карточки\");\r\n return;\r\n }\r\n\r\n if (cardType == null)\r\n {\r\n return;\r\n }\r\n\r\n // Построение диалога\r\n const dialogType = MetadataStorage.instance.cardMetadata.getCardTypeById(cardType);\r\n if (dialogType == null) {\r\n return;\r\n }\r\n \r\n const dialogForm = dialogType.forms[0];\r\n\r\n if (dialogForm == null) {\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogType.id;\r\n\r\n const response = await CardService.instance.new(request);\r\n\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n \r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async () => {\r\n },\r\n [\r\n new UIButton(\r\n \"Сохранить\",\r\n async (btn) => {\r\n await btn.close();\r\n response.card.id = Guid.newGuid();\r\n\r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = response.card;\r\n await CardService.instance.store(storeRequest);\r\n\r\n await this.viewComponent.refreshView();\r\n }),\r\n new UIButton(\"$UI_Common_Cancel\", (button) => { button.close(); })\r\n ]);\r\n }\r\n}","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { IconButton } from 'ui';\r\nimport { PkMatrixWorkplaceComponentViewModel } from './PkMatrixWorkplaceComponentViewModel';\r\n\r\ninterface PkMatrixWorkplaceComponentViewProps {\r\n viewModel: PkMatrixWorkplaceComponentViewModel;\r\n}\r\n\r\n@observer\r\nclass PkMatrixWorkplaceComponentView extends React.Component {\r\n public render() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private ButtonCommandCreate = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.ShowDialogAsync();\r\n }\r\n\r\n private ButtonCommandDelete = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.DeleteAsync();\r\n }\r\n}\r\n\r\nexport default PkMatrixWorkplaceComponentView;","import { WorkplaceViewComponentExtension } from 'tessa/ui/views/extensions';\r\nimport { IWorkplaceViewComponent, ViewComponentRegistry } from 'tessa/ui/views';\r\nimport { ContentPlaceArea } from 'tessa/ui/views/content';\r\nimport { ApplicationExtension } from 'tessa';\r\nimport { PkMatrixWorkplaceComponentViewModel } from './PkMatrixWorkplaceComponentViewModel';\r\nimport PkMatrixWorkplaceComponentView from './PkMatrixWorkplaceComponentView';\r\n\r\nexport class PkMatrixWorkplaceComponentExtension extends WorkplaceViewComponentExtension {\r\n public getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.PkMatrixWorkplaceComponentExtension';\r\n }\r\n\r\n public initialize(model: IWorkplaceViewComponent) {\r\n model.contentFactories.set(\r\n 'PkMatrixWorkplaceComponentExtension',\r\n c => new PkMatrixWorkplaceComponentViewModel(c, ContentPlaceArea.ToolBarPanel, -2147483648)\r\n );\r\n }\r\n}\r\n\r\nexport class PkMatrixWorkplaceComponentInitializeExtension extends ApplicationExtension {\r\n public initialize() {\r\n ViewComponentRegistry.instance.register(\r\n PkMatrixWorkplaceComponentViewModel,\r\n () => PkMatrixWorkplaceComponentView);\r\n }\r\n}","import { EDSProvider, EncryptAndDigest } from 'tessa/cards';\r\nimport { CertData } from 'tessa/files';\r\n\r\nexport class CryptoProEDSProvider extends EDSProvider {\r\n getCerts(): Promise {\r\n return new Promise((resolve, reject) => {\r\n window.cadesplugin.async_spawn(\r\n function* (args) {\r\n try {\r\n const oStore = yield window.cadesplugin.CreateObjectAsync('CAdESCOM.Store');\r\n yield oStore.Open(\r\n window.cadesplugin.CAPICOM_CURRENT_USER_STORE,\r\n window.cadesplugin.CAPICOM_MY_STORE,\r\n window.cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED\r\n );\r\n\r\n const CertificatesObj = yield oStore.Certificates;\r\n const Count = yield CertificatesObj.Count;\r\n const certs: CertData[] = [];\r\n for (let i = 1; i <= Count; i++) {\r\n const cert = yield CertificatesObj.Item(i);\r\n const subjectName = yield cert.SubjectName;\r\n const issuerName = yield cert.IssuerName;\r\n const validFrom = yield cert.ValidFromDate;\r\n const validTo = yield cert.ValidToDate;\r\n const serialNumber = yield cert.SerialNumber;\r\n const certificateStr = yield cert.Export(window.cadesplugin.CADESCOM_ENCODE_BASE64);\r\n certs.push({\r\n subjectName: getName(subjectName) as string,\r\n issuerName: getName(issuerName) as string,\r\n validFrom,\r\n validTo,\r\n serialNumber,\r\n company: getOwner(subjectName) as string,\r\n certificateStr\r\n });\r\n }\r\n\r\n yield oStore.Close();\r\n\r\n args[0](certs);\r\n } catch (err) {\r\n args[1](window.cadesplugin.getLastError(err));\r\n }\r\n },\r\n resolve,\r\n reject\r\n );\r\n });\r\n }\r\n signFile(\r\n certificate: CertData,\r\n fileBase64Str: string,\r\n encryptAndDigestList: EncryptAndDigest[]\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n window.cadesplugin.async_spawn(\r\n function* (args) {\r\n try {\r\n // certificate\r\n const oStore = yield window.cadesplugin.CreateObjectAsync('CAdESCOM.Store');\r\n yield oStore.Open(\r\n window.cadesplugin.CAPICOM_CURRENT_USER_STORE,\r\n window.cadesplugin.CAPICOM_MY_STORE,\r\n window.cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED\r\n );\r\n\r\n const CertificatesObj = yield oStore.Certificates;\r\n const oCertificates = yield CertificatesObj.Find(\r\n window.cadesplugin.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,\r\n certificate.subjectName\r\n );\r\n\r\n const Count = yield oCertificates.Count;\r\n if (Count === 0) {\r\n throw \"Certificate isn't found: \" + args[0];\r\n }\r\n const oCertificate = yield oCertificates.Item(1);\r\n\r\n // hashAlgo\r\n const publicKey = yield oCertificate.PublicKey();\r\n const keyAlgo = yield publicKey.Algorithm;\r\n const publicOid = yield keyAlgo.Value;\r\n const hashAlgoOid = getHashByPublicOid(publicOid, encryptAndDigestList);\r\n const hashAlgo = getHashAlgoByOid(hashAlgoOid);\r\n\r\n // hashObject\r\n const oHashedData = yield window.cadesplugin.CreateObjectAsync('CAdESCOM.HashedData');\r\n yield oHashedData.propset_Algorithm(hashAlgo);\r\n yield oHashedData.propset_DataEncoding(window.cadesplugin.CADESCOM_BASE64_TO_BINARY);\r\n yield oHashedData.Hash(fileBase64Str);\r\n\r\n // rawSignature\r\n const oRawSignature = yield window.cadesplugin.CreateObjectAsync(\r\n 'CAdESCOM.RawSignature'\r\n );\r\n const sRawSignature = yield oRawSignature.SignHash(oHashedData, oCertificate);\r\n\r\n const sSignedMessage = arrayBufferToBase64(toByteArray(sRawSignature).reverse());\r\n\r\n yield oStore.Close();\r\n\r\n args[2](sSignedMessage);\r\n } catch (err) {\r\n args[3](window.cadesplugin.getLastError(err) || err);\r\n }\r\n },\r\n certificate.subjectName,\r\n fileBase64Str,\r\n resolve,\r\n reject\r\n );\r\n });\r\n }\r\n async checkSign(\r\n signature: string,\r\n fileBase64Str?: string | undefined\r\n ): Promise<{ valid: boolean; error: string }> {\r\n const signatureAttributes = await this.getAttributesFromSignature(signature);\r\n const hashAlgo = getHashAlgoByOid(signatureAttributes.hashOid);\r\n const sRawSignature = toHexString(\r\n atob(signatureAttributes.signature)\r\n .split('')\r\n .map(x => x.charCodeAt(0))\r\n .reverse()\r\n ).toUpperCase();\r\n const sRawFileHash = toHexString(\r\n atob(signatureAttributes.hash)\r\n .split('')\r\n .map(x => x.charCodeAt(0))\r\n // .reverse()\r\n ).toUpperCase();\r\n\r\n return new Promise((resolve, reject) => {\r\n window.cadesplugin.async_spawn(\r\n function* (args) {\r\n try {\r\n // hash\r\n const oHashedData = yield window.cadesplugin.CreateObjectAsync('CAdESCOM.HashedData');\r\n yield oHashedData.propset_Algorithm(hashAlgo);\r\n yield oHashedData.propset_DataEncoding(window.cadesplugin.CADESCOM_BASE64_TO_BINARY);\r\n yield oHashedData.Hash(fileBase64Str);\r\n const hashValue = yield oHashedData.Value;\r\n if (hashValue !== sRawFileHash) {\r\n args[2]({ valid: false, error: '$UI_Signature_MessageDigestInvalid' });\r\n return;\r\n }\r\n\r\n // certificate\r\n const oCertificate = yield window.cadesplugin.CreateObjectAsync('CAdESCOM.Certificate');\r\n yield oCertificate.Import(signatureAttributes.certificate);\r\n\r\n // hash\r\n const oSignAttrsHashedData = yield window.cadesplugin.CreateObjectAsync(\r\n 'CAdESCOM.HashedData'\r\n );\r\n yield oSignAttrsHashedData.propset_Algorithm(hashAlgo);\r\n yield oSignAttrsHashedData.propset_DataEncoding(\r\n window.cadesplugin.CADESCOM_BASE64_TO_BINARY\r\n );\r\n yield oSignAttrsHashedData.Hash(signatureAttributes.signedAttributes);\r\n\r\n // verify\r\n const oRawSignature = yield window.cadesplugin.CreateObjectAsync(\r\n 'CAdESCOM.RawSignature'\r\n );\r\n yield oRawSignature.VerifyHash(oSignAttrsHashedData, oCertificate, sRawSignature);\r\n } catch (err) {\r\n try {\r\n // Возможно это подпись из эры до 3.4 - даем второй шанс\r\n let oSignedData = yield window.cadesplugin.CreateObjectAsync(\r\n 'CAdESCOM.CadesSignedData'\r\n );\r\n yield oSignedData.propset_ContentEncoding(\r\n window.cadesplugin.CADESCOM_BASE64_TO_BINARY\r\n );\r\n yield oSignedData.propset_Content(fileBase64Str);\r\n yield oSignedData.VerifyCades(signature, window.cadesplugin.CADESCOM_CADES_BES, true);\r\n } catch {\r\n args[2]({ valid: false, error: window.cadesplugin.getLastError(err) || err });\r\n return;\r\n }\r\n }\r\n\r\n args[2]({ valid: true });\r\n },\r\n signature,\r\n fileBase64Str,\r\n resolve,\r\n reject\r\n );\r\n });\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n cadesplugin: any;\r\n }\r\n}\r\n\r\nfunction getName(str: string | undefined) {\r\n return getParameter(str, 'CN');\r\n}\r\n\r\nfunction getOwner(str: string | undefined) {\r\n return getParameter(str, 'O');\r\n}\r\n\r\nfunction getParameter(str: string | undefined, marker: string) {\r\n if (!str) {\r\n return undefined;\r\n }\r\n\r\n const strArr = str.split(/=|, /);\r\n if (strArr.length === 1) {\r\n return undefined;\r\n }\r\n\r\n const snIndex = strArr.indexOf(marker);\r\n if (snIndex === -1 || snIndex === strArr.length) {\r\n return undefined;\r\n }\r\n\r\n return strArr[snIndex + 1];\r\n}\r\n\r\nconst getHashByPublicOid = (keyAlgo: string, encryptAndDigestList: EncryptAndDigest[]) => {\r\n const pair = encryptAndDigestList.find(x => x.encryptOid === keyAlgo);\r\n if (pair) {\r\n return pair.digestOid;\r\n } else {\r\n return encryptAndDigestList.find(x => !x.encryptOid)?.digestOid || '';\r\n }\r\n};\r\n\r\nconst getHashAlgoByOid = (hashOid: string) => {\r\n switch (hashOid) {\r\n case '1.2.643.2.2.9':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411;\r\n case '1.2.643.7.1.1.2.2':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;\r\n case '1.2.643.7.1.1.4.1':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256_HMAC;\r\n case '1.2.643.7.1.1.2.3':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512;\r\n case '1.2.643.7.1.1.4.2':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512_HMAC;\r\n case '1.2.643.2.2.10':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_HMAC;\r\n case '1.2.840.113549.2.2':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_MD2;\r\n case '1.2.840.113549.2.4':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_MD4;\r\n case '1.2.840.113549.2.5':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_MD5;\r\n case '2.16.840.1.101.3.4.2.1':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_256;\r\n case '2.16.840.1.101.3.4.2.2':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_384;\r\n case '2.16.840.1.101.3.4.2.3':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_512;\r\n case '1.3.14.3.2.26':\r\n return window.cadesplugin.CADESCOM_HASH_ALGORITHM_SHA1;\r\n default:\r\n throw new Error(`Unsupported digest algorithm: (${hashOid})`);\r\n }\r\n};\r\n\r\nconst toByteArray = (hexString: string) => {\r\n var result: number[] = [];\r\n for (var i = 0; i < hexString.length; i += 2) {\r\n result.push(parseInt(hexString.substr(i, 2), 16));\r\n }\r\n return result;\r\n};\r\nconst toHexString = (byteArray: number[]) => {\r\n return Array.prototype.map\r\n .call(byteArray, function (byte) {\r\n return ('0' + (byte & 0xff).toString(16)).slice(-2);\r\n })\r\n .join('');\r\n};\r\n\r\nfunction arrayBufferToBase64(buffer) {\r\n var binary = '';\r\n var bytes = new Uint8Array(buffer);\r\n var len = bytes.byteLength;\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n}\r\n","import { userSession } from 'common/utility';\r\nimport { computed, observable } from 'mobx';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\nimport { CryptoProEDSProvider } from 'src/default/eds/cryptoProEDSProvider';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { Card, CardGetMode, CardRowState, CardTaskAction } from 'tessa/cards';\r\nimport { CardGetRequest, CardNewRequest, CardRequest, CardService, CardStoreRequest } from 'tessa/cards/service';\r\nimport { createTypedField, DotNetType, TypedField, Visibility } from 'tessa/platform';\r\nimport { IValidationResultBuilder, ValidationResult, ValidationResultBuilder, ValidationResultType } from 'tessa/platform/validation';\r\nimport { createCardModel, showConfirm, showLoadingOverlay, showMessage, showNotEmpty, tryGetFromInfo, UIButton } from 'tessa/ui';\r\nimport { LabelViewModel } from 'tessa/ui/cards/controls';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { IWorkplaceViewComponent } from 'tessa/ui/views';\r\nimport { BaseContentItem, ContentPlaceArea, ContentPlaceOrder } from 'tessa/ui/views/content';\r\nimport { TessaViewRequest } from 'tessa/views';\r\nimport { CardFilesInfo } from '../Helpers/PkCardHelper';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { PkFdProcessHelper } from '../Helpers/PkFdProcessHelper';\r\nimport { PkRequestTypes } from '../Helpers/PkRequestTypes';\r\nimport { PkTaskTypes } from '../Helpers/PkTaskTypes';\r\nimport { ArUIHelper } from '../UI/ArUIHelper';\r\n\r\nexport class PkSignDocumentsWorkplaceComponentViewModel extends BaseContentItem {\r\n constructor(\r\n viewComponent: IWorkplaceViewComponent,\r\n area: ContentPlaceArea = ContentPlaceArea.ToolBarPanel,\r\n order: number = ContentPlaceOrder.Middle\r\n ) {\r\n super(viewComponent, area, order);\r\n this.Refresh();\r\n }\r\n\r\n @observable\r\n private _signButtonVisibility: Visibility;\r\n @computed\r\n public get SignButtonVisibility(): Visibility {\r\n return this._signButtonVisibility;\r\n }\r\n\r\n public set SignButtonVisibility(value: Visibility) {\r\n this._signButtonVisibility = value;\r\n }\r\n\r\n private async Refresh() {\r\n this.SignButtonVisibility = await this.GetSignButtonVisibility();\r\n }\r\n\r\n /** Получение ID карточек по активным заданиям \"Рассмотрение куратором\", назначенных на текущего пользователя. */\r\n private async GetReviewingTasksCardIDsAsync(): Promise {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkCheckUserHasTasks;\r\n request.info[\"IsNeedCardIDs\"] = createTypedField(true, DotNetType.Boolean);\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"TaskTypeID\"] = createTypedField(PkTaskTypes.PkPersonnelDocumentCuratorReviewingTypeID, DotNetType.Guid);\r\n request.info[\"ExcludedCardStatesIDs\"] = Array.of(createTypedField(CdDocStates.OnDssSigning.id, DotNetType.Int32));\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n // проверяем наличие ошибок\r\n if (!response.validationResult.isSuccessful) {\r\n return [];\r\n }\r\n\r\n return tryGetFromInfo(response.info, \"CardIDs\")\r\n .map(x => x.$value as string);\r\n }\r\n\r\n /** Получение видимости кнопки подписания. */\r\n private async GetSignButtonVisibility(): Promise {\r\n const reviewingTasksCardIDs = await this.GetReviewingTasksCardIDsAsync();\r\n\r\n return reviewingTasksCardIDs.length > 0\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n }\r\n\r\n /** Подписание документов. */\r\n public async SignActionAsync() {\r\n // объявляем данные\r\n let cardsFilesInfo: CardFilesInfo[] | null = null;\r\n\r\n try {\r\n // отображаем диалоговое окно с подписанием\r\n const signDiadlogResult = await this.ShowDialogCommentAsync(\r\n \"Какие документы вы хотите подписать?\\n\" +\r\n \"\\\"Выбранные\\\" - будут подписаны только выбранные документы.\\n\" +\r\n \"\\\"Все\\\" - будут подписаны все документы из представления.\\n\" +\r\n \"\\\"Отмена\\\" - действие будет отменено.\",\r\n \"Комментарий к подписанию\");\r\n\r\n // если была выбрана \"Отмена\"\r\n if (signDiadlogResult.dialogResult === ViewActionDialogResult.Cancel) {\r\n return;\r\n }\r\n\r\n // получаем ID-шники всех карточек доступных для подписания\r\n const reviewingTasksCardIDs = await this.GetReviewingTasksCardIDsAsync();\r\n\r\n // получаем данные для подписания\r\n const rowsData = await this.GetRowsDataAsync(signDiadlogResult.dialogResult, reviewingTasksCardIDs);\r\n\r\n // если не удалось получить данные\r\n if (rowsData == null) {\r\n throw new Error(\"Не удалось получить данные для подписания.\");\r\n }\r\n\r\n // отображаем диалоговое окно с подтверждением подписания\r\n const confirmResult = await this.ConfirmSigningAsync(rowsData);\r\n\r\n // проверяем результат подтверждения\r\n if (!confirmResult) {\r\n return;\r\n }\r\n\r\n // получаем список карточек\r\n const cards = await this.GetCardsAsync(rowsData);\r\n\r\n // завершаем задание \"Рассмотрение куратором\" по карточкам\r\n await this.CompleteTasksAsync(\r\n cards,\r\n PkTaskTypes.PkPersonnelDocumentCuratorReviewingTypeID,\r\n PkFdProcessHelper.PkSignDocument,\r\n signDiadlogResult.comment);\r\n\r\n // получаем информацию по карточкам и файлам\r\n cardsFilesInfo = await ArUIHelper.GetCardsFilesInfoAsync(cards, true);\r\n\r\n // подписываем файлы\r\n await this.SignFilesAsync(cardsFilesInfo);\r\n\r\n // формируем печатные формы\r\n await this.AddPrintFormsAsync(cardsFilesInfo);\r\n\r\n // сохраняем карточки\r\n await this.StoreCardsAsync(cardsFilesInfo);\r\n\r\n // обновляем представление\r\n await this.viewComponent.refreshView();\r\n }\r\n catch (e) {\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки при подписании документов.\\n\" +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\",\\n\" +\r\n \"либо открыв его двойным кликом по ошибке и скопировав стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n ValidationResult.fromError(e).toString());\r\n\r\n await showNotEmpty(validationResult.build());\r\n }\r\n finally {\r\n cardsFilesInfo?.forEach(async x => {\r\n if (x.FileContainer != null) {\r\n x.FileContainer.dispose();\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Отображение диалогового окна с комментарием. */\r\n private async ShowDialogCommentAsync(\r\n contentControlText: string | null = null,\r\n commentControlCaption: string | null = null): Promise<{\r\n dialogResult: ViewActionDialogResult,\r\n comment: any | null\r\n }> {\r\n // инициализируем результат диалога\r\n let dialogResult = ViewActionDialogResult.Cancel;\r\n let comment = null;\r\n\r\n // получаем тип карточки и форму комментария\r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeById(PkCardTypes.PkDialogsTypeID);\r\n const form = dialogsType?.forms?.find(x => x.name === 'DialogComment');\r\n\r\n // если форма не найдена\r\n if (form == null) {\r\n return { dialogResult, comment };\r\n }\r\n\r\n // отправляем запрос на создание карточки\r\n const request = new CardNewRequest();\r\n request.cardTypeId = PkCardTypes.PkDialogsTypeID;\r\n const response = await CardService.instance.new(request);\r\n\r\n // создаем модель карточки\r\n const model = createCardModel(\r\n response.card,\r\n response.sectionRows);\r\n\r\n // отображаем диалоговое окно\r\n await showFormDialog(\r\n form,\r\n model,\r\n async (viewModel) => {\r\n // получаем блок с контролами формы\r\n const block = viewModel.blocks[0];\r\n\r\n // получаем контролы из модели\r\n const contentControl = block.controls.find(x => x.name === \"Content\") as LabelViewModel;\r\n const commentControl = block.controls.find(x => x.name === \"Comment\");\r\n\r\n // если контролы не удалось получить\r\n if (contentControl == null || commentControl == null) {\r\n return;\r\n }\r\n\r\n // задаем данные для контрола содержимого\r\n if (contentControlText != null) {\r\n contentControl.text = contentControlText;\r\n contentControl.controlVisibility = Visibility.Visible;\r\n }\r\n\r\n // задаем данные для контрола комментария\r\n if (commentControlCaption != null) {\r\n commentControl.caption = commentControlCaption;\r\n commentControl.controlVisibility = Visibility.Visible;\r\n commentControl.controlVisibility = Visibility.Visible;\r\n }\r\n },\r\n [\r\n new UIButton(\"Выбранные\", async (button) => {\r\n dialogResult = ViewActionDialogResult.Selected;\r\n button.close();\r\n }),\r\n new UIButton(\"Все\", async (button) => {\r\n dialogResult = ViewActionDialogResult.All;\r\n button.close();\r\n }),\r\n new UIButton(\"Отмена\", async (button) => {\r\n button.close();\r\n }),\r\n ], true);\r\n\r\n // возвращаем комментарий\r\n const pkdSection = model.card.sections.tryGet(\"PkDialogs\");\r\n comment = pkdSection?.fields.tryGet(\"Comment\");\r\n return { dialogResult, comment };\r\n }\r\n\r\n /** Получение данных по строкам из представления. */\r\n private async GetRowsDataAsync(\r\n viewActionDialogResult: ViewActionDialogResult,\r\n filterCardIDs: string[]) {\r\n return await showLoadingOverlay(async () => {\r\n // если необходимо получить только выбранные данные\r\n if (viewActionDialogResult === ViewActionDialogResult.Selected) {\r\n // получаем выбранные строки, фильтруя по списку ID карточек\r\n return this.viewComponent.selectedRows?.filter(x =>\r\n filterCardIDs.some(y => y === x.get(\"DocID\")));\r\n }\r\n\r\n // если необходимо получить все данные\r\n if (viewActionDialogResult === ViewActionDialogResult.All) {\r\n // получаем все данные из представления\r\n const viewResult = await this.viewComponent.view?.getData(new TessaViewRequest(this.viewComponent.view.metadata));\r\n\r\n // инициализируем список словариков (данные по строкам)\r\n const rowsData = new Array>();\r\n\r\n if (viewResult == null) {\r\n return rowsData;\r\n }\r\n\r\n // пробегаемся по строкам\r\n for (const row of viewResult.rows) {\r\n // инициализируем словарик по строке\r\n const values = new Map();\r\n\r\n // пробегаемся по колонкам\r\n for (let i = 0; i < viewResult.columns.length; i++) {\r\n const columnName = viewResult.columns[i];\r\n const columnValue = row[i];\r\n\r\n // сопоставляем колонки со значениями строк\r\n values.set(columnName, columnValue);\r\n }\r\n\r\n // фильтруем строку по спику ID карточек\r\n if (!filterCardIDs.some(x => x === values.get(\"DocID\"))) {\r\n continue;\r\n }\r\n\r\n // добавляем данные по строке в список\r\n rowsData.push(values);\r\n }\r\n\r\n // возвращаем данные по всем строкам\r\n return rowsData;\r\n }\r\n\r\n // иначе возвращаем NULL\r\n return null;\r\n }, \"Получение данных из представления\");\r\n }\r\n\r\n /** Подтверждение подписания. */\r\n private async ConfirmSigningAsync(rowsData: ReadonlyMap[]) {\r\n // проверяем наличие данных для подписания\r\n if (rowsData.length === 0) {\r\n // отображаем диалоговое окно с информацией\r\n await showMessage(\r\n \"Среди выбранных документов нет доступных для подписания.\",\r\n \"Информация о подписании\");\r\n\r\n return false;\r\n }\r\n\r\n // отображаем диалоговое окно с подтверждением подписания\r\n return await showConfirm(\r\n \"Следующие документы будут подписаны (\" + rowsData.length + \"): \" +\r\n rowsData.map(x => x.get(\"SecondaryFullNumber\")).join(\", \") + \"\\n\" +\r\n \"Вы уверены, что хотите продолжить?\",\r\n \"Подтверждение подписания\");\r\n }\r\n\r\n /** Завершение задания по карточкам. */\r\n private async CompleteTasksAsync(\r\n cards: Card[],\r\n taskTypeID: string,\r\n optionID: string,\r\n comment: string | null) {\r\n await showLoadingOverlay(async () => {\r\n // пробегаемся по карточкам\r\n for (const card of cards) {\r\n // завершаем задание\r\n await this.CompleteTaskAsync(\r\n card,\r\n taskTypeID,\r\n optionID,\r\n comment);\r\n }\r\n }, \"Завершение заданий\");\r\n }\r\n\r\n /** Завершение задания по карточке. */\r\n private async CompleteTaskAsync(\r\n card: Card,\r\n taskTypeID: string,\r\n optionID: string,\r\n comment: string | null) {\r\n // получаем задание для завершения\r\n const task = card.tasks.find(x =>\r\n x.typeId === taskTypeID);\r\n\r\n // проверяем наличие задания\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n // завершаем задание\r\n task.optionId = optionID;\r\n task.action = CardTaskAction.Complete;\r\n task.state = CardRowState.Deleted;\r\n task.userId = userSession.UserID;\r\n task.userName = userSession.UserName;\r\n\r\n // пишем комментарий\r\n if (comment != null) {\r\n const pktccSection = task.card.sections.getOrAdd(\"PkTaskChanceryComment\");\r\n pktccSection.fields.set(\"Comment\", createTypedField(comment, DotNetType.String));\r\n }\r\n }\r\n\r\n /** Получение моделей карточек по данным из представления. */\r\n private async GetCardsAsync(rowsData: ReadonlyMap[]) {\r\n return await showLoadingOverlay(async () => {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // инициализируем список моделей карточек\r\n const cards = new Array();\r\n\r\n // пробегаемся по данным\r\n for (const rowData of rowsData) {\r\n // получаем поля по карточке\r\n const cardID = rowData.get(\"DocID\");\r\n\r\n // получаем карточку\r\n const card = await this.GetCardAsync(\r\n cardID,\r\n validationResult,\r\n \"Не удалось получить карточку \\\"\" + cardID + \"\\\".\");\r\n\r\n // если не удалось получить карточку\r\n if (card == null) {\r\n continue;\r\n }\r\n\r\n // добавляем карточку в список\r\n cards.push(card);\r\n }\r\n\r\n // проверяем ошибки\r\n if (!validationResult.isSuccessful) {\r\n // формируем сообщение с ошибками\r\n const errorsString = validationResult.items.map(x =>\r\n x.message + \"\\n\" +\r\n x.details).join(\"\\n\\n\");\r\n\r\n // пробрасываем исключение\r\n throw new Error(errorsString);\r\n }\r\n\r\n // возвращаем список карточек\r\n return cards;\r\n }, \"Получение документов\");\r\n }\r\n\r\n /** Получение карточки. */\r\n private async GetCardAsync(\r\n cardID: string,\r\n validationResult: IValidationResultBuilder,\r\n errorMessage: string) {\r\n // получаем карточку\r\n const getRequest = new CardGetRequest();\r\n getRequest.cardId = cardID;\r\n getRequest.getMode = CardGetMode.Edit;\r\n const getResponse = await CardService.instance.get(getRequest);\r\n\r\n // проверяем результат получения\r\n if (!getResponse.validationResult.isSuccessful) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n errorMessage,\r\n undefined,\r\n undefined,\r\n undefined,\r\n getResponse.validationResult.build().toString());\r\n\r\n // выходим\r\n return null;\r\n }\r\n\r\n // возвращаем карточку\r\n return getResponse.card;\r\n }\r\n\r\n /** Сохранение карточек. */\r\n private async StoreCardsAsync(cardsFilesInfo: CardFilesInfo[]) {\r\n await showLoadingOverlay(async () => {\r\n // инициализируем результат валидации\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n // получаем список карточек, которые необходимо сохранить\r\n const cardsFilesInfoToSave = cardsFilesInfo\r\n .filter(x =>\r\n x.SigningInfo.IsNeedSigning &&\r\n (!x.SigningInfo.IsNeedDssSigning || tryGetFromInfo(x.Card.info, \"NoFilesToSign\", false)) &&\r\n !x.SigningInfo.IsNeedNepRelease);\r\n\r\n // пробегаемся по карточкам\r\n for (const cardFilesInfo of cardsFilesInfoToSave) {\r\n // сохраняем карточку\r\n const storeRequest = new CardStoreRequest();\r\n storeRequest.card = cardFilesInfo.Card;\r\n const storeResponse = await CardService.instance.store(storeRequest, cardFilesInfo.FileContainer.files);\r\n\r\n // проверяем результат сохранения\r\n if (!storeResponse.validationResult.isSuccessful) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Не удалось сохранить карточку \\\"\" + cardFilesInfo.Card.id + \"\\\".\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n storeResponse.validationResult.build().toString());\r\n }\r\n }\r\n\r\n // проверяем ошибки\r\n if (!validationResult.isSuccessful) {\r\n // формируем сообщение с ошибками\r\n const errorsString = validationResult.items.map(x =>\r\n x.message + \"\\n\" +\r\n x.details).join(\"\\n\\n\");\r\n\r\n // пробрасываем исключение\r\n throw new Error(errorsString);\r\n }\r\n }, \"Сохранение документов\");\r\n }\r\n\r\n /** Подписание файлов. */\r\n private async SignFilesAsync(cardFilesInfo: CardFilesInfo[]) {\r\n // получаем провайдер\r\n const edsProvider = new CryptoProEDSProvider();\r\n\r\n // подписываем файлы\r\n const signingResult = await ArUIHelper.SignFilesByGroupsAsync(\r\n cardFilesInfo,\r\n edsProvider);\r\n\r\n // проверяем результат подписания\r\n if (!signingResult.isSuccessful) {\r\n // формируем сообщение с ошибками\r\n const errorsString = signingResult.items.map(x =>\r\n x.message + \"\\n\" +\r\n x.details).join(\"\\n\\n\");\r\n\r\n // пробрасываем исключение\r\n throw new Error(errorsString);\r\n }\r\n }\r\n\r\n /** Формирование печатных форм. */\r\n private async AddPrintFormsAsync(cardFilesInfo: CardFilesInfo[]) {\r\n // способ установки штампа\r\n const inserModeID: number = 0;\r\n\r\n // получаем список данных, по которым необходимо формирование ПФ\r\n const cardFilesInfoWhichNeedPrintForms = cardFilesInfo\r\n .filter(x =>\r\n x.SigningInfo.IsNeedSigning &&\r\n !x.SigningInfo.IsNeedDssSigning &&\r\n !x.SigningInfo.IsNeedNepRelease);\r\n\r\n // добавляем файлы печатных форм\r\n const addPrintFormsResult = await ArUIHelper.AddPrintFormsAsync(\r\n cardFilesInfoWhichNeedPrintForms,\r\n inserModeID,\r\n \"Подписан неквалифицированной электронной подписью в системе Tessa\",\r\n false,\r\n true,\r\n false);\r\n\r\n // проверяем результат добавления печатных форм\r\n if (!addPrintFormsResult.isSuccessful) {\r\n // формируем сообщение с ошибками\r\n const errorsString = addPrintFormsResult.items.map(x =>\r\n x.message + \"\\n\" +\r\n x.details).join(\"\\n\\n\");\r\n\r\n // пробрасываем исключение\r\n throw new Error(errorsString);\r\n }\r\n }\r\n}\r\n\r\n/** Результат действия диалогового окна по представлению. */\r\nenum ViewActionDialogResult {\r\n /** Все данные. */\r\n All = 0,\r\n\r\n /** Выбранные данные. */\r\n Selected = 1,\r\n\r\n /** Отмена. */\r\n Cancel = 2\r\n}","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { IconButton } from 'ui';\r\nimport { PkSignDocumentsWorkplaceComponentViewModel } from './PkSignDocumentsWorkplaceComponentViewModel';\r\n\r\ninterface PkSignDocumentsWorkplaceComponentViewProps {\r\n viewModel: PkSignDocumentsWorkplaceComponentViewModel;\r\n}\r\n\r\n@observer\r\nclass PkSignDocumentsWorkplaceComponentView extends React.Component {\r\n public render() {\r\n return (\r\n \r\n );\r\n }\r\n\r\n private SignActionAsync = async e => {\r\n e.stopPropagation();\r\n await this.props.viewModel.SignActionAsync();\r\n }\r\n}\r\n\r\nexport default PkSignDocumentsWorkplaceComponentView;","import { WorkplaceViewComponentExtension } from 'tessa/ui/views/extensions';\r\nimport { IWorkplaceViewComponent, ViewComponentRegistry } from 'tessa/ui/views';\r\nimport { ContentPlaceArea } from 'tessa/ui/views/content';\r\nimport { ApplicationExtension } from 'tessa';\r\nimport { PkSignDocumentsWorkplaceComponentViewModel } from './PkSignDocumentsWorkplaceComponentViewModel';\r\nimport PkSignDocumentsWorkplaceComponentView from './PkSignDocumentsWorkplaceComponentView';\r\n\r\nexport class PkSignDocumentsWorkplaceComponentExtension extends WorkplaceViewComponentExtension {\r\n public getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.PkSignDocumentsWorkplaceComponentExtension';\r\n }\r\n\r\n public initialize(model: IWorkplaceViewComponent) {\r\n model.contentFactories.set(\r\n 'PkSignDocumentsWorkplaceComponentExtension',\r\n c => new PkSignDocumentsWorkplaceComponentViewModel(c, ContentPlaceArea.ToolBarPanel, -2147483648)\r\n );\r\n }\r\n}\r\n\r\nexport class PkSignDocumentsWorkplaceComponentInitializeExtension extends ApplicationExtension {\r\n public initialize() {\r\n ViewComponentRegistry.instance.register(\r\n PkSignDocumentsWorkplaceComponentViewModel,\r\n () => PkSignDocumentsWorkplaceComponentView);\r\n }\r\n}","import { userSession } from \"common/utility\";\r\nimport { reaction } from \"mobx\";\r\nimport { DotNetType, createTypedField } from \"tessa/platform\";\r\nimport { ValidationResult, ValidationResultBuilder, ValidationResultType } from \"tessa/platform/validation\";\r\nimport { IWorkplaceViewModel } from \"tessa/ui/views\";\r\nimport { TreeItemExtension } from \"tessa/ui/views/extensions\";\r\nimport {ITreeItem } from \"tessa/ui/views/workplaces/tree\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { CdRequestTypes } from \"src/cdScripts/Helpers/CdRequestTypes\";\r\n\r\nexport class RefreshMyTasksExtension extends TreeItemExtension {\r\n \r\n getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.RefreshMyTasksExtension';\r\n }\r\n\r\n private _prevAllTaskCount : number;\r\n private _prevNewTaskCount : number;\r\n private _lastCalculateTime : Date = new Date();\r\n \r\n public async initialize(model: ITreeItem) {\r\n //model.contextMenuGenerators.;\r\n\r\n reaction(\r\n () => model.workplace.isActive,\r\n async () => \r\n {\r\n await this.UpdateAsync(model.workplace, model);\r\n }\r\n );\r\n }\r\n \r\n public async UpdateAsync(workplace: IWorkplaceViewModel, model: ITreeItem) \r\n {\r\n const validationResult = new ValidationResultBuilder();\r\n\r\n if (workplace.isActive == false)\r\n {\r\n return;\r\n }\r\n\r\n try{\r\n let allTaskCount = this._prevAllTaskCount;\r\n let newTaskCount = this._prevNewTaskCount;\r\n \r\n if ((new Date().setSeconds(0, 0) - this._lastCalculateTime.setSeconds(0, 0)) > 300000)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetMyTasksCount;\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.isSuccessful == true)\r\n {\r\n allTaskCount = response.info.TasksCount;\r\n newTaskCount = response.info.NewTasksCount;\r\n this._lastCalculateTime = new Date();\r\n }\r\n\r\n if (allTaskCount != this._prevAllTaskCount || newTaskCount != this._prevNewTaskCount)\r\n {\r\n await model.refreshNode();\r\n\r\n this._prevAllTaskCount = allTaskCount;\r\n this._prevNewTaskCount = newTaskCount;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n \"Возникли ошибки.\\n\\n\" +\r\n \"Message:\\n\" + ValidationResult.fromError(e).toString());\r\n }\r\n }\r\n}\r\n","\r\nimport { userSession } from \"common/utility\";\r\nimport { reaction } from \"mobx\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { LocalizationManager } from \"tessa/localization\";\r\nimport { DotNetType, Guid, createTypedField } from \"tessa/platform\";\r\nimport { MenuAction, showMessage } from \"tessa/ui\";\r\nimport { TreeItemExtension } from \"tessa/ui/views/extensions\";\r\nimport { ISubsetTreeItem, ITreeItem, TreeItemFactory, ViewTreeItem } from \"tessa/ui/views/workplaces/tree\";\r\nimport { ExpandingMode, SubsetVisibility, WorkplaceViewSubsetMetadata } from \"tessa/views/workplaces\";\r\nimport { PkRequestTypes } from \"../Helpers/PkRequestTypes\";\r\n\r\nexport class UserSubsetsExtension extends TreeItemExtension {\r\n \r\n getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.UserSubsetsExtension';\r\n }\r\n\r\n private _firstStart: boolean = true;\r\n private _initialized: boolean = false;\r\n private _jsonText: string;\r\n\r\n public async initialize(model: ITreeItem) {\r\n console.log(\"Initialize console log\");\r\n\r\n if (this._initialized == false)\r\n {\r\n model.contextMenuGenerators.push(ctx => {\r\n \r\n ctx.menuActions.push(new MenuAction(\r\n 'SaveSubsets',\r\n 'Сохранить пользовательские сабсеты',\r\n 'ta icon-thin-1',\r\n () => { this.SaveSubsetsAsync(model); }\r\n ));\r\n\r\n ctx.menuActions.push(new MenuAction(\r\n 'ActivateLoadSubsets',\r\n 'Загружать пользовательские сабсеты при старте',\r\n 'ta icon-thin-256',\r\n () => { this.SetLoadSubsetActivity(true); }\r\n ));\r\n });\r\n\r\n const getRequest = new CardRequest();\r\n getRequest.requestType = PkRequestTypes.PkPkGetSetUserSubsetsRequestID;\r\n getRequest.info[\"RequestType\"] = createTypedField(\"Get\", DotNetType.String);\r\n getRequest.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n getRequest.info[\"UserName\"] = createTypedField(userSession.UserName, DotNetType.String);\r\n\r\n const getResponse = await CardService.instance.request(getRequest);\r\n\r\n if (getResponse.validationResult.isSuccessful)\r\n {\r\n let result = getResponse.info.Result;\r\n let active = getResponse.info.Active;\r\n\r\n if (result.$value == true && active.$value == true)\r\n {\r\n this._jsonText = getResponse.info.JsonText.$value;\r\n \r\n model.contextMenuGenerators.push(ctx => {\r\n ctx.menuActions.push(new MenuAction(\r\n 'DisactivateLoadSubsets',\r\n 'Отключить загрузку пользовательских сабсетов при старте',\r\n 'ta icon-thin-255',\r\n () => { this.SetLoadSubsetActivity(false); }\r\n ));\r\n });\r\n }\r\n }\r\n \r\n let isActive = model.workplace.isActive;\r\n\r\n if (isActive && this._firstStart && this._jsonText) \r\n {\r\n let userSubset: CollectionUsersSubsets = JSON.parse(this._jsonText);\r\n\r\n userSubset.UserSubsets.forEach(item => {\r\n let composition = model.workplace.items.find(x => Guid.equals(x.compositionId, item.Parent)) as ViewTreeItem;\r\n\r\n if(composition)\r\n {\r\n this.ShowSubsetsFromMemoryRecursive(composition, item);\r\n }\r\n });\r\n this._firstStart = false;\r\n }\r\n\r\n this._initialized = true;\r\n }\r\n }\r\n\r\n public async SetLoadSubsetActivity(activity: boolean)\r\n {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.PkPkGetSetUserSubsetsRequestID;\r\n request.info[\"RequestType\"] = createTypedField(\"SetActivity\", DotNetType.String);\r\n request.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info[\"UserName\"] = createTypedField(userSession.UserName, DotNetType.String);\r\n\r\n if (activity == true)\r\n {\r\n request.info[\"Activity\"] = createTypedField(true, DotNetType.Boolean);\r\n }\r\n else\r\n {\r\n request.info[\"Activity\"] = createTypedField(false, DotNetType.Boolean);\r\n }\r\n\r\n const response = await CardService.instance.request(request);\r\n \r\n if (response.validationResult.isSuccessful)\r\n {\r\n if (activity == true)\r\n {\r\n await showMessage(\"Загрузка пользовательских сабсетов активирована.\");\r\n }\r\n else\r\n {\r\n await showMessage(\"Загрузка пользовательских сабсетов отключена.\");\r\n }\r\n }\r\n else\r\n {\r\n await showMessage(\"Возникла ошибка активации пользовательских сабсетов.\");\r\n }\r\n }\r\n \r\n public async SaveSubsetsAsync(model: ITreeItem) \r\n {\r\n try\r\n {\r\n let userSubsets : CollectionUsersSubsets = new CollectionUsersSubsets([]);\r\n let level : number = 0;\r\n\r\n model.items.forEach(item => {\r\n if ((Guid.equals(item.compositionId, \"b2a90301-af2b-44b1-9112-b921fee2ee8e\") && item.items.some(x => x))\r\n || (Guid.equals(item.compositionId, \"99a74f1c-6817-49ad-9694-02d5e4464e10\") && item.items.some(x => x))\r\n || (Guid.equals(item.compositionId, \"b6fa50a8-c6a5-464d-9712-5d26422a8e0e\") && item.items.some(x => x)))\r\n {\r\n let newElement = new UserSubsets(\r\n null, \r\n item.compositionId.toString(), \r\n null, \r\n null, \r\n level, \r\n new Array(), \r\n null, \r\n null);\r\n\r\n item.items.forEach(childItem => {\r\n let subsetTreeItem = childItem as ISubsetTreeItem;\r\n\r\n if (subsetTreeItem && !((Guid.equals(item.compositionId, \"b2a90301-af2b-44b1-9112-b921fee2ee8e\")) \r\n && (subsetTreeItem.metadata.alias == 'ByStatus' || subsetTreeItem.metadata.alias == 'ByTaskType' \r\n || subsetTreeItem.metadata.alias == 'ByCardType')))\r\n {\r\n newElement.Subset?.push(subsetTreeItem.metadata.alias);\r\n let levelUp = level + 1;\r\n this.SearchChildForJsonRecursive(newElement, levelUp, subsetTreeItem)\r\n }\r\n\r\n if (newElement.Subset?.some(x => x))\r\n {\r\n userSubsets.UserSubsets.push(newElement);\r\n }\r\n });\r\n }\r\n });\r\n\r\n let jsonText = JSON.stringify(userSubsets);\r\n\r\n const setRequest = new CardRequest();\r\n setRequest.requestType = PkRequestTypes.PkPkGetSetUserSubsetsRequestID;\r\n setRequest.info[\"RequestType\"] = createTypedField(\"Set\", DotNetType.String);\r\n setRequest.info[\"UserID\"] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n setRequest.info[\"UserName\"] = createTypedField(userSession.UserName, DotNetType.String);\r\n setRequest.info[\"SubsetsJson\"] = createTypedField(jsonText, DotNetType.String);\r\n\r\n const response = await CardService.instance.request(setRequest);\r\n \r\n if (response.validationResult.isSuccessful)\r\n {\r\n await showMessage(\"Пользовательские сабсеты успешно сохранены.\");\r\n }\r\n else\r\n {\r\n await showMessage(\"Не удалось сохранить пользовательские сабсеты.\");\r\n }\r\n }\r\n catch\r\n {\r\n await showMessage(\"Возникла ошибка при сохранении пользовательских сабсетов.\");\r\n }\r\n }\r\n\r\n public async SearchChildForJsonRecursive(parent: UserSubsets, level: number, child: ISubsetTreeItem) \r\n {\r\n let collection = child.items.filter(x => x.items.some(y => y));\r\n\r\n if (collection)\r\n {\r\n collection.forEach(item => {\r\n if (!parent.ChildSubsetCollection)\r\n {\r\n parent.ChildSubsetCollection = new Array();\r\n }\r\n\r\n let localize = LocalizationManager.instance.localize(child.text)\r\n\r\n if (localize)\r\n {\r\n child.text = localize;\r\n }\r\n\r\n let newElement = new UserSubsets(\r\n null, \r\n child.metadata.alias, \r\n child.text, \r\n item.text, \r\n level, \r\n new Array(), \r\n null, \r\n null);\r\n\r\n item.items.forEach(childItem => {\r\n let subsetTreeItem = childItem as ISubsetTreeItem;\r\n\r\n if (subsetTreeItem)\r\n {\r\n newElement.Subset?.push(subsetTreeItem.metadata.alias);\r\n let levelUp = level + 1;\r\n this.SearchChildForJsonRecursive(newElement, levelUp, subsetTreeItem)\r\n }\r\n });\r\n\r\n if (newElement.Subset?.some(x => x))\r\n {\r\n parent.ChildSubsetCollection.push(newElement);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public ShowSubsetsFromMemoryRecursive(treeItem: ViewTreeItem, userSubsets: UserSubsets) \r\n {\r\n if (!userSubsets.Subset)\r\n {\r\n userSubsets.Subset = [];\r\n }\r\n\r\n if (!userSubsets.ChildSubsetCollection)\r\n {\r\n userSubsets.ChildSubsetCollection = [];\r\n }\r\n\r\n let availableSubsets = treeItem.availableSubsets.filter(x => userSubsets.Subset && userSubsets.Subset.some(y => y == x.alias))\r\n\r\n availableSubsets.forEach(subset => {\r\n let subsetMetaData = subset as WorkplaceViewSubsetMetadata;\r\n \r\n subsetMetaData.visibility = SubsetVisibility.OpenedAsDefault;\r\n subsetMetaData.expandingMode = ExpandingMode.Expanded;\r\n\r\n let newItem = TreeItemFactory.instance.showSubset(treeItem, subset);\r\n\r\n reaction(\r\n () => newItem.isLoading,\r\n (IsLoading) => \r\n {\r\n if (IsLoading == false) \r\n {\r\n if (userSubsets.ChildSubsetCollection)\r\n {\r\n userSubsets.ChildSubsetCollection.forEach(element => {\r\n if (newItem.items.some(x => x.text == element.SubParent))\r\n {\r\n let subItem = newItem.items.find(x => x.text == element.SubParent) as ViewTreeItem;\r\n subItem.expand();\r\n this.ShowSubsetsFromMemoryRecursive(subItem, element);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n );\r\n });\r\n }\r\n}\r\n\r\nclass CollectionUsersSubsets\r\n {\r\n constructor(public UserSubsets : Array) {}\r\n }\r\n\r\n class UserSubsets\r\n {\r\n constructor(\r\n public ID : guid | null, \r\n public Parent : string | null,\r\n public ParentName : string | null,\r\n public SubParent : string | null,\r\n public Level : number | null,\r\n public Subset : Array | null,\r\n public ChildSubsetCollection : Array | null,\r\n public SubsetPath : SubsetPath | null) {}\r\n }\r\n\r\n class SubsetPath\r\n {\r\n constructor(\r\n public MainParent : string,\r\n public Path : Array) {}\r\n }\r\n\r\n class SubsetPathByLevel\r\n {\r\n constructor(\r\n public Parent : string,\r\n public ParentName : string,\r\n public SubParent : string,\r\n public Level : number) {}\r\n }","import { LocalizationManager } from 'tessa/localization';\r\nimport { TreeItemExtension } from 'tessa/ui/views/extensions';\r\nimport { IFolderTreeItem, ITreeItem } from 'tessa/ui/views/workplaces/tree';\r\nimport { IDataNodeMetadata } from 'tessa/views/workplaces';\r\n\r\nexport class OrderingNodesInFolderExtension extends TreeItemExtension {\r\n\r\n getExtensionName(): string {\r\n return 'Tessa.Extensions.Client.Views.OrderingNodesInFolderExtension';\r\n }\r\n\r\n\r\n public initialized(model: ITreeItem) {\r\n\r\n this.OrderNodesInFolderByName(model);\r\n\r\n\r\n }\r\n\r\n private OrderNodesInFolderByName(node: ITreeItem) {\r\n if (!(node as IFolderTreeItem)) {\r\n return;\r\n }\r\n\r\n // сортирует вложенные узлы только в папках\r\n let folder: IFolderTreeItem = node as IFolderTreeItem;\r\n let folderMeta = folder.metadata;\r\n\r\n let orderedItems = folderMeta.items.filter(x => (x as IDataNodeMetadata)).sort((a, b) => LocalizationManager.instance.sortByLocalized((a as IDataNodeMetadata).caption, (b as IDataNodeMetadata).caption));\r\n orderedItems.forEach(item => {\r\n let pos: number = orderedItems.findIndex(x => (x as IDataNodeMetadata).caption === (item as IDataNodeMetadata).caption);\r\n if (pos > -1) {\r\n (item as IDataNodeMetadata).orderPos = pos;\r\n }\r\n });\r\n }\r\n}\r\n","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { MyTasksExtension, MyTasksInitializeExtension } from './MyTasksExtension';\r\nimport { PkCompleteTasksWorkplaceComponentExtension, PkCompleteTasksWorkplaceComponentInitializeExtension } from './PkCompleteTasksWorkplaceComponentExtension';\r\nimport { PkContractDownloadReportComponentExtension, PkContractDownloadReportComponentInitializeExtension } from './PkContractDownloadReportComponentExtension';\r\nimport { PkActDownloadReportComponentExtension, PkActDownloadReportComponentInitializeExtension } from './PkActDownloadReportComponentExtension';\r\nimport { PkMatrixWorkplaceComponentExtension, PkMatrixWorkplaceComponentInitializeExtension } from './PkMatrixWorkplaceComponentExtension';\r\nimport { PkSignDocumentsWorkplaceComponentExtension, PkSignDocumentsWorkplaceComponentInitializeExtension } from './PkSignDocumentsWorkplaceComponentExtension';\r\nimport { RefreshMyTasksExtension } from './RefreshMyTasksExtension';\r\nimport { UserSubsetsExtension } from './UserSubsetsExtension';\r\nimport { OrderingNodesInFolderExtension } from './OrderingNodesInFolderExtension';\r\n\r\n\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkSignDocumentsWorkplaceComponentExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkSignDocumentsWorkplaceComponentInitializeExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkMatrixWorkplaceComponentExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkMatrixWorkplaceComponentInitializeExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: RefreshMyTasksExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: UserSubsetsExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: MyTasksExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: MyTasksInitializeExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkCompleteTasksWorkplaceComponentExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkCompleteTasksWorkplaceComponentInitializeExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkContractDownloadReportComponentExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkContractDownloadReportComponentInitializeExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkActDownloadReportComponentExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: PkActDownloadReportComponentInitializeExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});\r\nExtensionContainer.instance.registerExtension({\r\n extension: OrderingNodesInFolderExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true\r\n});","import { FileControlExtension, IFileControlExtensionContext } from 'tessa/ui/files';\r\n\r\nexport class ApprovalListsFileMenu extends FileControlExtension {\r\n \r\n public openingMenu(context: IFileControlExtensionContext) {\r\n \r\n const addFileActionNames = [\r\n \"Upload\",\r\n \"Scan\",\r\n \"PasteFromClipboard\",\r\n \"AddFromTemplate\",\r\n \"Separator1\",\r\n \"Remove\",\r\n \"Replace\"\r\n ];\r\n\r\n if (context.control.name == \"FilesAdditional\")\r\n {\r\n addFileActionNames.forEach(async menuItemName => {\r\n let action = context.actions.find(a => a.name == menuItemName)\r\n if (action)\r\n {\r\n action.isCollapsed = true;\r\n }\r\n }); \r\n }\r\n }\r\n}","import { FileControlExtension, IFileControlExtensionContext } from 'tessa/ui/files';\r\nimport { ICardModel } from 'tessa/ui/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { MenuAction, UIContext } from 'tessa/ui';\r\nimport { Card, CardStoreMode } from 'tessa/cards';\r\nimport { PkContractUIHelper } from '../Helpers/PkContractUIHelper';\r\nimport { ArFileHelper } from '../Helpers/ArFileHelper';\r\nimport { showError, showLoadingOverlay } from 'tessa/ui';\r\nimport { CardGetFileContentRequest, CardService } from 'tessa/cards/service';\r\nimport { CdFileTypes } from '../../cdScripts/Helpers/CdFileTypes';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\n\r\nexport class ArContractFileControlMenu extends FileControlExtension {\r\n public openingMenu(context: IFileControlExtensionContext) {\r\n // получаем модель карточки\r\n const model = context.control.model as ICardModel; \r\n // проверяем модель карточки\r\n if (model.cardType.id !== CdCardTypes.ArContractTypeID && model.cardType.id !== CdCardTypes.ArContractTypeID) {\r\n return;\r\n }\r\n \r\n if (context.control.name == \"Files\")\r\n {\r\n var card = model.card;\r\n if (card.storeMode == CardStoreMode.Insert)\r\n {\r\n return;\r\n }\r\n\r\n var isHistorical = PkContractUIHelper.IsLocked(card);\r\n this.FromFileButtonControlLogicAsync(context, model, card, isHistorical);\r\n this.FromCDButtonControlLogicAsync(context, model, card, isHistorical);\r\n this.DownloadAllFiles(context, card, isHistorical);\r\n }\r\n }\r\n\r\n private async FromCDButtonControlLogicAsync(context: IFileControlExtensionContext, model: ICardModel, card: Card, isHistorical: boolean)\r\n {\r\n var isCdBtnCanExecute = ArFileHelper.IsCdButtonCanExecute(card);\r\n if (isCdBtnCanExecute && !isHistorical)\r\n {\r\n context.actions.splice(1,0,\r\n new MenuAction(\r\n \"CreateInCd\",\r\n \"Создать в КД\",\r\n \"ta icon-thin-069\",\r\n () => {ArFileHelper.AddFileFromCdAsync(UIContext.current, model, card)},\r\n null,\r\n false)\r\n );\r\n }\r\n }\r\n\r\n private async FromFileButtonControlLogicAsync(context: IFileControlExtensionContext, model: ICardModel, card: Card, isHistorical: boolean)\r\n {\r\n let item: MenuAction | undefined;\r\n if (item = context.actions.find(i => i.name === 'Upload')) {\r\n item.isCollapsed = !ArFileHelper.IsFsButtonCanExecute(card) || isHistorical;\r\n item.action = () => {\r\n ArFileHelper.AddFileFromFsAsync(model);\r\n }\r\n }\r\n }\r\n\r\n private async DownloadAllFiles(context: IFileControlExtensionContext, card: Card, isHistorical: boolean)\r\n {\r\n if (!isHistorical) {\r\n let zipFileName: string;\r\n if (card.sections.has('ArContractsUser') &&\r\n card.sections.get('ArContractsUser')?.fields.has('SubjectName')) {\r\n zipFileName = card.sections.get('ArContractsUser')?.fields.get('SubjectName');\r\n } else {\r\n zipFileName = card.id;\r\n }\r\n zipFileName += '.zip';\r\n\r\n context.actions.splice(2, 0,\r\n new MenuAction(\r\n \"DownloadAllFiles\",\r\n \"Скачать все\",\r\n \"ta icon-thin-050\",\r\n async () => {\r\n try {\r\n await showLoadingOverlay(async () => {\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = CdFileTypes.GetZipArchiveWithoutDirectoriesType;\r\n getFileContentRequest.cardId = card.id;\r\n const getFileContentResponse = await CardService.instance.getFileContent(getFileContentRequest);\r\n if (getFileContentResponse.content == null || getFileContentResponse.size === 0) {\r\n throw new Error('Вернулся пустой файл.');\r\n }\r\n PkCommonHelper.SaveFileContent(zipFileName, getFileContentResponse.content);\r\n }, \"Формирование zip архива.\");\r\n } catch (err) {\r\n showError(err);\r\n }\r\n },\r\n null,\r\n false)\r\n );\r\n }\r\n\r\n }\r\n}","import { FileControlExtension, IFileControlExtensionContext } from 'tessa/ui/files';\r\nimport { ICardModel } from 'tessa/ui/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { MenuAction, UIContext } from 'tessa/ui';\r\nimport { Card } from 'tessa/cards';\r\nimport { ArFileHelper } from '../Helpers/ArFileHelper';\r\nimport { ButtonViewModel } from 'tessa/ui/cards/controls';\r\nimport { Visibility } from 'tessa/platform';\r\n\r\nexport class ArPoaFileControlMenu extends FileControlExtension {\r\n public openingMenu(context: IFileControlExtensionContext) {\r\n // получаем модель карточки\r\n const model = context.control.model as ICardModel; \r\n // проверяем модель карточки\r\n if (model.cardType.id !== CdCardTypes.ArPowerOfAttorneyTypeID) {\r\n return;\r\n }\r\n \r\n if (context.control.name == \"Files\")\r\n {\r\n var card = model.card;\r\n \r\n let btns : string[] = [ \"Scan\", \"PasteFromClipboard\" ];\r\n btns.forEach(async menuItemName => {\r\n let action = context.actions.find(a => a.name == menuItemName)\r\n if (action)\r\n {\r\n action.isCollapsed = true;\r\n }\r\n });\r\n\r\n var isHistorical = ArFileHelper.CheckIsHistorical(card);\r\n this.FromCDButtonControlLogicAsync(context, model, card, isHistorical);\r\n this.FromFileButtonControlLogicAsync(context, card); \r\n } \r\n }\r\n\r\n private async FromCDButtonControlLogicAsync(context: IFileControlExtensionContext, model: ICardModel, card: Card, isHistorical: boolean)\r\n {\r\n card.info[\"IsCantSendToCd\"] = false;\r\n let button : ButtonViewModel | null = null;\r\n let viewModelBase = model.controls.get(\"FromCDButtonControl\");\r\n if (viewModelBase) {\r\n button = viewModelBase as ButtonViewModel;\r\n }\r\n if (!button || button.controlVisibility !== Visibility.Visible)\r\n {\r\n return;\r\n }\r\n var isCdBtnVisible = ArFileHelper.IsCdButtonCanExecute(card);\r\n if (!isCdBtnVisible || isHistorical) return;\r\n let section = card.sections.get(\"ArPowerOfAttorney\");\r\n if (section && section.fields.get(\"PowerOfAttorneyTypeID\") == 2) //историческая\r\n {\r\n return;\r\n }\r\n context.actions.splice(1,0,\r\n new MenuAction(\r\n \"CreateInCd\",\r\n \"Создать в КД\",\r\n \"ta icon-thin-069\",\r\n () => {ArFileHelper.AddFileFromCdAsync(UIContext.current, model, card)},\r\n null,\r\n false)\r\n );\r\n }\r\n\r\n private async FromFileButtonControlLogicAsync(context: IFileControlExtensionContext, card: Card)\r\n {\r\n let item : MenuAction | undefined;\r\n if (item = context.actions.find(i => i.name === 'Upload')) {\r\n item.isCollapsed = !ArFileHelper.IsFsButtonCanExecute(card);\r\n }\r\n }\r\n}","import { FileExtension, IFileExtensionContext } from 'tessa/ui/files';\r\nimport { PkCardTypes } from '../Helpers/PkCardTypes';\r\nimport { Guid } from 'tessa/platform';\r\nimport { ChFileCategories } from '../Helpers/ChFileCategories';\r\nimport { ICardModel } from 'tessa/ui/cards';\r\nimport { CardPermissionFlags } from 'tessa/cards';\r\n\r\nexport class PkAccessibilityContextMenuButtonsFileExtension extends FileExtension {\r\n public openingMenu(context: IFileExtensionContext) {\r\n const cardModel = context.control.model as ICardModel;\r\n if (!cardModel || !Guid.equals(cardModel.card.typeId, PkCardTypes.ArContractTypeID)) {\r\n return;\r\n }\r\n\r\n let category = context.file.model.category?.id;\r\n if (!Guid.equals(category, ChFileCategories.Primary.id)\r\n && !Guid.equals(category, ChFileCategories.AdditionalForContract.id)\r\n && !Guid.equals(category, ChFileCategories.ANPT.id)) {\r\n return;\r\n }\r\n\r\n let fPermission = cardModel.card.permissions.filePermissions.tryGet(context.file.model.id);\r\n if (!fPermission) {\r\n return;\r\n }\r\n\r\n let canEdit = (fPermission!.$value & CardPermissionFlags.ProhibitReplaceFile) == 0;\r\n let canDelete = (fPermission!.$value & CardPermissionFlags.ProhibitDeleteFile) == 0;\r\n let listActions = [\r\n \"OpenForEdit\",\r\n \"OpenInFolder\",\r\n \"Replace\",\r\n \"ReplaceWithCheck\",\r\n \"ReplaceFromTemplate\",\r\n \"CreateCopy\",\r\n \"MakeCopy\",\r\n \"AddVersion\",\r\n \"AddVersionWithCheck\",\r\n \"Rename\",\r\n \"EditImages\",\r\n \"ChangeCategory\",\r\n \"Remove\"\r\n ];\r\n listActions.forEach(item =>{\r\n let action = context.actions.find(x => x.name === item);\r\n if (!action){\r\n return;\r\n }\r\n\r\n switch (item)\r\n {\r\n case \"ChangeCategory\":\r\n case \"Remove\":\r\n action.isCollapsed = !canDelete;\r\n break;\r\n\r\n default:\r\n action.isCollapsed = !canEdit;\r\n break;\r\n }\r\n });\r\n }\r\n}","import { Guid } from \"tessa/platform\";\r\nimport { ICardModel } from \"tessa/ui/cards\";\r\nimport { FileExtension, IFileExtensionContext } from \"tessa/ui/files\";\r\nimport { CdCardTypes } from \"src/cdScripts/Helpers/CdCardTypes\";\r\nimport { MenuAction } from \"tessa/ui\";\r\n\r\nexport class ArPoaFileMenu extends FileExtension {\r\n public openingMenu(context: IFileExtensionContext) {\r\n\r\n const cardModel = context.control.model as ICardModel;\r\n\r\n if (!cardModel || !Guid.equals(cardModel.card.typeId, CdCardTypes.ArPowerOfAttorneyTypeID)) {\r\n return;\r\n }\r\n\r\n // получаем кнопки для удаления из контекстного меню\r\n let listActionsToRemove : MenuAction[] = [];\r\n\r\n let openForEdit = context.actions.find(x => x.name === \"OpenForEdit\")\r\n if(openForEdit)\r\n {\r\n listActionsToRemove.push(openForEdit);\r\n }\r\n\r\n let openInFolderForEdit = context.actions.find(x => x.name === \"OpenInFolder\")\r\n if(openInFolderForEdit)\r\n {\r\n listActionsToRemove.push(openInFolderForEdit);\r\n }\r\n\r\n let changeCategory = context.actions.find(x => x.name === \"ChangeCategory\")\r\n if(changeCategory)\r\n {\r\n listActionsToRemove.push(changeCategory);\r\n }\r\n\r\n let replace = context.actions.find(x => x.name === \"Replace\")\r\n if(replace)\r\n {\r\n listActionsToRemove.push(replace);\r\n }\r\n\r\n let replaceFromTemplate = context.actions.find(x => x.name === \"ReplaceFromTemplate\")\r\n if(replaceFromTemplate)\r\n {\r\n listActionsToRemove.push(replaceFromTemplate);\r\n }\r\n\r\n \r\n let createCopy = context.actions.find(x => x.name === \"MakeCopy\")\r\n if(createCopy)\r\n {\r\n listActionsToRemove.push(createCopy);\r\n }\r\n\r\n let addVersion = context.actions.find(x => x.name === \"AddVersion\")\r\n if(addVersion)\r\n {\r\n listActionsToRemove.push(addVersion);\r\n }\r\n\r\n let editImages = context.actions.find(x => x.name === \"EditImages\")\r\n if(editImages)\r\n {\r\n listActionsToRemove.push(editImages);\r\n }\r\n\r\n const cardFile = cardModel.card.files.find(file => Guid.equals(file.rowId, context.file.id))\r\n\r\n //Если автор документа - пользователь System\r\n if (!!cardFile && Guid.equals(cardFile.card.createdById, '11111111-1111-1111-1111-111111111111')) {\r\n let remove = context.actions.find(x => x.name === \"Remove\")\r\n if(remove)\r\n {\r\n listActionsToRemove.push(remove);\r\n }\r\n }\r\n\r\n listActionsToRemove.forEach(item => {\r\n context.actions.splice(context.actions.indexOf(item), 1);\r\n });\r\n }\r\n}","import { Guid } from \"tessa/platform\";\r\nimport { ICardModel } from \"tessa/ui/cards\";\r\nimport { FileExtension, IFileExtensionContext } from \"tessa/ui/files\";\r\nimport { CdCardTypes } from \"src/cdScripts/Helpers/CdCardTypes\";\r\nimport { MenuAction, showConfirm, showWarning } from \"tessa/ui\";\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { PkContractUIHelper } from \"../Helpers/PkContractUIHelper\";\r\n\r\nexport class ArContractFileMenu extends FileExtension {\r\n public openingMenu(context: IFileExtensionContext) {\r\n\r\n const cardModel = context.control.model as ICardModel;\r\n if (!cardModel || !Guid.equals(cardModel.card.typeId, CdCardTypes.ArContractTypeID)) {\r\n return;\r\n }\r\n\r\n // TES-7984 При попытке отредактировать документ, который находится в блоках указанных в п.1 выводить предупреждение: \"Редактирование основного документа и приложений запрещена, так как документ является Входящим. Если необходимо Вам направить новый документ контрагенту, создайте новое КСД или же запросите новый пакет документов у контрагента.\"\r\n if (PkContractUIHelper.CheckCreatedOnBaseArEDocument(cardModel.card)) {\r\n\r\n const blockingActionNames = [\r\n \"AddVersion\",\r\n \"ChangeCategory\",\r\n \"CreateCopy\",\r\n \"MakeCopy\",\r\n \"OpenForEdit\",\r\n \"OpenInFolder\",\r\n \"Remove\",\r\n \"Rename\",\r\n \"Replace\",\r\n \"ReplaceFromTemplate\",\r\n\r\n ];\r\n\r\n\r\n blockingActionNames.forEach(async menuItemName => {\r\n let action = context.actions.find(a => a.name == menuItemName)\r\n if (action) {\r\n action.isCollapsed = true;\r\n \r\n let actionIndex = context.actions.indexOf(action);\r\n context.actions.splice(actionIndex, 0,\r\n new MenuAction(\r\n action.name + \"Blocked\",\r\n action!.caption,\r\n action!.icon,\r\n async (a) => {\r\n if (context.files.some(i => i.model.category?.id == ChFileCategories.Primary.id || i.model.category?.id == ChFileCategories.AdditionalForContract.id)) {\r\n await showWarning(\"Редактирование основного документа и приложений запрещена, так как документ является Входящим. Если Вам необходимо направить новый документ контрагенту, создайте новое КСД или же запросите новый пакет документов у контрагента.\", \"Редактирование документа\");\r\n return;\r\n }\r\n action!.executeAction(a);\r\n },\r\n null,\r\n false)\r\n );\r\n \r\n }\r\n });\r\n return;\r\n }\r\n\r\n\r\n // Отключаем пункт \"Добавить версию\"\r\n let item: MenuAction | undefined;\r\n item = context.actions.find(i => i.name === 'AddVersion');\r\n if (!item || item.isCollapsed) {\r\n return;\r\n }\r\n\r\n item.isCollapsed = true;\r\n context.actions.splice(context.actions.findIndex(i => i.name === 'AddVersion'), 0,\r\n new MenuAction(\r\n \"AddVersionWithCheck\",\r\n item!.caption,\r\n item!.icon,\r\n async (a) => {\r\n let isConfirm: boolean=true;\r\n let section = cardModel.card.sections.tryGet(\"ArContractsUser\");\r\n if (section && (section.fields.tryGet(\"IsFromKD\", false)))\r\n {\r\n isConfirm = await showConfirm(\"Изменение данных приведет к снятию галочки \\\"Документ из КД\\\". После корректировки данных просьба загрузить файл из КД повторно. Продолжить?\");\r\n }\r\n\r\n if (context.files.some(i => i.model.category?.id == ChFileCategories.Primary.id) && !isConfirm) {\r\n return;\r\n }\r\n\r\n item!.executeAction(a);\r\n },\r\n null,\r\n false)\r\n );\r\n }\r\n}","import { FileControlExtension, IFileControlExtensionContext } from 'tessa/ui/files';\r\nimport { ICardModel } from 'tessa/ui/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CardSection } from 'tessa/cards';\r\nimport { userSession } from 'common/utility';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\n\r\nexport class IdpFileMenu extends FileControlExtension {\r\n\r\n public openingMenu(context: IFileControlExtensionContext) {\r\n // получаем модель карточки\r\n const model = context.control.model as ICardModel;\r\n // проверяем модель карточки\r\n if (model.cardType.id !== CdCardTypes.ArDocumentIdpTypeID) {\r\n return;\r\n }\r\n\r\n // Установка прав доступа на файлы\r\n this.SetFilesPermissions(context);\r\n\r\n }\r\n\r\n\r\n SetFilesPermissions(context: IFileControlExtensionContext) {\r\n // TES-12003 Для всех кроме Админа добавление файлов недоступно в стстусах \"Отправка в архив\", \"На подписании\", \"Архив\", \"Неактуален\"\r\n // note: Ограничение сделано здесь, т.к. ни через карточки прав доступов/на чтение, ни через card.Permissions.SetCardPermissions(CardPermissionFlags.ProhibitInsertFile) в клиентских/серверных\r\n // запретить добавлять файлы не удалось\r\n if (!userSession.isAdmin && context.control.name == \"Files\") {\r\n var card = context.control.model.card;\r\n let pdiSect: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (!pdiSect) return;\r\n let stateID: number | null = pdiSect.fields.tryGet('StateID');\r\n if (stateID === CdDocStates.Archive.id || stateID === CdDocStates.SendingToArchive.id || stateID === CdDocStates.Signing.id || stateID === CdDocStates.Irrelevant.id) {\r\n let menuItems: string[] = [\"Upload\", \"Scan\", \"PasteFromClipboard\"];\r\n menuItems.forEach(menuItemName => {\r\n let action = context.actions.find(a => a.name == menuItemName)\r\n if (action) {\r\n action.isCollapsed = true;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { ApprovalListsFileMenu } from './ApprovalListsFileMenu';\r\nimport { ArContractFileControlMenu } from './ArContractFileControlMenu';\r\nimport { ArPoaFileControlMenu } from './ArPoaFileControlMenu';\r\nimport { PkAccessibilityContextMenuButtonsFileExtension } from './PkAccessibilityContextMenuButtonsFileExtension';\r\nimport { ArPoaFileMenu } from './ArPoaFileMenu';\r\nimport { ArContractFileMenu } from './ArContractFileMenu';\r\nimport { IdpFileMenu } from './IdpFileMenu';\r\n\r\nExtensionContainer.instance.registerExtension({extension: PkAccessibilityContextMenuButtonsFileExtension,\r\n stage: ExtensionStage.AfterPlatform, singleton: true});\r\nExtensionContainer.instance.registerExtension({extension: ArContractFileControlMenu, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArPoaFileControlMenu, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ApprovalListsFileMenu, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArPoaFileMenu, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ArContractFileMenu, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: IdpFileMenu, stage: ExtensionStage.AfterPlatform});\r\n"],"sourceRoot":""}