{"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/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.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:///./src/cdScripts/Helpers/CdProcessHelper.ts","webpack:///./src/cdScripts/Helpers/CdCardHelper.ts","webpack:///./src/cdScripts/Helpers/CdDSSHelper.ts","webpack:///./src/pkScripts/Helpers/Enums/DocumentSections.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:///./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:///./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:///external \"tessa.tessa.ui.tessaDialog\"","webpack:///./src/cdScripts/Tiles/CdCardTileExtension.ts","webpack:///./src/cdScripts/Tiles/CdDisableCardCreateCopyTileExtension.ts","webpack:///./src/cdScripts/Tiles/CdDisableCardCreateCopyTileExtension copy.ts","webpack:///./src/cdScripts/Tiles/Registrator.ts","webpack:///./src/cdScripts/UI/Cards/CdDocumentIDPUIExtension.ts","webpack:///./src/cdScripts/UI/Cards/CdTechnicalDocumentationUIExtension.ts","webpack:///./src/cdScripts/Helpers/CdExecutiveDocumentationKinds.ts","webpack:///./src/cdScripts/Helpers/Cards/CdExecutiveDocumentationSharedHelper.ts","webpack:///./src/cdScripts/Helpers/Dictionaries/RequestRoleTypes.ts","webpack:///./src/cdScripts/Helpers/CdEdTypes.ts","webpack:///./src/cdScripts/Helpers/Dictionaries/ItdStates.ts","webpack:///./src/cdScripts/Helpers/Cards/CdExecutiveDocumentationClientHelper.ts","webpack:///./src/cdScripts/UI/Cards/CdExecutiveDocumentationUIExtension.ts","webpack:///./src/cdScripts/Helpers/Cards/CdExecutiveSchemeClientHelper.ts","webpack:///./src/cdScripts/UI/Cards/CdExecutiveSchemeUIExtension.ts","webpack:///./src/cdScripts/Helpers/Cards/CdDevelopmentScenarioSharedHelper.ts","webpack:///./src/cdScripts/Helpers/Cards/CdDevelopmentScenarioClientHelper.ts","webpack:///./src/cdScripts/UI/Cards/CdDevelopmentScenarioUIExtension.ts","webpack:///./src/cdScripts/Helpers/Dictionaries/CdObjectProjectTypes.ts","webpack:///./src/cdScripts/Helpers/Cards/CdRequestForMaterialsClientHelper.ts","webpack:///./src/cdScripts/UI/Cards/CdRequestForMaterialsUIExtension.ts","webpack:///./src/cdScripts/UI/Cards/CdPersonalRoleUIExtension.ts","webpack:///./src/cdScripts/UI/Cards/CdGlazingOrderUIExtension.ts","webpack:///./src/cdScripts/UI/Cards/CdAdditionalWorksContractOrderUIExtension.ts","webpack:///./src/cdScripts/UI/Cards/CdZosRvDocumentUIExtension.ts","webpack:///./src/cdScripts/UI/Cards/Registrator.ts","webpack:///./src/cdScripts/Cards/CdCardsGetExtensions/CdPartnerKCKGetExtension.ts","webpack:///./src/cdScripts/Cards/CdCardsGetExtensions/Registrator.ts","webpack:///./src/cdScripts/Cards/DecommissionedTypesStoreExtension.ts","webpack:///./src/cdScripts/Cards/Registrator.ts","webpack:///./src/cdScripts/Helpers/CdIncomingTaskHistoryHelper.ts","webpack:///./src/cdScripts/UI/CdApprovalListUIExtension.ts","webpack:///./src/cdScripts/UI/CdHideTaskHistoryUIExtension.ts","webpack:///./src/cdScripts/UI/CdProjectUIExtension.ts","webpack:///./src/cdScripts/Helpers/NamedEntry.ts","webpack:///./src/cdScripts/Helpers/CdReferenceTypes.ts","webpack:///./src/cdScripts/UI/CdRefsTableUIExtension.ts","webpack:///./src/cdScripts/UI/CdRemindersUIExtension.ts","webpack:///./src/cdScripts/UI/CdTableUIExtension.ts","webpack:///./src/cdScripts/UI/CdDivisionRoleUIExtension.ts","webpack:///./src/cdScripts/UI/CdHiddenWorkTableExtension.ts","webpack:///./src/cdScripts/UI/CdDownloadAllFilesZipUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/CdAdditionalWorksContractOrderTaskUIExtension.ts","webpack:///./src/cdScripts/UI/Registrator.ts","webpack:///./src/cdScripts/UI/Tasks/CdCompleteTaskUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/CdHideSubTaskTableUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/CdExecutiveDocumentationTaskUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/CdExecutiveSchemeTaskUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/CdDevelopmentScenarioTaskUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/CdRequestForMaterialsTaskUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/CdHideControlUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/CdTechnicalDocumentationTaskUIExtension.ts","webpack:///./src/cdScripts/UI/Tasks/Registrator.ts","webpack:///./src/cdScripts/Files/CdSignFileContextMenuFileExtension.ts","webpack:///./src/cdScripts/Files/CdContextMenuFileHelper.ts","webpack:///./src/cdScripts/Files/CdGetFileForPrintContextMenuFileExtension.ts","webpack:///./src/cdScripts/Files/ChangeFileMenu.ts","webpack:///./src/cdScripts/Files/CdCheckSignsContextMenuFileExtension.ts","webpack:///./src/cdScripts/Files/PkTCOfferContextMenuFileExtension.ts","webpack:///./src/cdScripts/Files/ChAddContextMenuTemplates.ts","webpack:///./src/cdScripts/Files/CdPrintApprovalListFileExtension.ts","webpack:///./src/cdScripts/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","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","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","NonGeodeticSchemeType","PkMatrixWorkplaceHelper","requestIsUserInRole","responseIsUserInRole","alias","localization","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","tessaDialog","CdCardTileExtension","TileExtension","initializingGlobal","panel","workspace","leftPanel","Tile","icon","contextSource","TileGroups","Cards","command","CdCardTileExtensionHelper","copyBasedOnAction","evaluating","canCreateBasedDocumentAction","actionTile","enableActionTile","addToFavorites","canAddToFavorites","removeFromFavorites","canRemoveFromFavorites","copyCardAction","canCopyCard","copyARFOWithChangeKc","canCopyARFO","copyARFOWithoutChangeKc","unlockCards","canUnlockCards","registerCards","canRegisterCards","downloadEDRegistryAction","canDownloadEDRegistry","initializingLocal","typeid","createCardCopy","tryGetTile","disableWithCollapsing","copyCardLink","createCardTemplate","celeteCard","saveCard","CheckDostroyUser","techDocTileVis","currentTile","setIsEnabledWithCollapsing","isWorkingDocumentation","CheckIsInvestment","viewContext","view","CanEnableActionTile","CheckUserInRoleAsync","_isDostroyUser","saveBeforeCreatingCard","showConfirmWithCancel","baseCard","requestInfo","baseCardToken","KrToken","tokenStorage","setInfo","LoadingOverlay","show","createCard","creationModeDisplayText","contractRequest","refreshView","storeInfo","copyARFOCardAsync","withChangeKcMode","showConfirm","workplace","parent","text","moment","cardIDs","GetAllViewIdsAsync","parameters","SaveFileContent","viewRequest","TessaViewRequest","calculateRowCounting","references","entryPrefix","colPrefix","currentPage","entryIdIndex","viewPagingParameters","ViewPagingParameters","providePageLimitParameter","Paging","Always","providePageOffsetParameter","viewResult","getData","columns","docIDs","rowValue","CdDisableCardCreateCopyTileExtension","tile","otherTile","CdDisableCreateFileFromTemplateTileExtension","createFileFromTemplateTile","ExtensionContainer","registerExtension","extension","stage","ExtensionStage","AfterPlatform","CdDocumentIDPUIExtension","CardUIExtension","_disposerPartner","_disposerObjects","initialized","FillingUpVirtualInfoArDocumentIDP","InitializeTableObjects","FillingUpVehaBOP","dciSection","finalized","CdTechnicalDocumentationUIExtension","_disposerSelectRow","AvailableAndClearFields","ReferenceTableLogic","TechDocPagesTableLogic","CheckCount","CheckEditSignedFile","CheckRdSubdivisionMandatory","rdSubdivisionID","isSubdivisionRequired","CdExecutiveDocumentationKinds","ActOfExaminationOfHiddenWorks","ActOfExaminationOfResponsibleStructures","ActOfIntermediateExaminationOfResponsibleStructures","CdExecutiveDocumentationSharedHelper","GuidID","RequestRoleTypes","PTOEngineer","ASEngineer","EdKinds","ResidentalComplexes","HollandPark","ItdStates","DRAFT","Id","ExtName","REVIEW","VERIFIED","REMARKS","SIGN","APPROVED","ItdDocumentStates","ON_APPROVAL","CANCELED","NEW","REVISION","SIGNED","ruleForWriteSROInfo","SpecNumber","SRODate","SRONumber","CdExecutiveDocumentationClientHelper","FileTemplateButtonLogic","FileForPrintButtonLogic","deletedArchiveTaskIndex","approvers","GetApproversEd","GetInvalidApprovers","ConfirmApproversChangesDialog","ia","orgnzForFill","roleNameRow","CheckPassportsAndCertificatessSignaturesAsync","contextRoleIDs","fileVersionIDs","checkRequest","edmRow","extID","FillSROInfo","AddApproverEdFieldChanged","matchingControlViewModel","objSection","CheckMatchingByResidentalComplex","FillApproversEd","residentalComplexID","pkEdMatchingSection","edApproversID","edApproversName","rowPTO","rowAS","engineersRoles","eoOrders","rowCustomer","rule","leftButtons","eoRoleRow","orderSRODate","orderSRONumber","specialistNumber","ruleTIndex","ruleT","wftSection","workTextControl","workRefControl","missingTechnicalDocumentation","UpdateWorkControlsVisability","tdId","docNumber","respInfo","ArNumber","RdDivision","ContractDivision","edTypeID","isInitialization","isRework","isGP","isArchive","edKindID","edTypeRequest","CardGetRequest","getMode","CardGetMode","ReadOnly","edTypeCard","edtSection","efcSection","polSection","edTypeResponse","edTypeSection","edSectionID","edSectionRequest","edSectionResponse","edSectionSection","residentialComplexRow","rawSet","regionRow","oldRow","residentialComplexName","projectName","pesfed","SecondaryFullNumber","AuthorName","CreationDate","tableExecutiveSchemesForEd","pedi","SaveCardToUpdateFiles","kindId","ClearAutoCompleteTableWithMarkingkDeletedItems2","needToCopy","copiedFrom","hiddenWorkTable","missingHiddenWorks","permittedFullLoad","permittedEmployStructures","permittedEmployStructuresWithLoad","FillObjectsLikeString","UpdateVisibilityHiddenWorks","UpdateVisibilityCopiedSubject","FillActFromIntermediateAct","nullSRONumber","nullSRODate","roleIndex","isAuthorSupervision","isEO","rolesForFill","cnmRow","csmRow","asumRow","asmRow","asrRow","eomRow","eorRow","drmRow","drrRow","objectListSection","filledApprovers","edmRoleIndex","pedm","pedr","matchingRow","SpecialistNumber","nullSpecNumber","removed","fileTemplateButton","UpdateButtonControlVisability","button","GetCurrentTemplateFileRowID","templateFile","newState","UpdateButtonControlName","ActionFileTemplate","pkEdInfo","packetId","PacketLogic","PacketVisibilityLogic","addToPacketButton","executiveDocumentationPacket","packetIDTextBox","pkediSection","documentStatesAllowed","itdDocumentStateExtName","packetReadonly","openCard","cardsList","departmentId","departmentName","excludeCards","deparmentIdParameter","ViewParameterMetadata","hidden","dataType","DbType","multiple","deparmentNameParameter","objectsParameter","excludeCardsParameter","isInPacket","RequestParameterBuilder","withMetadata","addCriteria","equalsCriteriaOperator","asRequestParameter","isFalseCriteriaOperator","showViewsDialog","selectedItem","SetValueToRowField","pkDocumentCommonInfoSection","pkExecutiveDocumentationInfo","objectListSectionRow","addRow","isPacket","itdPacketID","fileForPrintButton","fileForPrint","ActionFileForPrint","signedFile","lastIndexOf","fromTemplateButton","kindID","correctStates","correctKinds","signingTypeID","correctSigningType","isDelete","hasFile","UpdateControlsVisability","firstControl","secondControl","hiddenWorkField","isCopied","mainCard","mainPediSection","copiedCardId","copiedCard","GetCard","SetActFields","mainPedi","copiedPedi","mainPdci","copiedPdci","mainPedwft","copiedPedwft","mainPedhwssi","copiedPedhwssi","mainPedm","copiedPedm","mainPedr","copiedPedr","mainPedars","copiedPedars","isRVE","mainRow","needInsertRow","existingRow","guids","CopiedID","IsExists","pov","mainObjects","ObjectsId","objectslikeString","clearChanges","CdExecutiveDocumentationUIExtension","MatchingVisabilityLogic","FieldLogic","FillApproversLogic","ButtonLogic","FillLegalEntity","TableOrderLogic","FieldsTemplateLogic","FieldsExecutiveSchemeTable","FieldsHiddenWorksLogic","ExecutiveSchemeForEdControlLogic","FillSpecialistNumber","ItdBlockLogic","CdExecutiveSchemeClientHelper","roleIDs","esInfoSection","techDocPageControl","useTechDocPageAsExecutiveSchemeControl","useTechDocPageAsExecutiveScheme","executiveSchemeTypeID","UpdateControlVisability","FillESTableApprovers","FillApproversByObject","FillApproversFromRDND","esmSection","GetTableRolesES","sc","pkEsTypeSignerRolesSection","authorId","pesi","pesr","pesm","userIds","listIdsAsString","listNames","isExists","esSection","CdExecutiveSchemeUIExtension","ApprovementMatchingRolesChanged","FieldsObjectsWorksLogic","FieldsExecutiveSchemeLogic","CheckApprovementTableOrder","CdDevelopmentScenarioSharedHelper","VicePresidentID","VicePresidentName","Countries","RussiaID","RussiaGuid1c","RussiaName","ExcludeRolesFromCheckList","CdDevelopmentScenarioClientHelper","objectField","investProjectNameField","investProjectAddressField","investProjectRegionField","investProjectCountryField","pkRdProperties","objectNotExist","countryId","pkDevelopmentScenarioInfo","CdDevelopmentScenarioUIExtension","ObjectLogic","CdObjectProjectTypes","CityBudgetObjects","BudgetSKBObjects","FeeDevelopmentObjects","CdRequestForMaterialsClientHelper","pkRdPropertiesSection","projectTypeExtID","ObjectProjectTypeExtID","debug","ObjectProjectTypeID","ObjectProjectTypeName","RemoveRole","roleToRemove","requestForMaterialsItemsTable","requestForMaterialsSuppliesTable","OrderPlus1ForTable","maxOrder","max","CdRequestForMaterialsUIExtension","FieldsObjectsLogic","TableMaterialsInitialize","CdPersonalRoleUIExtension","InitializePkLegalEntitiesControl","HideHint","SetDefaultValue","hintControlModel","pkLegalEntitiesControl","PkLegalEntitiesControlSelectedRowHandle","EntityControlHandle","rowPermissions","entityInTableControl","isManuallyAdded","roleDeputiesManagement","roleDeputiesManagementRolesSection","newCardRow","CdGlazingOrderUIExtension","LockControlsAccordingCurrentState","HandleMissingTechnicalDocumentationFlag","WorksByProjectDocumentationTableFilling","HandleOrderKind","HandleSpecialWorkFlag","HandlePerformerType","goSection","mainContractNumber","SetAllControlsReadOnlyState","SetControlReadOnlyState","wpdSection","orderKindID","mainContractNumberControl","selectedOrderKindID","isSpecialWork","isSpecialWorkControl","specialWorkSubContractorControl","performerTypeID","performerTypeControl","innerContractorControl","mainWorkSubContractorControl","CdAdditionalWorksContractOrderUIExtension","open","HandleIsOutsideKcCalculationFlag","HandleOnPdcNumberChangedAsync","HandleOnObjectChangedAsync","HandleRvrListChanges","HandleRvrWorksChanges","RecalcTotalRvrAmount","HandleRvrGuiltyChanges","HandleGuiltyPartiesRowEvents","CheckAllowChangeKcMode","AllowChangeKc","isOutsideKcCalculationControl","awcoSection","isOutsideKcCalculation","CheckOutsideKcCalculation","isOutsideKcCalculationModel","isControlBlockReadOnly","sectionDci","sectionRdp","FillDataByPdcAsync","pdcNumber","Amount","ObjectID","sectionAwco","PerformerID","PerformerName","PerformerExternalID","PerformerINN","StartWorkDateFromKC","FinishWorkDateFromKC","clearTable","removeRows","rvrList","SubscribeForFieldChanging","storage","tableRvrGuilty","CheckIssueReasonCodeSpecialCase","rvrListEditor","fromText","trim","dateStart","finishDate","sectionMain","startWorkDateFromKC","finishWorkDateFromKC","rvrWorkList","rvrRow","rvrWorks","rvrAmount","workRow","workAmount","DecimalFieldValue","UpdateGuiltyAmountIfSpecialCase","rvrGuilty","synonymAlias","RecalcGuiltDegreePercentage","Alias","GetUIControlFromForm","mainForm","startWorkDate","finishWorkDate","rvrTableBlock","blocksBag","ctrlRvrRowARFOIssueReason","rvrTableRowGuiltTable","checkCode","code","guiltyName","GetGuiltyNameBySpecialCase","hasEmptyValue","columnValues","valueSet","ev","valueDeleted","IsNullOrZerro","isExpensesRechargeVm","isClaimDocPackageVm","commentaryVm","ctrlContract","externalID","isInPerimeter","CheckPartnerInPerimeterAsync","isExpensesRecharge","issueReasonCode","startsWith","GetTotalRvrAmount","parentRvrRowID","total","GetRvrAmount","percent","percentRounded","round","EPSILON","Decimal","guiltyPartyName","rowGuiltyPartyName","rvrGuiltyRow","CdZosRvDocumentUIExtension","HandleOnContractChangedAsync","CdPartnerKCKGetExtension","CardGetExtension","beforeRequest","cardContext","DecommissionedTypesStoreExtension","CardStoreExtension","CdIncomingTaskHistoryHelper","IncomingTaskHistoryListFileName","CdApprovalListUIExtension","filesFileControl","approvalListFileControl","groupsExpanded","isCategoriesEnabled","removeFile","CdHideTaskHistoryUIExtension","taskHistoryForm","CdProjectUIExtension","_disposerCardRowTepsVirtual","tepInfoVirtual","rowToDelete","irdVersions","irdTeps","isSelected","teps","runInAction","el","docID","NamedEntry","CdReferenceTypes","CancellInternalDocuments","ConfirmInternalDocuments","LinkDocuments","CdRefsTableUIExtension","addingDocForCancelling","RdndInitialized","refsTable","buttonForCancelling","isContextMenuEdit","editRow","refSection","refType","nameParamList","parameterMetadata","parameterDocTypeMetadata","parameterStatusMetadata","Length","substring","CdRemindersUIExtension","CdTableUIExtension","adipSection","infoDict","inn","partnerFullName","partnerID","partnerINN","CdDivisionRoleUIExtension","IdpTeamTableHandle","idpTeamControl","CdHiddenWorkTableExtension","kindNewIdParameter","kindNewNameParameter","CdDownloadAllFilesZipUIExtension","downloadAllFilesZipControl","downloadAllFilesZipButton","executeOnClick","zipFileName","GetFileName","CdAdditionalWorksContractOrderTaskUIExtension","taskTypesForChecking","taskCompletionOptionsForChecking","guiltySection","partnerReasonList","guiltyRow","ReasonID","PartnerExternalID","isPartnerValid","IsPartnerValid","Message","Platform","CdCompleteTaskUIExtension","CheckControler","CheckSubTasksClose","ptirSection","ptisvSection","existSubTasks","CdHideSubTaskTableUIExtension","tryGetTasks","HideSubTaskTable","workspaceChanged","hasSubTasks","taskModel","CdExecutiveDocumentationTaskUIExtension","CheckFieldsAfterTaskComplete","CdExecutiveSchemeTaskUIExtension","CdDevelopmentScenarioTaskUIExtension","CdRequestForMaterialsTaskUIExtension","CdHideControlUIExtension","HideControl","cardTask","tryGetCard","IsNewRenovationAgreementProcess","ParentRoleId","CdTechnicalDocumentationTaskUIExtension","CdSignFileContextMenuFileExtension","FileExtension","signActionIndex","checkActionIndex","separatorActionIndex","actions","isCollapsed","exeSect","pdiSect","MenuAction","SignFileAsync","signAllFilesInCategory","saveAsync","CdContextMenuFileHelper","getRequest","method","CardGetMethod","Backup","getResponse","Log","Info","currentName","pointIndex","CdGetFileForPrintContextMenuFileExtension","openingMenu","fileES","cardExecutiveSchemeID","AddMenuAction","SaveFileForPrintVirtual","SaveFileForPrint","actionIndex","SeparatorMenuAction","ChangeFileMenu","FileControlExtension","menuItemName","CdCheckSignsContextMenuFileExtension","checkEDSActionIndex","CheckSignsAsync","checkSignsRequest","checkSignsResponse","SignaturesInfo","signaturesInfo","pkCheckSignsVirtual","roleRow","Event","CadesType","UserName","ErrorText","viewModel","contentControl","addButton","setVisibility","removeButton","backgroundColor","PkTCOfferContextMenuFileExtension","pkFilesPermissionsVirtual","prohibitedCategories","CategoryID","createCopyAction","showVersionsAction","ChAddContextMenuTemplates","refDoc","OutgoingRefDocs","scanAction","incTemplates","children","CdPrintApprovalListFileExtension","fileContext","pkPrintApprovalListVersionVirtual","pkExternalBuilderApproverVirtual","versionType"],"mappings":"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","file":"cdScripts.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 = 87);\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}","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.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;","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}","/// \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}","// Типы исполнительных схем\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;","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 }","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","module.exports = tessa.tessa.ui.tessaDialog;","import { TileExtension, ITileGlobalExtensionContext, Tile, TileGroups,\r\n TileEvaluationEventArgs , ITileLocalExtensionContext,\r\n disableWithCollapsing} from 'tessa/ui/tiles';\r\nimport { tryGetFromInfo, UIContext, showError, showNotEmpty, showConfirmWithCancel, LoadingOverlay, showMessage, IUIContext, showConfirm, showLoadingOverlay} from 'tessa/ui';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { createTypedField, DotNetType, TypedField } from 'tessa/platform';\r\nimport { CardStoreMode } from 'tessa/cards';\r\nimport { createCard } from 'tessa/ui/uiHost';\r\nimport { CardService, CardRequest, CardGetFileContentRequest } from 'tessa/cards/service';\r\nimport { KrToken } from 'tessa/workflow';\r\nimport { userSession } from 'common/utility';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { CdCardFlagsInfo } from '../Helpers/CdCardFlagsInfo';\r\nimport { CdProcessHelper } from '../Helpers/CdProcessHelper';\r\nimport { CdRequestTypes } from '../Helpers/CdRequestTypes';\r\nimport { CdCardHelper } from '../Helpers/CdCardHelper';\r\nimport { CdTechnicalDocumentationClientHelper } from '../Helpers/Cards/CdTechnicalDocumentationClientHelper';\r\nimport moment from 'moment';\r\nimport { CdFileTypes } from '../Helpers/CdFileTypes';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { ITessaView, Paging, TessaViewRequest, ViewPagingParameters } from 'tessa/views';\r\nimport { IViewParameters } from 'tessa/ui/views/parameters';\r\nimport { ViewReferenceMetadataSealed } from 'tessa/views/metadata';\r\nimport { PkMatrixWorkplaceHelper } from 'src/pkScripts/Views/PkMatrixWorkplaceHelper';\r\nimport { CdStaticRoles } from '../Helpers/CdStaticRoles';\r\n\r\nexport class CdCardTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n const panel = context.workspace.leftPanel;\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"CreateBasedOn\",\r\n caption: \"Создать изменение\\nили дополнение\",\r\n icon: \"ta icon-thin-077\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 20,\r\n command: CdCardTileExtensionHelper.copyBasedOnAction,\r\n evaluating: CdCardTileExtensionHelper.canCreateBasedDocumentAction\r\n }));\r\n let actionTile = new Tile({\r\n name: \"CdActions\",\r\n caption: \"Действия\",\r\n icon: \"ta icon-thin-258\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 25,\r\n command: null,\r\n evaluating: CdCardTileExtensionHelper.enableActionTile\r\n });\r\n panel.tiles.push(actionTile);\r\n actionTile.tiles.push(new Tile({\r\n name: \"AddToFavorites\",\r\n caption: \"Добавить\\nв Избранное\",\r\n icon: \"ta icon-thin-231\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 40,\r\n command: CdCardTileExtensionHelper.addToFavorites,\r\n evaluating: CdCardTileExtensionHelper.canAddToFavorites\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"AddToFavorites\",\r\n caption: \"Убрать\\nиз Избранного\",\r\n icon: \"ta icon-thin-252\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 50,\r\n command: CdCardTileExtensionHelper.removeFromFavorites,\r\n evaluating: CdCardTileExtensionHelper.canRemoveFromFavorites\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"CopyCard\",\r\n caption: \"Скопировать карточку\",\r\n icon: \"ta icon-thin-050\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: CdCardTileExtensionHelper.copyCardAction,\r\n evaluating: CdCardTileExtensionHelper.canCopyCard\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"CopyARFOWithChangeKc\",\r\n caption: \"Создание дубля карточки\\nпри обновлении версии Расчета КЦ\\n(с архивацией предыдущей карточки)\",\r\n icon: \"ta icon-thin-050\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: CdCardTileExtensionHelper.copyARFOWithChangeKc,\r\n evaluating: CdCardTileExtensionHelper.canCopyARFO\r\n }));\r\n actionTile.tiles.push(new Tile({\r\n name: \"CopyARFOWithoutChangeKc\",\r\n caption: \"Создание дубля карточки для исправления ошибок\\nбез изменения версии Расчета КЦ\\n(с архивацией предыдущей карточки)\",\r\n icon: \"ta icon-thin-050\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: CdCardTileExtensionHelper.copyARFOWithoutChangeKc,\r\n evaluating: CdCardTileExtensionHelper.canCopyARFO\r\n }));\r\n // actionTile.tiles.push(new Tile({\r\n // name: \"CdDownloadCSVReport\",\r\n // caption: \"Выгрузить сравнение РНС и РВЭ\",\r\n // icon: \"ta icon-thin-085\",\r\n // contextSource: panel.contextSource,\r\n // group: TileGroups.Cards,\r\n // order: 70,\r\n // command: CdCardTileExtensionHelper.downloadCSVReport,\r\n // evaluating: CdCardTileExtensionHelper.canDownloadCSVReport\r\n // }));\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"PkUnolockCards\",\r\n caption: \"Разблокировать\\nвыбранные карточки\",\r\n icon: \"ta icon-thin-064\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: CdCardTileExtensionHelper.unlockCards,\r\n evaluating: CdCardTileExtensionHelper.canUnlockCards\r\n }));\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"PkRegisterCards\",\r\n caption: \"Зарегистрировать\\nвыбранные карточки\",\r\n icon: \"ta icon-thin-091\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 60,\r\n command: CdCardTileExtensionHelper.registerCards,\r\n evaluating: CdCardTileExtensionHelper.canRegisterCards\r\n }));\r\n\r\n panel.tiles.push(new Tile({\r\n name: \"CdDownloadEDRegistry\",\r\n caption: \"Выгрузить реестр ИД\",\r\n icon: \"ta icon-thin-079\",\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Cards,\r\n order: 91,\r\n command: CdCardTileExtensionHelper.downloadEDRegistryAction,\r\n evaluating: CdCardTileExtensionHelper.canDownloadEDRegistry\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.PkKCKPartnerTypeID) {\r\n let createCardCopy = panel.tryGetTile('CreateCardCopy');\r\n if (createCardCopy != null) {\r\n disableWithCollapsing(createCardCopy);\r\n }\r\n let copyCardLink = panel.tryGetTile('CopyCardLink');\r\n if (copyCardLink != null) {\r\n disableWithCollapsing(copyCardLink);\r\n }\r\n let createCardTemplate = panel.tryGetTile('CreateCardTemplate');\r\n if (createCardTemplate != null) {\r\n disableWithCollapsing(createCardTemplate);\r\n }\r\n let celeteCard = panel.tryGetTile('DeleteCard');\r\n if (celeteCard != null) {\r\n disableWithCollapsing(celeteCard);\r\n }\r\n if (tryGetFromInfo(editor.cardModel.card.info, CdCardFlagsInfo.PkCanSavePartnersKckCard, false)) {\r\n let saveCard = panel.tryGetTile('SaveCard');\r\n if (saveCard != null) {\r\n disableWithCollapsing(saveCard);\r\n }\r\n }\r\n }\r\n\r\n if (typeid === CdCardTypes.PkAdditionalWorksContractOrderTypeID) {\r\n CdCardTileExtensionHelper.CheckDostroyUser();\r\n }\r\n }\r\n}\r\n\r\nexport class CdCardTileExtensionHelper {\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 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 CdCardTileExtensionHelper.isWorkingDocumentation(card) &&\r\n !CdTechnicalDocumentationClientHelper.CheckIsInvestment(card));\r\n }\r\n\r\n public static canUnlockCards(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 !== 'PkLocks'\r\n || !viewContext!.selectedRows\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(\"CardID\"), DotNetType.Guid));\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n cards.length > 0);\r\n }\r\n\r\n public static canRegisterCards(e: TileEvaluationEventArgs) {\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 && viewContext.view.metadata.alias != 'PkTechnicalDocumentation'\r\n && viewContext.view.metadata.alias != 'PkAllCard'\r\n )\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(\"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 enableActionTile(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.CanEnableActionTile(model, card)\r\n );\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 card.storeMode === CardStoreMode.Update &&\r\n (model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID &&\r\n tryGetFromInfo(model.card.info, \"CanStartExecutionProcess\", false) ||\r\n CdCardTypes.TileExecutionAcquaintanceCardTypes.indexOf(model.cardType.id) > -1));\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 card.storeMode === CardStoreMode.Update &&\r\n (model.cardType.id === CdCardTypes.TechnicalDocumentationTypeID &&\r\n tryGetFromInfo(model.card.info, \"CardStartAcquaintanceProcess\", false) ||\r\n CdCardTypes.TileExecutionAcquaintanceCardTypes.indexOf(model.cardType.id) > -1));\r\n }\r\n\r\n public static canAddToFavorites(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, \"CanAddToFavorites\", false) &&\r\n !tryGetFromInfo(model.card.info, \"DocumentIsInFavorites\", false));\r\n }\r\n\r\n public static canRemoveFromFavorites(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, \"CanAddToFavorites\", false) &&\r\n tryGetFromInfo(model.card.info, \"DocumentIsInFavorites\", false));\r\n }\r\n\r\n public static canCopyCard(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, \"CanCopyCard\", false)\r\n ||\r\n (model.cardType.id === CdCardTypes.PkProtocolTenderTypeID || model.cardType.id === CdCardTypes.PkWorkOrderTypeID) ||\r\n tryGetFromInfo(model.card.info, \"CanCopyChCard\", false)\r\n )\r\n );\r\n }\r\n \r\n\r\n public static _isDostroyUser: boolean = false;\r\n \r\n static CheckDostroyUser() {\r\n PkMatrixWorkplaceHelper.CheckUserInRoleAsync(CdStaticRoles.УправлениеДострояИВосстановления).then((res) => {\r\n CdCardTileExtensionHelper._isDostroyUser = res;\r\n });\r\n \r\n}\r\n\r\n public static canCopyARFO(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model;\r\n let card;\r\n let visible = false;\r\n\r\n if (editor != null && (model = editor.cardModel) != null && (card = model.card) != null &&\r\n card.storeMode === CardStoreMode.Update &&\r\n model.cardType.id === CdCardTypes.PkAdditionalWorksContractOrderTypeID\r\n && card.sections.tryGet('PkDocumentCommonInfo') != null\r\n && card.sections.tryGet('PkDocumentCommonInfo').fields.tryGet(\"StateName\") == \"Согласовано\") {\r\n\r\n visible = true;\r\n\r\n // TES-10760 Блокировать возможность создания дублей для маршруту Управления Достроя\r\n if ( card.sections.tryGet('PkAdditionalWorksContractOrder') != null && card.sections.tryGet('PkAdditionalWorksContractOrder').fields.tryGet(\"IsExploitationID\") == 2) {\r\n visible = CdCardTileExtensionHelper._isDostroyUser;\r\n }\r\n }\r\n e.setIsEnabledWithCollapsing(e.currentTile, visible);\r\n \r\n //\r\n CdCardTileExtensionHelper.CheckDostroyUser();\r\n }\r\n \r\n\r\n // public static canDownloadCSVReport(e: TileEvaluationEventArgs) {\r\n // let visible = false;\r\n // let viewContext = e.currentTile.context.viewContext;\r\n // if (viewContext != null && viewContext.any()\r\n // && viewContext.view != null && viewContext.workplace != null && viewContext.workplace.currentItem != null)\r\n // {\r\n // var 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\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 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 /** Разблокировать выбранные карточки в папке поддержки для рм админ. */\r\n public static unlockCards() {\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(\"CardID\"), DotNetType.Guid));\r\n\r\n const contractRequest = new CardRequest();\r\n contractRequest.requestType = CdRequestTypes.UnlockCards;\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 registerCards() {\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 = CdRequestTypes.RegisterCards;\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 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 addToFavorites() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n const session = userSession;\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 request = new CardRequest();\r\n\r\n request.requestType = CdRequestTypes.AddDocumentToFavorites;\r\n\r\n request.info[\"DocumentID\"] = createTypedField(model.card.id, DotNetType.Guid);\r\n request.info[\"UserID\"] = createTypedField(session.UserID, 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 return;\r\n }\r\n\r\n if (!tryGetFromInfo(response.info, \"DocumentIsInFavorites\", false)) {\r\n await showError(\"Не удалось добавить документ в Избранное\");\r\n }\r\n else {\r\n await showMessage(\"Документ добавлен в Избранное\");\r\n model.card.info[\"DocumentIsInFavorites\"] = createTypedField(true, DotNetType.Boolean);\r\n }\r\n }\r\n\r\n public static async removeFromFavorites() {\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n let model;\r\n const session = userSession;\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 request = new CardRequest();\r\n\r\n request.requestType = CdRequestTypes.RemoveDocumentFromFavorites;\r\n\r\n request.info[\"DocumentID\"] = createTypedField(model.card.id, DotNetType.Guid);\r\n request.info[\"UserID\"] = createTypedField(session.UserID, 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 return;\r\n }\r\n\r\n if (tryGetFromInfo(response.info, \"DocumentIsInFavorites\", null) == null) {\r\n await showError(\"Не удалось удалить документ из Избранного\");\r\n }\r\n else {\r\n await showMessage(\"Документ удален из Избранного\");\r\n model.card.info[\"DocumentIsInFavorites\"] = createTypedField(false, DotNetType.Boolean);\r\n }\r\n }\r\n\r\n public static 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 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 public static async copyARFOWithChangeKc() {\r\n await CdCardTileExtensionHelper.copyARFOCardAsync(true);\r\n }\r\n\r\n public static async copyARFOWithoutChangeKc() {\r\n await CdCardTileExtensionHelper.copyARFOCardAsync(false);\r\n }\r\n\r\n public static async copyARFOCardAsync(withChangeKcMode: boolean) {\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 (!await showConfirm(withChangeKcMode ? \"Создание дубля карточки при обновлении версии Расчета КЦ (с архивацией предыдущей карточки) предполагает внесение новой версии Расчета КЦ (обновление стоимости работ), проверку/корректировку блока РВР перед отправкой карточки на согласование (суммы по видам работ, распределение сумм по виновным). Продложть?\" : \"Создание дубля карточки для исправления ошибок без изменения версии Расчета КЦ (с архивацией предыдущей карточки) предполагает проверку/корректировку блока РВР перед отправкой карточки на согласование (суммы по видам работ, распределение сумм по виновным) без внесения новой версии Расчета КЦ. Продложть?\", \"Подтверждение\")) {\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(true, DotNetType.Boolean);\r\n requestInfo['BasedOn'] = createTypedField(true, DotNetType.Boolean);\r\n requestInfo['AllowChangeKc'] = createTypedField(withChangeKcMode, DotNetType.Boolean);\r\n\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 // public static async downloadCSVReport()\r\n // {\r\n // let tile = (ITile)parameter;\r\n // let viewContext = tile.Context.ViewContext;\r\n // if (viewContext == null)\r\n // return;\r\n\r\n // Guid userID = Guid.Empty;\r\n\r\n // if (tile.Name == \"CdDownloadCSVReport\")\r\n // {\r\n // if (viewContext.Data.Any())\r\n // { \r\n // userID = session.User.ID;\r\n // }\r\n // }\r\n\r\n // if (userID != Guid.Empty)\r\n // {\r\n // CardResponse response;\r\n // SaveFileDialog saveFileDialog = new SaveFileDialog();\r\n // saveFileDialog.Filter = \"csv files (*.csv)|*.csv\";\r\n // saveFileDialog.FilterIndex = 1;\r\n // saveFileDialog.RestoreDirectory = true;\r\n\r\n // if (saveFileDialog.ShowDialog() == DialogResult.OK)\r\n // {\r\n\r\n // using (TessaSplash.Create(\"Выгружаются данные\"))\r\n // {\r\n\r\n // let request = new CardRequest { RequestType = CdRequestTypes.GetCSVReport, Info = { { \"UserID\", userID } } };\r\n // let response = cardRepository.Request(request);\r\n // TessaDialog.ShowNotEmpty(response.ValidationResult);\r\n // }\r\n\r\n // string error = null;\r\n // var fileInf = response.Info.TryGet(\"Report\");\r\n // string completedFile = string.Empty;\r\n // string fileName = string.Empty;\r\n\r\n // try\r\n // {\r\n // fileName = saveFileDialog.FileName;\r\n // if (File.Exists(fileName))\r\n // {\r\n // File.Delete(fileName);\r\n // }\r\n\r\n // File.WriteAllBytes(fileName, Convert.FromBase64String(fileInf));\r\n\r\n // TessaDialog.ShowMessage(string.Format(\"Файл {0} сохранен\", fileName), \"Уведомление\");\r\n // }\r\n // catch (Exception e)\r\n // {\r\n // error += fileName + Environment.NewLine + e.ToString();\r\n // }\r\n\r\n // if (!string.IsNullOrEmpty(error))\r\n // {\r\n // TessaDialog.ShowError($\"Произошла ошибка при сохранении файла:{error}\");\r\n // }\r\n // }\r\n // }\r\n // }\r\n\r\n public static canDownloadEDRegistry(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 let item = viewContext.workplace.currentItem;\r\n while (item.parent != null && item.parent.parent != null) {\r\n if (item.text === \"Исполнительная документация\") {\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 downloadEDRegistryAction() {\r\n\r\n await showLoadingOverlay(async () => {\r\n\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 let formattedDate = (moment(new Date())).format('DD-MM-YYYYs HH-mm-ss')\r\n let fileName = \"Реестр ИД (\" + formattedDate + \").html\";\r\n\r\n // Список ИД всех строк в представлении\r\n const cardIDs = await CdCardTileExtensionHelper.GetAllViewIdsAsync(viewContext.view, viewContext.parameters);\r\n\r\n if (cardIDs === null || cardIDs.length === 0) {\r\n return;\r\n }\r\n\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = CdFileTypes.GetExecutiveDocumentationRegistryFile;\r\n\r\n let info = {\r\n 'cardIDs': cardIDs\r\n };\r\n getFileContentRequest.info = info;\r\n\r\n const cardGetFileContentResponse = await CardService.instance.getFileContent(getFileContentRequest);\r\n\r\n if (!cardGetFileContentResponse.validationResult.isSuccessful) {\r\n throw new Error('Ошибка при получении файла реестра ИД: ' + cardGetFileContentResponse.validationResult.build().toString());\r\n }\r\n\r\n if (cardGetFileContentResponse.content == null ||\r\n cardGetFileContentResponse.size === 0) {\r\n throw new Error('Ошибка при получении файла реестра ИД. Вернулся пустой файл.');\r\n }\r\n\r\n PkCommonHelper.SaveFileContent(fileName, cardGetFileContentResponse.content);\r\n\r\n }, \"Формирование файла \\\"Реестр ИД\\\"\");\r\n }\r\n\r\n private static async GetAllViewIdsAsync(view: ITessaView, parameters: IViewParameters): Promise[] | null> {\r\n let viewRequest = new TessaViewRequest(view.metadata);\r\n viewRequest.calculateRowCounting = false;\r\n\r\n // добавим параметры фильтрации, если они использовались\r\n if (parameters.parameters.length > 0) {\r\n parameters.parameters.forEach(e => {\r\n viewRequest.values.push(e);\r\n });\r\n }\r\n\r\n const references: ViewReferenceMetadataSealed[] = [];\r\n view.metadata.references.forEach(x => references.push(x));\r\n let entryPrefix = references[0].colPrefix;\r\n let currentPage = 1;\r\n let entryIdIndex = -1;\r\n let pageLimit = 10001;\r\n\r\n const viewPagingParameters = new ViewPagingParameters();\r\n viewPagingParameters.providePageLimitParameter(viewRequest.values, Paging.Always, pageLimit, false);\r\n viewPagingParameters.providePageOffsetParameter(viewRequest.values, Paging.Always, currentPage++, pageLimit, false);\r\n\r\n const viewResult = await view.getData(viewRequest);\r\n if (viewResult.rows.length === 0) {\r\n return null;\r\n }\r\n\r\n if (viewResult.rows.length > 10000) {\r\n await showError(\"Для исключения зависания программы укажите не более 10000 карточек.\");\r\n return null;\r\n }\r\n\r\n if (entryIdIndex < 0) {\r\n entryIdIndex = viewResult.columns.indexOf(entryPrefix + 'ID');\r\n\r\n if (entryIdIndex < 0) {\r\n return null;\r\n }\r\n }\r\n\r\n let docIDs: TypedField[] = new Array;\r\n for (let rowValue of viewResult.rows) {\r\n const row = rowValue as any[];\r\n const id = createTypedField(row[0], DotNetType.Guid);\r\n docIDs.push(id);\r\n }\r\n\r\n if (docIDs.length === 0) {\r\n return null;\r\n }\r\n\r\n return docIDs;\r\n }\r\n\r\n}","import { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport {\r\n TileExtension, ITileLocalExtensionContext,\r\n disableWithCollapsing\r\n} from 'tessa/ui/tiles';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\n\r\n\r\nexport class CdDisableCardCreateCopyTileExtension extends TileExtension {\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 != null) {\r\n\r\n // TES-12348 Исключение блоков стройки из Тессы. Для исключенных типов карточек все опреации недоступны\r\n if (typeid == CdCardTypes.PkZosRvDocumentypeID /* TES-12237 */\r\n || typeid == CdCardTypes.PkGlazingOrderTypeID /* TES-12238 */\r\n || typeid == CdCardTypes.IrdDocumentTypeID /* TES-12295 */\r\n || typeid == CdCardTypes.ArDocumentIdpTypeID /* TES-12239 */\r\n || typeid == CdCardTypes.PkAdditionalWorksContractOrderTypeID \t// TES-12241 Отключение АРФО\r\n || typeid == PkCardTypes.PkProtocolTypeID \t\t\t\t \t// TES-12243 Отключение Протоколов\r\n || typeid == CdCardTypes.PkRequestForMaterialsTypeID \t\t\t\t// TES-12240 Отключение Заявок на материалы\r\n || typeid == CdCardTypes.PkExecutiveDocumentationTypeID \t\t\t// TES-12553 Отключение ИД\r\n || typeid == CdCardTypes.PkExecutiveSchemeTypeID \t\t\t\t\t// TES-12554 Отключение ИС\r\n // || typeid == CdCardTypes.TechnicalDocumentationTypeID \t\t\t// TES-12555 Отключение ТД \r\n \r\n ) {\r\n panel.tiles.forEach((tile) => {\r\n disableWithCollapsing(tile);\r\n });\r\n return;\r\n }\r\n\r\n if ((CdCardTypes.CopyTileCardTypes.indexOf(typeid) > -1 || PkCardTypes.CopyTileCardTypes.indexOf(typeid) > -1)) {\r\n const otherTile = panel.tryGetTile('CardOthers');\r\n if (otherTile != null) {\r\n let createCardCopy = otherTile.tryGetTile('CreateCardCopy');\r\n if (createCardCopy != null) {\r\n disableWithCollapsing(createCardCopy);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n}","import { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { TileExtension, ITileLocalExtensionContext, disableWithCollapsing} from 'tessa/ui/tiles';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\n\r\n\r\nexport class CdDisableCreateFileFromTemplateTileExtension extends TileExtension {\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 != null &&\r\n (CdCardTypes.CopyTileCardTypes.indexOf(typeid) > -1 ||\r\n PkCardTypes.CopyTileCardTypes.indexOf(typeid) > -1)) {\r\n const createFileFromTemplateTile = panel.tryGetTile('CreateFileFromTemplate');\r\n if (createFileFromTemplateTile != null) {\r\n disableWithCollapsing(createFileFromTemplateTile);\r\n }\r\n }\r\n }\r\n\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { CdCardTileExtension } from './CdCardTileExtension';\r\nimport { CdDisableCardCreateCopyTileExtension } from './CdDisableCardCreateCopyTileExtension';\r\nimport { CdDisableCreateFileFromTemplateTileExtension } from './CdDisableCardCreateCopyTileExtension copy';\r\n\r\nExtensionContainer.instance.registerExtension({extension: CdCardTileExtension, stage: ExtensionStage.AfterPlatform, order: 1});\r\nExtensionContainer.instance.registerExtension({extension: CdDisableCardCreateCopyTileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdDisableCreateFileFromTemplateTileExtension, stage: ExtensionStage.AfterPlatform});","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdUIHelper } from '../CdUIHelper';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { showError } from 'tessa/ui';\r\n\r\nexport class CdDocumentIDPUIExtension extends CardUIExtension {\r\n\r\n private _disposerPartner: Function | null = null;\r\n private _disposerObjects: 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, CdCardTypes.ArDocumentIdpTypeID)) {\r\n return;\r\n }\r\n\r\n // TODO кажется это что то лишнее\r\n // // Таблица \"Контрагенты\"\r\n // ArUIHelper.InitializeTablePartners(context, _disposer);\r\n\r\n // Заполнение виртуальных полей (Дата договора, таблицы: Объекты, Контрагенты)\r\n CdUIHelper.FillingUpVirtualInfoArDocumentIDP(context);\r\n\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n\r\n // Заполнение Веха БОП\r\n CdUIHelper.FillingUpVehaBOP(context);\r\n\r\n // let partnersTableAlias = \"DocumentsIDPPartners\";\r\n // const partnersGrid = context.model.controls.get(partnersTableAlias) as GridViewModel;\r\n // if (partnersGrid != null) {\r\n // this._disposerPartner = reaction(() => partnersGrid.selectedRow, row => {\r\n // if (row == null) return;\r\n // let isVirtual = row.row.tryGet(\"IsVirtual\", false);\r\n // if (isVirtual) {\r\n // context.model.card.permissions.sections.getOrAdd(\"ArDocumentsIDPPartners\").setSectionPermissions(CardPermissionFlags.ProhibitDeleteRow);\r\n // }\r\n // else {\r\n // context.model.card.permissions.sections.getOrAdd(\"ArDocumentsIDPPartners\").setSectionPermissions(CardPermissionFlags.AllowDeleteRow);\r\n // }\r\n // });\r\n // }\r\n\r\n // let objectsTableAlias = \"Objects\";\r\n // const objectsGrid = context.model.controls.get(objectsTableAlias) as GridViewModel;\r\n // if (objectsGrid != null) {\r\n // this._disposerObjects = reaction(() => objectsGrid.selectedRow, row => {\r\n // if (row == null) return;\r\n // let isVirtual = row.row.tryGet(\"IsVirtual\", false);\r\n // if (isVirtual) {\r\n // context.model.card.permissions.sections.getOrAdd(\"PkObjectList\").setSectionPermissions(CardPermissionFlags.ProhibitDeleteRow);\r\n // }\r\n // else {\r\n // context.model.card.permissions.sections.getOrAdd(\"PkObjectList\").setSectionPermissions(CardPermissionFlags.AllowDeleteRow);\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 if (!Guid.equals(context.model.card.typeId, CdCardTypes.ArDocumentIdpTypeID)) {\r\n return;\r\n }\r\n const dciSection = context.model.card.sections.tryGet('DocumentCommonInfo');\r\n if (dciSection == null) return;\r\n\r\n let fullNumber = dciSection.fields.get(\"FullNumber\");\r\n if (fullNumber == null) {\r\n await showError(\"Поле \\\"Номер\\\" обязательно для заполнения.\");\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n let subject = dciSection.fields.get(\"Subject\");\r\n if (!subject) {\r\n await showError(\"Поле \\\"Наименование\\\" обязательно для заполнения.\");\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n \r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposerPartner) {\r\n this._disposerPartner();\r\n this._disposerPartner = null;\r\n }\r\n\r\n if (this._disposerObjects) {\r\n this._disposerObjects();\r\n this._disposerObjects = null;\r\n }\r\n}\r\n\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdGeneralDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdTechnicalDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdTechnicalDocumentationClientHelper';\r\nimport { Card, CardSection } from 'tessa/cards';\r\nimport { CdUIHelper } from '../CdUIHelper';\r\nimport { CdRdStages } from 'src/cdScripts/Helpers/CdRdStages';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { CdDocStates } from 'src/cdScripts/Helpers/CdDocStates';\r\n\r\nexport class CdTechnicalDocumentationUIExtension 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, CdCardTypes.TechnicalDocumentationTypeID)) {\r\n return;\r\n }\r\n\r\n CdTechnicalDocumentationClientHelper.AvailableAndClearFields(context);\r\n CdTechnicalDocumentationClientHelper.ReferenceTableLogic(context, this._disposer);\r\n CdTechnicalDocumentationClientHelper.TechDocPagesTableLogic(context, this._disposerSelectRow);\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, CdCardTypes.TechnicalDocumentationTypeID)) {\r\n return;\r\n }\r\n if (await CdUIHelper.CheckCount(context) == false) {\r\n context.cancel = true;\r\n }\r\n if (await !CdGeneralDocumentationClientHelper.CheckEditSignedFile(card)) {\r\n context.cancel = true;\r\n return;\r\n }\r\n // TES-11902 Проверка обязательности поля \"Подраздел РД\"\r\n this.CheckRdSubdivisionMandatory(context);\r\n }\r\n\r\n public CheckRdSubdivisionMandatory(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\r\n if (!pdciSection || !rdSection) return;\r\n let stageID: number | undefined = pdciSection.fields.tryGet('StageID');\r\n let stateID: number | undefined = pdciSection.fields.tryGet('StateID');\r\n let rdSubdivisionID = rdSection.fields.tryGet('RdSubdivisionID');\r\n\r\n let isSubdivisionRequired: boolean = (stateID === CdDocStates.Project.id && stageID === CdRdStages.WorkingDocumentation && (!rdSubdivisionID || rdSubdivisionID === null) );\r\n\r\n if (isSubdivisionRequired) {\r\n context.validationResult.add(ValidationResultType.Error, \"\\\"Подраздел РД\\\" обязателен для заполнения.\");\r\n }\r\n\r\n let control = model.controls.get(\"RdSubdivisionControl\");\r\n if (control != null)\r\n control.isRequired = isSubdivisionRequired;\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\nexport class CdExecutiveDocumentationKinds {\r\n // Акт освидетельствования скрытых работ\r\n public static ActOfExaminationOfHiddenWorks: guid = 'f226620d-6c47-4df4-91a0-14a0d8cbdebf';\r\n // Акт освидетельствования ответственных конструкций\r\n public static ActOfExaminationOfResponsibleStructures : guid = '88a8dc10-3e0b-4cb0-863e-4f05f4d5a27b';\r\n // Акт промежуточного освидетельствования ответственных конструкций\r\n public static ActOfIntermediateExaminationOfResponsibleStructures : guid = 'bd34678c-d265-4681-8ffe-c10feceffd2d';\r\n\r\n}","import { CdDocStates } from \"../CdDocStates\";\r\nimport { CardSection, Card } from \"tessa/cards\";\r\nimport { CdFdTaskTypes } from \"../CdFdTaskTypes\"\r\n\r\nexport declare class Role {\r\n IntID: number;\r\n GuidID: guid;\r\n\r\n};\r\n\r\nexport class CdExecutiveDocumentationSharedHelper {\r\n static ApproverTaskStoreInfo =\r\n {\r\n TaskSignTypesList: [CdFdTaskTypes.PkSignExecutiveDocumentationAgreementTypeID\r\n , CdFdTaskTypes.PkSignExecutiveDocumentationAgreementWithAgreementorTypeID\r\n , CdFdTaskTypes.PkSignExecutiveDocumentationCoordinationAuthorSupervisionTypeID]\r\n }\r\n\r\n\r\n public static GetRoles() {\r\n let roles: { GuidID: guid, IntID: number, DefaultOrder: number }[] = [];\r\n roles.push({ IntID: 1, GuidID: '3c70cb9c-b30a-4d97-aa7e-6d1727ba3acf', DefaultOrder: 0 }); // Представитель лица, выполнившего работы, подлежащие освидетельствованию\r\n roles.push({ IntID: 2, GuidID: '64438fd3-6ca4-4896-88df-82a31f3f66d8', DefaultOrder: 1 }); // Представитель лица, осуществляющего строительство\r\n roles.push({ IntID: 3, GuidID: 'd690d0ae-20c8-424d-8899-f6d1bf055c56', DefaultOrder: 2 }); // Представитель лица, осуществляющего строительство, по вопросам строительного контроля (специалист по организации строительства)\r\n roles.push({ IntID: 4, GuidID: 'b29d7703-fd65-42bd-a561-004932065094', DefaultOrder: 5 }); // Представитель лица, осуществляющего подготовку проектной документации\r\n roles.push({ IntID: 5, GuidID: '08d227fa-4146-428f-9b23-b6f5714bbe26', DefaultOrder: 3 }); // Представитель застройщика (технического заказчика, эксплуатирующей организации или регионального оператора) по вопросам строительного контроля\r\n roles.push({ IntID: 6, GuidID: '7a31979d-70f5-4079-8a2f-e5ee13d8ea51', DefaultOrder: 6 }); // Представители иных лиц (эксплуатирующая организация)\r\n roles.push({ IntID: 7, GuidID: '35a9c17c-fd84-4510-a779-d854bf84a291', DefaultOrder: 7 }); // Инженер ПТО \r\n roles.push({ IntID: 9, GuidID: '35a9c17c-fd84-4510-a779-d854bf84a291', DefaultOrder: 8 }), // Представитель застройщика \r\n roles.push({ IntID: 8, GuidID: '35a9c17c-fd84-4510-a779-d854bf84a291', DefaultOrder: 4 }); // Инженер авторского надзора \r\n return roles;\r\n }\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 if (docState === CdDocStates.OnApprovalASEngeneer.id)\r\n return 8;\r\n else {\r\n return -1;\r\n }\r\n }\r\n\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","export class RequestRoleTypes {\r\n /** Инженер ПТО */\r\n public static PTOEngineer = 7;\r\n\r\n /** Инженер АН */\r\n public static ASEngineer = 8;\r\n}","export class WorkTypes {\r\n static Journal = '1ae04722-cc3d-44e5-a672-cdf720f6f3c8';\r\n}\r\n\r\nexport class EdKinds {\r\n static Journal = 'af03306e-6781-46c6-825d-28147c0712a5';\r\n}\r\n\r\n/* ЖК */\r\nexport class ResidentalComplexes {\r\n /* Holland Park */\r\n static HollandPark = '1372f972-e4c8-4fb5-9ead-2b0506ca99ed';\r\n}","export class ItdStates {\r\n public static DRAFT: ItdState = {Id: 0, Name: \"Не передано\", ExtName: \"DRAFT\"};\r\n public static REVIEW: ItdState = {Id: 1, Name: \"На согласовании\", ExtName: \"REVIEW\"};\r\n public static VERIFIED: ItdState = {Id: 2, Name: \"Согласовано\", ExtName: \"VERIFIED\"};\r\n public static REMARKS: ItdState = {Id: 3, Name: \"Получены замечания\", ExtName: \"REMARKS\"};\r\n public static SIGN: ItdState = {Id: 4, Name: \"Документ на подписании\", ExtName: \"SIGN\"};\r\n public static APPROVED: ItdState = {Id: 5, Name: \"Подписан\", ExtName: \"APPROVED\"};\r\n}\r\nexport class ItdDocumentStates {\r\n public static ON_APPROVAL: ItdState = {Id: 0, Name: \"На согласовании\", ExtName: \"ON_APPROVAL\"};\r\n public static CANCELED: ItdState = {Id: 1, Name: \"Аннулирован\", ExtName: \"CANCELED\"};\r\n public static NEW: ItdState = {Id: 2, Name: \"Новый\", ExtName: \"NEW\"};\r\n public static REVISION: ItdState = {Id: 3, Name: \"На доработке\", ExtName: \"REVISION\"};\r\n public static SIGNED: ItdState = {Id: 4, Name: \"Подписан\", ExtName: \"SIGNED\"};\r\n}\r\n\r\nexport interface ItdState { \r\n Id: number\r\n Name: string\r\n ExtName: string\r\n}","import { Card, CardSection, CardFile, CardFileState, CardRow, CardRowState, CardGetMode, CardTask } from \"tessa/cards\";\r\nimport { IControlViewModel, ICardModel, ICardEditorModel, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { DotNetType, createTypedField, Visibility, Guid, DbType, TypedField } from \"tessa/platform\";\r\nimport { ButtonViewModel, GridViewModel, GridRowAction, CheckBoxViewModel, TextBoxViewModel } from \"tessa/ui/cards/controls\";\r\nimport { UIContext, IUIContext, showNotEmpty, showError, LoadingOverlay } from \"tessa/ui\";\r\nimport { CdFdTaskTypes } from \"../CdFdTaskTypes\";\r\nimport { IStorage, ArrayStorage } from \"tessa/platform/storage\";\r\nimport { CardRequest, CardService, CardGetRequest, CardGetFileContentRequest } from \"tessa/cards/service\";\r\nimport { CdRequestTypes } from \"../CdRequestTypes\";\r\nimport { IFile } from \"tessa/files\";\r\nimport { CdFileTypes } from \"../CdFileTypes\";\r\nimport { CdUIHelper } from \"../../UI/CdUIHelper\";\r\nimport { ChFileCategories } from \"src/pkScripts/Helpers/ChFileCategories\";\r\nimport { CdDocStates } from \"../CdDocStates\";\r\nimport { CdExecutiveDocumentationKinds } from \"../CdExecutiveDocumentationKinds\";\r\nimport { CdExtensionHelper } from \"../CdExtensionHelper\";\r\nimport { CdTaskTypes } from \"../CdTaskTypes\";\r\nimport { CdFdProcessHelper } from \"../CdFdProcessHelper\";\r\nimport { ValidationResultType } from \"tessa/platform/validation\";\r\nimport { ApproversRoleID } from \"../Dictionaries/ApproversRoleID\";\r\nimport { CdExecutiveDocumentationSharedHelper } from \"./CdExecutiveDocumentationSharedHelper\";\r\nimport { PkRequestTypes } from \"src/pkScripts/Helpers/PkRequestTypes\";\r\nimport { RequestRoleTypes } from \"../Dictionaries/RequestRoleTypes\";\r\nimport { number } from \"prop-types\";\r\nimport { CdGeneralDocumentationClientHelper, InvalidApprovers, RoleApprovers, FillMatching, Objects } from './CdGeneralDocumentationClientHelper';\r\nimport { EdKinds, ResidentalComplexes } from \"../CdEdTypes\";\r\nimport { ItdDocumentStates } from \"../Dictionaries/ItdStates\";\r\nimport { openCard, showViewsDialog } from \"tessa/ui/uiHost\";\r\nimport { equalsCriteriaOperator, isFalseCriteriaOperator, ViewParameterMetadata } from \"tessa/views/metadata\";\r\nimport { RequestParameterBuilder } from \"tessa/views\";\r\nimport { CdCommonHelper } from \"../CdCommonHelper\";\r\nimport { isNullOrUndefined } from \"util\";\r\nimport { ChContextRoles } from \"src/pkScripts/Helpers/ChContextRoles\";\r\n\r\nlet ruleForWriteSROInfo = [{ RoleID: -1, SpecNumber: false, SRODate: false, SRONumber: false }];\r\n\r\n\r\nexport class CdExecutiveDocumentationClientHelper extends CdGeneralDocumentationClientHelper {\r\n\r\n /** Логика кнопок */\r\n public static ButtonLogic(card: Card, model: ICardModel) {\r\n this.FileTemplateButtonLogic(card, model);\r\n this.FileForPrintButtonLogic(card, model);\r\n }\r\n\r\n /** Проверка после завершении задания */\r\n public static async CheckFieldsAfterTaskComplete(context: ICardUIExtensionContext, tasks: ArrayStorage) {\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);\r\n let checkAddNewMatchingRoles: boolean = this.CheckAddNewMatchingRoles(context, 'PkExecutiveDocumentationMatching', 'PkExecutiveDocumentationRoles');\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 (x.typeId === CdFdTaskTypes.PkExecutiveDocumentationInitializingTypeID.toLowerCase() ||\r\n x.typeId === CdFdTaskTypes.PkExecutiveDocumentationToReworkTypeID.toLowerCase()) &&\r\n (x.optionId === CdFdProcessHelper.SendForResubscription.toLowerCase() ||\r\n x.optionId === CdFdProcessHelper.ForApproval.toLowerCase()));\r\n let deletedArchiveTaskIndex = tasks.findIndex(x =>\r\n x.state === CardRowState.Deleted &&\r\n x.typeId === CdFdTaskTypes.PkFdInArchiveTypeID.toLowerCase() &&\r\n x.optionId === CdFdProcessHelper.ToArchive.toLowerCase());\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);\r\n\r\n if (!checkContentFile) {\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n let roles = CdExecutiveDocumentationSharedHelper.GetRoles().map(x => x.IntID);\r\n roles.push(RequestRoleTypes.PTOEngineer);\r\n roles.push(RequestRoleTypes.ASEngineer);\r\n\r\n var approvers = await this.GetApproversEd(context.model.card, roles);\r\n if (approvers!.length > 0) {\r\n let invalidApprovers = await this.GetInvalidApprovers(context.model.card, approvers, 'PkExecutiveDocumentationMatching', 'PkExecutiveDocumentationRoles');\r\n if (invalidApprovers!.length > 0) {\r\n let result = await this.ConfirmApproversChangesDialog(invalidApprovers as InvalidApprovers[])\r\n if (result == undefined) {\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 , 'PkExecutiveDocumentationMatching', 'PkExecutiveDocumentationRoles')\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\r\n } else if (deletedArchiveTaskIndex >= 0) {\r\n let edmSection = context.model.card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n if (edmSection) {\r\n let cnmRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Contractor &&\r\n x.has('LegalEntityID') &&\r\n x.tryGet('LegalEntityID') !== null &&\r\n x.tryGet('LegalEntityID') !== undefined &&\r\n x.tryGet('LegalEntityID') !== '00000000-0000-0000-0000-000000000000');\r\n if (!cnmRow) {\r\n let orgnzForFill = '';\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Contractor);\r\n if (roleNameRow) {\r\n orgnzForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить юридическое лицо:' + orgnzForFill);\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // TES-8694 проверка подписания файлов в категории Паспорта и сертификаты\r\n // Статус: На подписании Подрядчика; Тип задачи: Подписание​ ИД; Вариант завершения: Подписать\r\n if (context.card.tasks.some(x => x.typeId == CdFdTaskTypes.PkSignExecutiveDocumentationAgreementWithAgreementorTypeID && x.optionId == CdFdProcessHelper.Sign)) {\r\n let dciSection: CardSection | undefined = context.card.sections.tryGet('PkDocumentCommonInfo');\r\n let stateID: number | undefined = dciSection?.fields.tryGet('StateID');\r\n if (stateID && stateID == CdDocStates.OnSigningContractor.id) {\r\n if (!await this.CheckPassportsAndCertificatessSignaturesAsync(context.model.card)) {\r\n context.validationResult.add(\r\n ValidationResultType.Error,\r\n 'Необходимо подписать все файлы в категории \\\"' + ChFileCategories.PassportsAndCertificates.caption + '\\\". Файлы должны быть подписаны сотрудником в роли \\\"Автор документа\\\" или \\\"Подрядчик\\\".');\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n //return;\r\n await this.SignFilesAsync(context, tasks, CdExecutiveDocumentationSharedHelper.ApproverTaskStoreInfo.TaskSignTypesList);\r\n }\r\n\r\n public static async CheckPassportsAndCertificatessSignaturesAsync(card: Card) {\r\n\r\n const contextRoleIDs: TypedField[] = [];\r\n contextRoleIDs.push(createTypedField(ChContextRoles.AuthorId, DotNetType.Guid));\r\n contextRoleIDs.push(createTypedField(ChContextRoles.Contractor, DotNetType.Guid));\r\n\r\n const fileVersionIDs: TypedField[] = [];\r\n \r\n const files = card.files.filter(f => f.categoryId === ChFileCategories.PassportsAndCertificates.id)\r\n for (const file of files) {\r\n fileVersionIDs.push(createTypedField(file.lastVersion?.rowId, DotNetType.Guid));\r\n }\r\n \r\n const checkRequest = new CardRequest();\r\n checkRequest.requestType = CdRequestTypes.CdCheckFileSignaturesBySignerRoles;\r\n checkRequest.info[\"CardID\"] = createTypedField(card?.id, DotNetType.Guid);\r\n checkRequest.info[\"FileVersionIDs\"] = fileVersionIDs;\r\n checkRequest.info[\"SignerInContextRoleIDs\"] = contextRoleIDs;\r\n\r\n const response = await CardService.instance.request(checkRequest);\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.Result.$value;\r\n return res;\r\n }\r\n\r\n public static AddApproverEdFieldChanged(row: CardRow, model: ICardModel, edmSection: CardSection) {\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, 'PkExecutiveDocumentationMatching');\r\n if (row.has('RoleKCKExternalID') &&\r\n row.tryGet('RoleKCKExternalID') !== null &&\r\n edmSection) {\r\n let edmRow = edmSection.rows.find(x => matchingRowID !== null && matchingRowID !== undefined && x.rowId.toLowerCase() === matchingRowID.$value.toLowerCase());\r\n let extID: number | null = row.tryGet('RoleKCKExternalID');\r\n if (extID && edmRow) this.FillSROInfo(edmRow, extID);\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n /** Заполнение юридического лица в ТЧ #25698 */\r\n public static FillLegalEntity(model: ICardModel) {\r\n\r\n let edrSection = model.card.sections.tryGet('PkExecutiveDocumentationRoles');\r\n let edmSection = model.card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n if (!edrSection || !edmSection) return;\r\n\r\n edrSection.rows.forEach(r => {\r\n this.AddApproverEdFieldChanged(r, model, edmSection!);\r\n });\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.AddApproverEdFieldChanged(row, model, edmSection!);\r\n }\r\n });\r\n\r\n let matchingControlViewModel: IControlViewModel | undefined = model.controls.get('Matching');\r\n if (matchingControlViewModel) {\r\n let controlViewModel = matchingControlViewModel as GridViewModel | null;\r\n if (controlViewModel) {\r\n controlViewModel.rowInitializing.add(e => {\r\n e.row.fieldChanged.add(async e1 => {\r\n if (e1.fieldName === 'LegalEntityExternalID') {\r\n let row = e.row;\r\n if (row.has('OrderSRONumber')) row.set('OrderSRONumber', createTypedField(null, DotNetType.String));\r\n if (row.has('OrderSRODate')) row.set('OrderSRODate', createTypedField(null, DotNetType.DateTime));\r\n\r\n if (row.has('LegalEntityExternalID') &&\r\n row.tryGet('LegalEntityExternalID') !== null) {\r\n await this.FillSROInfo(row, row.tryGet('LegalEntityExternalID'));\r\n }\r\n }\r\n });\r\n });\r\n\r\n controlViewModel.rowValidating.add(e => {\r\n let matchingRowID = e.row.rowId;\r\n let section = model.card.sections.get(\"PkExecutiveDocumentationRoles\")!;\r\n\r\n if (!section || !matchingRowID) {\r\n return;\r\n }\r\n\r\n let cardRow = new CardRow();\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 this.FillLegalEntityField(cardRow ?? new CardRow(), model.card, matchingRowID, \"PkExecutiveDocumentationMatching\");\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Заполнить согласующих в ТЧ #22449\r\n public static FillApproversLogic(context: ICardUIExtensionContext) {\r\n const objects = context.model.controls.get('Objects') as GridViewModel;\r\n if (!objects) return;\r\n let card: Card = context.model.card;\r\n let objSection: CardSection | undefined = card.sections.tryGet('PkObjectList');\r\n let edRolesSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationRoles');\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n if (!objSection || !edRolesSection || !edMatchingSection) return;\r\n objects.rowInitializing.add(e => {\r\n e.row.fieldChanged.add(e2 => {\r\n\r\n if (!e || !objSection) return;\r\n\r\n if (e2.fieldName == \"ResidentialComplexID\") {\r\n this.CheckMatchingByResidentalComplex(card, e2.fieldValue);\r\n }\r\n\r\n if (e2.fieldName == \"ObjectID\") {\r\n {\r\n this.FillApproversEd(card);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n private static CheckMatchingByResidentalComplex(card: Card, residentalComplexID: string | undefined) {\r\n // TES-6561 в таблице согласования должна быть строка \"Представитель Застройщика\" (RoleID = 9) только для объектов по ЖК Holland Park\r\n // Удаляем строчку в PkExecutiveDocumentationMatching, где RoleID = 9\r\n let pkEdMatchingSection = card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n\r\n if (!isNullOrUndefined(pkEdMatchingSection)) {\r\n for (let i = pkEdMatchingSection.rows.length - 1; i >= 0; i--) {\r\n let row = pkEdMatchingSection!.rows[i];\r\n\r\n if (row.get(\"RoleID\") == ApproversRoleID.DevelopersRepresentative) {\r\n if (row.state === CardRowState.Inserted) {\r\n pkEdMatchingSection.rows.remove(row);\r\n }\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n\r\n // Если ЖК Holland Park, то добавляем строчку \"Представитель Застройщика\" (RoleID = 9)\r\n if (!isNullOrUndefined(residentalComplexID) && residentalComplexID.toLowerCase() == ResidentalComplexes.HollandPark.toLowerCase()) {\r\n let row = new CardRow();\r\n row.state = CardRowState.Inserted;\r\n row.rowId = Guid.newGuid();\r\n row.set(\"RoleID\", ApproversRoleID.DevelopersRepresentative, DotNetType.Int32);\r\n row.set(\"RoleName\", \"Представитель Застройщика\", DotNetType.String);\r\n row.set(\"LegalEntityID\", null);\r\n row.set(\"LegalEntityExternalID\", null);\r\n row.set(\"LegalEntityName\", null);\r\n row.set(\"Order\", 8, DotNetType.Int32);;\r\n pkEdMatchingSection?.rows.push(row);\r\n pkEdMatchingSection?.rows.sort((a, b) => a.get(\"Order\") - b.get(\"Order\"))\r\n }\r\n }\r\n\r\n private static async FillApproversEd(card: Card) {\r\n let roles = CdExecutiveDocumentationSharedHelper.GetRoles().map(x => x.IntID);\r\n roles.push(RequestRoleTypes.PTOEngineer);\r\n roles.push(RequestRoleTypes.ASEngineer);\r\n\r\n let objSection: CardSection | undefined = card.sections.tryGet('PkObjectList');\r\n if (!objSection) return;\r\n\r\n this.GetApproversEd(card.clone(), roles).then(\r\n (result => this.SetApprovers(card, roles, result, 'PkExecutiveDocumentationMatching', 'PkExecutiveDocumentationRoles'))\r\n );\r\n }\r\n\r\n private static async GetApproversEd(card: Card, roles: number[]) {\r\n let roleApprovers: RoleApprovers[] = [];\r\n let objectList = CdExtensionHelper.GetObjectListFromPkObjectListSection(card);\r\n if (!objectList || objectList.length == 0) return;\r\n\r\n try {\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.GetApproversByObjects;\r\n let objects = objectList.map(x => (x.ID as any).$value as string).join(\";\");\r\n request.info[\"Objects\"] = createTypedField(objects, 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 roles.forEach(role => {\r\n if (!response.info!['EdApproversID' + role] || !response.info!['EdApproversID' + role].$value) return;\r\n let edApproversID: string[] | null = response.info!['EdApproversID' + role].$value.split(';');\r\n let edApproversName: string[] | null = response.info!['EdApproversName' + role].$value.split(';');\r\n if (!edApproversID || !edApproversName) return;\r\n if (edApproversID.length === 0 || edApproversID.length !== edApproversName.length) return;\r\n let approversList: { ID: guid, Name: string }[] = []\r\n for (let k = 0; k < edApproversID.length; k++) {\r\n if (!edApproversName[k] != null)\r\n approversList.push({ ID: edApproversID[k], Name: edApproversName[k] });\r\n }\r\n roleApprovers.push({\r\n RoleID: role\r\n , OrderNumber: createTypedField(response.info!['EdOrderNumber' + role].$value, DotNetType.String)\r\n , OrderDate: createTypedField(response.info!['EdOrderDate' + role].$value, DotNetType.DateTime)\r\n , Approvers: approversList\r\n });\r\n });\r\n }\r\n catch (err) {\r\n showError(err);\r\n }\r\n\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n if (!edMatchingSection) return;\r\n\r\n // Заполнение Инженера ПТО #27647 и Инженера АН #31973\r\n let rowPTO = edMatchingSection.rows.findIndex(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') !== null &&\r\n x.tryGet('RoleID') === RequestRoleTypes.PTOEngineer);\r\n let rowAS = edMatchingSection.rows.findIndex(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') !== null &&\r\n x.tryGet('RoleID') === RequestRoleTypes.ASEngineer);\r\n\r\n if (!rowPTO || !rowAS) return;\r\n\r\n let engineersRoles: number[] = [RequestRoleTypes.PTOEngineer, RequestRoleTypes.ASEngineer]\r\n for (let i = 0; i < number.length; i++) {\r\n let roleID = engineersRoles[i];\r\n let row = edMatchingSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') !== null &&\r\n x.tryGet('RoleID') === roleID);\r\n\r\n if (!row) continue;\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetUsersForTable;\r\n request.info[\"IdpTeamRoleExtID\"] = createTypedField((roleID == RequestRoleTypes.PTOEngineer ? 47 : 46), DotNetType.Int32);\r\n request.info[\"ObjectList\"] = objectList;\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 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 if (await this.GetApproversLegalEntityInfo(roleApprovers) != true) return;\r\n return roleApprovers;\r\n }\r\n\r\n public static CheckApprovementTableOrder(context: ICardUIExtensionContext) {\r\n\r\n let card = context.card;\r\n let edmSection = card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n if (edmSection &&\r\n edmSection.rows.findIndex(x =>\r\n x.state === CardRowState.Modified ||\r\n x.state === CardRowState.Inserted) >= 0) {\r\n\r\n let isExternalBuilder = CdUIHelper.GetUIControl(context, \"isExternalBuilder\");\r\n let eoIndex = edmSection.rows.findIndex(x =>\r\n x.has('RoleID') &&\r\n x.has('Order') &&\r\n x.get('RoleID') === ApproversRoleID.OperatingOrganization);\r\n if (eoIndex >= 0) {\r\n\r\n let roles = CdExecutiveDocumentationSharedHelper.GetRoles();\r\n let step = 0;\r\n let eoOrders = edmSection.rows.filter(x => x.get('RoleID') === ApproversRoleID.OperatingOrganization).map(x => x.get('Order'));\r\n roles.sort((a, b) => a.DefaultOrder - b.DefaultOrder);\r\n\r\n //сначала сортируюися в соответствии с порядком, назначенным для ЭО\r\n for (let i = 0; i < roles.length; i++) {\r\n if (roles[i].IntID === ApproversRoleID.OperatingOrganization) continue;\r\n while (eoOrders.findIndex(x => x == step) >= 0) step++;\r\n let roleIDIndex = edmSection.rows.findIndex(x =>\r\n x.has('RoleID') &&\r\n x.get('RoleID') === roles[i].IntID);\r\n if (roleIDIndex != -1) {\r\n edmSection.rows[roleIDIndex].set('Order', createTypedField(step, DotNetType.Int32));\r\n }\r\n step++;\r\n }\r\n\r\n //потом ставим заказчика в конец и редактируем порядок\r\n if (isExternalBuilder && isExternalBuilder.isChecked) {\r\n let rowCustomer = edmSection.rows.find(x => x.get('RoleID') === ApproversRoleID.Customer);\r\n if (rowCustomer) rowCustomer.set('Order', createTypedField(100, DotNetType.Int32));\r\n let step = 0;\r\n edmSection.rows.sort((a, b) => a.get(\"Order\") - b.get(\"Order\"))\r\n for (let i = 0; i < edmSection.rows.length; i++) {\r\n edmSection.rows[i].set('Order', createTypedField(step, DotNetType.Int32));\r\n step++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Логика для сортировки таблицы #26216 */\r\n public static TableOrderLogic(card: Card, context: ICardUIExtensionContext) {\r\n let edmSection = card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n\r\n //Доступ на редактирование пустых полей СРО и номера специалиста #35244\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pdciSection) {\r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n if (edmSection &&\r\n stateID &&\r\n (stateID === CdDocStates.Draft.id ||\r\n stateID === CdDocStates.Rework.id)) {\r\n ruleForWriteSROInfo = [{ RoleID: -1, SpecNumber: false, SRODate: false, SRONumber: false }];\r\n for (let i = 0; i < edmSection.rows.length; i++) {\r\n let edmRow = edmSection.rows[i];\r\n if (edmRow.has('RoleID')) {\r\n let roleID = edmRow.tryGet('RoleID');\r\n if (roleID) {\r\n let rule = { SpecNumber: false, SRODate: false, SRONumber: false };\r\n if (edmRow.has('SpecialistNumber') &&\r\n !edmRow.tryGet('SpecialistNumber'))\r\n rule.SpecNumber = true;\r\n if (edmRow.has('OrderSRODate') &&\r\n !edmRow.tryGet('OrderSRODate'))\r\n rule.SRODate = true;\r\n if (edmRow.has('OrderSRONumber') &&\r\n !edmRow.tryGet('OrderSRONumber'))\r\n rule.SRONumber = true;\r\n ruleForWriteSROInfo[ruleForWriteSROInfo.length] = { RoleID: roleID, SpecNumber: rule.SpecNumber, SRODate: rule.SRODate, SRONumber: rule.SRONumber }\r\n }\r\n }\r\n }\r\n\r\n let matchingControlViewModel: IControlViewModel | undefined = context.model.controls.get('Matching');\r\n if (matchingControlViewModel) {\r\n let controlViewModel = matchingControlViewModel as GridViewModel | null;\r\n if (controlViewModel) {\r\n\r\n controlViewModel.leftButtons.forEach(x => { x.setIsEnabled(false) });\r\n\r\n //кнопки добавить\\удалить.\r\n controlViewModel.rowInvoked.add(e => {\r\n if (e.action === GridRowAction.Deleting) {\r\n if (e.row.tryGetField(\"RoleID\")!.$value != 6 || controlViewModel!.rows.filter(x => x.row.tryGetField(\"RoleID\")!.$value == 6).length <= 1) {\r\n e.cancel = true;\r\n controlViewModel!.rows.forEach(row => {\r\n let order = row.row.tryGetField(\"Order\")!.$value;\r\n let eorder = e.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 }\r\n if (e.action === GridRowAction.Inserted) {\r\n let eoRoleRow = edmSection!.rows.find(x => x.tryGetField(\"RoleID\")!.$value == 6)\r\n e.row.set('RoleID', createTypedField(6, DotNetType.Int32));\r\n e.row.set('RoleName', createTypedField(eoRoleRow!.tryGetField(\"RoleName\")!.$value, DotNetType.String));\r\n }\r\n });\r\n\r\n controlViewModel.rowInitializing.add(e => {\r\n if (e.rowModel) {\r\n let row = e.row;\r\n if (row.has('RoleID')) {\r\n let roleID = row.tryGet('RoleID');\r\n let rule = ruleForWriteSROInfo.find(x => x.RoleID === roleID);\r\n if (rule) {\r\n if (e.rowModel.controls.has('OrderSRODate')) {\r\n let orderSRODate = e.rowModel.controls.get('OrderSRODate');\r\n if (orderSRODate)\r\n orderSRODate.isReadOnly = !rule.SRODate;\r\n }\r\n if (e.rowModel.controls.has('OrderSRONumber')) {\r\n let orderSRONumber = e.rowModel.controls.get('OrderSRONumber');\r\n if (orderSRONumber)\r\n orderSRONumber.isReadOnly = !rule.SRONumber;\r\n }\r\n if (e.rowModel.controls.has('SpecialistNumber')) {\r\n let specialistNumber = e.rowModel.controls.get('SpecialistNumber');\r\n if (specialistNumber)\r\n specialistNumber.isReadOnly = !rule.SpecNumber;\r\n }\r\n }\r\n e.row.fieldChanged.add(e2 => {\r\n let fields = ['SpecialistNumber', 'OrderSRONumber', 'OrderSRODate'];\r\n if (fields.findIndex(x => x === e2.fieldName) >= 0)\r\n setTimeout(function () {\r\n if (e.rowModel) {\r\n let ruleTIndex = ruleForWriteSROInfo.findIndex(x => x.RoleID === roleID);\r\n let ruleT = { RoleID: roleID, SpecNumber: true, SRODate: true, SRONumber: true };\r\n if (ruleTIndex > -1) {\r\n ruleT = ruleForWriteSROInfo[ruleTIndex];\r\n if (e.row.has('OrderSRODate') &&\r\n !e.row.tryGet('OrderSRODate'))\r\n ruleT.SRODate = true;\r\n if (e.row.has('OrderSRONumber') &&\r\n !e.row.tryGet('OrderSRONumber'))\r\n ruleT.SRONumber = true;\r\n if (e.row.has('SpecialistNumber') &&\r\n !e.row.tryGet('SpecialistNumber'))\r\n ruleT.SpecNumber = true;\r\n ruleForWriteSROInfo[ruleTIndex] = ruleT;\r\n } else {\r\n ruleForWriteSROInfo[ruleForWriteSROInfo.length] = ruleT;\r\n }\r\n if (e.rowModel.controls.has('OrderSRODate')) {\r\n let orderSRODate = e.rowModel.controls.get('OrderSRODate');\r\n if (orderSRODate)\r\n orderSRODate.isReadOnly = !ruleT.SRODate;\r\n }\r\n if (e.rowModel.controls.has('OrderSRONumber')) {\r\n let orderSRONumber = e.rowModel.controls.get('OrderSRONumber');\r\n if (orderSRONumber)\r\n orderSRONumber.isReadOnly = !ruleT.SRONumber;\r\n }\r\n if (e.rowModel.controls.has('SpecialistNumber')) {\r\n let specialistNumber = e.rowModel.controls.get('SpecialistNumber');\r\n if (specialistNumber)\r\n specialistNumber.isReadOnly = !ruleT.SpecNumber;\r\n }\r\n }\r\n }, 2000);\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 FieldsTemplateLogic(card: Card, model: ICardModel) {\r\n let ediSection = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n let wftSection = card.sections.tryGet('PkExecutiveDocumentationWorksForTemplate');\r\n\r\n // Обработка флага \"РД отсутствует в архиве\"\r\n let workTextControl: IControlViewModel | undefined = model.controls.get('WorkTextControl');\r\n let workRefControl: IControlViewModel | undefined = model.controls.get('WorkRefControl');\r\n if (workTextControl && workRefControl && ediSection) {\r\n let missingTechnicalDocumentation: boolean | undefined = ediSection.fields.tryGet('MissingTechnicalDocumentation');\r\n this.UpdateWorkControlsVisability(missingTechnicalDocumentation, workTextControl, workRefControl);\r\n\r\n ediSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'MissingTechnicalDocumentation') {\r\n missingTechnicalDocumentation = e.fieldValue;\r\n if (workTextControl && workRefControl)\r\n this.UpdateWorkControlsVisability(missingTechnicalDocumentation, workTextControl, workRefControl);\r\n }\r\n });\r\n }\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 if (wftSection) {\r\n wftSection.rows.collectionChanged.add(e => {\r\n if (e.added.length > 0) {\r\n let row: CardRow = e.added[0];\r\n row.fieldChanged.add(async e1 => {\r\n if (e1.fieldName === 'WorkTechnicalDocumentationID') {\r\n let tdId = e1.fieldValue;\r\n if (!tdId) {\r\n row.set('Number', createTypedField(null, DotNetType.String));\r\n row.set('RdDivision', createTypedField(null, DotNetType.String));\r\n row.set('ContractDivision', createTypedField(null, DotNetType.String));\r\n row.set('Version', createTypedField(null, DotNetType.String));\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRdInfo;\r\n request.info[\"CardID\"] = createTypedField(tdId, 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 docNumber = row.tryGetField('WorkTechnicalDocumentationFullNumber');\r\n let respInfo = response.info;\r\n if (respInfo && respInfo.ArNumber && respInfo.ArNumber.$value)\r\n row.set('Number', createTypedField(respInfo.ArNumber.$value, DotNetType.String));\r\n else if (docNumber)\r\n row.set('Number', createTypedField(docNumber.$value, DotNetType.String));\r\n\r\n if (respInfo && respInfo.RdDivision && respInfo.ContractDivision && respInfo.Version) {\r\n row.set('RdDivision', createTypedField(respInfo.RdDivision.$value, DotNetType.String));\r\n row.set('ContractDivision', createTypedField(respInfo.ContractDivision.$value, DotNetType.String));\r\n row.set('Version', createTypedField(respInfo.Version.$value, DotNetType.String));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Проверка файлов в ИД\r\n * from: 0 - ui, 1 - задание */\r\n public static async CheckAddedFiles(context: ICardUIExtensionContext, from: number) {\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 (x.typeId === CdFdTaskTypes.PkExecutiveDocumentationInitializingTypeID.toLowerCase() ||\r\n x.typeId === CdFdTaskTypes.PkExecutiveDocumentationToReworkTypeID.toLowerCase())) >= 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 ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (!ediSection || !pdciSection) break;\r\n let edTypeID = ediSection.fields.tryGet('EDTypeID');\r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n if (!edTypeID || !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 let isInitialization: boolean =\r\n task.typeId.toLowerCase() === CdTaskTypes.PkExecutiveDocumentationInitializingTypeID.toLowerCase() &&\r\n task.optionId.toLowerCase() === CdFdProcessHelper.ForApproval.toLowerCase() ||\r\n task.typeId.toLowerCase() === CdFdTaskTypes.PkSignExecutiveDocumentationInitializingTypeID.toLowerCase() &&\r\n task.optionId.toLowerCase() === CdFdProcessHelper.PkSendForSigning.toLowerCase();\r\n let isRework: boolean =\r\n task.typeId.toLowerCase() === CdFdTaskTypes.PkExecutiveDocumentationToReworkTypeID.toLowerCase() &&\r\n task.optionId.toLowerCase() === CdFdProcessHelper.SendForResubscription.toLowerCase();\r\n let isGP: boolean =\r\n (task.typeId.toLowerCase() === CdFdTaskTypes.PkExecutiveDocumentationAgreementWithAgreementorTypeID.toLowerCase() ||\r\n task.typeId.toLowerCase() === CdFdTaskTypes.PkSignExecutiveDocumentationAgreementWithAgreementorTypeID.toLowerCase()) &&\r\n (task.optionId.toLowerCase() === CdFdProcessHelper.Approve.toLowerCase() ||\r\n task.optionId.toLowerCase() === CdFdProcessHelper.Sign.toLowerCase()) &&\r\n (stateID === CdDocStates.OnApprovalGP.id ||\r\n stateID === CdDocStates.OnSigningGP.id);\r\n let isArchive: boolean =\r\n task.typeId.toLowerCase() === CdFdTaskTypes.PkFdInArchiveTypeID.toLowerCase() &&\r\n task.optionId.toLowerCase() === CdFdProcessHelper.ToArchive.toLowerCase();\r\n\r\n let categoryList: string[] = [];\r\n if (isInitialization || isGP || isArchive || isRework) {\r\n // Если передача в архив, и Вид ИД - Журналы, проверяем файлы в 2. Журналы\r\n let edKindID = ediSection.fields.tryGet('EDKindNewID');\r\n if (isArchive &&\r\n edKindID &&\r\n edKindID.toLowerCase() === EdKinds.Journal) {\r\n categoryList[0] = ChFileCategories.Journal.id as string;\r\n }\r\n else {\r\n categoryList[0] = ChFileCategories.DocumentID.id as string;\r\n }\r\n\r\n const edTypeRequest = new CardGetRequest();\r\n edTypeRequest.getMode = CardGetMode.ReadOnly;\r\n edTypeRequest.cardId = edTypeID;\r\n const edTypeResponse = await CardService.instance.get(edTypeRequest);\r\n const edTypeCard = edTypeResponse.card;\r\n const edtSection = edTypeCard.sections.tryGet('PkExecutiveDocumentationTypes');\r\n const efcSection = edTypeCard.sections.tryGet('PkExecutiveDocumentationFileCategories');\r\n if (edtSection && efcSection) {\r\n let workTypeID = edtSection.fields.tryGet('PkWorkTypeID');\r\n if (workTypeID && efcSection.rows.length > 0) {\r\n for (let j = 0; j < efcSection.rows.length; j++) {\r\n let categoryRow = efcSection.rows[j];\r\n let categoryID: string | null | undefined = categoryRow.tryGet('CategorieID');\r\n if (categoryID && categoryList.findIndex(x => x === categoryID))\r\n categoryList[categoryList.length] = categoryID;\r\n }\r\n }\r\n }\r\n for (let j = 0; j < categoryList.length; j++) {\r\n let categoryId = categoryList[j];\r\n if ((isInitialization || isRework) &&\r\n\r\n categoryId === ChFileCategories.LaboratoryTests.id!.toLowerCase())\r\n continue;\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 FieldLogic(card: Card, model: ICardModel) {\r\n let ediSection = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n let polSection = card.sections.tryGet('PkObjectList');\r\n // Отметить флажки ЗОС и РВЭ\r\n if (!ediSection) return;\r\n ediSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'EDTypeID') {\r\n if (ediSection && ediSection.fields.has('isZOS') && ediSection.fields.has('isRVE')) {\r\n let edTypeID = e.fieldValue as guid | null | undefined;\r\n if (edTypeID) {\r\n const edTypeRequest = new CardGetRequest();\r\n edTypeRequest.getMode = CardGetMode.ReadOnly;\r\n edTypeRequest.cardId = edTypeID;\r\n const edTypeResponse = await CardService.instance.get(edTypeRequest);\r\n if (!edTypeResponse.validationResult.isSuccessful) {\r\n return;\r\n }\r\n const edTypeCard = edTypeResponse.card;\r\n let edTypeSection = edTypeCard.sections.tryGet('PkExecutiveDocumentationTypes');\r\n if (edTypeSection && edTypeSection.fields.has('isZOS') && edTypeSection.fields.has('isRVE')) {\r\n ediSection.fields.set('isZOS', createTypedField(edTypeSection.fields.tryGet('isZOS'), DotNetType.Boolean));\r\n ediSection.fields.set('isRVE', createTypedField(edTypeSection.fields.tryGet('isRVE'), DotNetType.Boolean));\r\n }\r\n } else {\r\n ediSection.fields.set('isZOS', createTypedField(false, DotNetType.Boolean));\r\n ediSection.fields.set('isRVE', createTypedField(false, DotNetType.Boolean));\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Заполнение Признака при изменении Раздела\r\n if (!ediSection) return;\r\n ediSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'SectionID') {\r\n if (ediSection && ediSection.fields.has('FeatureID')) {\r\n\r\n // Очистим поле \"признак\"\r\n ediSection.fields.set('FeatureID', null);\r\n ediSection.fields.set('FeatureName', null);\r\n\r\n let edSectionID = e.fieldValue as guid | null | undefined;\r\n if (edSectionID) {\r\n const edSectionRequest = new CardGetRequest();\r\n edSectionRequest.getMode = CardGetMode.ReadOnly;\r\n edSectionRequest.cardId = edSectionID;\r\n const edSectionResponse = await CardService.instance.get(edSectionRequest);\r\n if (!edSectionResponse.validationResult.isSuccessful) {\r\n return;\r\n }\r\n const edSectionCard = edSectionResponse.card;\r\n let edSectionSection = edSectionCard.sections.tryGet('CdSection');\r\n if (edSectionSection &&\r\n edSectionSection.fields.has('DefaultFeatureID') &&\r\n edSectionSection.fields.tryGet('DefaultFeatureID') != null) {\r\n ediSection.fields.set('FeatureID', createTypedField(edSectionSection.fields.tryGet('DefaultFeatureID'), DotNetType.Guid));\r\n ediSection.fields.set('FeatureName', createTypedField(edSectionSection.fields.tryGet('DefaultFeatureName'), DotNetType.String));\r\n } else {\r\n ediSection.fields.set('FeatureID', null);\r\n ediSection.fields.set('FeatureName', null);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Проверка и заполнение ЖК и региона при открытии карточки\r\n if (ediSection && polSection &&\r\n ediSection.fields.has('ResidentialComplexID') &&\r\n ediSection.fields.has('RegionID') &&\r\n (ediSection.fields.tryGet('ResidentialComplexID') === null ||\r\n ediSection.fields.tryGet('RegionID') === null)) {\r\n // ЖК\r\n if (ediSection.fields.tryGet('ResidentialComplexID') === null) {\r\n let residentialComplexRow = polSection.rows.find(x =>\r\n x.has('ResidentialComplexID') &&\r\n x.tryGet('ResidentialComplexID') !== null);\r\n if (residentialComplexRow)\r\n ediSection.fields.rawSet('ResidentialComplexID', createTypedField(residentialComplexRow.get('ResidentialComplexID'), DotNetType.Guid));\r\n }\r\n // Регион\r\n if (ediSection.fields.tryGet('RegionID') === null) {\r\n let regionRow = polSection.rows.find(x =>\r\n x.has('RegionID') &&\r\n x.tryGet('RegionID') !== null);\r\n if (regionRow)\r\n ediSection.fields.rawSet('RegionID', createTypedField(regionRow.get('RegionID'), DotNetType.Guid));\r\n }\r\n }\r\n\r\n // Предзаполнение проекта при добавлении нового объекта\r\n let objects: IControlViewModel | undefined = model.controls.get('Objects');\r\n if (objects) {\r\n let controlViewModel = objects as GridViewModel | null;\r\n if (controlViewModel) {\r\n controlViewModel.rowInvoked.add(async e => {\r\n if (polSection && polSection.rows.length > 1 && e.action === GridRowAction.Inserted) {\r\n let newRow = e.row;\r\n let oldRow = polSection.rows.find(x =>\r\n x.rowId !== newRow.rowId);\r\n if (oldRow &&\r\n oldRow.has('ResidentialComplexID') &&\r\n oldRow.tryGet('ResidentialComplexID') &&\r\n oldRow.has('ResidentialComplexName') &&\r\n oldRow.tryGet('ResidentialComplexName')) {\r\n let residentialComplexID = oldRow.get('ResidentialComplexID') as guid;\r\n let residentialComplexName = oldRow.get('ResidentialComplexName') as string;\r\n newRow.set('ResidentialComplexID', createTypedField(residentialComplexID, DotNetType.Guid));\r\n newRow.set('ResidentialComplexName', createTypedField(residentialComplexName, DotNetType.String));\r\n }\r\n if (oldRow &&\r\n oldRow.has('ProjectID') &&\r\n oldRow.tryGet('ProjectID') &&\r\n oldRow.has('ProjectName') &&\r\n oldRow.tryGet('ProjectName')) {\r\n let projectID = oldRow.get('ProjectID') as guid;\r\n let projectName = oldRow.get('ProjectName') as string;\r\n newRow.set('ProjectID', createTypedField(projectID, DotNetType.Guid));\r\n newRow.set('ProjectName', createTypedField(projectName, DotNetType.String));\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n public static FieldsExecutiveSchemeTable(card: Card) {\r\n let pesfed = card.sections.get(\"PkExecutiveSchemesForED\");\r\n if (pesfed == null) {\r\n return;\r\n }\r\n // Тех документация\r\n if (pesfed) {\r\n pesfed.rows.collectionChanged.add(e => {\r\n if (e.added.length > 0) {\r\n let row: CardRow = e.added[0];\r\n row.fieldChanged.add(async e1 => {\r\n if (e1.fieldName === 'ExecutiveSchemeID') {\r\n let tdId = e1.fieldValue;\r\n if (!tdId) {\r\n row.set('Number', createTypedField(null, DotNetType.String));\r\n row.set('Author', createTypedField(null, DotNetType.String));\r\n row.set('CreationDate', createTypedField(null, DotNetType.DateTime));\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdGetSystemInfo;\r\n request.info[\"CardId\"] = createTypedField(tdId, 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 respInfo = response.info;\r\n if (respInfo && respInfo.SecondaryFullNumber && respInfo.SecondaryFullNumber.$value)\r\n row.set('Number', createTypedField(respInfo.SecondaryFullNumber.$value, DotNetType.String));\r\n\r\n if (respInfo && respInfo.AuthorName) {\r\n row.set('Author', createTypedField(respInfo.AuthorName.$value, DotNetType.String));\r\n }\r\n if (respInfo && respInfo.CreationDate) {\r\n row.set('CreationDate', createTypedField(respInfo.CreationDate.$value, DotNetType.DateTime));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n public static SaveCardToUpdateFiles(context: ICardUIExtensionContext) {\r\n LoadingOverlay.instance.show(async () => {\r\n let editor = context.uiContext.cardEditor;\r\n editor!.saveCard(context.uiContext);\r\n });\r\n }\r\n\r\n public static ExecutiveSchemeForEdControlLogic(card: Card, model: ICardModel, context: ICardUIExtensionContext) {\r\n let tableExecutiveSchemesForEd = model.controls.get(\"ExecutiveSchemesForEdTable\");\r\n let pedi = card.sections.get(\"PkExecutiveDocumentationInfo\");\r\n if (pedi == null) {\r\n return;\r\n }\r\n\r\n const tableExecutiveSchemesForEdGvm = tableExecutiveSchemesForEd as GridViewModel;\r\n if (tableExecutiveSchemesForEdGvm != null) {\r\n tableExecutiveSchemesForEdGvm.rowEditorClosed.add(e => {\r\n if (e.action == GridRowAction.Inserted &&\r\n card.sections.get('PkExecutiveSchemesForED')?.rows.find(x =>\r\n x.state == CardRowState.Inserted &&\r\n x.rowId == e.row.rowId) != undefined &&\r\n e.cancel != true)\r\n this.SaveCardToUpdateFiles(context);\r\n });\r\n }\r\n\r\n let kindId = pedi.fields.get(\"EDKindNewID\");\r\n tableExecutiveSchemesForEd!.controlVisibility = (kindId == CdExecutiveDocumentationKinds.ActOfExaminationOfResponsibleStructures\r\n || kindId == CdExecutiveDocumentationKinds.ActOfIntermediateExaminationOfResponsibleStructures\r\n || kindId == CdExecutiveDocumentationKinds.ActOfExaminationOfHiddenWorks) ? Visibility.Visible : Visibility.Collapsed;\r\n\r\n pedi.fields.fieldChanged.add(async e => {\r\n if (e.fieldName == \"EDKindNewID\") {\r\n\r\n if (e.fieldValue == CdExecutiveDocumentationKinds.ActOfExaminationOfResponsibleStructures\r\n || e.fieldValue == CdExecutiveDocumentationKinds.ActOfIntermediateExaminationOfResponsibleStructures\r\n || e.fieldValue == CdExecutiveDocumentationKinds.ActOfExaminationOfHiddenWorks) {\r\n tableExecutiveSchemesForEd!.controlVisibility = Visibility.Visible;\r\n }\r\n else {\r\n tableExecutiveSchemesForEd!.controlVisibility = Visibility.Collapsed;\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems2(card, \"PkExecutiveSchemesForED\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static FieldsHiddenWorksLogic(card: Card, model: ICardModel, context: ICardUIExtensionContext) {\r\n if (card.sections.has(\"PkExecutiveDocumentationInfo\")) {\r\n let needToCopy = model.controls.get(\"NeedToCopy\");\r\n let copiedFrom = model.controls.get(\"CopiedFrom\");\r\n let hiddenWorkTable = model.controls.get(\"HiddenWorkTable\");\r\n let missingHiddenWorks = model.controls.get(\"MissingHiddenWorks\");\r\n let permittedFullLoad = model.controls.get(\"PermittedFullLoad\");\r\n let permittedEmployStructures = model.controls.get(\"PermittedEmployStructures\");\r\n let permittedEmployStructuresWithLoad = model.controls.get(\"PermittedEmployStructuresWithLoad\");\r\n let pedi = card.sections.get(\"PkExecutiveDocumentationInfo\");\r\n\r\n if (pedi == null || needToCopy == null\r\n || hiddenWorkTable == null || copiedFrom == null\r\n || missingHiddenWorks == null || permittedFullLoad == null\r\n || permittedEmployStructures == null || permittedEmployStructuresWithLoad == null) {\r\n return;\r\n }\r\n\r\n let kindId = pedi.fields.get(\"EDKindNewID\");\r\n\r\n this.FillObjectsLikeString(card, model);\r\n\r\n if (kindId != null) {\r\n if (kindId == CdExecutiveDocumentationKinds.ActOfExaminationOfResponsibleStructures) {\r\n\r\n hiddenWorkTable.controlVisibility = Visibility.Visible;\r\n needToCopy.controlVisibility = Visibility.Visible;\r\n missingHiddenWorks.controlVisibility = Visibility.Visible;\r\n permittedFullLoad.controlVisibility = Visibility.Visible;\r\n permittedEmployStructures.controlVisibility = Visibility.Visible;\r\n permittedEmployStructuresWithLoad.controlVisibility = Visibility.Visible;\r\n this.UpdateVisibilityHiddenWorks(card, model);\r\n this.UpdateVisibilityCopiedSubject(card, model);\r\n this.FillActFromIntermediateAct(card, context);\r\n }\r\n else if (kindId == CdExecutiveDocumentationKinds.ActOfIntermediateExaminationOfResponsibleStructures) {\r\n\r\n hiddenWorkTable.controlVisibility = Visibility.Visible;\r\n missingHiddenWorks.controlVisibility = Visibility.Visible;\r\n permittedFullLoad.controlVisibility = Visibility.Visible;\r\n permittedEmployStructures.controlVisibility = Visibility.Visible;\r\n permittedEmployStructuresWithLoad.controlVisibility = Visibility.Visible;\r\n\r\n this.UpdateVisibilityHiddenWorks(card, model);\r\n }\r\n else {\r\n hiddenWorkTable.controlVisibility = Visibility.Collapsed;\r\n needToCopy.controlVisibility = Visibility.Collapsed;\r\n missingHiddenWorks.controlVisibility = Visibility.Collapsed;\r\n permittedFullLoad.controlVisibility = Visibility.Collapsed;\r\n permittedEmployStructures.controlVisibility = Visibility.Collapsed;\r\n permittedEmployStructuresWithLoad.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n\r\n pedi.fields.fieldChanged.add(async e => {\r\n if (e.fieldName == \"EDKindNewID\" && e.fieldValue != null) {\r\n if (e.fieldValue == CdExecutiveDocumentationKinds.ActOfExaminationOfResponsibleStructures) {\r\n hiddenWorkTable!.controlVisibility = Visibility.Visible;\r\n needToCopy!.controlVisibility = Visibility.Visible;\r\n missingHiddenWorks!.controlVisibility = Visibility.Visible;\r\n copiedFrom!.controlVisibility = Visibility.Visible;\r\n permittedFullLoad!.controlVisibility = Visibility.Visible;\r\n permittedEmployStructures!.controlVisibility = Visibility.Visible;\r\n permittedEmployStructuresWithLoad!.controlVisibility = Visibility.Visible;\r\n\r\n this.UpdateVisibilityHiddenWorks(card, model);\r\n this.UpdateVisibilityCopiedSubject(card, model);\r\n this.FillActFromIntermediateAct(card, context);\r\n }\r\n else if (e.fieldValue == CdExecutiveDocumentationKinds.ActOfIntermediateExaminationOfResponsibleStructures) {\r\n hiddenWorkTable!.controlVisibility = Visibility.Visible;\r\n missingHiddenWorks!.controlVisibility = Visibility.Visible;\r\n copiedFrom!.controlVisibility = Visibility.Collapsed;\r\n needToCopy!.controlVisibility = Visibility.Collapsed;\r\n permittedFullLoad!.controlVisibility = Visibility.Visible;\r\n permittedEmployStructures!.controlVisibility = Visibility.Visible;\r\n permittedEmployStructuresWithLoad!.controlVisibility = Visibility.Visible;\r\n\r\n pedi!.fields.set(\"isCopied\", createTypedField(false, DotNetType.Boolean));\r\n pedi!.fields.set(\"CopiedFromID\", null);\r\n pedi!.fields.set(\"CopiedFromSubject\", null);\r\n\r\n this.UpdateVisibilityHiddenWorks(card, model);\r\n }\r\n else {\r\n hiddenWorkTable!.controlVisibility = Visibility.Collapsed;\r\n needToCopy!.controlVisibility = Visibility.Collapsed;\r\n missingHiddenWorks!.controlVisibility = Visibility.Collapsed;\r\n copiedFrom!.controlVisibility = Visibility.Collapsed;\r\n permittedFullLoad!.controlVisibility = Visibility.Collapsed;\r\n permittedEmployStructures!.controlVisibility = Visibility.Collapsed;\r\n permittedEmployStructuresWithLoad!.controlVisibility = Visibility.Collapsed;\r\n\r\n pedi!.fields.set(\"isCopied\", createTypedField(false, DotNetType.Boolean));\r\n pedi!.fields.set(\"CopiedFromID\", null);\r\n pedi!.fields.set(\"CopiedFromSubject\", null);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Заполнение информации о СРО #21244 */\r\n private static async FillSROInfo(edmRow: CardRow, extID: number | null) {\r\n if (edmRow === null || extID === null) return;\r\n if (edmRow.has('OrderSRONumber')) edmRow.set('OrderSRONumber', createTypedField(null, DotNetType.String));\r\n else edmRow.set('OrderSRONumber', createTypedField(null, DotNetType.String));\r\n if (edmRow.has('OrderSRODate')) edmRow.set('OrderSRODate', createTypedField(null, DotNetType.DateTime));\r\n else edmRow.set('OrderSRODate', createTypedField(null, DotNetType.DateTime));\r\n if (!edmRow.has('SpecialistNumber')) edmRow.set('SpecialistNumber', createTypedField(null, DotNetType.String));\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdGetSroInfoByKCKID;\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 response.info.SRONumber !== undefined &&\r\n response.info.SRODate !== undefined) {\r\n edmRow.set('OrderSRONumber', createTypedField(response.info.SRONumber.$value, DotNetType.String));\r\n edmRow.set('OrderSRODate', createTypedField(response.info.SRODate.$value, DotNetType.DateTime));\r\n if (edmRow.has('RoleID')) {\r\n let roleID = edmRow.tryGet('RoleID');\r\n if (roleID) {\r\n let nullSRONumber =\r\n response.info.SRONumber.$value === null ||\r\n response.info.SRONumber.$value === undefined ||\r\n response.info.SRONumber.$value === '';\r\n let nullSRODate =\r\n response.info.SRODate.$value === null ||\r\n response.info.SRODate.$value === undefined ||\r\n response.info.SRODate.$value === '';\r\n let roleIndex = ruleForWriteSROInfo.findIndex(x => x.RoleID === roleID);\r\n if (roleID < 0) ruleForWriteSROInfo[ruleForWriteSROInfo.length] = { RoleID: roleID, SpecNumber: false, SRODate: nullSRODate, SRONumber: nullSRONumber };\r\n else ruleForWriteSROInfo[roleIndex] = { RoleID: roleID, SpecNumber: ruleForWriteSROInfo[roleIndex].SpecNumber, SRODate: nullSRODate, SRONumber: nullSRONumber };\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Проверить таблицу согласующих */\r\n protected static CheckApprovers(context: ICardUIExtensionContext) {\r\n try {\r\n let card = context.model.card;\r\n\r\n // Проверить что в карточке имеются секции\r\n let ediSection = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n let edmSection = card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n let edrSection = card.sections.tryGet('PkExecutiveDocumentationRoles');\r\n if (!ediSection || !edmSection || !edrSection) {\r\n return false;\r\n }\r\n\r\n // Проверить что заполнен хотя бы один согласующий\r\n const isAuthorSupervision: boolean | null | undefined = ediSection.fields.tryGet('isAuthorSupervision');\r\n const isEO: boolean | null | undefined = ediSection.fields.tryGet('isEO');\r\n const isExternalBuilder: boolean | null | undefined = ediSection.fields.tryGet('isExternalBuilder');\r\n let rolesForFill: string = '';\r\n let orgnzForFill: string = '';\r\n\r\n // TODO TIV: Нужно будет оптимизировать\r\n // Проверить подрядчика и заказчика\r\n let cnmRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Contractor);\r\n if (!cnmRow ||\r\n !cnmRow.has('LegalEntityID') ||\r\n cnmRow.tryGet('LegalEntityID') === null ||\r\n cnmRow.tryGet('LegalEntityID') === undefined ||\r\n cnmRow.tryGet('LegalEntityID') === '00000000-0000-0000-0000-000000000000') {\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Contractor);\r\n if (roleNameRow) {\r\n orgnzForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n }\r\n }\r\n let cnrRow = edrSection.rows.find(x =>\r\n cnmRow !== undefined &&\r\n x.has('MatchingRowID') &&\r\n x.tryGet('MatchingRowID') === cnmRow.rowId);\r\n if (!cnrRow) {\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Contractor);\r\n if (roleNameRow) rolesForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n }\r\n\r\n if (isExternalBuilder !== null &&\r\n isExternalBuilder !== undefined &&\r\n isExternalBuilder) {\r\n let csmRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.PTOEngeneer);\r\n let csrRow = edrSection.rows.find(x =>\r\n csmRow !== undefined &&\r\n x.has('MatchingRowID') &&\r\n x.tryGet('MatchingRowID') === csmRow.rowId);\r\n if (!csrRow) {\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.PTOEngeneer);\r\n if (roleNameRow) rolesForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n }\r\n\r\n let asumRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.ASEngeneer);\r\n let asurRow = edrSection.rows.find(x =>\r\n asumRow !== undefined &&\r\n x.has('MatchingRowID') &&\r\n x.tryGet('MatchingRowID') === asumRow.rowId);\r\n if (!asurRow) {\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.ASEngeneer);\r\n if (roleNameRow) rolesForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n }\r\n } else {\r\n let csmRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Customer);\r\n let csrRow = edrSection.rows.find(x =>\r\n csmRow !== undefined &&\r\n x.has('MatchingRowID') &&\r\n x.tryGet('MatchingRowID') === csmRow.rowId);\r\n if (!csrRow) {\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Customer);\r\n if (roleNameRow) rolesForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n }\r\n }\r\n\r\n //#region Проверка заполненности согласующих для флажков ЭО и АН\r\n // Проверка АН\r\n let asmRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.AuthorSupervision);\r\n let asrRow = edrSection.rows.find(x =>\r\n asmRow !== undefined &&\r\n x.has('MatchingRowID') &&\r\n x.tryGet('MatchingRowID') === asmRow.rowId);\r\n if (isAuthorSupervision !== null &&\r\n isAuthorSupervision !== undefined &&\r\n !isAuthorSupervision &&\r\n !asrRow) {\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.AuthorSupervision);\r\n if (roleNameRow) rolesForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n }\r\n // Проверка ЭО\r\n let eomRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.OperatingOrganization);\r\n let eorRow = edrSection.rows.find(x =>\r\n eomRow !== undefined &&\r\n x.has('MatchingRowID') &&\r\n x.tryGet('MatchingRowID') === eomRow.rowId);\r\n if (isEO !== null &&\r\n isEO !== undefined &&\r\n isEO &&\r\n !eorRow) {\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.OperatingOrganization);\r\n if (roleNameRow) rolesForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n }\r\n\r\n //#endregion\r\n\r\n //TES-6561 Проверка заполнения \"Представитель Застройщика\", если ЖК HollandPark\r\n var drmRow = edmSection.rows.find(x =>\r\n x.has('RoleID') && x.state !== CardRowState.Deleted &&\r\n x.tryGet('RoleID') === ApproversRoleID.DevelopersRepresentative);\r\n var drrRow = edrSection.rows.find(x =>\r\n drmRow !== undefined &&\r\n x.has('MatchingRowID') &&\r\n x.tryGet('MatchingRowID') === drmRow.rowId);\r\n if (isNullOrUndefined(drrRow)) {\r\n let objectListSection = card.sections.tryGet('PkObjectList');\r\n if (objectListSection) {\r\n var hollandParkRow = objectListSection.rows.find(x =>\r\n x.has('ResidentialComplexID') && x.state !== CardRowState.Deleted &&\r\n x.tryGet('ResidentialComplexID') === ResidentalComplexes.HollandPark);\r\n if (hollandParkRow && drmRow) {\r\n rolesForFill += '\\n' + drmRow.tryGet('RoleName');\r\n }\r\n }\r\n }\r\n\r\n if (edrSection.rows.length === 0) {\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить согласующих');\r\n return false;\r\n } else if (rolesForFill.length !== 0) {\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить:' + rolesForFill);\r\n return false;\r\n }\r\n if (orgnzForFill.length !== 0) {\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить юридическое лицо:' + orgnzForFill);\r\n return false;\r\n }\r\n\r\n // Проверить что согласующие заполнены по цепочке\r\n let filledApprovers: boolean[] = [false, false, false, false, false, false];\r\n for (let i = 0; i < edmSection.rows.length; i++) {\r\n let row = edmSection.rows[i];\r\n let edmRoleIndex = edrSection.rows.findIndex(x =>\r\n x.has('MatchingRowID') &&\r\n x.tryGet('MatchingRowID') === row.rowId);\r\n if (row.has('RoleID') && edmRoleIndex >= 0) {\r\n let roleID: number | null | undefined = row.tryGet('RoleID');\r\n if (!roleID || roleID >= filledApprovers.length || 0 > roleID) continue;\r\n filledApprovers[roleID] = true;\r\n }\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 FillSpecialistNumber(card: Card) {\r\n if (card == null)\r\n return;\r\n const pedm = card.sections.tryGet(\"PkExecutiveDocumentationMatching\");\r\n if (pedm == null) return;\r\n const pedr = card.sections.tryGet(\"PkExecutiveDocumentationRoles\");\r\n if (pedr == null) return;\r\n\r\n pedr.rows.collectionChanged.add(async e => {\r\n if (e.added.length > 0) {\r\n let row = e.added[0];\r\n let rowId = row.get(\"RowID\");\r\n if (rowId != null) {\r\n let userId = row.get(\"RoleID\");\r\n if (userId != null) {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdGetSpecialistnumber;\r\n request.info[\"UserID\"] = createTypedField(userId, 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 matchingRow = pedm.rows.find(x => x.get(\"RowID\") === row.get(\"MatchingRowID\"));\r\n if (matchingRow != null) {\r\n matchingRow.set(\"SpecialistNumber\", createTypedField(response.info!.SpecialistNumber.$value, DotNetType.String));\r\n if (matchingRow.has('RoleID')) {\r\n let roleID = matchingRow.tryGet('RoleID');\r\n if (roleID) {\r\n let roleIndex = ruleForWriteSROInfo.findIndex(x => x.RoleID === roleID);\r\n let nullSpecNumber =\r\n response.info!.SpecialistNumber.$value === null ||\r\n response.info!.SpecialistNumber.$value === undefined ||\r\n response.info!.SpecialistNumber.$value === '';\r\n if (roleIndex < 0) ruleForWriteSROInfo[ruleForWriteSROInfo.length] = { RoleID: roleID, SpecNumber: nullSpecNumber, SRODate: false, SRONumber: false };\r\n else ruleForWriteSROInfo[roleIndex] = { RoleID: roleID, SpecNumber: nullSpecNumber, SRODate: ruleForWriteSROInfo[roleIndex].SRODate, SRONumber: ruleForWriteSROInfo[roleIndex].SRONumber };\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n let matchingRow = pedm.rows.find(x => x.get(\"RowID\") === row.get(\"MatchingRowID\"));\r\n if (matchingRow != null) {\r\n matchingRow.set(\"SpecialistNumber\", null);\r\n if (matchingRow.has('RoleID')) {\r\n let roleID = matchingRow.tryGet('RoleID');\r\n if (roleID) {\r\n let roleIndex = ruleForWriteSROInfo.findIndex(x => x.RoleID === roleID);\r\n if (roleIndex < 0) ruleForWriteSROInfo[ruleForWriteSROInfo.length] = { RoleID: roleID, SpecNumber: true, SRODate: false, SRONumber: false };\r\n else ruleForWriteSROInfo[roleIndex] = { RoleID: roleID, SpecNumber: true, SRODate: ruleForWriteSROInfo[roleIndex].SRODate, SRONumber: ruleForWriteSROInfo[roleIndex].SRONumber };\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (e.removed.length > 0) {\r\n let row = e.removed[0];\r\n let matchingRow = pedm.rows.find(x => x.get(\"RowID\") === row.get(\"MatchingRowID\"));\r\n if (matchingRow != null) {\r\n matchingRow.set(\"SpecialistNumber\", null);\r\n if (matchingRow.has('RoleID')) {\r\n let roleID = matchingRow.tryGet('RoleID');\r\n if (roleID) {\r\n let roleIndex = ruleForWriteSROInfo.findIndex(x => x.RoleID === roleID);\r\n if (roleIndex < 0) ruleForWriteSROInfo[ruleForWriteSROInfo.length] = { RoleID: roleID, SpecNumber: true, SRODate: false, SRONumber: false };\r\n else ruleForWriteSROInfo[roleIndex] = { RoleID: roleID, SpecNumber: true, SRODate: ruleForWriteSROInfo[roleIndex].SRODate, SRONumber: ruleForWriteSROInfo[roleIndex].SRONumber };\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Кнопка для создания/обновления шаблона акта */\r\n private static FileTemplateButtonLogic(card: Card, model: ICardModel) {\r\n let fileTemplateButton: IControlViewModel | undefined = model.controls.get('ButtonTemplateControl');\r\n let ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n if (!fileTemplateButton || !ediSection) return;\r\n let edKindID: guid | undefined = ediSection.fields.tryGet('EDKindNewID');\r\n if (!edKindID) {\r\n ediSection.fields.set('EDKindNewID', createTypedField(null, DotNetType.Guid));\r\n }\r\n ediSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'EDKindNewID') {\r\n if (!fileTemplateButton) return;\r\n this.UpdateButtonControlVisability(fileTemplateButton, card);\r\n }\r\n });\r\n this.UpdateButtonControlVisability(fileTemplateButton, card);\r\n\r\n let button: ButtonViewModel = fileTemplateButton as ButtonViewModel;\r\n let templateFileRowID: guid | null = CdExecutiveDocumentationSharedHelper.GetCurrentTemplateFileRowID(card);\r\n let templateFile: CardFile | undefined = card.files.find(x => templateFileRowID != null && x.rowId === templateFileRowID);\r\n if (templateFile) {\r\n templateFile.stateChanged.add(e => {\r\n if (e.newState === CardFileState.Deleted) {\r\n this.UpdateButtonControlName(button, card, true);\r\n }\r\n });\r\n }\r\n this.UpdateButtonControlName(button, card);\r\n\r\n button.onClick = () => this.ActionFileTemplate();\r\n }\r\n\r\n /** Кнопка для создания/обновления шаблона акта */\r\n public static ItdBlockLogic(context: ICardUIExtensionContext) {\r\n let card: Card = context.card;\r\n let block = context.model.blocks.get(\"BlockItdApprove\");\r\n if (!block) return;\r\n let ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n\r\n let isVisible: boolean | undefined = ediSection && ediSection.fields.has(\"ItdProjectID\") && ediSection.fields.tryGet('ItdProjectID') != null\r\n\r\n if (isVisible) {\r\n let pkEdInfo = context.model.card.sections.tryGet(\"PkExecutiveDocumentationInfo\");\r\n if (!pkEdInfo) return;\r\n\r\n let packetId = pkEdInfo!.fields.get(\"PacketID\");\r\n this.PacketLogic(context);\r\n\r\n // определяем обработчик нажатия на кнопку\r\n\r\n this.PacketVisibilityLogic(context, packetId != null);\r\n pkEdInfo.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"PacketID\") {\r\n this.PacketVisibilityLogic(context, e.fieldValue !== null);\r\n }\r\n });\r\n }\r\n\r\n block!.blockVisibility = isVisible ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n\r\n private static async PacketLogic(context: ICardUIExtensionContext) {\r\n var card = context.model.card;\r\n\r\n var addToPacketButton = context.model.controls.get(\"AddToPacketButton\") as ButtonViewModel;\r\n var executiveDocumentationPacket = context.model.controls.get(\"ExecutiveDocumentationPacket\") as GridViewModel;\r\n var packetIDTextBox = context.model.controls.get(\"PacketID\") as TextBoxViewModel;\r\n\r\n if (addToPacketButton == null || executiveDocumentationPacket == null || packetIDTextBox == null) {\r\n return;\r\n }\r\n\r\n let pkediSection = card.sections.tryGet(\"PkExecutiveDocumentationInfo\");\r\n let documentStatesAllowed = [ItdDocumentStates.NEW.ExtName, ItdDocumentStates.REVISION.ExtName]\r\n let itdDocumentStateExtName = pkediSection ? pkediSection!.fields.get(\"ItdDocumentStateExtName\") : \"\";\r\n let packetReadonly = !documentStatesAllowed.some(x => x === itdDocumentStateExtName);\r\n\r\n executiveDocumentationPacket.isReadOnly = packetReadonly;\r\n\r\n executiveDocumentationPacket.rowInvoked.add(async e => {\r\n if (e.action == GridRowAction.Opening) {\r\n let cardId = e.row.get(\"CardID\");\r\n await openCard({\r\n cardId: cardId,\r\n });\r\n e.cancel = true;\r\n return;\r\n }\r\n if (e.action == GridRowAction.Deleting) {\r\n let cardId: string = e.row.get(\"CardID\");\r\n if (context.card.info[\"PacketCardsToDeleteIds\"]) {\r\n let cardsList: string[] = context.card.info[\"PacketCardsToDeleteIds\"].split(\";\");\r\n cardsList.push(cardId.toString());\r\n context.card.info[\"PacketCardsToDeleteIds\"] = cardsList.join(\";\");\r\n }\r\n else {\r\n context.card.info[\"PacketCardsToDeleteIds\"] = cardId.toString();\r\n }\r\n return;\r\n }\r\n });\r\n\r\n executiveDocumentationPacket.rowAdding.add(async e => {\r\n let model = context.model;\r\n let section = model.card.sections.tryGet(\"PkExecutiveDocumentationPacketVirtual\");\r\n const refSection = \"PkExecutiveDocumentation_PacketSelection\";\r\n\r\n var departmentId = model.card.sections.tryGet(\"DocumentCommonInfo\")!.fields.get(\"DepartmentID\");\r\n var departmentName = model.card.sections.tryGet(\"DocumentCommonInfo\")!.fields.get(\"DepartmentName\");\r\n\r\n var objects = model.card.sections.tryGet(\"PkObjectsVirtual\")!.fields.get(\"ObjectsLikeString\");\r\n\r\n // let excc = section.rows. (x => x.Fields.TryGet(\"CardID\") != null).Select(x => x.Fields.TryGet(\"CardID\")).ToList()\r\n // let excludeCards = \"{\\\"ObjectsId\\\":\" + JSON.stringify(mainObjects.ObjectsId) + \"}\";\r\n let excludeCards = \"{\\\"ObjectsId\\\": [\\\"\" + card.id + \"\\\"]}\";\r\n\r\n const deparmentIdParameter = new ViewParameterMetadata();\r\n deparmentIdParameter.alias = 'DepartmentAuthorId';\r\n deparmentIdParameter.caption = 'Организация автора';\r\n deparmentIdParameter.hidden = true;\r\n deparmentIdParameter.dataType = DbType.Guid;\r\n deparmentIdParameter.multiple = false;\r\n const deparmentNameParameter = new ViewParameterMetadata();\r\n deparmentNameParameter.alias = 'DepartmentAuthorName';\r\n deparmentNameParameter.caption = 'Организация автора';\r\n deparmentNameParameter.hidden = false;\r\n deparmentNameParameter.dataType = DbType.String;\r\n deparmentNameParameter.multiple = false;\r\n const objectsParameter = new ViewParameterMetadata();\r\n objectsParameter.alias = 'Objects';\r\n objectsParameter.caption = 'Объекты';\r\n objectsParameter.hidden = true;\r\n objectsParameter.dataType = DbType.String;\r\n objectsParameter.multiple = false;\r\n const excludeCardsParameter = new ViewParameterMetadata();\r\n excludeCardsParameter.alias = 'ExcludeCards';\r\n excludeCardsParameter.caption = 'Кроме';\r\n excludeCardsParameter.hidden = true;\r\n excludeCardsParameter.dataType = DbType.String;\r\n excludeCardsParameter.multiple = false;\r\n const isInPacket = new ViewParameterMetadata();\r\n isInPacket.alias = 'IsInPacket';\r\n isInPacket.caption = 'Входит в комплект';\r\n isInPacket.hidden = true;\r\n isInPacket.dataType = DbType.Boolean;\r\n isInPacket.multiple = false;\r\n\r\n const parameters = [\r\n new RequestParameterBuilder()\r\n .withMetadata(deparmentIdParameter)\r\n .addCriteria(equalsCriteriaOperator(), departmentId, departmentId)\r\n .asRequestParameter(),\r\n new RequestParameterBuilder()\r\n .withMetadata(deparmentNameParameter)\r\n .addCriteria(equalsCriteriaOperator(), departmentName, departmentName)\r\n .asRequestParameter(),\r\n new RequestParameterBuilder()\r\n .withMetadata(objectsParameter)\r\n .addCriteria(equalsCriteriaOperator(), objects, objects)\r\n .asRequestParameter(),\r\n new RequestParameterBuilder()\r\n .withMetadata(excludeCardsParameter)\r\n .addCriteria(equalsCriteriaOperator(), excludeCards, excludeCards)\r\n .asRequestParameter(),\r\n new RequestParameterBuilder()\r\n .withMetadata(excludeCardsParameter)\r\n .addCriteria(isFalseCriteriaOperator())\r\n .asRequestParameter()\r\n ];\r\n\r\n await showViewsDialog(\r\n refSection,\r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n\r\n let selectedItem = value;\r\n if (selectedItem == null\r\n || !selectedItem.selectedRow\r\n || !section) {\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 if (selectedRow.get(\"edID\")) {\r\n let row = new CardRow();\r\n\r\n row.rowId = Guid.newGuid();\r\n\r\n CdCommonHelper.SetValueToRowField(row, \"SecondaryFullNumber\", selectedRow.get(\"SecondaryFullNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"Number\", selectedRow.get(\"FullNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"CardID\", selectedRow.get(\"edID\"), DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"Date\", selectedRow.get(\"DocDate\"), DotNetType.DateTime);\r\n CdCommonHelper.SetValueToRowField(row, \"StateID\", selectedRow.get(\"StateID\"), DotNetType.Int32);\r\n CdCommonHelper.SetValueToRowField(row, \"StateName\", selectedRow.get(\"StateName\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"Floor\", selectedRow.get(\"FloorNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"Section\", selectedRow.get(\"SectionNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"EDKindNewID\", selectedRow.get(\"EDKindID\"), DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"EDKindNewName\", selectedRow.get(\"EDKindName\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkLocation\", selectedRow.get(\"WorkLocation\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkTypeID\", selectedRow.get(\"WorkTypeID\"), DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkTypeName\", selectedRow.get(\"WorkTypeName\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkTypeExtID\", selectedRow.get(\"WorkTypeExtID\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkKindID\", selectedRow.get(\"EDTypeID\"), DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkKindWorkName\", selectedRow.get(\"EDTypeName\"), DotNetType.String);\r\n row.state = CardRowState.Inserted;\r\n section!.rows.push(row);\r\n }\r\n },\r\n parameters\r\n );\r\n e.cancel = true;\r\n });\r\n\r\n if (addToPacketButton != null) {\r\n addToPacketButton.isReadOnly = packetReadonly;\r\n\r\n addToPacketButton.onClick = () => {\r\n var pkDocumentCommonInfoSection = card.sections.tryGet(\"PkDocumentCommonInfo\");\r\n var documentCommonInfoSection = card.sections.tryGet(\"DocumentCommonInfo\");\r\n var pkExecutiveDocumentationInfo = card.sections.tryGet(\"PkExecutiveDocumentationInfo\");\r\n var objectListSectionRow = card.sections.tryGet(\"PkObjectList\")!.rows[0];\r\n\r\n var section = context.card.sections.getOrAdd(\"PkExecutiveDocumentationPacketVirtual\");\r\n let row: CardRow = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n\r\n if (!documentCommonInfoSection || !pkDocumentCommonInfoSection || !pkExecutiveDocumentationInfo) return;\r\n\r\n CdCommonHelper.SetValueToRowField(row, \"SecondaryFullNumber\", documentCommonInfoSection.fields.get(\"SecondaryFullNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"Number\", documentCommonInfoSection.fields.get(\"FullNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"CardID\", card.id, DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"Date\", documentCommonInfoSection.fields.get(\"DocDate\"), DotNetType.DateTime);\r\n CdCommonHelper.SetValueToRowField(row, \"StateID\", pkDocumentCommonInfoSection.fields.get(\"StateID\"), DotNetType.Int32);\r\n CdCommonHelper.SetValueToRowField(row, \"StateName\", pkDocumentCommonInfoSection.fields.get(\"StateName\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"Floor\", objectListSectionRow!.get(\"FloorNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"Section\", objectListSectionRow!.get(\"SectionNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"EDKindNewID\", pkExecutiveDocumentationInfo.fields.get(\"EDKindID\"), DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"EDKindNewName\", pkExecutiveDocumentationInfo.fields.get(\"EDKindName\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkLocation\", pkExecutiveDocumentationInfo.fields.get(\"WorkLocation\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkTypeID\", pkExecutiveDocumentationInfo.fields.get(\"WorkTypeID\"), DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkTypeName\", pkExecutiveDocumentationInfo.fields.get(\"WorkTypeName\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkTypeExtID\", pkExecutiveDocumentationInfo.fields.get(\"WorkTypeExtID\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkKindID\", pkExecutiveDocumentationInfo.fields.get(\"EDTypeID\"), DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"WorkKindWorkName\", pkExecutiveDocumentationInfo.fields.get(\"EDTypeName\"), DotNetType.String);\r\n\r\n row.state = CardRowState.Inserted;\r\n section!.rows.push(row);\r\n context.card.sections.tryGet(\"PkExecutiveDocumentationInfo\")!.fields.set(\"PacketID\", createTypedField(Guid.newGuid(), DotNetType.Guid));\r\n executiveDocumentationPacket.addRow();\r\n };\r\n }\r\n }\r\n\r\n private static async PacketVisibilityLogic(context: ICardUIExtensionContext, isPacket: boolean) {\r\n let addToPacketButton = context.model.controls.get(\"AddToPacketButton\") as ButtonViewModel;\r\n let executiveDocumentationPacket = context.model.controls.get(\"ExecutiveDocumentationPacket\") as GridViewModel;\r\n let itdPacketID = context.model.controls.get(\"ItdPacketID\") as TextBoxViewModel;\r\n let packetIDTextBox = context.model.controls.get(\"PacketID\") as TextBoxViewModel;\r\n\r\n if (addToPacketButton == null || executiveDocumentationPacket == null || itdPacketID == null || packetIDTextBox == null) {\r\n return;\r\n }\r\n\r\n executiveDocumentationPacket.controlVisibility = isPacket ? Visibility.Visible : Visibility.Collapsed;\r\n itdPacketID.controlVisibility = isPacket ? Visibility.Visible : Visibility.Collapsed;\r\n packetIDTextBox.controlVisibility = isPacket ? Visibility.Visible : Visibility.Collapsed;\r\n addToPacketButton.controlVisibility = (!isPacket) ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n\r\n /** Кнопка для создания/обновления шаблона акта */\r\n private static FileForPrintButtonLogic(card: Card, model: ICardModel) {\r\n let fileForPrintButton: IControlViewModel | undefined = model.controls.get('CreateFileForPrintControl');\r\n let ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n if (!fileForPrintButton || !ediSection) return;\r\n ediSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'SigningTypeID') {\r\n if (!fileForPrintButton) return;\r\n this.UpdateButtonControlVisability(fileForPrintButton, card, false);\r\n }\r\n });\r\n this.UpdateButtonControlVisability(fileForPrintButton, card, false);\r\n\r\n let button: ButtonViewModel = fileForPrintButton as ButtonViewModel;\r\n let fileForPrint: CardFile | undefined = card.files.find(x =>\r\n x.categoryId !== null &&\r\n ChFileCategories.DocumentID.id !== null &&\r\n x.categoryId.toLowerCase() === ChFileCategories.DocumentID.id.toLocaleLowerCase() &&\r\n x.name.indexOf(this.PdfForPrint) > 0);\r\n if (fileForPrint) {\r\n fileForPrint.stateChanged.add(e => {\r\n if (e.newState === CardFileState.Deleted) {\r\n this.UpdateButtonControlName(button, card, true, false);\r\n }\r\n });\r\n }\r\n this.UpdateButtonControlName(button, card, false, false);\r\n\r\n button.onClick = () => this.ActionFileForPrint();\r\n }\r\n\r\n /** Логика кнопки создать/обновить шаблон акта */\r\n private static async ActionFileTemplate() {\r\n let context: IUIContext = UIContext.current;\r\n let editor: ICardEditorModel | null = context.cardEditor;\r\n if (!editor) return;\r\n let model: ICardModel | null = editor.cardModel;\r\n if (!model) return;\r\n let card: Card = model.card;\r\n let templateFileRowID: guid | null = CdExecutiveDocumentationSharedHelper.GetCurrentTemplateFileRowID(card);\r\n\r\n if (card.files.find(x => (templateFileRowID !== null && x.rowId === templateFileRowID)) !== undefined) {\r\n let dialogResult: boolean =\r\n card.hasChanges()\r\n ? confirm('Карточка имеет несохранённые данные.\\nСохранить карточку и обновить шаблон акта?')\r\n : confirm('Обновить шаблон акта?');\r\n if (!dialogResult) return;\r\n }\r\n\r\n const storeInfo: IStorage = {\r\n 'AddTemplateFile': createTypedField(true, DotNetType.Boolean)\r\n };\r\n await editor.saveCard(context, storeInfo);\r\n }\r\n\r\n /** Логика кнопки создать/обновить файл для печати #21763 */\r\n private static async ActionFileForPrint() {\r\n let context: IUIContext = UIContext.current;\r\n let editor: ICardEditorModel | null = context.cardEditor;\r\n if (!editor) return;\r\n let model: ICardModel | null = editor.cardModel;\r\n if (!model) return;\r\n let card: Card = model.card;\r\n\r\n let control = model.controls.get('CreateFileForPrintControl');\r\n if (!control) {\r\n return;\r\n }\r\n try {\r\n control.isReadOnly = false;\r\n\r\n let signedFile = card.files.find(x =>\r\n x.categoryId !== null &&\r\n ChFileCategories.DocumentID.id !== null &&\r\n x.categoryId.toLowerCase() === ChFileCategories.DocumentID.id.toLocaleLowerCase() &&\r\n !(x.name.indexOf(this.PdfForPrint) > 0));\r\n\r\n if (!signedFile ||\r\n !signedFile.lastVersion) {\r\n throw new Error('Не найден файл, для которого необходимо сформировать печатную форму');\r\n }\r\n\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = CdFileTypes.GetFileForPrintType;\r\n getFileContentRequest.cardId = card.id;\r\n getFileContentRequest.versionRowId = signedFile.lastVersion.rowId;\r\n getFileContentRequest.fileId = signedFile.rowId;\r\n getFileContentRequest.fileName = signedFile.name;\r\n\r\n const getFileContentResponse = await CardService.instance.getFileContent(getFileContentRequest);\r\n\r\n if (!getFileContentResponse.validationResult.isSuccessful) {\r\n throw new Error(getFileContentResponse.validationResult.build().toString());\r\n }\r\n\r\n if (getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n throw new Error('Не получен контент, файл пустой.');\r\n }\r\n\r\n if (!getFileContentResponse.validationResult.isSuccessful ||\r\n getFileContentResponse.content == null ||\r\n getFileContentResponse.size === 0) {\r\n return null;\r\n }\r\n\r\n let fileName: string = signedFile.name.substr(0, signedFile.name.lastIndexOf('.')) + this.PdfForPrint;\r\n let fileContent: File = new File([getFileContentResponse.content], fileName);\r\n\r\n card.files.forEach(x => {\r\n if (x.categoryId &&\r\n ChFileCategories.DocumentID.id &&\r\n x.categoryId.toLowerCase() === ChFileCategories.DocumentID.id.toLocaleLowerCase() &&\r\n x.name.indexOf(this.PdfForPrint) > 0) {\r\n x.state = CardFileState.Deleted;\r\n }\r\n });\r\n\r\n let fileForPrint: IFile = model.fileContainer.createFile(\r\n fileContent,\r\n CdFileTypes.DefaultFileType,\r\n ChFileCategories.DocumentID,\r\n fileName\r\n );\r\n await model.fileContainer.addFile(fileForPrint);\r\n await editor.saveCard(context);\r\n\r\n this.UpdateButtonControlName(control as ButtonViewModel, card, false, false);\r\n\r\n } catch (error) {\r\n\r\n showError('Ошибка в процессе формирования печатной формы акта: ' + error.toString());\r\n throw error;\r\n\r\n } finally {\r\n control.isReadOnly = false;\r\n }\r\n }\r\n\r\n /** Обновить видимость кнопки в файловом контроле */\r\n private static UpdateButtonControlVisability(control: IControlViewModel, card: Card, fromTemplateButton: boolean = true) {\r\n // Кнопка \"Создать акт по шаблону\"\r\n if (fromTemplateButton) {\r\n let dciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n let ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n if (!dciSection || !ediSection) {\r\n control.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n let stateID: number | undefined = dciSection.fields.tryGet('StateID');\r\n let kindID: guid | undefined = ediSection.fields.tryGet('EDKindNewID');\r\n if (!stateID || !kindID) {\r\n control.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n let correctStates: boolean = (stateID === CdDocStates.Draft.id || stateID === CdDocStates.Rework.id);\r\n let correctKinds: boolean = kindID === CdExecutiveDocumentationKinds.ActOfExaminationOfHiddenWorks\r\n || kindID === CdExecutiveDocumentationKinds.ActOfExaminationOfResponsibleStructures\r\n || kindID === CdExecutiveDocumentationKinds.ActOfIntermediateExaminationOfResponsibleStructures;\r\n\r\n if (correctStates && correctKinds) {\r\n if (control.controlVisibility !== Visibility.Visible) {\r\n control.controlVisibility = Visibility.Visible;\r\n }\r\n } else {\r\n if (control.controlVisibility !== Visibility.Collapsed) {\r\n control.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n // Кнопка \"Сформировать печатную форму акта\"\r\n } else {\r\n let dciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n let ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n if (!dciSection || !ediSection) {\r\n control.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n let stateID: number | undefined = dciSection.fields.tryGet('StateID');\r\n let signingTypeID: number | undefined = ediSection.fields.tryGet('SigningTypeID');\r\n if (!stateID || !signingTypeID) {\r\n control.controlVisibility = Visibility.Collapsed;\r\n return;\r\n }\r\n let correctStates: boolean = stateID !== CdDocStates.Draft.id && stateID !== CdDocStates.Rework.id;\r\n let correctSigningType: boolean = signingTypeID === 1;\r\n\r\n if (correctStates && correctSigningType) {\r\n if (control.controlVisibility !== Visibility.Visible) {\r\n control.controlVisibility = Visibility.Visible;\r\n }\r\n } else {\r\n if (control.controlVisibility !== Visibility.Collapsed) {\r\n control.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Обновить название кнопки в файловом контроле */\r\n private static UpdateButtonControlName(control: ButtonViewModel, card: Card, isDelete: boolean = false, fromTemplateButton: boolean = true) {\r\n // Кнопка \"Создать акт по шаблону\"\r\n if (fromTemplateButton) {\r\n if (isDelete) {\r\n let ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n if (ediSection && ediSection.fields.has('TemplateFileRowID')) {\r\n ediSection.fields['TemplateFileRowID'] = null;\r\n }\r\n }\r\n\r\n let templateFileRowID: guid | null = CdExecutiveDocumentationSharedHelper.GetCurrentTemplateFileRowID(card);\r\n let file: CardFile | undefined = card.files.find(x => (templateFileRowID !== null && x.rowId === templateFileRowID));\r\n if (file !== undefined && !isDelete) {\r\n control.text = 'Обновить информацию в акте';\r\n } else {\r\n control.text = 'Создать акт по шаблону';\r\n }\r\n // Кнопка \"Сформировать печатную форму акта\"\r\n } else {\r\n let file = card.files.find(x =>\r\n x.categoryId !== null &&\r\n ChFileCategories.DocumentID.id !== null &&\r\n x.categoryId.toLowerCase() === ChFileCategories.DocumentID.id.toLocaleLowerCase() &&\r\n x.name.indexOf(this.PdfForPrint) > 0);\r\n let hasFile: boolean = file !== undefined;\r\n\r\n if (hasFile) {\r\n control.text = 'Обновить печатную форму акта';\r\n } else {\r\n control.text = 'Сформировать печатную форму акта';\r\n }\r\n }\r\n }\r\n\r\n /** Обновить видимость контролов работ */\r\n private static UpdateWorkControlsVisability(missingTechnicalDocumentation: boolean | undefined, workTextControl: IControlViewModel, workRefControl: IControlViewModel) {\r\n if (missingTechnicalDocumentation !== undefined &&\r\n missingTechnicalDocumentation)\r\n this.UpdateControlsVisability(workTextControl, workRefControl);\r\n else\r\n this.UpdateControlsVisability(workRefControl, workTextControl);\r\n }\r\n\r\n /** Включает первый контрол и выключает второй */\r\n private static UpdateControlsVisability(firstControl: IControlViewModel, secondControl: IControlViewModel) {\r\n if (firstControl.controlVisibility !== Visibility.Visible)\r\n firstControl.controlVisibility = Visibility.Visible;\r\n if (secondControl.controlVisibility !== Visibility.Collapsed)\r\n secondControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n\r\n private static async UpdateVisibilityHiddenWorks(card: Card, model: ICardModel) {\r\n let hiddenWorkField = model.controls.get(\"HiddenWorkField\");\r\n if (card.sections.has(\"PkExecutiveDocumentationInfo\")) {\r\n let pedi = card.sections.get(\"PkExecutiveDocumentationInfo\");\r\n let missingHiddenWorks: boolean = pedi!.fields.get(\"MissingHiddenWorks\");\r\n\r\n if (missingHiddenWorks != null\r\n && missingHiddenWorks) {\r\n hiddenWorkField!.controlVisibility = Visibility.Visible;\r\n }\r\n pedi!.fields.fieldChanged.add(async e => {\r\n if (e.fieldValue != null && e.fieldName == \"MissingHiddenWorks\") {\r\n missingHiddenWorks = e.fieldValue;\r\n\r\n if (missingHiddenWorks != null\r\n && missingHiddenWorks) {\r\n hiddenWorkField!.controlVisibility = Visibility.Visible;\r\n }\r\n else if (!missingHiddenWorks) {\r\n hiddenWorkField!.controlVisibility = Visibility.Collapsed;\r\n if (pedi!.fields.get(\"HiddenWorksSafetyStructure\") != null) {\r\n pedi!.fields.set(\"HiddenWorksSafetyStructure\", null)\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n private static async UpdateVisibilityCopiedSubject(card: Card, model: ICardModel) {\r\n let copiedFrom = model.controls.get(\"CopiedFrom\");\r\n if (card.sections.has(\"PkExecutiveDocumentationInfo\")) {\r\n let pedi = card.sections.get(\"PkExecutiveDocumentationInfo\");\r\n let isCopied: boolean = pedi!.fields.get(\"isCopied\");\r\n\r\n if (isCopied != null\r\n && isCopied) {\r\n copiedFrom!.controlVisibility = Visibility.Visible;\r\n }\r\n else if (isCopied == null || !isCopied) {\r\n copiedFrom!.controlVisibility = Visibility.Collapsed;\r\n }\r\n pedi!.fields.fieldChanged.add(async e => {\r\n if (e.fieldValue != null && e.fieldName == \"isCopied\") {\r\n isCopied = e.fieldValue;\r\n\r\n if (isCopied != null\r\n && isCopied) {\r\n copiedFrom!.controlVisibility = Visibility.Visible;\r\n }\r\n else if (!isCopied) {\r\n copiedFrom!.controlVisibility = Visibility.Collapsed;\r\n pedi!.fields.set(\"CopiedFromID\", null);\r\n pedi!.fields.set(\"CopiedFromSubject\", null);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n private static async GetCard(cardId: DotNetType.Guid) {\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 if (response.validationResult.isSuccessful) {\r\n return response.card;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n private static async FillActFromIntermediateAct(mainCard: Card, context: ICardUIExtensionContext) {\r\n if (!mainCard.sections.has(\"PkExecutiveDocumentationInfo\"))\r\n return;\r\n let mainPediSection = mainCard!.sections.get(\"PkExecutiveDocumentationInfo\");\r\n\r\n if (!mainPediSection!.fields.has(\"CopiedFromID\"))\r\n return;\r\n\r\n mainPediSection!.fields.fieldChanged.add(async e => {\r\n if (e.fieldName == \"CopiedFromID\" && e.fieldValue != null) {\r\n let copiedCardId = mainPediSection!.fields.get(\"CopiedFromID\");\r\n\r\n if (copiedCardId == null)\r\n return;\r\n\r\n var copiedCard = await this.GetCard(copiedCardId);\r\n if (copiedCard == null)\r\n return;\r\n\r\n this.SetActFields(mainCard, copiedCard);\r\n this.SaveCardToUpdateFiles(context);\r\n }\r\n });\r\n }\r\n private static async SetActFields(mainCard: Card, copiedCard: Card) {\r\n\r\n let mainPedi = mainCard.sections.get(\"PkExecutiveDocumentationInfo\");\r\n let copiedPedi = copiedCard.sections.get(\"PkExecutiveDocumentationInfo\");\r\n\r\n let mainPdci = mainCard.sections.get(\"PkDocumentCommonInfo\");\r\n let copiedPdci = copiedCard.sections.get(\"PkDocumentCommonInfo\");\r\n\r\n let mainPedwft = mainCard.sections.get(\"PkExecutiveDocumentationWorksForTemplate\");\r\n let copiedPedwft = copiedCard.sections.get(\"PkExecutiveDocumentationWorksForTemplate\");\r\n\r\n let mainPedhwssi = mainCard.sections.get(\"PkExecutiveDocumentationHiddenWorksSafetyStructureInfo\");\r\n let copiedPedhwssi = copiedCard.sections.get(\"PkExecutiveDocumentationHiddenWorksSafetyStructureInfo\");\r\n\r\n let mainPedm = mainCard.sections.get(\"PkExecutiveDocumentationMatching\");\r\n let copiedPedm = copiedCard.sections.get(\"PkExecutiveDocumentationMatching\");\r\n\r\n let mainPedr = mainCard.sections.get(\"PkExecutiveDocumentationRoles\");\r\n let copiedPedr = copiedCard.sections.get(\"PkExecutiveDocumentationRoles\");\r\n\r\n let mainPedars = mainCard.sections.get(\"PkExecutiveDocumentationActOfResonsibleStructures\");\r\n let copiedPedars = copiedCard.sections.get(\"PkExecutiveDocumentationActOfResonsibleStructures\");\r\n\r\n mainPedi!.fields.set(\"SigningTypeID\", copiedPedi!.fields.get(\"SigningTypeID\"), DotNetType.Int32);\r\n mainPedi!.fields.set(\"SigningTypeName\", copiedPedi!.fields.get(\"SigningTypeName\"), DotNetType.String);\r\n mainPedi!.fields.set(\"EDTypeID\", copiedPedi!.fields.get(\"EDTypeID\"), DotNetType.Guid);\r\n mainPedi!.fields.set(\"EDTypeName\", copiedPedi!.fields.get(\"EDTypeName\"), DotNetType.String);\r\n mainPedi!.fields.set(\"Location\", copiedPedi!.fields.get(\"Location\"), DotNetType.String);\r\n mainPedi!.fields.set(\"StartWorkDate\", copiedPedi!.fields.get(\"StartWorkDate\"), DotNetType.DateTime);\r\n mainPedi!.fields.set(\"FinishWorkDate\", copiedPedi!.fields.get(\"FinishWorkDate\"), DotNetType.DateTime);\r\n mainPedi!.fields.set(\"NumberOfCopies\", copiedPedi!.fields.get(\"NumberOfCopies\"), DotNetType.Int32);\r\n mainPedi!.fields.set(\"isEO\", copiedPedi!.fields.get(\"isEO\"), DotNetType.Boolean);\r\n mainPedi!.fields.set(\"isAuthorSupervision\", copiedPedi!.fields.get(\"isAuthorSupervision\"), DotNetType.Boolean);\r\n mainPedi!.fields.set(\"isZOS\", copiedPedi!.fields.get(\"isZOS\"), DotNetType.Boolean);\r\n let isRVE = copiedPedi!.fields.get(\"SigniisRVEngTypeName\");\r\n if (isRVE == null)\r\n isRVE = false;\r\n mainPedi!.fields.set(\"isRVE\", isRVE, DotNetType.Boolean);\r\n mainPedi!.fields.set(\"WorksPerformedAccordingToProjectDocumentation\", copiedPedi!.fields.get(\"WorksPerformedAccordingToProjectDocumentation\"), DotNetType.String);\r\n mainPedi!.fields.set(\"MissingTechnicalDocumentation\", copiedPedi!.fields.get(\"MissingTechnicalDocumentation\"), DotNetType.Boolean);\r\n mainPedi!.fields.set(\"MissingHiddenWorks\", copiedPedi!.fields.get(\"MissingHiddenWorks\"), DotNetType.Boolean);\r\n mainPedi!.fields.set(\"HiddenWorksSafetyStructure\", copiedPedi!.fields.get(\"HiddenWorksSafetyStructure\"), DotNetType.String);\r\n mainPedi!.fields.set(\"ConfirmingDocuments\", copiedPedi!.fields.get(\"ConfirmingDocuments\"), DotNetType.String);\r\n mainPedi!.fields.set(\"WorksPerformedInAccordance\", copiedPedi!.fields.get(\"WorksPerformedInAccordance\"), DotNetType.String);\r\n mainPedi!.fields.set(\"SubsequentWorkIsAllowedTypeID\", copiedPedi!.fields.get(\"SubsequentWorkIsAllowedTypeID\"), DotNetType.Guid);\r\n mainPedi!.fields.set(\"SubsequentWorkIsAllowedTypeName\", copiedPedi!.fields.get(\"SubsequentWorkIsAllowedTypeName\"), DotNetType.String);\r\n mainPedi!.fields.set(\"WorksForTemplate\", copiedPedi!.fields.get(\"WorksForTemplate\"), DotNetType.String);\r\n mainPedi!.fields.set(\"WorkLocation\", copiedPedi!.fields.get(\"WorkLocation\"), DotNetType.String);\r\n mainPedi!.fields.set(\"ResidentialComplexID\", copiedPedi!.fields.get(\"ResidentialComplexID\"), DotNetType.Guid);\r\n mainPedi!.fields.set(\"RegionID\", copiedPedi!.fields.get(\"RegionID\"), DotNetType.Guid);\r\n\r\n mainPedars!.fields.set(\"PermittedEmployStructures\", copiedPedars!.fields.get(\"PermittedEmployStructures\"), DotNetType.String);\r\n mainPedars!.fields.set(\"PermittedEmployStructuresWithLoad\", copiedPedars!.fields.get(\"PermittedEmployStructuresWithLoad\"), DotNetType.Int32);\r\n mainPedars!.fields.set(\"PermittedFullLoad\", copiedPedars!.fields.get(\"PermittedFullLoad\"), DotNetType.String);\r\n\r\n mainPdci!.fields.set(\"Description\", copiedPdci!.fields.get(\"Description\"), DotNetType.String);\r\n\r\n if (copiedPedwft!.rows != null && copiedPedwft!.rows.length > 0) {\r\n copiedPedwft!.rows.forEach(row => {\r\n let mainRow = new CardRow();\r\n\r\n mainRow.rowId = Guid.newGuid();\r\n\r\n mainRow.set(\"WorkTechnicalDocumentationID\", row.get(\"WorkTechnicalDocumentationID\"), DotNetType.Guid);\r\n mainRow.set(\"WorkTechnicalDocumentationFullNumber\", row.get(\"WorkTechnicalDocumentationFullNumber\"), DotNetType.String);\r\n mainRow.set(\"RdDivision\", row.get(\"RdDivision\"), DotNetType.String);\r\n mainRow.set(\"ContractDivision\", row.get(\"ContractDivision\"), DotNetType.String);\r\n mainRow.set(\"Version\", row.get(\"Version\"), DotNetType.String);\r\n mainRow.set(\"Number\", row.get(\"Number\"), DotNetType.String);\r\n\r\n mainRow.state = CardRowState.Inserted;\r\n mainPedwft!.rows.push(mainRow);\r\n });\r\n }\r\n if (copiedPedhwssi!.rows != null && copiedPedhwssi!.rows.length > 0) {\r\n copiedPedhwssi!.rows.forEach(row => {\r\n let needInsertRow: boolean = true;\r\n for (let existingRow of mainPedhwssi!.rows) {\r\n if (row.get(\"SubjectID\") == existingRow.get(\"SubjectID\")) {\r\n needInsertRow = false;\r\n break;\r\n }\r\n }\r\n if (needInsertRow) {\r\n let mainRow = new CardRow();\r\n\r\n mainRow.rowId = Guid.newGuid();\r\n\r\n mainRow.set(\"SecondaryFullNumber\", row.get(\"SecondaryFullNumber\"), DotNetType.String);\r\n mainRow.set(\"СreationDate\", row.get(\"СreationDate\"), DotNetType.DateTime);\r\n mainRow.set(\"SubjectID\", row.get(\"SubjectID\"), DotNetType.Guid);\r\n mainRow.set(\"SubjectSubject\", row.get(\"SubjectSubject\"), DotNetType.String);\r\n mainRow.set(\"Author\", row.get(\"Author\"), DotNetType.String);\r\n mainRow.set(\"Department\", row.get(\"Department\"), DotNetType.String);\r\n mainRow.set(\"State\", row.get(\"State\"), DotNetType.String);\r\n\r\n mainRow.state = CardRowState.Inserted;\r\n mainPedhwssi!.rows.push(mainRow);\r\n }\r\n });\r\n }\r\n\r\n let guids: Array = new Array();\r\n if (copiedPedm!.rows != null && copiedPedm!.rows.length > 0) {\r\n for (let i = 0; i < copiedPedm!.rows.length; i++) {\r\n for (let j = 0; j < mainPedm!.rows.length; j++) {\r\n if (copiedPedm!.rows[i].get(\"RoleID\") == mainPedm!.rows[j].get(\"RoleID\")) {\r\n let guid = new FillMatching();\r\n guid.CopiedID = copiedPedm!.rows[i].get(\"RowID\");\r\n guid.ID = mainPedm!.rows[j].get(\"RowID\");\r\n guid.IsExists = false;\r\n\r\n guids.push(guid);\r\n\r\n mainPedm!.rows[j].set(\"RoleID\", copiedPedm!.rows[i].get(\"RoleID\"), DotNetType.Int32);\r\n mainPedm!.rows[j].set(\"RoleName\", copiedPedm!.rows[i].get(\"RoleName\"), DotNetType.String);\r\n //mainPedm!.rows[j].set(\"Result\", copiedPedm!.rows[i].get(\"SubjectID\"), DotNetType.String);\r\n //mainPedm!.rows[j].set(\"Date\", copiedPedm!.rows[i].get(\"Date\"), DotNetType.String);\r\n mainPedm!.rows[j].set(\"OrderNumber\", copiedPedm!.rows[i].get(\"OrderNumber\"), DotNetType.String);\r\n mainPedm!.rows[j].set(\"OrderDate\", copiedPedm!.rows[i].get(\"OrderDate\"), DotNetType.DateTime);\r\n mainPedm!.rows[j].set(\"LegalEntityID\", copiedPedm!.rows[i].get(\"LegalEntityID\"), DotNetType.Guid);\r\n mainPedm!.rows[j].set(\"LegalEntityExternalID\", copiedPedm!.rows[i].get(\"LegalEntityExternalID\"), DotNetType.Int64);\r\n mainPedm!.rows[j].set(\"LegalEntityName\", copiedPedm!.rows[i].get(\"LegalEntityName\"), DotNetType.String);\r\n mainPedm!.rows[j].set(\"Order\", copiedPedm!.rows[i].get(\"Order\"), DotNetType.Int32);\r\n\r\n //mainPedm!.rows[j].state = CardRowState.Inserted;\r\n }\r\n }\r\n for (let j = 0; j < copiedPedr!.rows.length; j++) {\r\n if (copiedPedm!.rows[i].get(\"RowID\") == copiedPedr!.rows[j].get(\"MatchingRowID\")) {\r\n guids.find(x => x.CopiedID == copiedPedm!.rows[i].get(\"RowID\"))!.IsExists = true;\r\n }\r\n }\r\n }\r\n }\r\n if (copiedPedr!.rows != null && copiedPedr!.rows.length > 0) {\r\n for (let mainRow of mainPedr!.rows) {\r\n if (mainRow.get(\"RoleID\") != null\r\n && guids.find(x => x.ID == mainRow.get(\"MatchingRowID\")) != null) {\r\n guids.find(x => x.ID == mainRow.get(\"MatchingRowID\"))!.IsExists = false;\r\n }\r\n else {\r\n mainRow.state = CardRowState.Deleted;\r\n }\r\n }\r\n copiedPedr!.rows.forEach(row => {\r\n if (guids.find(x => x.CopiedID == row.get(\"MatchingRowID\"))!.IsExists) {\r\n let mainRow = new CardRow();\r\n\r\n mainRow.rowId = Guid.newGuid();\r\n\r\n mainRow.set(\"MatchingRowID\", guids.find(x => x.CopiedID == row.get(\"MatchingRowID\"))!.ID, DotNetType.Guid);\r\n mainRow.set(\"RoleID\", row.get(\"RoleID\"), DotNetType.Guid);\r\n mainRow.set(\"RoleName\", row.get(\"RoleName\"), DotNetType.String);\r\n mainRow.set(\"RoleKCKName\", row.get(\"RoleKCKName\"), DotNetType.String);\r\n mainRow.set(\"RoleKCKID\", row.get(\"RoleKCKID\"), DotNetType.Guid);\r\n mainRow.set(\"RoleKCKExternalID\", row.get(\"RoleKCKExternalID\"), DotNetType.Int64);\r\n\r\n mainRow.state = CardRowState.Inserted;\r\n mainPedr!.rows.push(mainRow);\r\n }\r\n });\r\n }\r\n }\r\n private static async FillObjectsLikeString(card: Card, model: ICardModel) {\r\n if (card.sections.has(\"PkObjectsVirtual\")) {\r\n let pov = card.sections.get(\"PkObjectsVirtual\");\r\n let rows = card.sections.get(\"PkObjectList\")!.rows;\r\n let mainObjects: Objects = new Objects();\r\n mainObjects.ObjectsId = new Array();\r\n for (let i = 0; i < rows.length; i++) {\r\n if (rows[i].get(\"ObjectID\") == null)\r\n continue;\r\n mainObjects.ObjectsId.push(rows[i].get(\"ObjectID\"));\r\n }\r\n if (pov!.fields.has(\"ObjectsLikeString\")) {\r\n let objectslikeString = \"{\\\"ObjectsId\\\":\" + JSON.stringify(mainObjects.ObjectsId) + \"}\"\r\n pov!.fields.set(\"ObjectsLikeString\", objectslikeString, DotNetType.String);\r\n pov!.clearChanges();\r\n }\r\n var polTable = model.controls.get(\"Objects\") as GridViewModel;\r\n\r\n polTable!.rowInitializing.add(e => {\r\n if (e == null)\r\n return;\r\n rows.forEach(row => {\r\n row.fieldChanged.add(e1 => {\r\n if (e1 == null)\r\n return;\r\n let objects: Objects = new Objects();\r\n objects.ObjectsId = new Array();\r\n for (let i = 0; i < rows.length; i++) {\r\n if (rows[i].get(\"ObjectID\") == null)\r\n continue;\r\n objects.ObjectsId.push(rows[i].get(\"ObjectID\"));\r\n }\r\n if (pov!.fields.has(\"ObjectsLikeString\")) {\r\n let objectslikeString = \"{\\\"ObjectsId\\\":\" + JSON.stringify(objects.ObjectsId) + \"}\"\r\n pov!.fields.set(\"ObjectsLikeString\", objectslikeString, DotNetType.String);\r\n pov!.clearChanges();\r\n }\r\n });\r\n });\r\n });\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { CdUIHelper } from '../CdUIHelper';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { Card } from 'tessa/cards';\r\nimport { CdExecutiveDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdExecutiveDocumentationClientHelper';\r\nimport { CdGeneralDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper';\r\n\r\nexport class CdExecutiveDocumentationUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n let card: Card;\r\n if ((model = context.model) == null ||\r\n (card = 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 CdUIHelper.InitializeTableObjects(context);\r\n CdGeneralDocumentationClientHelper.MatchingVisabilityLogic(context);\r\n CdExecutiveDocumentationClientHelper.FieldLogic(card, model);\r\n CdExecutiveDocumentationClientHelper.FillApproversLogic(context);\r\n CdExecutiveDocumentationClientHelper.ButtonLogic(card, model);\r\n CdExecutiveDocumentationClientHelper.FillLegalEntity(model);\r\n CdExecutiveDocumentationClientHelper.TableOrderLogic(card, context); \r\n CdExecutiveDocumentationClientHelper.FieldsTemplateLogic(card, model);\r\n CdExecutiveDocumentationClientHelper.FieldsExecutiveSchemeTable(card);\r\n CdExecutiveDocumentationClientHelper.FieldsHiddenWorksLogic(card, model,context);\r\n CdExecutiveDocumentationClientHelper.ExecutiveSchemeForEdControlLogic(card, model, context);\r\n CdExecutiveDocumentationClientHelper.FillSpecialistNumber(card);\r\n CdExecutiveDocumentationClientHelper.ItdBlockLogic(context);\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, CdCardTypes.PkExecutiveDocumentationTypeID)) {\r\n return;\r\n }\r\n\r\n let ediSection = card.sections.tryGet(\"PkExecutiveDocumentationInfo\");\r\n if (ediSection &&\r\n ediSection.fields.has('EDKindNewID') &&\r\n !ediSection.fields.tryGet('EDKindNewID')) {\r\n ediSection.fields.rawSet('EDKindNewID', createTypedField('00000000-0000-0000-0000-000000000000', DotNetType.Guid));\r\n }\r\n \r\n await CdExecutiveDocumentationClientHelper.CheckAddedFiles(context, 0);\r\n if (await !CdGeneralDocumentationClientHelper.CheckEditSignedFile(card)) {\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 { Card, CardSection, CardFileState, CardRow, CardRowState, CardGetMode, CardTask } from \"tessa/cards\";\r\nimport { IControlViewModel, ICardModel, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { DotNetType, createTypedField, Visibility, Guid } from \"tessa/platform\";\r\nimport { GridViewModel, GridRowAction } from \"tessa/ui/cards/controls\";\r\nimport { showNotEmpty, showError, LoadingOverlay} from \"tessa/ui\";\r\nimport { CardRequest, CardService, CardGetRequest } from \"tessa/cards/service\";\r\nimport { CdRequestTypes } from \"../CdRequestTypes\";\r\nimport { ChFileCategories } from \"src/pkScripts/Helpers/ChFileCategories\";\r\nimport { CdExecutiveSchemeTypes } from \"../CdExecutiveSchemeTypes\";\r\nimport { CdFdTaskTypes } from \"../CdFdTaskTypes\";\r\nimport { CdFdProcessHelper } from \"../CdFdProcessHelper\";\r\nimport { ValidationResultType } from \"tessa/platform/validation\";\r\nimport { ApproversRoleID } from \"../Dictionaries/ApproversRoleID\";\r\nimport { CdExecutiveSchemeSharedHelper } from \"./CdExecutiveSchemeSharedHelper\";\r\nimport { ArrayStorage } from \"tessa/platform/storage\";\r\nimport {CdGeneralDocumentationClientHelper} from './CdGeneralDocumentationClientHelper';\r\nimport { CdCardTypes } from \"../CdCardTypes\";\r\nimport { CdUIHelper } from \"src/cdScripts/UI/CdUIHelper\";\r\n\r\n\r\nexport class CdExecutiveSchemeClientHelper extends CdGeneralDocumentationClientHelper{\r\n\r\n public static PdfForPrint: string = ' (для печати).pdf';\r\n\r\n /** Проверка после завершении задания */\r\n public static async CheckFieldsAfterTaskComplete(context: ICardUIExtensionContext, tasks: ArrayStorage) {\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);\r\n let checkAddNewMatchingRoles: boolean = this.CheckAddNewMatchingRoles(context);\r\n //let fillFdRoute: boolean = this.FillFdRoute(context);\r\n if (!checkAddedFiles ||\r\n !checkAddNewMatchingRoles \r\n //!fillFdRoute\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 (x.typeId === CdFdTaskTypes.PkSignExecutiveSchemeInitializingTypeID.toLowerCase() ||\r\n x.typeId === CdFdTaskTypes.PkExecutiveSchemeToReworkTypeID.toLowerCase()) &&\r\n (x.optionId === CdFdProcessHelper.PkSendForResigning.toLowerCase() ||\r\n x.optionId === CdFdProcessHelper.PkSendForSigning.toLowerCase()));\r\n let deletedArchiveTaskIndex = tasks.findIndex(x =>\r\n x.state === CardRowState.Deleted &&\r\n x.typeId === CdFdTaskTypes.PkFdInArchiveTypeID.toLowerCase() &&\r\n x.optionId === CdFdProcessHelper.ToArchive.toLowerCase());\r\n if (deletedTaskIndex >= 0) {\r\n let checkContentFile: boolean = await CdUIHelper.CheckContentFileAsync(context.model.card);\r\n let checkApprovers: boolean = this.CheckApprovers(context,'PkExecutiveSchemeMatching','PkExecutiveSchemeRoles');\r\n if (!checkContentFile || !checkApprovers) {\r\n context.cancel = true;\r\n return;\r\n }\r\n } else if (deletedArchiveTaskIndex >= 0) {\r\n let edmSection = context.model.card.sections.tryGet('PkExecutiveDocumentationMatching');\r\n if (edmSection) {\r\n let cnmRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Contractor &&\r\n x.has('LegalEntityID') &&\r\n x.tryGet('LegalEntityID') !== null &&\r\n x.tryGet('LegalEntityID') !== undefined &&\r\n x.tryGet('LegalEntityID') !== '00000000-0000-0000-0000-000000000000');\r\n if (!cnmRow) {\r\n let orgnzForFill = '';\r\n let roleNameRow = edmSection.rows.find(x =>\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === ApproversRoleID.Contractor);\r\n if (roleNameRow) {\r\n orgnzForFill += '\\n' + roleNameRow.tryGet('RoleName');\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить юридическое лицо:' + orgnzForFill);\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n \r\n await this.SignFilesAsync(context, tasks, CdExecutiveSchemeSharedHelper.ApproverTaskStoreInfo.TaskSignTypesList);\r\n }\r\n\r\n public static CheckApprovementTableOrder(context: ICardUIExtensionContext) {\r\n let card = context.card;\r\n let edmSection = card.sections.tryGet('PkExecutiveSchemeMatching');\r\n if (edmSection &&\r\n edmSection.rows.findIndex(x =>\r\n x.state === CardRowState.Modified ||\r\n x.state === CardRowState.Inserted) >= 0) { \r\n \r\n let roleIDs: number[] = [];\r\n let step = 0; \r\n for (let i = 0; i < edmSection.rows.length; i++)\r\n roleIDs.push(edmSection.rows[i].get('RoleID'));\r\n roleIDs.sort();\r\n for (let i = 0; i < roleIDs.length; i++) { \r\n let roleIDIndex = edmSection.rows.findIndex(x =>\r\n x.has('RoleID') &&\r\n x.get('RoleID') === roleIDs[i]);\r\n edmSection.rows[roleIDIndex].set('Order', createTypedField(step, DotNetType.Int32));\r\n step++;\r\n } \r\n }\r\n }\r\n\r\n public static TableOrderLogic(context: ICardUIExtensionContext) { \r\n \r\n let matchingControlViewModel: IControlViewModel | undefined = context.model.controls.get('Matching');\r\n if (matchingControlViewModel) {\r\n let controlViewModel = matchingControlViewModel as GridViewModel | null;\r\n if (controlViewModel) {\r\n controlViewModel.rowInvoked.add(e => {\r\n if (e.action === GridRowAction.Deleting)\r\n { \r\n e.cancel = true;\r\n let eorder = e.row.tryGetField(\"Order\")!.$value;\r\n controlViewModel!.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 });\r\n }\r\n }\r\n \r\n }\r\n\r\n \r\n public static FieldsExecutiveSchemeLogic(card: Card, model: ICardModel, context: ICardUIExtensionContext) {\r\n let esInfoSection = card.sections.tryGet('PkExecutiveSchemeInfo');\r\n \r\n let techDocPageControl: IControlViewModel | undefined = model.controls.get('TechDocPageControl');\r\n let useTechDocPageAsExecutiveSchemeControl: IControlViewModel | undefined = model.controls.get('UseTechDocPageAsExecutiveSchemeControl');\r\n if (techDocPageControl && useTechDocPageAsExecutiveSchemeControl && esInfoSection) {\r\n\r\n let useTechDocPageAsExecutiveScheme = esInfoSection.fields.get(\"UseTechDocPageAsExecutiveScheme\");\r\n let executiveSchemeTypeID = esInfoSection.fields.get(\"ExecutiveSchemeTypeID\");\r\n this.UpdateControlVisability(techDocPageControl,useTechDocPageAsExecutiveScheme&&executiveSchemeTypeID==CdExecutiveSchemeTypes.NonGeodeticSchemeType);\r\n this.UpdateControlVisability(useTechDocPageAsExecutiveSchemeControl,executiveSchemeTypeID==CdExecutiveSchemeTypes.NonGeodeticSchemeType);\r\n \r\n esInfoSection.fields.fieldChanged.add(e => {\r\n \r\n if (e.fieldName === 'ExecutiveSchemeTypeID') { \r\n \r\n esInfoSection!.fields.set('UseTechDocPageAsExecutiveScheme',createTypedField(false, DotNetType.Boolean));\r\n esInfoSection!.fields.set('TechnicalDocumentationPageFileID',null);\r\n esInfoSection!.fields.set('TechnicalDocumentationPageID',null);\r\n esInfoSection!.fields.set('TechnicalDocumentationPageOrder',null);\r\n esInfoSection!.fields.set('TechnicalDocumentationPageName',null);\r\n\r\n executiveSchemeTypeID = e.fieldValue; \r\n this.UpdateControlVisability(useTechDocPageAsExecutiveSchemeControl,executiveSchemeTypeID==CdExecutiveSchemeTypes.NonGeodeticSchemeType);\r\n if (executiveSchemeTypeID != CdExecutiveSchemeTypes.NonGeodeticSchemeType) {\r\n this.UpdateControlVisability(techDocPageControl,false);\r\n } \r\n this.FillESTableApprovers(card,executiveSchemeTypeID).then(()=>{this.FillApproversByObject(card)}) \r\n if (executiveSchemeTypeID == CdExecutiveSchemeTypes.GeodeticSchemeType){\r\n this.FillApproversFromRDND(card);\r\n } \r\n }\r\n\r\n if (e.fieldName === 'UseTechDocPageAsExecutiveScheme') { \r\n \r\n if (esInfoSection){\r\n esInfoSection.fields.set(\"TechnicalDocumentationPageFileID\",null);\r\n esInfoSection.fields.set(\"TechnicalDocumentationPageID\",null);\r\n esInfoSection.fields.set(\"TechnicalDocumentationPageOrder\",null);\r\n esInfoSection.fields.set(\"TechnicalDocumentationPageName\",null);\r\n }\r\n \r\n\r\n useTechDocPageAsExecutiveScheme = e.fieldValue; \r\n if (useTechDocPageAsExecutiveScheme == true)\r\n { \r\n if (!(confirm(\"Подтверждаю, что работы предъявляемые к освидетельствованию выполнены в соответствии с РД.\")))\r\n { \r\n esInfoSection!.fields.set('UseTechDocPageAsExecutiveScheme',createTypedField(false, DotNetType.Boolean));\r\n return; \r\n } \r\n }\r\n this.UpdateControlVisability(techDocPageControl,useTechDocPageAsExecutiveScheme); \r\n }\r\n\r\n if (e.fieldName === 'TechnicalDocumentationPageID') { \r\n this.SaveCardToUpdateFiles(context) \r\n }\r\n\r\n\r\n }); \r\n }\r\n }\r\n\r\n\r\n public static SaveCardToUpdateFiles(context: ICardUIExtensionContext)\r\n { \r\n LoadingOverlay.instance.show(async () => {\r\n let editor = context.uiContext.cardEditor;\r\n editor!.saveCard(context.uiContext);\r\n }); \r\n }\r\n\r\npublic static FillApproversLogic(card: Card, model: ICardModel) {\r\n const objects = model.controls.get('Objects') as GridViewModel;\r\n if (!objects) return; \r\n let objSection: CardSection | undefined = card.sections.tryGet('PkObjectList');\r\n let edRolesSection: CardSection | undefined = card.sections.tryGet('PkExecutiveSchemeRoles');\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet('PkExecutiveSchemeMatching');\r\n if (!objSection || !edRolesSection || !edMatchingSection) return;\r\n objects.rowInitializing.add(e => {\r\n e.row.fieldChanged.add(async e2 => {\r\n if (e2.fieldName !== \"ObjectID\" || !e) return;\r\n this.FillApproversByObject(card);\r\n this.FillApproversFromRDND(card);\r\n });\r\n });\r\n}\r\n\r\npublic static async FillESTableApprovers(card: Card, executiveSchemeTypeID: guid)\r\n {\r\n let esmSection = card.sections.tryGet('PkExecutiveSchemeMatching');\r\n if (!esmSection)\r\n {\r\n return;\r\n }\r\n if (esmSection.rows.length != 0)\r\n {\r\n for (let i = esmSection.rows.length - 1; i >= 0; i--) {\r\n if (esmSection.rows[i].state === CardRowState.Inserted)\r\n esmSection.rows.splice(i, 1);\r\n else esmSection.rows[i].state = CardRowState.Deleted;\r\n } \r\n }\r\n\r\n var roles = await this.GetTableRolesES(executiveSchemeTypeID);\r\n if (roles == null) return;\r\n let sc: CardSection | undefined = card.sections.tryGet('PkExecutiveSchemeInfo');\r\n let isRenovation = sc?.fields.tryGet('IsRenovation', null);\r\n let typeID = sc?.fields.tryGet('ExecutiveSchemeTypeID', null);\r\n if (roles.length > 0){\r\n roles.forEach(row => {\r\n if (isRenovation === true &&\r\n typeID && typeID === CdExecutiveSchemeTypes.GeodeticSchemeType &&\r\n row.RoleID === 0) {\r\n return;\r\n }\r\n let esmSectionRow = new CardRow();\r\n esmSectionRow.rowId = Guid.newGuid();\r\n esmSectionRow.set(\"RoleID\", row[\"RoleID\"], DotNetType.Int32);\r\n esmSectionRow.set(\"RoleName\", row[\"RoleName\"], 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\", row[\"RoleID\"], DotNetType.Int32); \r\n esmSectionRow.state = CardRowState.Inserted;\r\n esmSection!.rows.push(esmSectionRow);\r\n });\r\n } \r\n } \r\n\r\n public static async GetTableRolesES(executiveSchemeTypeID:guid)\r\n { \r\n let result = new Array();\r\n if (executiveSchemeTypeID == null) return result;\r\n const request = new CardGetRequest();\r\n request.getMode = CardGetMode.ReadOnly;\r\n request.cardId = executiveSchemeTypeID;\r\n const response = await CardService.instance.get(request);\r\n\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n const esTypeCard = response.card; \r\n let pkEsTypeSignerRolesSection = esTypeCard.sections.tryGet(\"PkEsTypeSignerRoles\");\r\n if (!pkEsTypeSignerRolesSection) return result;\r\n \r\n let rows = pkEsTypeSignerRolesSection.rows;\r\n rows.forEach(row => {\r\n var role = {RoleName: row.get(\"RoleName\"), RoleID: row.get(\"RoleID\")};\r\n result.push(role);\r\n });\r\n return result;\r\n }\r\n\r\n public static async FillApproversByObject(card: Card)\r\n {\r\n \r\n let objSection: CardSection | undefined = card.sections.tryGet('PkObjectList');\r\n let dciSection: CardSection | undefined = card.sections.tryGet('DocumentCommonInfo');\r\n let edRolesSection: CardSection | undefined = card.sections.tryGet('PkExecutiveSchemeRoles');\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet('PkExecutiveSchemeMatching');\r\n if (!objSection) return;\r\n let section: ArrayStorage = objSection.rows;\r\n\r\n if (section.length > 0) {\r\n let objects: string = '';\r\n for (let i = 0; i < section.length; i++) {\r\n let row = section[i];\r\n objects += row.tryGet('ObjectID');\r\n if (i !== section.length) {\r\n objects += ';';\r\n }\r\n }\r\n let authorId = dciSection!.fields.get(\"AuthorID\")\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetEsApproversByObjects;\r\n request.cardId = card.id;\r\n request.info[\"Objects\"] = createTypedField(objects, DotNetType.String);\r\n request.info[\"AuthorID\"] = createTypedField(authorId, 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 //очищаем\r\n if (edRolesSection && edMatchingSection) {\r\n for (let j = edRolesSection.rows.length - 1; j >= 0; j--) {\r\n let row = edRolesSection.rows[j];\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 roles = CdExecutiveSchemeSharedHelper.GetRoles();\r\n for (let i = 0; i < roles.length; i++) { // Начинается с 0\r\n if (!response.info!['EdApproversID' + i] ||\r\n !response.info!['EdApproversID' + i].$value) {\r\n continue;\r\n }\r\n let edApproversID: string[] | null = response.info!['EdApproversID' + i].$value.split(';');\r\n let edApproversName: string[] | null = response.info!['EdApproversName' + i].$value.split(';');\r\n\r\n if (!edApproversID || !edApproversName) {\r\n continue;\r\n }\r\n\r\n if (edApproversID.length === 0 ||\r\n edApproversID.length !== edApproversName.length) {\r\n continue;\r\n }\r\n\r\n if (edRolesSection && edMatchingSection) { \r\n\r\n for (let j = 0; j < edMatchingSection.rows.length; j++) {\r\n let row = edMatchingSection.rows[j];\r\n if (row.state == CardRowState.Deleted) \r\n continue;\r\n let roleID = row.tryGetField('RoleID');\r\n if (roleID && roleID.$value === i) { \r\n for (let k = 0; k < edApproversID.length; k++) {\r\n if (row.rowId != \"\" && edApproversID[k] != \"\" && edApproversName[k] != \"\"){\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"MatchingRowID\", createTypedField(row.rowId, DotNetType.Guid));\r\n newRow.set(\"RoleID\", createTypedField(edApproversID[k], DotNetType.Guid));\r\n newRow.set(\"RoleName\", createTypedField(edApproversName[k], DotNetType.String)); \r\n newRow.set(\"RoleKCKID\", null);\r\n newRow.set(\"RoleKCKName\", null);\r\n newRow.set(\"RoleKCKExternalID\", null);\r\n newRow.set(\"RoleEntityID\", null);\r\n newRow.set(\"RoleEntityName\", null);\r\n newRow.set(\"RolePosition\", null); \r\n newRow.state = CardRowState.Inserted;\r\n card.sections.get(\"PkExecutiveSchemeRoles\")!.rows.push(newRow); \r\n this.FillLegalEntityField(newRow, card, row.rowId, 'PkExecutiveSchemeMatching');}\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 FieldsObjectsWorksLogic(card: Card, model: ICardModel) {\r\n let ediSection = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n let wftSection = card.sections.tryGet('PkExecutiveDocumentationWorksForTemplate');\r\n\r\n // Обработка флага \"РД отсутствует в архиве\"\r\n let workTextControl: IControlViewModel | undefined = model.controls.get('WorkTextControl');\r\n let workRefControl: IControlViewModel | undefined = model.controls.get('WorkRefControl');\r\n if (workTextControl && workRefControl && ediSection) {\r\n let missingTechnicalDocumentation: boolean | undefined = ediSection.fields.tryGet('MissingTechnicalDocumentation');\r\n this.UpdateWorkControlsVisability(missingTechnicalDocumentation, workTextControl, workRefControl);\r\n\r\n ediSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'MissingTechnicalDocumentation') {\r\n missingTechnicalDocumentation = e.fieldValue;\r\n if (workTextControl && workRefControl)\r\n this.UpdateWorkControlsVisability(missingTechnicalDocumentation, workTextControl, workRefControl);\r\n }\r\n });\r\n }\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 console.log('1');\r\n if (card.typeId === CdCardTypes.PkExecutiveSchemeTypeID &&\r\n e1.fieldName === 'ObjectID') {\r\n console.log('2');\r\n this.SetRenovation(card, e1.fieldValue);\r\n }\r\n\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 if (wftSection) {\r\n wftSection.rows.collectionChanged.add(e => {\r\n if (e.added.length > 0) {\r\n let row: CardRow = e.added[0];\r\n row.fieldChanged.add(async e1 => {\r\n if (e1.fieldName === 'WorkTechnicalDocumentationID') {\r\n let tdId = e1.fieldValue;\r\n if (!tdId) {\r\n row.set('Number', createTypedField(null, DotNetType.String));\r\n row.set('RdDivision', createTypedField(null, DotNetType.String));\r\n row.set('ContractDivision', createTypedField(null, DotNetType.String));\r\n row.set('Version', createTypedField(null, DotNetType.String));\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRdInfo;\r\n request.info[\"CardID\"] = createTypedField(tdId, 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 docNumber = row.tryGetField('WorkTechnicalDocumentationFullNumber');\r\n let respInfo = response.info;\r\n if (respInfo && respInfo.ArNumber && respInfo.ArNumber.$value)\r\n row.set('Number', createTypedField(respInfo.ArNumber.$value, DotNetType.String));\r\n else if (docNumber)\r\n row.set('Number', createTypedField(docNumber.$value, DotNetType.String));\r\n\r\n if (respInfo && respInfo.RdDivision && respInfo.ContractDivision && respInfo.Version) {\r\n row.set('RdDivision', createTypedField(respInfo.RdDivision.$value, DotNetType.String));\r\n row.set('ContractDivision', createTypedField(respInfo.ContractDivision.$value, DotNetType.String));\r\n row.set('Version', createTypedField(respInfo.Version.$value, DotNetType.String));\r\n }\r\n let sect = card.sections.getOrAdd('PkExecutiveSchemeFieldsVirtual'); \r\n sect!.fields.set('TechDocumentsIdString',wftSection!.rows.map(x=>x.get(\"WorkTechnicalDocumentationID\")).reduce((current, id) => current + \";\" + id),DotNetType.String); \r\n }\r\n });\r\n } \r\n let sect = card.sections.getOrAdd('PkExecutiveSchemeFieldsVirtual'); \r\n sect!.fields.set('TechDocumentsIdString',wftSection!.rows.map(x=>x.get(\"WorkTechnicalDocumentationID\")).reduce((current, id) => current + \";\" + id),DotNetType.String); \r\n });\r\n }\r\n }\r\n\r\n /** Проверка файлов в ИС\r\n * from: 0 - ui, 1 - задание */\r\n public static async CheckAddedFiles(context: ICardUIExtensionContext, from: number) {\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.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 (x.typeId === CdFdTaskTypes.PkSignExecutiveSchemeInitializingTypeID.toLowerCase() ||\r\n x.typeId === CdFdTaskTypes.PkExecutiveSchemeToReworkTypeID.toLowerCase())) >= 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 ediSection: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (!ediSection || !pdciSection) break;\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 let isInitialization: boolean = \r\n task.typeId.toLowerCase() === CdFdTaskTypes.PkSignExecutiveSchemeInitializingTypeID.toLowerCase() &&\r\n task.optionId.toLowerCase() === CdFdProcessHelper.PkSendForSigning.toLowerCase();\r\n let isRework: boolean =\r\n task.typeId.toLowerCase() === CdFdTaskTypes.PkExecutiveSchemeToReworkTypeID.toLowerCase() &&\r\n task.optionId.toLowerCase() === CdFdProcessHelper.PkSendForResigning.toLowerCase();\r\n \r\n let categoryList: string[] = [ ChFileCategories.ImplementingSchemes.id as string ];\r\n if (isInitialization || isRework) { \r\n \r\n for (let j = 0; j < categoryList.length; j++) {\r\n let categoryId = categoryList[j];\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 FieldLogic(card: Card, model: ICardModel) {\r\n let ediSection = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n let polSection = card.sections.tryGet('PkObjectList');\r\n //#region Отметить флажки ЗОС и РВЭ\r\n if (!ediSection) return;\r\n ediSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'EDTypeID') {\r\n if (ediSection && ediSection.fields.has('isZOS') && ediSection.fields.has('isRVE')) {\r\n let edTypeID = e.fieldValue as guid | null | undefined;\r\n if (edTypeID) {\r\n const edTypeRequest = new CardGetRequest();\r\n edTypeRequest.getMode = CardGetMode.ReadOnly;\r\n edTypeRequest.cardId = edTypeID;\r\n const edTypeResponse = await CardService.instance.get(edTypeRequest);\r\n const edTypeCard = edTypeResponse.card;\r\n let edTypeSection = edTypeCard.sections.tryGet('PkExecutiveDocumentationTypes');\r\n if (edTypeSection && edTypeSection.fields.has('isZOS') && edTypeSection.fields.has('isRVE')) {\r\n ediSection.fields.set('isZOS', createTypedField(edTypeSection.fields.tryGet('isZOS'), DotNetType.Boolean));\r\n ediSection.fields.set('isRVE', createTypedField(edTypeSection.fields.tryGet('isRVE'), DotNetType.Boolean));\r\n }\r\n } else {\r\n ediSection.fields.set('isZOS', createTypedField(false, DotNetType.Boolean));\r\n ediSection.fields.set('isRVE', createTypedField(false, DotNetType.Boolean));\r\n }\r\n }\r\n }\r\n });\r\n //#endregion\r\n\r\n //#region Проверка и заполнение ЖК и региона при открытии карточки\r\n if (ediSection && polSection &&\r\n ediSection.fields.has('ResidentialComplexID') &&\r\n ediSection.fields.has('RegionID') &&\r\n (ediSection.fields.tryGet('ResidentialComplexID') === null ||\r\n ediSection.fields.tryGet('RegionID') === null)) {\r\n // ЖК\r\n if (ediSection.fields.tryGet('ResidentialComplexID') === null) {\r\n let residentialComplexRow = polSection.rows.find(x =>\r\n x.has('ResidentialComplexID') &&\r\n x.tryGet('ResidentialComplexID') !== null);\r\n if (residentialComplexRow)\r\n ediSection.fields.rawSet('ResidentialComplexID', createTypedField(residentialComplexRow.get('ResidentialComplexID'), DotNetType.Guid));\r\n }\r\n // Регион\r\n if (ediSection.fields.tryGet('RegionID') === null) {\r\n let regionRow = polSection.rows.find(x =>\r\n x.has('RegionID') &&\r\n x.tryGet('RegionID') !== null);\r\n if (regionRow)\r\n ediSection.fields.rawSet('RegionID', createTypedField(regionRow.get('RegionID'), DotNetType.Guid));\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Отмена удаления записи в таблице согласующих\r\n let matchingControlViewModel: IControlViewModel | undefined = model.controls.get('Matching');\r\n if (matchingControlViewModel) {\r\n let controlViewModel = matchingControlViewModel as GridViewModel | null;\r\n if (controlViewModel) {\r\n controlViewModel.rowInvoked.add(e => {\r\n if (e.action === GridRowAction.Inserted || e.action === GridRowAction.Deleting)\r\n e.cancel = true;\r\n });\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Предзаполнение проекта при добавлении нового объекта\r\n let objects: IControlViewModel | undefined = model.controls.get('Objects');\r\n if (objects) {\r\n let controlViewModel = objects as GridViewModel | null;\r\n if (controlViewModel) {\r\n controlViewModel.rowInvoked.add(e => {\r\n if (polSection && polSection.rows.length > 1 && e.action === GridRowAction.Inserted) {\r\n let newRow = e.row;\r\n let oldRow = polSection.rows.find(x =>\r\n x.rowId !== newRow.rowId);\r\n if (oldRow &&\r\n oldRow.has('ProjectID') &&\r\n oldRow.tryGet('ProjectID') &&\r\n oldRow.has('ProjectName') &&\r\n oldRow.tryGet('ProjectName')) {\r\n let projectID = oldRow.get('ProjectID') as guid;\r\n let projectName = oldRow.get('ProjectName') as string;\r\n newRow.set('ProjectID', createTypedField(projectID, DotNetType.Guid));\r\n newRow.set('ProjectName', createTypedField(projectName, DotNetType.String));\r\n }\r\n }\r\n });\r\n }\r\n }\r\n //#endregion\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 private static async FillApproversFromRDND(card: Card){\r\n let pesi = card.sections.tryGet(\"PkExecutiveSchemeInfo\");\r\n if (!pesi)\r\n return;\r\n let kindId = pesi.fields.tryGet(\"ExecutiveSchemeTypeID\");\r\n if (!kindId)\r\n return; \r\n if (kindId != CdExecutiveSchemeTypes.GeodeticSchemeType)\r\n return;\r\n let section = card.sections.tryGet(\"PkObjectList\");\r\n if (!section)\r\n return;\r\n if (section.rows.length == 0)\r\n return;\r\n let objects: string = '';\r\n for (let i = 0; i < section.rows.length; i++) {\r\n let row = section.rows[i];\r\n objects += row.tryGet('ObjectID');\r\n if (i !== section.rows.length) {\r\n objects += ';';\r\n }\r\n }\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdGetGeodesicApproversByObjects;\r\n request.info[\"Objects\"] = createTypedField(objects, 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 if (!response.info['EdApproversID'] && !response.info['EdApproversName'] || response.info[\"EdApproversID\"] == null\r\n || response.info[\"EdApproversName\"] == null\r\n)\r\n return;\r\n let pesr = card.sections.tryGet(\"PkExecutiveSchemeRoles\");\r\n let pesm = card.sections.tryGet(\"PkExecutiveSchemeMatching\");\r\n\r\n if (pesr == null || pesm == null)\r\n return;\r\n \r\n //let matchingRowID = pesm.rows.find(x => x.tryGet(\"RoleID\") == 2)!.tryGet(\"RowID\");\r\n let matchingRowID : DotNetType.Guid = '00000000-0000-0000-0000-000000000000' as DotNetType.Guid;\r\n\r\n pesm.rows.forEach(row => {\r\n if (row.state != CardRowState.Deleted){\r\n if (row.tryGet(\"RoleID\") == 2){\r\n matchingRowID = row.get(\"RowID\");\r\n }\r\n }\r\n });\r\n if (matchingRowID == '00000000-0000-0000-0000-000000000000' as DotNetType.Guid)\r\n return;\r\n\r\n let userIds : Array = new Array();\r\n\r\n pesr.rows.forEach(row => {\r\n if (row.tryGet(\"MatchingRowID\") == matchingRowID){\r\n userIds.push(row.tryGet(\"RoleID\"));\r\n }\r\n });\r\n\r\n var listIdsAsString = response.info[\"EdApproversID\"].$value.split(';');\r\n var listNames = response.info[\"EdApproversName\"].$value.split(';');\r\n\r\n for( let i = 0; i < listIdsAsString.length; i++){\r\n if (listIdsAsString[i] == null)\r\n continue;\r\n let isExists : boolean = false;\r\n\r\n for (let userId of userIds) {\r\n if (userId == listIdsAsString[i]){\r\n isExists = true;\r\n break; \r\n }\r\n }\r\n if (isExists)\r\n continue;\r\n\r\n var newRow = new CardRow();\r\n\r\n if (listNames[i] != \"\" && listIdsAsString[i] != \"\" && matchingRowID != \"\"){\r\n newRow.set(\"MatchingRowID\", createTypedField(matchingRowID, DotNetType.Guid));\r\n newRow.set(\"RoleName\", createTypedField(listNames[i], DotNetType.String));\r\n newRow.set(\"RoleID\", createTypedField(listIdsAsString[i], DotNetType.Guid));\r\n newRow.set(\"RoleKCKID\", null);\r\n newRow.set(\"RoleKCKName\", null);\r\n newRow.set(\"RoleKCKExternalID\", null);\r\n newRow.set(\"RoleEntityID\", null);\r\n newRow.set(\"RoleEntityName\", null);\r\n newRow.set(\"RolePosition\", null); \r\n \r\n newRow.state = CardRowState.Inserted;\r\n pesr.rows.push(newRow);\r\n this.FillLegalEntityField(newRow, card, matchingRowID,'PkExecutiveSchemeMatching');\r\n }\r\n }\r\n }\r\n\r\n /** Проверить добавление нового согласующего в ТЧ */\r\n public static CheckAddNewMatchingRoles(context: ICardUIExtensionContext) {\r\n try {\r\n let card = context.model.card;\r\n let edmSection = card.sections.tryGet('PkExecutiveSchemeMatching');\r\n let edrSection = card.sections.tryGet('PkExecutiveSchemeRoles');\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 private static UpdateControlVisability(control: IControlViewModel | undefined, visible: boolean | undefined) {\r\n if (control !== undefined &&\r\n control)\r\n control.controlVisibility = visible?Visibility.Visible:Visibility.Collapsed; \r\n }\r\n\r\n /** Обновить видимость контролов работ */\r\n private static UpdateWorkControlsVisability(missingTechnicalDocumentation: boolean | undefined, workTextControl: IControlViewModel, workRefControl: IControlViewModel) {\r\n if (missingTechnicalDocumentation !== undefined &&\r\n missingTechnicalDocumentation)\r\n this.UpdateControlsVisability(workTextControl, workRefControl);\r\n else\r\n this.UpdateControlsVisability(workRefControl, workTextControl);\r\n }\r\n\r\n /** Включает первый контрол и выключает второй */\r\n private static UpdateControlsVisability(firstControl: IControlViewModel, secondControl: IControlViewModel) {\r\n if (firstControl.controlVisibility !== Visibility.Visible)\r\n firstControl.controlVisibility = Visibility.Visible;\r\n if (secondControl.controlVisibility !== Visibility.Collapsed)\r\n secondControl.controlVisibility = Visibility.Collapsed;\r\n } \r\n\r\n private static async SetRenovation(card: Card, objectID: guid | null) {\r\n var esSection = card.sections.tryGet(\"PkExecutiveSchemeInfo\");\r\n if (esSection == null)\r\n return;\r\n\r\n if (objectID)\r\n {\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 esSection.fields.set(\"IsRenovation\", response.info.IsRenovation)\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdUIHelper } from '../CdUIHelper';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { Card } from 'tessa/cards';\r\nimport { CdExecutiveSchemeClientHelper } from 'src/cdScripts/Helpers/Cards/CdExecutiveSchemeClientHelper';\r\nimport { CdExecutiveDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdExecutiveDocumentationClientHelper';\r\nimport { CdGeneralDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper';\r\n\r\nexport class CdExecutiveSchemeUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n let card: Card;\r\n if ((model = context.model) == null ||\r\n (card = context.model.card) == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.PkExecutiveSchemeTypeID)) {\r\n return;\r\n }\r\n // Таблица \"Объект\"\r\n CdUIHelper.InitializeTableObjects(context);\r\n CdGeneralDocumentationClientHelper.MatchingVisabilityLogic(context);\r\n CdExecutiveDocumentationClientHelper.FieldLogic(card, model);\r\n CdGeneralDocumentationClientHelper.ApprovementMatchingRolesChanged(model,'PkExecutiveSchemeMatching','PkExecutiveSchemeRoles');\r\n CdExecutiveSchemeClientHelper.TableOrderLogic(context);\r\n CdExecutiveSchemeClientHelper.FieldsObjectsWorksLogic(card, model);\r\n CdExecutiveSchemeClientHelper.FieldsExecutiveSchemeLogic(card, model, context);\r\n CdExecutiveSchemeClientHelper.FillApproversLogic(card, model);\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, CdCardTypes.PkExecutiveSchemeTypeID)) {\r\n return;\r\n } \r\n await CdExecutiveSchemeClientHelper.CheckApprovementTableOrder(context); //не заменять на context.model.card\r\n await CdExecutiveSchemeClientHelper.CheckAddedFiles(context, 0);\r\n if (await !CdGeneralDocumentationClientHelper.CheckEditSignedFile(card)) {\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}","\r\nimport { CdFdTaskTypes } from \"../CdFdTaskTypes\";\r\nimport { CdFdProcessHelper } from \"../CdFdProcessHelper\";\r\n\r\nexport class CdDevelopmentScenarioSharedHelper { \r\n \r\n static ApprovementRoles = \r\n {\r\n VicePresidentID : \"207ff7be-1725-4051-86e3-9ae95fb40ecf\",\r\n VicePresidentName : \"Вице-президент\"\r\n };\r\n\r\n static Countries = \r\n {\r\n RussiaID : \"6293CC80-C7C1-4A2C-BE40-5F559BB9A60D\",\r\n RussiaGuid1c : \"215d0c81-effa-4108-8ce4-d57185730a3b\",\r\n RussiaName : \"Вице-президент\"\r\n };\r\n\r\n static CheckFileCategoryList = []; // не проверяем наличие файла ДС #63196\r\n\r\n static ExcludeRolesFromCheckList = [CdDevelopmentScenarioSharedHelper.ApprovementRoles.VicePresidentID]; \r\n\r\n static ApproverTaskStoreInfo =\r\n {\r\n TaskStartProcessOptionsList: [CdFdProcessHelper.ForApproval,CdFdProcessHelper.SendForResubscription], \r\n TaskStartProcessTypesList : [CdFdTaskTypes.PkDevelopmentScenarioInitializingTypeID,CdFdTaskTypes.PkDevelopmentScenarioToReworkTypeID] \r\n }\r\n}\r\n\r\n","import { Card, CardSection } from \"tessa/cards\";\r\nimport { IControlViewModel, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { DotNetType, createTypedField,Visibility,Guid } from \"tessa/platform\";\r\nimport { CdDevelopmentScenarioSharedHelper } from \"./CdDevelopmentScenarioSharedHelper\"\r\nimport {CdGeneralDocumentationClientHelper} from './CdGeneralDocumentationClientHelper';\r\nimport { GridViewModel, GridRowAction } from \"tessa/ui/cards/controls\";\r\nimport { CdDocStates } from \"../CdDocStates\";\r\n\r\nexport class CdDevelopmentScenarioClientHelper extends CdGeneralDocumentationClientHelper {\r\n \r\n \r\n public static TableOrderLogic(card: Card, context: ICardUIExtensionContext) { \r\n let edmSection = card.sections.tryGet('PkApprovementMatching');\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pdciSection) {\r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n if (edmSection &&\r\n stateID &&\r\n (stateID === CdDocStates.Draft.id ||\r\n stateID === CdDocStates.Rework.id)) { \r\n\r\n let matchingControlViewModel: IControlViewModel | undefined = context.model.controls.get('Matching');\r\n if (matchingControlViewModel) {\r\n let controlViewModel = matchingControlViewModel as GridViewModel | null;\r\n if (controlViewModel) {\r\n \r\n //кнопки добавить\\удалить.\r\n controlViewModel.rowInvoked.add(e => {\r\n if (e.action === GridRowAction.Deleting)\r\n { \r\n if (e.row.tryGetField(\"RoleID\")!.$value != CdDevelopmentScenarioSharedHelper.ApprovementRoles.VicePresidentID)\r\n {\r\n e.cancel = true;\r\n controlViewModel!.rows.forEach(row => {\r\n let order = row.row.tryGetField(\"Order\")!.$value;\r\n let eorder = e.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 }\r\n if (e.action === GridRowAction.Inserted){ \r\n //e.cancel = true;\r\n let order = controlViewModel!.rows.length-2;\r\n e.row.set('RoleID', createTypedField(CdDevelopmentScenarioSharedHelper.ApprovementRoles.VicePresidentID, DotNetType.Guid));\r\n e.row.set('Order', createTypedField(order, DotNetType.Int32));\r\n e.row.set('RoleName',createTypedField(CdDevelopmentScenarioSharedHelper.ApprovementRoles.VicePresidentName, DotNetType.String)); \r\n }\r\n\r\n }); \r\n }\r\n }\r\n }\r\n } \r\n }\r\n \r\n public static ObjectLogic(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n \r\n let objectField = context.model.controls.get(\"Object\"); \r\n let investProjectNameField = context.model.controls.get(\"InvestProjectName\"); \r\n let investProjectAddressField = context.model.controls.get(\"InvestProjectAddress\"); \r\n let investProjectRegionField = context.model.controls.get(\"InvestProjectRegion\"); \r\n let investProjectCountryField = context.model.controls.get(\"InvestProjectCountry\"); \r\n\r\n let investProjectInfoSection: CardSection | undefined = card.sections.tryGet('PkInvestProjectInfo');\r\n let pkRdProperties: CardSection | undefined = card.sections.tryGet('PkRdProperties');\r\n if (!investProjectInfoSection || !pkRdProperties) return;\r\n let objectNotExist = investProjectInfoSection.fields.tryGetField(\"ObjectNotExist\"); \r\n let countryId = investProjectInfoSection.fields.tryGetField(\"InvestProjectCountryID\"); \r\n\r\n if (objectNotExist!=null && objectNotExist.$value == true){\r\n objectField!.controlVisibility = Visibility.Collapsed;\r\n pkRdProperties.fields.set(\"ObjectID\",null);\r\n pkRdProperties.fields.set(\"ObjectName\",null); \r\n investProjectCountryField!.controlVisibility = Visibility.Visible;\r\n investProjectNameField!.controlVisibility = Visibility.Visible;\r\n investProjectAddressField!.controlVisibility = Visibility.Visible;\r\n if (countryId!=null && Guid.equals(countryId.$value,CdDevelopmentScenarioSharedHelper.Countries.RussiaID))\r\n {\r\n investProjectRegionField!.controlVisibility = Visibility.Visible;\r\n }\r\n else\r\n {\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionID\",null)\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionName\",null)\r\n investProjectRegionField!.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n else{ \r\n objectField!.controlVisibility = Visibility.Visible;\r\n investProjectInfoSection.fields.set(\"InvestProjectName\",null);\r\n investProjectNameField!.controlVisibility = Visibility.Collapsed;\r\n investProjectInfoSection.fields.set(\"InvestProjectAddress\",null);\r\n investProjectAddressField!.controlVisibility = Visibility.Collapsed;\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionID\",null);\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionName\",null);\r\n investProjectRegionField!.controlVisibility = Visibility.Collapsed;\r\n investProjectInfoSection.fields.set(\"InvestProjectCountryID\",null);\r\n investProjectInfoSection.fields.set(\"InvestProjectCountryName\",null);\r\n investProjectCountryField!.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n investProjectInfoSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName == \"ObjectNotExist\") \r\n {\r\n if (!e) return;\r\n\r\n let investProjectInfoSection: CardSection | undefined = card.sections.tryGet('PkInvestProjectInfo');\r\n let pkRdProperties: CardSection | undefined = card.sections.tryGet('PkRdProperties');\r\n if (!investProjectInfoSection || !pkRdProperties) return;\r\n \r\n if (e.fieldValue == true){\r\n objectField!.controlVisibility = Visibility.Collapsed;\r\n pkRdProperties.fields.set(\"ObjectID\",null);\r\n pkRdProperties.fields.set(\"ObjectName\",null); \r\n investProjectCountryField!.controlVisibility = Visibility.Visible;\r\n investProjectNameField!.controlVisibility = Visibility.Visible;\r\n investProjectAddressField!.controlVisibility = Visibility.Visible;\r\n let countryId = investProjectInfoSection.fields.tryGetField(\"InvestProjectCountryID\"); \r\n if (countryId!=null && Guid.equals(countryId.$value,CdDevelopmentScenarioSharedHelper.Countries.RussiaID))\r\n {\r\n investProjectRegionField!.controlVisibility = Visibility.Visible;\r\n }\r\n else\r\n {\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionID\",null)\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionName\",null)\r\n investProjectRegionField!.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n else{ \r\n objectField!.controlVisibility = Visibility.Visible;\r\n investProjectInfoSection.fields.set(\"InvestProjectName\",null);\r\n investProjectNameField!.controlVisibility = Visibility.Collapsed;\r\n investProjectInfoSection.fields.set(\"InvestProjectAddress\",null);\r\n investProjectAddressField!.controlVisibility = Visibility.Collapsed;\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionID\",null);\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionName\",null);\r\n investProjectRegionField!.controlVisibility = Visibility.Collapsed;\r\n investProjectInfoSection.fields.set(\"InvestProjectCountryID\",null);\r\n investProjectInfoSection.fields.set(\"InvestProjectCountryName\",null);\r\n investProjectCountryField!.controlVisibility = Visibility.Collapsed;\r\n }\r\n }\r\n \r\n if (e.fieldName == \"InvestProjectCountryID\") \r\n {\r\n if (Guid.equals(e.fieldValue,CdDevelopmentScenarioSharedHelper.Countries.RussiaID))\r\n {\r\n investProjectRegionField!.controlVisibility = Visibility.Visible;\r\n }\r\n else\r\n { \r\n investProjectRegionField!.controlVisibility = Visibility.Collapsed; \r\n let investProjectInfoSection: CardSection | undefined = card.sections.tryGet('PkInvestProjectInfo'); \r\n if (!investProjectInfoSection) return; \r\n investProjectInfoSection.fields.set(\"InvestProjectRegionID\",null);\r\n investProjectInfoSection.fields.set(\"InvestProjectRegionName\",null);\r\n }\r\n }\r\n \r\n });\r\n }\r\n\r\n public static FillApproversLogic(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n let investProjectInfoSection: CardSection | undefined = card.sections.tryGet('PkInvestProjectInfo');\r\n let pkDevelopmentScenarioInfo: CardSection | undefined = card.sections.tryGet('PkDevelopmentScenarioInfo');\r\n let edRolesSection: CardSection | undefined = card.sections.tryGet('PkApprovementMatchingRoles');\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet('PkApprovementMatching');\r\n \r\n if (!investProjectInfoSection || !edRolesSection || !edMatchingSection || !pkDevelopmentScenarioInfo) return;\r\n\r\n investProjectInfoSection.fields.fieldChanged.add(async e => {\r\n if (e.fieldName !== \"DirectionID\") return;\r\n if (!e) return;\r\n { \r\n await CdDevelopmentScenarioClientHelper.FillApprovers(card); \r\n } \r\n });\r\n\r\n pkDevelopmentScenarioInfo.fields.fieldChanged.add(async e => {\r\n if (e.fieldName !== \"DevelopmentScenarioTypeID\") return;\r\n if (!e) return;\r\n { \r\n await CdDevelopmentScenarioClientHelper.FillApprovers(card); \r\n } \r\n });\r\n } \r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { Card } from 'tessa/cards';\r\nimport { CdDevelopmentScenarioClientHelper } from 'src/cdScripts/Helpers/Cards/CdDevelopmentScenarioClientHelper';\r\nimport { CdGeneralDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper';\r\nimport { CdDevelopmentScenarioSharedHelper } from 'src/cdScripts/Helpers/Cards/CdDevelopmentScenarioSharedHelper';\r\n\r\nexport class CdDevelopmentScenarioUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n let card: Card;\r\n if ((model = context.model) == null ||\r\n (card = context.model.card) == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.PkDevelopmentScenarionTypeID)) {\r\n return;\r\n }\r\n CdGeneralDocumentationClientHelper.ApprovementMatchingRolesChanged(model, 'PkApprovementMatching','PkApprovementMatchingRoles');\r\n CdDevelopmentScenarioClientHelper.FillApproversLogic(context);\r\n CdDevelopmentScenarioClientHelper.ObjectLogic(context);\r\n CdDevelopmentScenarioClientHelper.TableOrderLogic(card, context);\r\n }\r\n\r\n public async saving(context: ICardUIExtensionContext) { \r\n if ((context.model.card) == null) {\r\n return;\r\n }\r\n if (!Guid.equals(context.model.card.typeId, CdCardTypes.PkDevelopmentScenarionTypeID)) {\r\n return;\r\n } \r\n\r\n await CdGeneralDocumentationClientHelper.CheckApprovementTableOrder(context); //не заменять на context.model.card\r\n await CdDevelopmentScenarioClientHelper.CheckAddedFiles(context, 0\r\n ,CdDevelopmentScenarioSharedHelper.ApproverTaskStoreInfo.TaskStartProcessTypesList\r\n ,CdDevelopmentScenarioSharedHelper.ApproverTaskStoreInfo.TaskStartProcessOptionsList\r\n ,CdDevelopmentScenarioSharedHelper.CheckFileCategoryList);\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}","export class CdObjectProjectTypes {\r\n //Объекты городского бюджета\r\n public static CityBudgetObjects = 3;\r\n //Бюджетные СКБ\r\n public static BudgetSKBObjects = 8; \r\n //Объекты Fee development\r\n public static FeeDevelopmentObjects = 9;\r\n}","import { Card, CardSection } from \"tessa/cards\";\r\nimport { IControlViewModel, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { DotNetType, createTypedField } from \"tessa/platform\";\r\nimport { GridViewModel, GridRowAction } from \"tessa/ui/cards/controls\";\r\nimport { CdDocStates } from \"../CdDocStates\";\r\nimport {ApprovementRoles, CdGeneralDocumentationClientHelper} from './CdGeneralDocumentationClientHelper';\r\nimport { CdRequestForMaterialsSharedHelper } from 'src/cdScripts/Helpers/Cards/CdRequestForMaterialsSharedHelper';\r\nimport { CardService, CardRequest } from \"tessa/cards/service\";\r\nimport { CdRequestTypes } from '../../Helpers/CdRequestTypes';\r\nimport { showNotEmpty} from \"tessa/ui\";\r\nimport { CdCommonHelper } from 'src/cdScripts/Helpers/CdCommonHelper';\r\nimport { CdUIHelper } from '../../../cdScripts/UI/CdUIHelper';\r\nimport { CdObjectProjectTypes } from \"../Dictionaries/CdObjectProjectTypes\";\r\n\r\n\r\nexport class CdRequestForMaterialsClientHelper extends CdGeneralDocumentationClientHelper {\r\n \r\n \r\n public static FillApproversLogic(context: ICardUIExtensionContext) {\r\n let card: Card = context.model.card;\r\n let objectsSection: CardSection | undefined = card.sections.tryGet('PkObjectList');\r\n let pkRdPropertiesSection: CardSection | undefined = card.sections.tryGet('PkRdProperties');\r\n const objects = context.model.controls.get('Objects') as GridViewModel;\r\n if (!objectsSection) return;\r\n objects.rowInitializing.add(e => {\r\n e.row.fieldChanged.add(async e2 => {\r\n if (e2.fieldName !== \"ObjectID\" || !e) return;\r\n\r\n var objectId = e2.fieldValue;\r\n if (objectId==null) return;\r\n let isRenovation = false;\r\n const 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 await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) { \r\n return;\r\n } \r\n if (response.info.IsRenovation!=null)\r\n isRenovation = response.info.IsRenovation.$value;\r\n\r\n let projectTypeExtID = -1; \r\n if (response.info.ObjectProjectTypeExtID) projectTypeExtID = response.info.ObjectProjectTypeExtID.$value;\r\n console.debug(\"projectTypeExtID = \" + projectTypeExtID);\r\n if (pkRdPropertiesSection)\r\n {\r\n pkRdPropertiesSection.fields.set(\"isRenovation\", response.info.IsRenovation)\r\n if (response.info.ObjectProjectTypeID) pkRdPropertiesSection.fields.set(\"ObjectProjectTypeID\", response.info.ObjectProjectTypeID)\r\n if (response.info.ObjectProjectTypeName) pkRdPropertiesSection.fields.set(\"ObjectProjectTypeName\", response.info.ObjectProjectTypeName)\r\n if (response.info.ObjectProjectTypeExtID) pkRdPropertiesSection.fields.set(\"ObjectProjectTypeExtID\", response.info.ObjectProjectTypeExtID);\r\n }\r\n CdGeneralDocumentationClientHelper.FillApprovers(card, (ar)=>{ \r\n CdRequestForMaterialsClientHelper.RemoveRole(ar, isRenovation == true ? CdRequestForMaterialsSharedHelper.ApprovementRoles.DirectorCommercialID.toLowerCase()\r\n : CdRequestForMaterialsSharedHelper.ApprovementRoles.DirectorRenovationID.toLowerCase()); \r\n CdRequestForMaterialsClientHelper.RemoveRole(ar, (projectTypeExtID === CdObjectProjectTypes.CityBudgetObjects || projectTypeExtID === CdObjectProjectTypes.BudgetSKBObjects) ? CdRequestForMaterialsSharedHelper.ApprovementRoles.PTOManagerID.toLowerCase()\r\n : CdRequestForMaterialsSharedHelper.ApprovementRoles.PTOManagerSKBID.toLowerCase()); \r\n });\r\n });\r\n });\r\n } \r\n\r\n private static RemoveRole(ar: ApprovementRoles[], roleToRemove: string) { \r\n const index = ar.findIndex(x => x.RoleID == roleToRemove);\r\n if (index > -1) {\r\n ar.splice(index, 1);\r\n }\r\n }\r\n\r\n public static async TableMaterialsInitialize(context: ICardUIExtensionContext) {\r\n let requestForMaterialsItemsTable = CdUIHelper.GetUIControl(context, \"RequestForMaterialsItems\");\r\n let requestForMaterialsSuppliesTable = CdUIHelper.GetUIControl(context, \"RequestForMaterialsSupplies\");\r\n if (!requestForMaterialsItemsTable || !requestForMaterialsSuppliesTable) return;\r\n CdRequestForMaterialsClientHelper.OrderPlus1ForTable(requestForMaterialsItemsTable);\r\n CdRequestForMaterialsClientHelper.OrderPlus1ForTable(requestForMaterialsSuppliesTable);\r\n }\r\n\r\n private static OrderPlus1ForTable(table: any) {\r\n table.rowInitializing.add(async (e) => {\r\n if (e.action == GridRowAction.Opening || e.action == GridRowAction.Inserted) {\r\n if (e.action == GridRowAction.Inserted) {\r\n if (e.row.getField(\"Number\") != null && ((e.row.getField(\"Number\")!.$value as number) == 0 || table!.rows.map(x => x.row.getField(\"Number\")).some(x => (x!.$value as number) === (e.row.getField(\"Number\")!.$value as number)))) {\r\n let maxOrder = Math.max.apply(null, table!.rows.map(x => x.row.getField(\"Number\")!.$value));\r\n CdCommonHelper.SetFieldToRow(e.row, \"Number\", createTypedField(maxOrder + 1, DotNetType.Int32));\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static TableOrderLogic(card: Card, context: ICardUIExtensionContext) { \r\n let edmSection = card.sections.tryGet('PkApprovementMatching');\r\n\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pdciSection) {\r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n if (edmSection &&\r\n stateID &&\r\n (stateID === CdDocStates.Draft.id ||\r\n stateID === CdDocStates.Rework.id)) { \r\n\r\n let matchingControlViewModel: IControlViewModel | undefined = context.model.controls.get('Matching');\r\n if (matchingControlViewModel) {\r\n let controlViewModel = matchingControlViewModel as GridViewModel | null;\r\n if (controlViewModel) {\r\n \r\n //кнопки добавить\\удалить.\r\n controlViewModel.rowInvoked.add(e => {\r\n if (e.action === GridRowAction.Deleting)\r\n { \r\n e.cancel = true;\r\n controlViewModel!.rows.forEach(row => {\r\n let order = row.row.tryGetField(\"Order\")!.$value;\r\n let eorder = e.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 }\r\n }\r\n }\r\n } \r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { Card } from 'tessa/cards';\r\nimport { CdUIHelper } from '../CdUIHelper';\r\nimport { CdRequestForMaterialsClientHelper } from 'src/cdScripts/Helpers/Cards/CdRequestForMaterialsClientHelper';\r\nimport { CdGeneralDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper';\r\nimport { CdRequestForMaterialsSharedHelper } from 'src/cdScripts/Helpers/Cards/CdRequestForMaterialsSharedHelper';\r\n\r\nexport class CdRequestForMaterialsUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n let card: Card;\r\n if ((model = context.model) == null ||\r\n (card = 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 \r\n CdUIHelper.InitializeTableObjects(context); \r\n CdGeneralDocumentationClientHelper.ApprovementMatchingRolesChanged(model, 'PkApprovementMatching','PkApprovementMatchingRoles');\r\n CdGeneralDocumentationClientHelper.FieldsObjectsLogic(card,model);\r\n CdRequestForMaterialsClientHelper.FillApproversLogic(context);\r\n CdRequestForMaterialsClientHelper.TableOrderLogic(card, context);\r\n CdRequestForMaterialsClientHelper.TableMaterialsInitialize(context);\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, CdCardTypes.PkRequestForMaterialsTypeID)) {\r\n return;\r\n } \r\n\r\n await CdGeneralDocumentationClientHelper.CheckApprovementTableOrder(context); //не заменять на context.model.card\r\n await CdGeneralDocumentationClientHelper.CheckAddedFiles(context,0\r\n ,CdRequestForMaterialsSharedHelper.ApproverTaskStoreInfo.TaskStartProcessTypesList\r\n ,CdRequestForMaterialsSharedHelper.ApproverTaskStoreInfo.TaskStartProcessOptionsList\r\n ,CdRequestForMaterialsSharedHelper.CheckFileCategoryList\r\n );\r\n if (await !CdGeneralDocumentationClientHelper.CheckEditSignedFile(card)) {\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, ICardModel } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType, Visibility } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdUIHelper } from '../CdUIHelper';\r\nimport { CardPermissionFlags, CardRow, CardRowState } from 'tessa/cards';\r\nimport { GridRowAction, GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { reaction } from 'mobx';\r\nimport { userSession } from 'common/utility';\r\n\r\nexport class CdPersonalRoleUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | 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, context);\r\n this.HideHint(context);\r\n this.SetDefaultValue(context);\r\n }\r\n\r\n private HideHint(context: ICardUIExtensionContext) {\r\n const hintControlModel = context.model.controls.get(\"AccessAdminHint\");\r\n if (hintControlModel == null) return;\r\n\r\n if (!userSession.isAdmin) {\r\n hintControlModel.controlVisibility = Visibility.Collapsed;\r\n }\r\n else {\r\n hintControlModel.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n\r\n /** Инициализация таблички \"Организации\". */\r\n private InitializePkLegalEntitiesControl(model: ICardModel, context: ICardUIExtensionContext) {\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 if (this._disposer == null) {\r\n this._disposer = reaction(() => pkLegalEntitiesControl.selectedRows, () => {\r\n this.PkLegalEntitiesControlSelectedRowHandle(context, pkLegalEntitiesControl);\r\n });\r\n }\r\n\r\n pkLegalEntitiesControl.rowAdding.add((e) => {\r\n e.row.set(\"IsManuallyAdded\", createTypedField(true, DotNetType.Boolean));\r\n });\r\n\r\n pkLegalEntitiesControl.rowInitializing.add((e) => {\r\n this.EntityControlHandle(e.row, e.rowModel!);\r\n });\r\n }\r\n\r\n /** Обработка контрола организации. */\r\n private PkLegalEntitiesControlSelectedRowHandle(context: ICardUIExtensionContext, pkLegalEntitiesControl: GridViewModel) {\r\n // проверяем есть ли выделенная строка\r\n if (pkLegalEntitiesControl.selectedRow == null) {\r\n return;\r\n }\r\n\r\n // получаем флаг из выделенной строки\r\n const isManuallyAdded = pkLegalEntitiesControl.selectedRow.row.tryGet(\"IsManuallyAdded\");\r\n\r\n // получаем права доступа по флагу\r\n const rowPermissions = isManuallyAdded\r\n ? CardPermissionFlags.AllowDeleteRow\r\n : CardPermissionFlags.ProhibitDeleteRow;\r\n\r\n // задаем права доступа\r\n context.model.card.permissions.sections\r\n .getOrAdd(\"PkLegalEntitiesVirtual\")\r\n .setSectionPermissions(rowPermissions);\r\n }\r\n\r\n /** Обработка контрола \"Организация\". */\r\n private EntityControlHandle(row: CardRow, rowModel: ICardModel) {\r\n const entityInTableControl = rowModel.controls.get(\"EntityInTableControl\");\r\n const isManuallyAdded = row.tryGet(\"IsManuallyAdded\") === true;\r\n if (entityInTableControl != null) {\r\n entityInTableControl.isReadOnly = !isManuallyAdded;\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 private SetDefaultValue(context: ICardUIExtensionContext) {\r\n let roleDeputiesManagement = CdUIHelper.GetUIControl(context, \"RoleDeputiesManagement\");\r\n\r\n if (roleDeputiesManagement == null) {\r\n return;\r\n }\r\n\r\n roleDeputiesManagement.rowInvoked.add(e => {\r\n if (e.rowModel != null && e.action === GridRowAction.Inserted) {\r\n let roleDeputiesManagementRolesSection = e.cardModel.card.sections.tryGet('RoleDeputiesManagementRolesVirtual');\r\n if (!roleDeputiesManagementRolesSection) return;\r\n\r\n let newCardRow: CardRow = new CardRow();\r\n newCardRow.rowId = Guid.newGuid();\r\n newCardRow.set(\"RoleID\", \"c89c715b-11cd-4f96-a0bf-103ffd4dfad9\", DotNetType.Guid);\r\n newCardRow.set(\"RoleName\", \"$Views_AvailableDeputyRoles_AllRolesAndDepartments_Sql\", DotNetType.String);\r\n newCardRow.set(\"ParentRowID\", e.row.rowId, DotNetType.Guid);\r\n newCardRow.state = CardRowState.Inserted;\r\n roleDeputiesManagementRolesSection.rows.add(newCardRow);\r\n }\r\n });\r\n }\r\n}","import { IControlViewModel, ICardModel, ICardUIExtensionContext, CardUIExtension } from \"tessa/ui/cards\";\r\nimport { DotNetType, createTypedField, Visibility, Guid } from \"tessa/platform\";\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { Card, CardRow, CardSection } from 'tessa/cards';\r\nimport { PkCommonHelper } from \"src/pkScripts/Helpers/PkCommonHelper\";\r\nimport { ValidationResultType } from \"tessa/platform/validation\";\r\nimport { CdDocStates } from \"src/cdScripts/Helpers/CdDocStates\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { CdRequestTypes } from \"src/cdScripts/Helpers/CdRequestTypes\";\r\nimport { showNotEmpty } from \"tessa/ui\";\r\n\r\nexport class CdGlazingOrderUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n let card: Card;\r\n if ((model = context.model) == null || (card = context.model.card) == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(card.typeId, CdCardTypes.PkGlazingOrderTypeID)) {\r\n return;\r\n }\r\n\r\n // Установим доступ к элементам в зависимости от текущего состояния карточки\r\n this.LockControlsAccordingCurrentState(model, card);\r\n\r\n // Обработка флага \"РД отсутствует в архиве\"\r\n this.HandleMissingTechnicalDocumentationFlag(model, card);\r\n\r\n // Заполнение таблицы \"Работы выполнены по проектной документации\" при выборе тех.документа из представления\r\n await this.WorksByProjectDocumentationTableFilling(card);\r\n\r\n // Обработка \"вида заявки на остеклкение\".\r\n this.HandleOrderKind(model, card);\r\n\r\n // Обработка флага \"Наличие спец. работ\"\r\n this.HandleSpecialWorkFlag(model, card);\r\n\r\n // Обработка элемента управления \"Вариант исполнителя\"\r\n this.HandlePerformerType(model, card);\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, CdCardTypes.PkGlazingOrderTypeID)) {\r\n return;\r\n }\r\n\r\n // Обработка \"вида заявки на остеклкение\".\r\n // Если выбран вариант \"доп. соглашение\", то поле \"Номер основного договора\" д.б. заполнено.\r\n let goSection: CardSection | undefined = card.sections.tryGet(\"PkGlazingOrder\");\r\n let mainContractNumber: string | undefined = goSection!.fields.get(\"MainContractNumber\");\r\n let orderKindID: number | undefined = goSection!.fields.get('OrderKindID');\r\n if (orderKindID === 1 && PkCommonHelper.IsNullOrWhitespace(mainContractNumber))// доп. соглашение и нет номера основного договора\r\n {\r\n context.validationResult.add(ValidationResultType.Error, \"Необходимо заполнить поле 'Номер основного договора'.\");\r\n }\r\n }\r\n\r\n\r\n private SetAllControlsReadOnlyState(model: ICardModel, isReadOnly: boolean) {\r\n model.controls.forEach(control => {\r\n control.isReadOnly = isReadOnly;\r\n });\r\n }\r\n\r\n private SetControlReadOnlyState(model: ICardModel, controlName: string, isReadOnly: boolean) {\r\n const control = model.controls.get(controlName);\r\n if (control != null) {\r\n control.isReadOnly = isReadOnly;\r\n }\r\n }\r\n\r\n /** Обновить видимость контролов работ */\r\n private UpdateWorkControlsVisability(missingTechnicalDocumentation: boolean | undefined, workTextControl: IControlViewModel, workRefControl: IControlViewModel) {\r\n if (missingTechnicalDocumentation !== undefined && missingTechnicalDocumentation)\r\n this.UpdateControlsVisability(workTextControl, workRefControl);\r\n else\r\n this.UpdateControlsVisability(workRefControl, workTextControl);\r\n }\r\n\r\n /** Включает первый контрол и выключает второй */\r\n private UpdateControlsVisability(firstControl: IControlViewModel, secondControl: IControlViewModel) {\r\n if (firstControl.controlVisibility !== Visibility.Visible)\r\n firstControl.controlVisibility = Visibility.Visible;\r\n if (secondControl.controlVisibility !== Visibility.Collapsed)\r\n secondControl.controlVisibility = Visibility.Collapsed;\r\n }\r\n\r\n\r\n /* Устанавливает доступ к элементам в зависимости от текущего состояния карточки */\r\n private LockControlsAccordingCurrentState(model: ICardModel, card: Card) {\r\n // Если состояние карточки \"Черновик\" или \"На доработке\" блокируем некоторые эл-ты управления\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pdciSection) {\r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n if (stateID && (stateID === CdDocStates.Draft.id || stateID === CdDocStates.Rework.id)) {\r\n this.SetControlReadOnlyState(model, \"Department\", true);\r\n this.SetControlReadOnlyState(model, \"IsSpecialWork\", true);\r\n this.SetControlReadOnlyState(model, \"PlannedPerformanceDate\", true);\r\n this.SetControlReadOnlyState(model, \"PlannedCompletionDate\", true);\r\n this.SetControlReadOnlyState(model, \"PerformerType\", true);\r\n this.SetControlReadOnlyState(model, \"CostOfWork\", true);\r\n this.SetControlReadOnlyState(model, \"EsudAgreement\", true);\r\n }\r\n else {\r\n // если нет ни одной задачи, то блокируем все поля\r\n if (card.tasks.length === 0) {\r\n this.SetAllControlsReadOnlyState(model, true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n //* Обработка флага \"РД отсутствует в архиве\" */\r\n private HandleMissingTechnicalDocumentationFlag(model: ICardModel, card: Card) {\r\n let goSection = card.sections.tryGet('PkGlazingOrder');\r\n let workTextControl: IControlViewModel | undefined = model.controls.get('WorkTextControl');\r\n let workRefControl: IControlViewModel | undefined = model.controls.get('WorkRefControl');\r\n if (workTextControl && workRefControl && goSection) {\r\n let missingTechnicalDocumentation: boolean | undefined = goSection.fields.tryGet('MissingTechnicalDocumentation');\r\n this.UpdateWorkControlsVisability(missingTechnicalDocumentation, workTextControl, workRefControl);\r\n\r\n goSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'MissingTechnicalDocumentation') {\r\n missingTechnicalDocumentation = e.fieldValue;\r\n if (workTextControl && workRefControl)\r\n this.UpdateWorkControlsVisability(missingTechnicalDocumentation, workTextControl, workRefControl);\r\n }\r\n });\r\n }\r\n }\r\n\r\n //* Заполнение таблицы \"Работы выполнены по проектной документации\" при выборе тех.документа из представления */\r\n private async WorksByProjectDocumentationTableFilling(card: Card) {\r\n let wpdSection = card.sections.tryGet('PkGlazingOrderWorksByProjectDocumentation');\r\n if (!wpdSection) { return; }\r\n\r\n wpdSection.rows.collectionChanged.add(e => {\r\n if (e.added.length > 0) {\r\n let row: CardRow = e.added[0];\r\n row.fieldChanged.add(async e1 => {\r\n if (e1.fieldName === 'WorkTechnicalDocumentationID') {\r\n let tdId = e1.fieldValue;\r\n if (!tdId) {\r\n row.set('Number', createTypedField(null, DotNetType.String));\r\n row.set('RdDivision', createTypedField(null, DotNetType.String));\r\n row.set('ContractDivision', createTypedField(null, DotNetType.String));\r\n row.set('Version', createTypedField(null, DotNetType.String));\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetRdInfo;\r\n request.info[\"CardID\"] = createTypedField(tdId, 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 docNumber = row.tryGetField('WorkTechnicalDocumentationFullNumber');\r\n let respInfo = response.info;\r\n if (respInfo && respInfo.ArNumber && respInfo.ArNumber.$value)\r\n row.set('Number', createTypedField(respInfo.ArNumber.$value, DotNetType.String));\r\n else if (docNumber)\r\n row.set('Number', createTypedField(docNumber.$value, DotNetType.String));\r\n\r\n if (respInfo && respInfo.RdDivision && respInfo.ContractDivision && respInfo.Version) {\r\n row.set('RdDivision', createTypedField(respInfo.RdDivision.$value, DotNetType.String));\r\n row.set('ContractDivision', createTypedField(respInfo.ContractDivision.$value, DotNetType.String));\r\n row.set('Version', createTypedField(respInfo.Version.$value, DotNetType.String));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n //* Обработка \"вида заявки на остеклкение\". */\r\n private HandleOrderKind(model: ICardModel, card: Card) {\r\n\r\n // Если выбран вариант \"доп. соглашение\", то поле \"Номер основного договора\" должно отображаться и д.б. заполнено.\r\n // Если выбран вариант \"новый договор\", то поле \"Номер основного договора\" скрыто и не проверяется.\r\n let goSection: CardSection | undefined = card.sections.tryGet(\"PkGlazingOrder\");\r\n let orderKindID: number | undefined = goSection!.fields.get('OrderKindID');\r\n\r\n let mainContractNumberControl: IControlViewModel | undefined = model.controls.get('MainContractNumber');\r\n\r\n if (!mainContractNumberControl) {\r\n return;\r\n }\r\n\r\n mainContractNumberControl!.controlVisibility = ((orderKindID ? true : false) && (orderKindID === 1)) ? Visibility.Visible : Visibility.Collapsed;\r\n\r\n // скрываем/показываем поле \"Номер осн. договора\" в зависимости от варианта в поле \"доп. соглашение\"\r\n goSection!.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"OrderKindID\") {\r\n let selectedOrderKindID = e.fieldValue as number | null | undefined;\r\n mainContractNumberControl!.controlVisibility = ((selectedOrderKindID ? true : false) && (selectedOrderKindID === 1)) ? Visibility.Visible : Visibility.Collapsed;\r\n\r\n }\r\n });\r\n }\r\n \r\n //*Обработка флага \"Наличие спец. работ\" */\r\n private HandleSpecialWorkFlag(model: ICardModel, card: Card) {\r\n /// При выставленном флаге должно отображаться поле \"Субподрядчик на спец. работы\"\r\n /// Если выбран вариант \"собственные силы\", то должно отображаться поле \"Структурное подразделение\", а поле \"Субподрядчик на основные работы\" скрыто \r\n /// Если выбран вариант \"субподряд\", то должно отображаться поле \"Субподрядчик на основные работы\", а поле \"Структурное подразделение\" скрыто \r\n \r\n let goSection: CardSection | undefined = card.sections.tryGet(\"PkGlazingOrder\");\r\n let isSpecialWork: boolean | undefined = goSection!.fields.get('IsSpecialWork');\r\n\r\n let isSpecialWorkControl: IControlViewModel | undefined = model.controls.get('IsSpecialWork');\r\n let specialWorkSubContractorControl: IControlViewModel | undefined = model.controls.get('SpecialWorkSubContractor');\r\n \r\n if (!isSpecialWorkControl || !specialWorkSubContractorControl) {\r\n return;\r\n }\r\n \r\n specialWorkSubContractorControl!.controlVisibility = ((isSpecialWork ? true : false) && (isSpecialWork === true)) ? Visibility.Visible : Visibility.Collapsed;\r\n\r\n // скрываем/показываем поле \"Номер осн. договора\" в зависимости от варианта в поле \"доп. соглашение\"\r\n goSection!.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"IsSpecialWork\") {\r\n specialWorkSubContractorControl!.controlVisibility = (e.fieldValue as boolean === true) ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n });\r\n }\r\n \r\n\r\n\r\n //* Обработка элемента управления \"Вариант исполнителя\" */\r\n private HandlePerformerType(model: ICardModel, card: Card) {\r\n /// При выставленном флаге должно отображаться поле \"Субподрядчик на спец. работы\"\r\n /// Если выбран вариант \"собственные силы\", то должно отображаться поле \"Структурное подразделение\", а поле \"Субподрядчик на основные работы\" скрыто \r\n /// Если выбран вариант \"субподряд\", то должно отображаться поле \"Субподрядчик на основные работы\", а поле \"Структурное подразделение\" скрыто\r\n let goSection: CardSection | undefined = card.sections.tryGet(\"PkGlazingOrder\");\r\n let performerTypeID: number | undefined = goSection!.fields.get('PerformerTypeID');\r\n\r\n let performerTypeControl: IControlViewModel | undefined = model.controls.get('PerformerType');\r\n let innerContractorControl: IControlViewModel | undefined = model.controls.get('InnerContractor');\r\n let mainWorkSubContractorControl: IControlViewModel | undefined = model.controls.get('MainWorkSubContractor');\r\n \r\n if (!performerTypeControl || !innerContractorControl|| !mainWorkSubContractorControl) {\r\n return;\r\n }\r\n\r\n //performerTypeID \r\n // PkGlazingOrderPerformerType.InnerResources = 0\r\n // PkGlazingOrderPerformerType.SubContracting = 1\r\n innerContractorControl!.controlVisibility = ((performerTypeID ? true : false) && (performerTypeID === 0)) ? Visibility.Visible : Visibility.Collapsed;\r\n mainWorkSubContractorControl!.controlVisibility = ((performerTypeID ? true : false) && (performerTypeID === 1))? Visibility.Visible : Visibility.Collapsed;\r\n\r\n\r\n // скрываем/показываем эл-ты управления \r\n goSection!.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === \"PerformerTypeID\") {\r\n innerContractorControl!.controlVisibility = (e.fieldValue as number === 0) ? Visibility.Visible : Visibility.Collapsed;\r\n mainWorkSubContractorControl!.controlVisibility = (e.fieldValue as number === 1) ? Visibility.Visible : 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 }\r\n}","import { IControlViewModel, ICardModel, ICardUIExtensionContext, CardUIExtension } from \"tessa/ui/cards\";\r\nimport { DotNetType, createTypedField, Visibility, Guid, TypedField } from \"tessa/platform\";\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { Card, CardFieldChangedEventArgs, CardRow, CardRowState, FieldMapStorage } from 'tessa/cards';\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { CdRequestTypes } from \"src/cdScripts/Helpers/CdRequestTypes\";\r\nimport { showError, showNotEmpty } from \"tessa/ui\";\r\nimport { AutoCompleteEntryViewModel, CheckBoxViewModel, GridRowAction, GridViewModel, LabelViewModel, TextBoxViewModel } from \"tessa/ui/cards/controls\";\r\nimport { PkCommonHelper } from \"src/pkScripts/Helpers/PkCommonHelper\";\r\nimport { CdUIHelper } from \"../CdUIHelper\";\r\nimport { PkClientHelper } from 'src/pkScripts/Helpers/PkClientHelper';\r\nimport { isNullOrUndefined } from \"util\";\r\nimport { ValidationResult, ValidationResultType } from \"tessa/platform/validation\";\r\nimport { CdCommonHelper } from \"src/cdScripts/Helpers/CdCommonHelper\";\r\n\r\n\r\nexport class CdAdditionalWorksContractOrderUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n let card: Card;\r\n if ((model = context.model) == null || (card = context.model.card) == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(card.typeId, CdCardTypes.PkAdditionalWorksContractOrderTypeID)) {\r\n return;\r\n }\r\n // Костыль для перехода по гирерссылке в эл-те управления \"метка\". В толстом работает из коробки, в вебе нет\r\n let linkToGuide1 = model.controls.get('linkToGuide1') as LabelViewModel;\r\n linkToGuide1.onClick = () => {\r\n window.open(\"https://disk.yandex.ru/i/gXZWoSDxdAszzA\", '_blank');\r\n };\r\n\r\n // Обработка чек-бокса \"Расчет сделан не в КЦ\" \r\n this.HandleIsOutsideKcCalculationFlag(model, card);\r\n\r\n // Обработка изменений в поле \"ID расчета стоимости работ (ПДЦ)\"\r\n await this.HandleOnPdcNumberChangedAsync(card);\r\n\r\n // Обработка при выборе объекта\r\n await this.HandleOnObjectChangedAsync(card);\r\n\r\n // Заполнение ЖК при выборе объекта\r\n // await this.FillLivingComplexWhenObjectChanged(card);\r\n\r\n // Обработка изменений в поле \"Событие\" в таблице \"Список РВР\".\r\n this.HandleRvrListChanges(context, card);\r\n\r\n // Обработка изменений в таблице \"Состав доп. работ\".\r\n this.HandleRvrWorksChanges(card);\r\n\r\n // пересчет суммы и процентов в блоке РВР\r\n this.RecalcTotalRvrAmount(card);\r\n\r\n // Обработка изменений в таблице \"Распределение сумм по виновным (электронный АРФО)\"\r\n this.HandleRvrGuiltyChanges(card);\r\n\r\n // Обработка поля \"Виновный участник\" при заполнении таблицы \"Список виновных для АРФО\"\r\n await this.HandleGuiltyPartiesRowEvents(context, card);\r\n\r\n // Блокирование/разблокирование блока \"Основная информация\" в зависимости от флага AllowChangeKc\r\n this.CheckAllowChangeKcMode(context, card);\r\n }\r\n private CheckAllowChangeKcMode(context: ICardUIExtensionContext, card: Card) {\r\n // Если значение флага AllowChangeKc = false, то все элементы управления блока \"Основная информация\" должны быть недоступны для редактирования\r\n let AllowChangeKc: boolean | undefined = this.AllowChangeKc(card);\r\n if (AllowChangeKc === undefined || AllowChangeKc === null || AllowChangeKc === true) {\r\n return;\r\n }\r\n let block = context.model.blocks.get(\"BlockMain\");\r\n if (!block) return;\r\n for (let control of block.controls) {\r\n control.isReadOnly = true;\r\n }\r\n }\r\n\r\n\r\n private AllowChangeKc(card: Card): boolean | undefined {\r\n var order = card.sections.get(\"PkAdditionalWorksContractOrder\");\r\n if (order) {\r\n return order.fields.tryGet(\"AllowChangeKc\");\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Обработка флага \"Наличие спец. работ\". **/\r\n private HandleIsOutsideKcCalculationFlag(model: ICardModel, card: Card) {\r\n\r\n // Чек-бокс \"Расчет сделан не в КЦ\" - если данный чек-бокс заполнен, то поле с вводом ID расчета ПДЦ скрываем с формы.\r\n\r\n let isOutsideKcCalculationControl: IControlViewModel | undefined = model.controls.get('IsOutsideKcCalculation');\r\n let awcoSection = card.sections.tryGet('PkAdditionalWorksContractOrder');\r\n\r\n if (awcoSection && isOutsideKcCalculationControl) {\r\n\r\n let isOutsideKcCalculation: boolean | undefined = awcoSection.fields.tryGet('IsOutsideKcCalculation');\r\n this.CheckOutsideKcCalculation(model, isOutsideKcCalculation);\r\n\r\n awcoSection.fields.fieldChanged.add(e => {\r\n if (e.fieldName === 'IsOutsideKcCalculation') {\r\n let isOutsideKcCalculation = e.fieldValue;\r\n this.CheckOutsideKcCalculation(model, isOutsideKcCalculation);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /* Устанавливает доступность эл-тов управления в зависимости от флага \"Расчет сделан не в КЦ\" */\r\n private CheckOutsideKcCalculation(model: ICardModel, isOutsideKcCalculation: boolean | undefined) {\r\n if (isOutsideKcCalculation === undefined) {\r\n isOutsideKcCalculation = false;\r\n }\r\n\r\n // Если isOutsideKcCalculation = true, то поле с вводом ID расчета ПДЦ скрываем с формы и делаем доступными поля \"Общая стоимость из ПДЦ\", \"Объект\", \"Исполнитель\". Иначе наоборот\r\n let pdcNumberControl: IControlViewModel | undefined = model.controls.get('PdcNumber');\r\n pdcNumberControl!.controlVisibility = isOutsideKcCalculation ? Visibility.Collapsed : Visibility.Visible;\r\n\r\n // Если контрол \"Расчет сделан не в КЦ\" ридонли, то поля \"Общая стоимость из ПДЦ\", \"Объект\", \"Исполнитель\" тоже делаем ридонли.\r\n let isOutsideKcCalculationModel: IControlViewModel | undefined = model.controls.get('IsOutsideKcCalculation');\r\n let isControlBlockReadOnly: boolean | undefined = !isOutsideKcCalculation || isOutsideKcCalculationModel!.isReadOnly;\r\n\r\n\r\n // Если поле с вводом ID расчета ПДЦ срыто, то поля \"Общая стоимость из ПДЦ\", \"Объект\", \"Исполнитель\" доступны для редактирования. Иначе нет\r\n let ctrlAmountFromPdc: IControlViewModel | undefined = model.controls.get('AmountFromPdc');\r\n ctrlAmountFromPdc!.isReadOnly = isControlBlockReadOnly;\r\n\r\n let ctrlPerformer: IControlViewModel | undefined = model.controls.get('Performer');\r\n ctrlPerformer!.isReadOnly = isControlBlockReadOnly;\r\n\r\n let ctrlObject: IControlViewModel | undefined = model.controls.get('Object');\r\n ctrlObject!.isReadOnly = isControlBlockReadOnly;\r\n\r\n let ctrlStartWorkDateFromKC: IControlViewModel | undefined = model.controls.get('StartWorkDateFromKC');\r\n ctrlStartWorkDateFromKC!.isReadOnly = isControlBlockReadOnly;\r\n\r\n let ctrlFinishWorkDateFromKC: IControlViewModel | undefined = model.controls.get('FinishWorkDateFromKC');\r\n ctrlFinishWorkDateFromKC!.isReadOnly = isControlBlockReadOnly;\r\n\r\n // Если флажок установлен, то очищаем поле \"ID расчета ПДЦ\"\r\n if (isOutsideKcCalculation) {\r\n let section = model.card.sections.tryGet(\"PkAdditionalWorksContractOrder\");\r\n section!.fields.set(\"PdcNumber\", null);\r\n }\r\n\r\n }\r\n\r\n /** Обработка изменений в поле \"ID расчета стоимости работ (ПДЦ)\" **/\r\n private async HandleOnPdcNumberChangedAsync(card: Card) {\r\n\r\n let section = card.sections.tryGet(\"PkAdditionalWorksContractOrder\");\r\n if (isNullOrUndefined(section)) {\r\n return;\r\n }\r\n\r\n section.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'PdcNumber') {\r\n\r\n if (isNullOrUndefined(e.fieldValue)) {\r\n return;\r\n }\r\n\r\n let sectionDci = card.sections.tryGet(\"DocumentCommonInfo\");\r\n let sectionRdp = card.sections.tryGet(\"PkRdProperties\");\r\n\r\n sectionDci!.fields.set(\"Amount\", null);\r\n section!.fields.set(\"StartWorkDate\", null);\r\n section!.fields.set(\"FinishWorkDate\", null);\r\n sectionRdp!.fields.set(\"ObjectID\", null);\r\n sectionRdp!.fields.set(\"ObjectName\", null);\r\n section!.fields.set(\"PerformerID\", null);\r\n section!.fields.set(\"PerformerName\", null);\r\n section!.fields.set(\"PerformerExternalID\", null);\r\n section!.fields.set(\"Performer_INN\", null);\r\n\r\n\r\n // Если \"ID расчета стоимости работ (ПДЦ)\" выбрано, то запрвщиваем и заполняем поля \"Общая стоимость из ПДЦ\", \"Объект\", \"Исполнитель\"\r\n await this.FillDataByPdcAsync(card, e.fieldValue);\r\n }\r\n });\r\n }\r\n\r\n private async FillDataByPdcAsync(card: Card, pdcNumber: string) {\r\n if (isNullOrUndefined(pdcNumber)) {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetInfoByPdc;\r\n request.info[\"PdcNumber\"] = createTypedField(pdcNumber, DotNetType.String);\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 return;\r\n }\r\n\r\n let sectionDci = card.sections.tryGet(\"DocumentCommonInfo\");\r\n // \"Общая стоимость из ПДЦ\"\r\n sectionDci!.fields.set(\"Amount\", response.info.Amount);\r\n\r\n // \"Объект\"\r\n let sectionRdp = card.sections.tryGet(\"PkRdProperties\");\r\n sectionRdp!.fields.set(\"ObjectID\", response.info.ObjectID);\r\n sectionRdp!.fields.set(\"ObjectName\", response.info.ObjectName);\r\n\r\n // \"Исполнитель\"\r\n let sectionAwco = card.sections.tryGet(\"PkAdditionalWorksContractOrder\");\r\n sectionAwco!.fields.set(\"PerformerID\", response.info.PerformerID);\r\n sectionAwco!.fields.set(\"PerformerName\", response.info.PerformerName);\r\n sectionAwco!.fields.set(\"PerformerExternalID\", response.info.PerformerExternalID);\r\n sectionAwco!.fields.set(\"PerformerINN\", response.info.PerformerINN);\r\n sectionAwco!.fields.set(\"Performer_INN\", response.info.PerformerINN);\r\n\r\n // Даты\r\n sectionAwco!.fields.set(\"StartWorkDate\", response.info.StartWorkDateFromKC);\r\n sectionAwco!.fields.set(\"FinishWorkDate\", response.info.FinishWorkDateFromKC);\r\n\r\n }\r\n\r\n /* Обработка при выборе объекта. */\r\n private async HandleOnObjectChangedAsync(card: Card) {\r\n\r\n let section = card.sections.tryGet('PkRdProperties');\r\n if (isNullOrUndefined(section)) {\r\n return;\r\n }\r\n section.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'ObjectID') {\r\n let objectId = e.fieldValue;\r\n\r\n section!.fields.set(\"ObjectPlaceID\", null);\r\n section!.fields.set(\"ObjectPlaceLivingComplex\", null);\r\n\r\n if (isNullOrUndefined(objectId)) {\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 return;\r\n }\r\n\r\n section!.fields.set(\"ObjectPlaceID\", response.info.ResidentialComplexID);\r\n section!.fields.set(\"ObjectPlaceLivingComplex\", response.info.ResidentialComplexName);\r\n\r\n // Очищаем таблицу \"Список РВР\"\r\n const clearTable = (name: string) => {\r\n const rows = 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 // болк \"Список РВР\" очищается, если значение флага AllowChangeKc != true\r\n let AllowChangeKc: boolean | undefined = this.AllowChangeKc(card);\r\n if (AllowChangeKc === undefined || AllowChangeKc === null || AllowChangeKc === false) {\r\n clearTable(\"PkAdditionalWorksContractOrderRvrGuilty\");\r\n clearTable(\"PkAdditionalWorksContractOrderRvrWorks\");\r\n clearTable(\"PkAdditionalWorksContractOrderRvrList\");\r\n }\r\n // Очистим сумму в поле \"Из них РВР\"\r\n this.RecalcTotalRvrAmount(card);\r\n\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n /** Обработка изменений в поле \"Событие\" в таблице \"Список РВР\". **/\r\n private HandleRvrListChanges(context: ICardUIExtensionContext, card: Card) {\r\n\r\n var rvrList = card.sections.tryGet('PkAdditionalWorksContractOrderRvrList');\r\n if (isNullOrUndefined(rvrList)) {\r\n return;\r\n }\r\n\r\n const rvrListChangeHandler = (e: CardFieldChangedEventArgs) => {\r\n if (isNullOrUndefined(e)) {\r\n return;\r\n }\r\n\r\n let row = e.storage;\r\n if (isNullOrUndefined(row)) {\r\n return;\r\n }\r\n\r\n if (e.fieldName == \"ARFOEventID\") {\r\n row.set('ARFOIssueReasonID', null);\r\n row.set('ARFOIssueReasonName', null);\r\n row.set('ARFOIssueReasonCode', null);\r\n row.set('ARFOIssueReasonActivityType', null);\r\n row.set('ARFOIssueReason_ActivityType', null);\r\n }\r\n\r\n if (e.fieldName == \"ARFOIssueReasonCode\") {\r\n\r\n let rowId = row.get(\"RowID\");\r\n\r\n // Очистим виновных по строке РВР\r\n let tableRvrGuilty = card.sections.tryGet(\"PkAdditionalWorksContractOrderRvrGuilty\");\r\n if (!isNullOrUndefined(tableRvrGuilty)) {\r\n for (let i = tableRvrGuilty.rows.length - 1; i >= 0; i--) {\r\n\r\n let row = tableRvrGuilty!.rows[i];\r\n let parentRvrRowID = row.get(\"ParentRvrRowID\");\r\n if (rowId == parentRvrRowID) {\r\n if (row.state === CardRowState.Inserted) {\r\n tableRvrGuilty.rows.remove(row);\r\n }\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n\r\n // Проверим особый случай заполнения таблицы виновных\r\n this.CheckIssueReasonCodeSpecialCase(card, row);\r\n\r\n // Общую сумму по всем РВР запишем в поле \"Из них РВР\"\r\n this.RecalcTotalRvrAmount(card);\r\n }\r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(rvrList, rvrListChangeHandler);\r\n\r\n\r\n // Проверка заполнения обязательных полей в форме \"РВР\"\r\n const rvrListEditor = context.model.controls.get('RvrTable') as GridViewModel;\r\n if (rvrListEditor == null) { return; }\r\n rvrListEditor.rowValidating.add(e => {\r\n\r\n if (e.row.tryGet(\"KeySectionNERID\") == null) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Ключевой раздел НЭР\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n if (e.row.tryGet(\"ARFOEventID\") == null) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Событие\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n if (e.row.tryGet(\"ARFOIssueReasonID\") == null) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Причина возникновения события\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n if (e.row.tryGet(\"StartWorkDate\") == null) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Дата начала работ\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n if (e.row.tryGet(\"WorksJustification\") == null || e.row.tryGet(\"WorksJustification\").trim() == \"\") {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Обоснование необходимости работ (цепочка событий)\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n \r\n // Проверка значений дат начала и окончания работ\r\n let dateStart = e.row.tryGet(\"StartWorkDate\");\r\n let finishDate = e.row.tryGet(\"FinishWorkDate\");\r\n if (dateStart && finishDate) {\r\n if (dateStart > finishDate) {\r\n e.validationResult.add(ValidationResult.fromText(\"\\\"Дата начала работ\\\" должна быть меньше или равна \\\"Дате окончания работ\\\"\", ValidationResultType.Error));\r\n }\r\n }\r\n\r\n let sectionMain = card.sections.tryGet('PkAdditionalWorksContractOrder');\r\n let startWorkDateFromKC = sectionMain?.fields.tryGet('StartWorkDate');\r\n let finishWorkDateFromKC = sectionMain?.fields.tryGet('FinishWorkDate');\r\n if (dateStart && startWorkDateFromKC && dateStart < startWorkDateFromKC) {\r\n e.validationResult.add(ValidationResult.fromText(\"\\\"Дата начала работ\\\" для Ключевого раздела НЭР должна быть больше или равна \\\"Дата начала работ (из Расчета КЦ)\\\" по объекту.\", ValidationResultType.Error));\r\n }\r\n\r\n if (finishDate && finishWorkDateFromKC && finishDate > finishWorkDateFromKC) {\r\n e.validationResult.add(ValidationResult.fromText(\"\\\"Дата окончания работ\\\" для Ключевого раздела НЭР должна быть меньше или равна \\\"Дата окончания работ (из Расчета КЦ)\\\" по объекту.\", ValidationResultType.Error));\r\n }\r\n\r\n if (finishWorkDateFromKC && dateStart && dateStart > finishWorkDateFromKC) {\r\n e.validationResult.add(ValidationResult.fromText(\"\\\"Дата начала работ\\\" для Ключевого раздела НЭР должна быть меньше или равна \\\"Дата окончания работ (из Расчета КЦ)\\\" по объекту.\", ValidationResultType.Error));\r\n }\r\n\r\n if (startWorkDateFromKC && finishDate && finishDate < startWorkDateFromKC) {\r\n e.validationResult.add(ValidationResult.fromText(\"\\\"Дата окончания работ\\\" для Ключевого раздела НЭР должна быть больше или равна \\\"Дата начала работ (из Расчета КЦ) по объекту.\", ValidationResultType.Error));\r\n }\r\n });\r\n\r\n }\r\n\r\n /** Обработка изменений в таблице \"Состав доп. работ\". **/\r\n private HandleRvrWorksChanges(card: Card) {\r\n\r\n let rvrWorkList = card.sections.tryGet('PkAdditionalWorksContractOrderRvrWorks');\r\n\r\n const rvrWorksChangeHandler = (e: CardFieldChangedEventArgs) => {\r\n if (isNullOrUndefined(e)) {\r\n return;\r\n }\r\n\r\n let row = e.storage;\r\n if (isNullOrUndefined(row)) {\r\n return;\r\n }\r\n\r\n let rvrList = card.sections.tryGet('PkAdditionalWorksContractOrderRvrList');\r\n rvrList!.rows.forEach(rvrRow => {\r\n if (rvrRow.state != CardRowState.Deleted) {\r\n\r\n let rvrWorks = card.sections.tryGet('PkAdditionalWorksContractOrderRvrWorks');\r\n let rvrAmount = parseFloat(\"0.0\");\r\n\r\n rvrWorks!.rows.forEach(workRow => {\r\n if (workRow.state != CardRowState.Deleted && rvrRow.tryGet(\"RowID\") == workRow.tryGet(\"ParentRvrRowID\")) {\r\n let workAmount: number = workRow.tryGet(\"Amount\") ? Number(workRow.tryGet(\"Amount\") || 0.0) : 0.0;\r\n rvrAmount = rvrAmount + workAmount;\r\n }\r\n });\r\n\r\n //const amt = createTypedField(parseFloat((Math.round(rvrAmount * 100) / 100).toFixed(2)), DotNetType.Decimal);\r\n rvrRow.set(\"Amount\", this.DecimalFieldValue(rvrAmount));\r\n\r\n // При изменении суммы проверим состояние строки в дочерней таблице виновных в зависимости от кода причины\r\n this.UpdateGuiltyAmountIfSpecialCase(card, rvrRow);\r\n }\r\n });\r\n\r\n // Общую сумму по всем РВР запишем в поле \"Из них РВР\"\r\n this.RecalcTotalRvrAmount(card);\r\n };\r\n PkClientHelper.SubscribeForFieldChanging(rvrWorkList!, rvrWorksChangeHandler);\r\n }\r\n\r\n private HandleRvrGuiltyChanges(card: Card) {\r\n var rvrGuilty = card.sections.tryGet('PkAdditionalWorksContractOrderRvrGuilty');\r\n if (isNullOrUndefined(rvrGuilty)) {\r\n return;\r\n }\r\n\r\n const rvrGuiltyChangeHandler = async (e) => {\r\n if (isNullOrUndefined(e) || e.fieldName == \"GuiltDegreePercentage\") {\r\n return;\r\n }\r\n if (isNullOrUndefined(e) || e.fieldName == \"GuiltyPartyCriteriaString\") {\r\n return;\r\n }\r\n \r\n if (e.fieldName == \"GuiltyPartyExternalID\") {\r\n let row = e.storage;\r\n let partnerExternalID = e.fieldValue;\r\n let synonymAlias = await this.GetPartnerSynonymAliasByExternalID(partnerExternalID);\r\n \r\n if (synonymAlias === null || synonymAlias === undefined) {\r\n CdCommonHelper.SetFieldToRow(row, \"GuiltyPartyCriteriaString\", createTypedField(row.get(\"GuiltyPartyName\"), DotNetType.String));\r\n }\r\n else {\r\n CdCommonHelper.SetFieldToRow(row, \"GuiltyPartyCriteriaString\", createTypedField(synonymAlias, DotNetType.String));\r\n }\r\n }\r\n\r\n this.RecalcGuiltDegreePercentage(card);\r\n };\r\n\r\n PkClientHelper.SubscribeForFieldChanging(rvrGuilty, rvrGuiltyChangeHandler);\r\n }\r\n private async GetPartnerSynonymAliasByExternalID(partnerExternalID : number | null) {\r\n if (partnerExternalID === null || partnerExternalID === undefined) {\r\n return null;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetPartnerSynonymAliasByExternalID;\r\n request.info[\"PartnerExternalID\"] = createTypedField(partnerExternalID, DotNetType.Int64);\r\n \r\n\r\n const response = await CardService.instance.request(request);\r\n if (!response.validationResult.isSuccessful)\r\n return null;\r\n\r\n let error = response.info.Error?.$value;\r\n if (error) {\r\n await showError(error);\r\n return null;\r\n }\r\n\r\n let res: string = response.info.Alias.$value;\r\n return res;\r\n }\r\n\r\n /** Обработка поля \"Виновный участник\" при заполнении таблицы \"Список виновных для АРФО\". **/\r\n private async HandleGuiltyPartiesRowEvents(context: ICardUIExtensionContext, card: Card) {\r\n\r\n const gkPikPerimetrName = \"ГруппаКомпанийПИК\"; // todo: kill hardcode\r\n\r\n let rvrTable = CdUIHelper.GetUIControlFromForm(context.model.mainForm!, \"RvrTable\");\r\n rvrTable!.rowInitializing.add(e => {\r\n\r\n // TES-8278 поля \"Дата начала работ\", \"Дата окончания работ\" по умолчанию заполнить значениями полей \"Дата начала работ (из Расчета КЦ)\", \"Дата окончания работ (из Расчета КЦ)\"\r\n if (e.action == GridRowAction.Inserted) {\r\n let sectionMain = card.sections.tryGet('PkAdditionalWorksContractOrder');\r\n let startWorkDate = sectionMain?.fields.tryGet('StartWorkDate');\r\n if (startWorkDate) {\r\n e.row.set('StartWorkDate', createTypedField(startWorkDate, DotNetType.DateTime));\r\n }\r\n let finishWorkDate = sectionMain?.fields.tryGet('FinishWorkDate');\r\n if (finishWorkDate) {\r\n e.row.set('FinishWorkDate', createTypedField(finishWorkDate, DotNetType.DateTime));\r\n }\r\n }\r\n\r\n let rvrTableBlock = e.rowModel?.blocksBag.find(x => x.name == \"RvrTableBlock\");\r\n var ctrlRvrRowARFOIssueReason = CdUIHelper.GetUIControlFromForm(rvrTableBlock?.form!, \"RvrRowARFOIssueReason\");\r\n let rvrTableRowGuiltTable = CdUIHelper.GetUIControlFromForm(rvrTableBlock?.form!, \"RvrTableRowGuiltTable\");\r\n\r\n if (!rvrTableRowGuiltTable) {\r\n return;\r\n }\r\n\r\n const checkCode = (code: string) => {\r\n let guiltyName = this.GetGuiltyNameBySpecialCase(code)\r\n if (!PkCommonHelper.IsNullOrWhitespace(guiltyName)) {\r\n this.CheckIssueReasonCodeSpecialCase(card, e.row);\r\n rvrTableRowGuiltTable!.controlVisibility = Visibility.Collapsed;\r\n }\r\n else {\r\n rvrTableRowGuiltTable!.controlVisibility = Visibility.Visible;\r\n }\r\n };\r\n\r\n let code = ctrlRvrRowARFOIssueReason!.hasEmptyValue ? \"\" : ctrlRvrRowARFOIssueReason!.item!.columnValues[1] as string;\r\n checkCode(code);\r\n ctrlRvrRowARFOIssueReason!.valueSet.add((ev) => {\r\n checkCode(ev.item!.columnValues[1] as string);\r\n });\r\n\r\n ctrlRvrRowARFOIssueReason!.valueDeleted.add(() => {\r\n checkCode(\"\");\r\n });\r\n\r\n rvrTableRowGuiltTable!.rowValidating.add(async e => {\r\n\r\n // Проверка заполнения обязательных полей\r\n if (e.row.tryGet(\"GuiltyPartyID\") == null) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Виновный участник\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n if (this.IsNullOrZerro(e.row.tryGet(\"CompensationAmount\"))) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Сумма компенсации\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n // Комментарий - пользователь заполняет вручную при создании или редактировании данной строчки таблицы. Если в данной строчке стоит флаг \"Перевыставлении затрат\" и \"Пакет документов для претензии\" не стоит, то поле комментарий должно быть обязательно заполнено хотя бы 3 символами\r\n var isExpensesRechargeVm = e?.rowModel?.controls.get('IsExpensesRecharge') as CheckBoxViewModel;\r\n const isClaimDocPackageVm = e?.rowModel?.controls.get('IsClaimDocPackage') as CheckBoxViewModel;\r\n const commentaryVm = e?.rowModel?.controls.get('Commentary') as TextBoxViewModel;\r\n\r\n if (isExpensesRechargeVm.isChecked) {\r\n\r\n if (!isClaimDocPackageVm.isChecked) {\r\n var comment = commentaryVm.text;\r\n if (PkCommonHelper.IsNullOrWhitespace(comment) || comment.length < 3) {\r\n e.validationResult.add(ValidationResult.fromText(\"При перевыставлении затрат, если не выставлен флажок \\\"Намерение по перевыставлению\\\", то необходимо заполнить поле \\\"Комментарий\\\" (не менее 3-х символов).\", ValidationResultType.Error));\r\n }\r\n }\r\n }\r\n\r\n // TES-6190 п.12. При проставлен чек-бокс \"Пакет документов для претензии\", то обязательна должно быть заполнено поле Номер договора (с виновными). Если чек-бокс не проставлен, то данное поле не заполняется (залочено, заблокировано для заполнения).\r\n var ctrlContract = e?.rowModel?.controls.get(\"Contract\") as AutoCompleteEntryViewModel;\r\n if (isClaimDocPackageVm.isChecked) {\r\n if (ctrlContract != null && ctrlContract.hasEmptyValue) {\r\n e.validationResult.add(ValidationResult.fromText(\"Если проставлен чек-бокс \\\"Намерение по перевыставлению\\\", то обязательна должно быть заполнено поле \\\"Договор по объекту\\\".\", ValidationResultType.Error));\r\n }\r\n }\r\n // при любом изменении таблицы пересчитаваем сумму и проценты\r\n this.RecalcTotalRvrAmount(card);\r\n });\r\n\r\n // ВГО - чек-бокс заполняется автоматически на основании того, какой подрядчик был выбран.\r\n // Если выбрали организацию, которая связана с партнером, который входит в периметр \"ГруппаКомпанийПИК\",\r\n // то проставляется, если же не входит в такой периметр или вообще ни в один не входит, то чек-бокс пустой \r\n rvrTableRowGuiltTable.rowInvoked.add(async (e) => {\r\n if (!e.rowModel) {\r\n return;\r\n }\r\n\r\n if (e.action == GridRowAction.Opening || e.action == GridRowAction.Inserted) {\r\n e.row.fieldChanged.add(async e2 => {\r\n //При изменении занчения в поле GuiltyPartyExternalID \r\n if (e2.fieldName === \"GuiltyPartyExternalID\") {\r\n\r\n let externalID = e2.fieldValue;\r\n\r\n // Проверим, в периметре ли участник\r\n let isInPerimeter = await this.CheckPartnerInPerimeterAsync(externalID, gkPikPerimetrName);\r\n\r\n // Установим значения полей \"ВГО\" и \"Перевыставление затрат\"\r\n e.row.set('IsVGO', createTypedField(isInPerimeter, DotNetType.Boolean));\r\n\r\n\r\n // Логика отметки \"перевыставление\"\r\n // чек-бокс НЕ заполнен, если: \r\n // Вариант 1 - подрядчик относится к ВГО\r\n // Вариант 2- (подрядчик НЕ относится к ВГО) + (код выбранной в карточке \"причине возникновения события\" = 1.6 или 1.8 или 1.12 или 1.13)\r\n // В остальных случаях чек-бокс \"перевыставление затрат\" будет заполнен\r\n let isExpensesRecharge = !isInPerimeter; // подрядчик относится к ВГО\r\n if (!isInPerimeter) // подрядчик НЕ относится к ВГО\r\n {\r\n let awcoSection = card.sections.tryGet('PkAdditionalWorksContractOrder');\r\n if (awcoSection) {\r\n let issueReasonCode: string | undefined = awcoSection.fields.tryGet('ARFOIssueReasonCode');\r\n if (issueReasonCode) {\r\n if (!PkCommonHelper.IsNullOrWhitespace(issueReasonCode)) {\r\n isExpensesRecharge = !(\r\n issueReasonCode.startsWith('1.6')\r\n || issueReasonCode.startsWith('1.8')\r\n || issueReasonCode.startsWith('1.12')\r\n || issueReasonCode.startsWith('1.13')\r\n );\r\n }\r\n }\r\n }\r\n }\r\n e.row.set('IsExpensesRecharge', createTypedField(isExpensesRecharge, DotNetType.Boolean));\r\n }\r\n });\r\n }\r\n\r\n // при любом изменении таблицы пересчитаваем сумму и проценты\r\n this.RecalcTotalRvrAmount(card);\r\n\r\n });\r\n\r\n // Проверка заполнения обязательных полей в форме \"Состав доп. работ\"\r\n let rvrTableRowWorksTable = CdUIHelper.GetUIControlFromForm(rvrTableBlock?.form!, \"RvrTableRowWorksTable\");\r\n rvrTableRowWorksTable!.rowValidating.add(async e => {\r\n if (e.row.tryGet(\"WorkKindID\") == null) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Вид работ\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n if (this.IsNullOrZerro(e.row.tryGet(\"Amount\"))) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Сумма\\\".\", ValidationResultType.Error));\r\n }\r\n\r\n if (e.row.tryGet(\"CostItemID\") == null) {\r\n e.validationResult.add(ValidationResult.fromText(\"Необходимо заполнить поле \\\"Статья затрат\\\".\", ValidationResultType.Error));\r\n }\r\n });\r\n\r\n\r\n });\r\n }\r\n \r\n private RecalcTotalRvrAmount(card: Card) {\r\n // По списку работ расчитываем общую сумму \"Из них РВР\"\r\n // Запишем в поле \"Из них РВР\"\r\n var order = card.sections.tryGet('PkAdditionalWorksContractOrder');\r\n\r\n let amount: number = this.GetTotalRvrAmount(card);\r\n\r\n order!.fields.set(\"RvrAmount\", this.DecimalFieldValue(amount));\r\n\r\n // Пересчитаем проценты для каждой строки в списке виновных\r\n this.RecalcGuiltDegreePercentage(card);\r\n }\r\n\r\n private RecalcGuiltDegreePercentage(card: Card) {\r\n var rvrGuilty = card.sections.tryGet('PkAdditionalWorksContractOrderRvrGuilty');\r\n if (isNullOrUndefined(rvrGuilty)) {\r\n return;\r\n }\r\n let rvrList = card.sections.tryGet('PkAdditionalWorksContractOrderRvrList');\r\n if (isNullOrUndefined(rvrList)) {\r\n return;\r\n }\r\n\r\n // Пересчитаем проценты для каждой строки в списке виновных\r\n rvrGuilty.rows.forEach(row => {\r\n if (row.state != CardRowState.Deleted) {\r\n\r\n let parentRvrRowID = row.get(\"ParentRvrRowID\");\r\n let total: number = this.GetRvrAmount(card, parentRvrRowID);\r\n let value = row.tryGet(\"CompensationAmount\") ? Number(row.tryGet(\"CompensationAmount\") || 0.0) : 0.0;\r\n let percent = (total === 0) ? 0.00 : (value / total) * 100.00;\r\n let percentRounded = Math.round((percent + Number.EPSILON) * 100) / 100;\r\n row.set(\"GuiltDegreePercentage\", this.DecimalFieldValue(percentRounded));\r\n }\r\n });\r\n }\r\n\r\n private DecimalFieldValue(value: number): TypedField {\r\n let val: string = (Math.round(value * 100) / 100).toFixed(2).toString().replace(',', '.');\r\n return createTypedField(val, DotNetType.Decimal);\r\n }\r\n\r\n private GetTotalRvrAmount(card: Card): number {\r\n let total: number = 0.0;\r\n let rvrList = card.sections.tryGet('PkAdditionalWorksContractOrderRvrList');\r\n if (isNullOrUndefined(rvrList)) {\r\n return total;\r\n }\r\n rvrList.rows.forEach(row => {\r\n if (row.state != CardRowState.Deleted) {\r\n\r\n let amount = row.tryGet(\"Amount\") ? Number(row.tryGet(\"Amount\") || 0.0) : 0.0;\r\n total += amount;\r\n }\r\n });\r\n\r\n return total;\r\n }\r\n\r\n private GetRvrAmount(card: Card, parentRvrRowID: any): number {\r\n let rvrList = card.sections.tryGet('PkAdditionalWorksContractOrderRvrList');\r\n if (isNullOrUndefined(rvrList)) {\r\n return 0.00;\r\n }\r\n const rvrRow = rvrList?.rows.find(x => x.rowId == parentRvrRowID);\r\n if (isNullOrUndefined(rvrRow)) {\r\n return 0.00;\r\n }\r\n return rvrRow.tryGet(\"Amount\") ? Number(rvrRow.tryGet(\"Amount\") || 0.0) : 0.0;\r\n }\r\n\r\n private UpdateGuiltyAmountIfSpecialCase(card: Card, rvrRow: FieldMapStorage) {\r\n let code: string = rvrRow.tryGet(\"ARFOIssueReasonCode\");\r\n\r\n let guiltyPartyName: string | undefined = this.GetGuiltyNameBySpecialCase(code);\r\n if (isNullOrUndefined(guiltyPartyName!)) {\r\n return;\r\n }\r\n\r\n let tableRvrGuilty = card.sections.tryGet(\"PkAdditionalWorksContractOrderRvrGuilty\");\r\n if (isNullOrUndefined(tableRvrGuilty)) {\r\n return;\r\n }\r\n let rowId = rvrRow.get(\"RowID\");\r\n let amount: number | undefined = rvrRow.tryGet(\"Amount\") ? Number(rvrRow.tryGet(\"Amount\") || 0.0) : 0.0;\r\n\r\n for (let i = tableRvrGuilty.rows.length - 1; i >= 0; i--) {\r\n let row = tableRvrGuilty!.rows[i];\r\n let parentRvrRowID = row.get(\"ParentRvrRowID\");\r\n let rowGuiltyPartyName = row.get(\"GuiltyPartyName\");\r\n if (rowId == parentRvrRowID && guiltyPartyName == rowGuiltyPartyName) {\r\n row.set(\"CompensationAmount\", this.DecimalFieldValue(amount));\r\n }\r\n }\r\n }\r\n\r\n private CheckIssueReasonCodeSpecialCase(card: Card, rvrRow: FieldMapStorage) {\r\n let code: string = rvrRow.tryGet(\"ARFOIssueReasonCode\");\r\n let amount: number | undefined = rvrRow.tryGet(\"Amount\") ? Number(rvrRow.tryGet(\"Amount\") || 0.0) : 0.0;\r\n let guiltyPartyName: string | undefined = this.GetGuiltyNameBySpecialCase(code);\r\n let rowId = rvrRow.get(\"RowID\");\r\n\r\n if (!isNullOrUndefined(guiltyPartyName!)) {\r\n // Очистим виновных по строке РВР\r\n let tableRvrGuilty = card.sections.tryGet(\"PkAdditionalWorksContractOrderRvrGuilty\");\r\n if (!isNullOrUndefined(tableRvrGuilty)) {\r\n for (let i = tableRvrGuilty.rows.length - 1; i >= 0; i--) {\r\n let row = tableRvrGuilty!.rows[i];\r\n let parentRvrRowID = row.get(\"ParentRvrRowID\");\r\n if (rowId == parentRvrRowID) {\r\n if (row.state === CardRowState.Inserted) {\r\n tableRvrGuilty.rows.remove(row);\r\n }\r\n row.state = CardRowState.Deleted;\r\n }\r\n }\r\n }\r\n\r\n // Добавим фейковую строку\r\n let rvrGuiltyRow = new CardRow();\r\n rvrGuiltyRow.rowId = Guid.newGuid();\r\n rvrGuiltyRow.set(\"ParentRvrRowID\", createTypedField(rowId, DotNetType.Guid));\r\n rvrGuiltyRow.set(\"ContractID\", null);\r\n rvrGuiltyRow.set(\"ContractNameVirtual\", null);\r\n rvrGuiltyRow.set(\"CompensationAmount\", amount, DotNetType.String);\r\n rvrGuiltyRow.set(\"GuiltDegreePercentage\", this.DecimalFieldValue(100.00));\r\n rvrGuiltyRow.set(\"GuiltyPartyExternalID\", null);\r\n rvrGuiltyRow.set(\"GuiltyPartyID\", null);\r\n rvrGuiltyRow.set(\"GuiltyPartyINN\", null);\r\n rvrGuiltyRow.set(\"GuiltyPartyName\", createTypedField(guiltyPartyName, DotNetType.String));\r\n rvrGuiltyRow.set(\"GuiltyPartyCriteriaString\", createTypedField(guiltyPartyName, DotNetType.String));\r\n rvrGuiltyRow.set(\"IsVGO\", createTypedField(false, DotNetType.Boolean));\r\n rvrGuiltyRow.set(\"IsClaimDocPackage\", createTypedField(false, DotNetType.Boolean));\r\n rvrGuiltyRow.set(\"IsExpensesRecharge\", createTypedField(false, DotNetType.Boolean));\r\n rvrGuiltyRow.set(\"Comment\", null);\r\n\r\n rvrGuiltyRow.state = CardRowState.Inserted;\r\n card.sections.get(\"PkAdditionalWorksContractOrderRvrGuilty\")!.rows.push(rvrGuiltyRow);\r\n }\r\n }\r\n\r\n private GetGuiltyNameBySpecialCase(code: string | undefined) {\r\n if (isNullOrUndefined(code)) {\r\n return undefined;\r\n }\r\n\r\n const productCodes = [\"1.3.2\", \"1.8.1\", \"1.8.3\", \"1.8.4\", \"1.8.5\", \"1.9.2\"];\r\n if (productCodes.some(e => e === code)) {\r\n return \"—ПРОДУКТ—\";\r\n }\r\n\r\n const salesCodes = [\"1.13.1\", \"1.13.3\", \"1.13.4\", \"1.13.5\"];\r\n if (salesCodes.some(e => e === code)) {\r\n return \"—ЗАКУПКИ—\";\r\n }\r\n\r\n const customerCodes = [\"1.1.1\", \"1.2.2\", \"1.5.2\", \"1.5.3\", \"1.5.4\", \"1.5.5\", \"1.6.1\", \"1.6.2\", \"1.6.3\", \"1.6.4\", \"1.6.5\", \"1.6.6\", \"1.6.7\", \"1.6.8\", \"1.3.1\"];\r\n if (customerCodes.some(e => e === code)) {\r\n return \"—ЗАКАЗЧИК—\";\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private 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 public IsNullOrZerro( value ) {\r\n if (PkCommonHelper.IsNullOrWhitespace(value)) return true;\r\n let v : number = value as number;\r\n if (v === 0)\r\n {return true;}\r\n if (v == 0)\r\n {return true}\r\n return false;\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 { DotNetType, createTypedField, Guid } from \"tessa/platform\";\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { CdRequestTypes } from \"src/cdScripts/Helpers/CdRequestTypes\";\r\nimport { CardUIExtension, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { Card } from \"tessa/cards\";\r\nimport { showNotEmpty } from \"tessa/ui\";\r\nimport { isNullOrUndefined } from \"util\";\r\n \r\n \r\n\r\nexport class CdZosRvDocumentUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n \r\n let card: Card;\r\n if ((card = context.model.card) == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(card.typeId, CdCardTypes.PkZosRvDocumentypeID)) {\r\n return;\r\n }\r\n\r\n // Обработка при выборе объекта\r\n await this.HandleOnObjectChangedAsync(card);\r\n\r\n // Обработка при выборе договора\r\n await this.HandleOnContractChangedAsync(card);\r\n }\r\n\r\n\r\n /* Обработка при выборе объекта. */\r\n private async HandleOnObjectChangedAsync(card: Card) {\r\n\r\n let section = card.sections.tryGet('PkRdProperties');\r\n if (isNullOrUndefined(section)) {\r\n return;\r\n }\r\n section.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'ObjectID') {\r\n let objectId = e.fieldValue;\r\n\r\n\r\n section!.fields.set(\"RegionID\", null);\r\n section!.fields.set(\"RegionName\", null);\r\n section!.fields.set(\"CityID\", null);\r\n section!.fields.set(\"CityName\", null);\r\n section!.fields.set(\"ProjectID\", null);\r\n section!.fields.set(\"ProjectName\", null);\r\n section!.fields.set(\"ObjectPlaceID\", null);\r\n section!.fields.set(\"ObjectPlaceLivingComplex\", null);\r\n\r\n if (isNullOrUndefined(objectId)) {\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 return;\r\n }\r\n section!.fields.set(\"RegionID\", response.info.RegionID);\r\n section!.fields.set(\"RegionName\", response.info.RegionName);\r\n section!.fields.set(\"CityID\", response.info.CityID);\r\n section!.fields.set(\"CityName\", response.info.CityName);\r\n section!.fields.set(\"ProjectID\", response.info.ProjectID);\r\n section!.fields.set(\"ProjectName\", response.info.ProjectName);\r\n section!.fields.set(\"ObjectPlaceID\", response.info.ResidentialComplexID);\r\n section!.fields.set(\"ObjectPlaceLivingComplex\", response.info.ResidentialComplexName);\r\n }\r\n });\r\n\r\n\r\n }\r\n /* Обработка при выборе договора. */\r\n private async HandleOnContractChangedAsync(card: Card) {\r\n\r\n let section = card.sections.tryGet('PkZosRvDocument');\r\n if (isNullOrUndefined(section)) {\r\n return;\r\n }\r\n section.fields.fieldChanged.add(async e => {\r\n if (e.fieldName === 'ContractID') {\r\n let contractID = e.fieldValue;\r\n\r\n section!.fields.set(\"ContractDate\", null);\r\n\r\n if (isNullOrUndefined(contractID)) {\r\n return\r\n }\r\n\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) {\r\n return;\r\n }\r\n section!.fields.set(\"ContractDate\", response.info!.ContractDate);\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 { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { CdDocumentIDPUIExtension } from './CdDocumentIDPUIExtension';\r\nimport { CdTechnicalDocumentationUIExtension } from './CdTechnicalDocumentationUIExtension';\r\nimport { CdExecutiveDocumentationUIExtension } from './CdExecutiveDocumentationUIExtension';\r\nimport { CdExecutiveSchemeUIExtension } from './CdExecutiveSchemeUIExtension';\r\nimport { CdDevelopmentScenarioUIExtension } from './CdDevelopmentScenarioUIExtension';\r\nimport { CdRequestForMaterialsUIExtension } from './CdRequestForMaterialsUIExtension';\r\nimport { CdPersonalRoleUIExtension } from './CdPersonalRoleUIExtension';\r\nimport { CdGlazingOrderUIExtension } from './CdGlazingOrderUIExtension';\r\nimport { CdAdditionalWorksContractOrderUIExtension } from './CdAdditionalWorksContractOrderUIExtension';\r\nimport { CdZosRvDocumentUIExtension } from './CdZosRvDocumentUIExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: CdDocumentIDPUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdTechnicalDocumentationUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdExecutiveDocumentationUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdExecutiveSchemeUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdDevelopmentScenarioUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdRequestForMaterialsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdPersonalRoleUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdGlazingOrderUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdAdditionalWorksContractOrderUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdZosRvDocumentUIExtension, stage: ExtensionStage.AfterPlatform});","import { CardGetExtension, ICardGetExtensionContext } from 'tessa/cards/extensions';\r\nimport { DotNetType, createTypedField } from 'tessa/platform';\r\nimport { UIContext, tryGetFromInfo } from 'tessa/ui';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { ITessaView } from 'tessa/views';\r\n\r\nexport class CdPartnerKCKGetExtension extends CardGetExtension {\r\n\r\n public beforeRequest(context: ICardGetExtensionContext) {\r\n if (context == null) return;\r\n\r\n // TODO откладывается до версии 3.3\r\n let viewContext = UIContext.current.viewContext;\r\n\r\n let view: ITessaView;\r\n if (viewContext != null &&\r\n (view = viewContext.view!) != null &&\r\n (\r\n view.metadata.alias === \"PkKCKPartners\" ||\r\n view.metadata.alias === \"PkKCKPartners_Administrate\"\r\n ) &&\r\n !!viewContext.selectedRow) {\r\n let externalID = viewContext.selectedRow!.get(\"PartnerExternalID\");\r\n\r\n context.request.cardTypeId = CdCardTypes.PkKCKPartnerTypeID;\r\n context.request.info[\"ExternalID\"] = createTypedField(externalID, DotNetType.Int64);\r\n return;\r\n }\r\n\r\n let cardContext = UIContext.current.cardEditor;\r\n if (UIContext.current.parent == null &&\r\n cardContext != null &&\r\n cardContext.cardModel != null &&\r\n cardContext.cardModel.cardType.id === CdCardTypes.PkKCKPartnerTypeID) {\r\n let externalID = tryGetFromInfo(cardContext.cardModel.card.info, \"ExternalID\");\r\n\r\n context.request.cardTypeId = CdCardTypes.PkKCKPartnerTypeID;\r\n\r\n context.request.info[\"ExternalID\"] = createTypedField(externalID, DotNetType.Int64);\r\n return;\r\n }\r\n }\r\n\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { CdPartnerKCKGetExtension } from './CdPartnerKCKGetExtension';\r\n\r\n\r\nExtensionContainer.instance.registerExtension({extension: CdPartnerKCKGetExtension, stage: ExtensionStage.AfterPlatform});","import { CardStoreExtension, ICardStoreExtensionContext } from 'tessa/cards/extensions';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { Guid } from 'tessa/platform';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\n\r\n// Запрет сохранения для выведенных из экспуатации типов карточек.\r\nexport class DecommissionedTypesStoreExtension extends CardStoreExtension {\r\n\r\n public beforeRequest(context: ICardStoreExtensionContext) {\r\n var card = context.request.card;\r\n\r\n if (\r\n Guid.equals(card.typeId, CdCardTypes.PkZosRvDocumentypeID) // TES-12237 Отключить \"Документ ЗОС/РВ\"\r\n || Guid.equals(card.typeId, CdCardTypes.PkGlazingOrderTypeID) // TES-12238 Отключить \"Заявки на остекление\"\r\n || Guid.equals(card.typeId, CdCardTypes.IrdDocumentTypeID) // TES-12295 Отключить \"ИРД\"\r\n || Guid.equals(card.typeId, CdCardTypes.ArDocumentIdpTypeID) // TES-12239 Отключение \"ИДП\"\r\n || Guid.equals(card.typeId, PkCardTypes.PkWorkOrderTypeID) // TES-12242 Отключение НЗ\r\n || Guid.equals(card.typeId, CdCardTypes.PkAdditionalWorksContractOrderTypeID) \t // TES-12241 Отключение АРФО\r\n || Guid.equals(card.typeId, PkCardTypes.PkProtocolTypeID) \t\t\t\t \t // TES-12243 Отключение Протоколов\r\n || Guid.equals(card.typeId, CdCardTypes.PkRequestForMaterialsTypeID) \t\t\t\t// TES-12240 Отключение Заявок на материалы\r\n || Guid.equals(card.typeId, CdCardTypes.PkExecutiveDocumentationTypeID) \t\t\t// TES-12553 Отключение ИД\r\n || Guid.equals(card.typeId, CdCardTypes.PkExecutiveSchemeTypeID) \t\t\t\t\t// TES-12554 Отключение ИС\r\n // || Guid.equals(card.typeId, CdCardTypes.TechnicalDocumentationTypeID) \t\t\t // TES-12555 Отключение ТД\r\n\r\n ) {\r\n context.validationResult.add(ValidationResultType.Error, \"Сохранение карточки данного типа невозможно, так как этот функционал выведен из эксплуатации.\");\r\n }\r\n }\r\n\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { DecommissionedTypesStoreExtension } from './DecommissionedTypesStoreExtension';\r\n \r\nExtensionContainer.instance.registerExtension({extension: DecommissionedTypesStoreExtension, stage: ExtensionStage.AfterPlatform});\r\n\r\n","export class CdIncomingTaskHistoryHelper {\r\n\r\n // из другого модуля\r\n static IncomingTaskHistoryListFileName = \"Лист поручений.html\";\r\n\r\n }","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { FileListViewModel } from 'tessa/ui/cards/controls';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { CdApprovalListHelper } from '../Helpers/CdApprovalListHelper';\r\nimport { CdIncomingTaskHistoryHelper } from '../Helpers/CdIncomingTaskHistoryHelper';\r\nimport { CdRdListHelper } from '../Helpers/CdRdListHelper';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\n\r\n\r\nexport class CdApprovalListUIExtension 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 (!(CdCardTypes.TypesOfDocumentsWithApprovalLists.indexOf(context.model.card.typeId) > -1) &&\r\n !(PkCardTypes.TypesOfDocumentsWithApprovalLists.indexOf(context.model.card.typeId) > -1)) {\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 approvalListFileControl.groupsExpanded = true;\r\n approvalListFileControl.isCategoriesEnabled = false;\r\n\r\n // показываем файлы все кроме листов согласование\r\n for (let i = filesFileControl.files.length - 1; i > -1; i--) {\r\n const file = filesFileControl.files[i];\r\n if (file.model.name != null &&\r\n (file.model.name === CdApprovalListHelper.ApprovalListFileName ||\r\n file.model.name === CdApprovalListHelper.AcquaintanceListFileName) ||\r\n file.model.name === CdIncomingTaskHistoryHelper.IncomingTaskHistoryListFileName ||\r\n file.model.name === CdRdListHelper.RdListFileName ||\r\n (context.model.card.typeId == CdCardTypes.ArContractTypeID && file.model.name === \"История.html\")\r\n ) {\r\n filesFileControl.removeFile(file);\r\n }\r\n } \r\n\r\n // показываем только листы согласования\r\n for (let i = approvalListFileControl.files.length - 1; i > -1; i--) {\r\n const file = approvalListFileControl.files[i];\r\n if (!(file.model.name != null &&\r\n (file.model.name === CdApprovalListHelper.ApprovalListFileName ||\r\n file.model.name === CdApprovalListHelper.AcquaintanceListFileName) ||\r\n file.model.name === CdIncomingTaskHistoryHelper.IncomingTaskHistoryListFileName)) {\r\n approvalListFileControl.removeFile(file);\r\n }\r\n } \r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, Visibility } from 'tessa/platform';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\n\r\nexport class CdHideTaskHistoryUIExtension extends CardUIExtension {\r\n public initialized(context: ICardUIExtensionContext) {\r\n if (!(\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkProtocolTenderTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.ArActTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkAssignmentTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkLetterCreditTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkMemoTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.RdndTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkOutgoingTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkIncomingTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.TechnicalDocumentationTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkWorkOrderTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkExecutiveDocumentationTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkExecutiveSchemeTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkDevelopmentScenarionTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkInternalDocumentationTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkProtocolTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkPacketVirtualTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.ArEDocumentTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.InstructionTypeID)\r\n )) {\r\n return;\r\n }\r\n\r\n const taskHistoryForm = context.model.forms.find(x => x.name === '.TaskHistoryViewModel');\r\n if (!taskHistoryForm) {\r\n return;\r\n }\r\n taskHistoryForm.visibility = Visibility.Collapsed;\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { CdUIHelper } from './CdUIHelper';\r\nimport { GridRowAction, GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { reaction, runInAction } from 'mobx';\r\nimport { CardRow } from 'tessa/cards';\r\nimport { ArrayStorage } from 'tessa/platform/storage';\r\nimport { openCard } from 'tessa/ui/uiHost';\r\n\r\nexport class CdProjectUIExtension extends CardUIExtension {\r\n private _disposerSelectRow: Function | null = null;\r\n private _disposerCardRowTepsVirtual: ArrayStorage | undefined | null = null;\r\n public finalized() {\r\n // подчищаем за собой\r\n if (this._disposerCardRowTepsVirtual) {\r\n this._disposerCardRowTepsVirtual = 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 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.ProjectTypeID)) {\r\n return;\r\n }\r\n let tepInfoVirtual = context.card.sections.tryGet(\"IrdDocTEPsInfoVirtual\");\r\n\r\n this._disposerCardRowTepsVirtual = context.card.sections.tryGet(\"IrdDocTEPsInfoVirtual\")?.clone().rows;\r\n\r\n for (let rowToDelete of tepInfoVirtual!.rows) {\r\n tepInfoVirtual!.rows.remove(rowToDelete);\r\n }\r\n tepInfoVirtual?.rows.clear();\r\n\r\n // TODO вроде небыло в вебе\r\n let irdVersions = CdUIHelper.GetUIControl(context, \"IrdVersions\");\r\n let irdTeps = CdUIHelper.GetUIControl(context, \"IrdTeps\");\r\n\r\n // подписываемся на клик\r\n if (this._disposerSelectRow == null) {\r\n this._disposerSelectRow = reaction(() => irdVersions!.selectedRow, () => {\r\n let cardRowViewModel = irdVersions!.selectedRow;\r\n if (cardRowViewModel != null) {\r\n if (cardRowViewModel.isSelected === true) {\r\n const teps = context.card.sections.tryGet(\"IrdDocTEPsInfoVirtual\");\r\n for (let rowToDelete of teps!.rows) {\r\n teps!.rows.remove(rowToDelete);\r\n }\r\n teps?.rows.clear();\r\n let row = cardRowViewModel.row;\r\n if (row != null && row.rowId != null) {\r\n runInAction(() => {\r\n let show = this._disposerCardRowTepsVirtual?.filter(x => x.getField(\"TepDocID\")?.$value === row.getField(\"IrdVersionID\")?.$value);\r\n show!.forEach(el => {\r\n teps?.rows.add(el);\r\n });\r\n });\r\n }\r\n }\r\n }\r\n });\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 });\r\n return;\r\n }\r\n });\r\n irdTeps?.rowInvoked.add(async e => {\r\n const docID = e.action === GridRowAction.Opening && e.row.tryGet('TepID');\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.IrdTEPTypeID,\r\n cardTypeName: CdCardTypes.IrdTEPTypeName\r\n });\r\n return;\r\n }\r\n });\r\n }\r\n}","export class NamedEntry{\r\n /**\r\n *\r\n */\r\n constructor(id: string, name: string) {\r\n this.id = id;\r\n this.name = name;\r\n }\r\n\r\n id: string;\r\n name: string\r\n}","import { NamedEntry } from \"./NamedEntry\";\r\n\r\nexport class CdReferenceTypes{\r\n /**Отменяет ВНД. */\r\n static CancellInternalDocuments = new NamedEntry(\"f44f9b08-79ec-4f67-94b7-3d48dc5e5f13\", \"Отменяет ВНД\")\r\n\r\n /**Утверждает ВНД. */\r\n static ConfirmInternalDocuments = new NamedEntry(\"350a21ae-93f9-4cf6-a1ee-a6dcd31bf621\", \"Утверждает ВНД\")\r\n\r\n /**Ссылка. */\r\n static LinkDocuments = new NamedEntry(\"663c7e30-3977-4790-b6cc-14612342da24\", \"Ссылка\")\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { GridViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { Guid, DbType, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { openCard, showViewsDialog } from 'tessa/ui/uiHost';\r\nimport { RequestParameterBuilder } from 'tessa/views';\r\nimport { ViewParameterMetadata, equalsCriteriaOperator, RequestParameter } from 'tessa/views/metadata';\r\nimport { CardRow, CardRowState } from 'tessa/cards';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { CdCommonHelper } from '../Helpers/CdCommonHelper';\r\nimport { UIButton } from 'tessa/ui';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { NamedEntry } from '../Helpers/NamedEntry';\r\nimport { CdReferenceTypes } from '../Helpers/CdReferenceTypes';\r\nimport { CdDocStates } from '../Helpers/CdDocStates';\r\n\r\nexport class CdRefsTableUIExtension extends CardUIExtension {\r\n\r\n addingDocForCancelling: boolean = false;\r\n\r\n /** В ВНД дополнительно добавляется кнопка для добавления отменяемого документа. */\r\n public RdndInitialized(context: ICardUIExtensionContext)\r\n {\r\n const card = context.model.card;\r\n let refsTable = context.model.controls.get('RefsTable') as GridViewModel;\r\n if (card.typeId == CdCardTypes.RdndTypeID)\r\n {\r\n let buttonForCancelling = new UIButton(\r\n \"Добавить отменяемый документ\",\r\n async () =>\r\n {\r\n this.addingDocForCancelling = true;\r\n await refsTable.addRow();\r\n this.addingDocForCancelling = false;\r\n });\r\n \r\n \r\n refsTable.rightButtons.push(buttonForCancelling);\r\n }\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\r\n if (!(CdCardTypes.RefsTableSupportedCardTypes.indexOf(context.model.card.typeId) > -1) && \r\n !(PkCardTypes.RefsTableSupportedCardTypes.indexOf(context.model.card.typeId) > -1)) {\r\n return;\r\n }\r\n let section = context.model.card.sections.tryGet('PkReferencesVirtual');\r\n if (section == null) return;\r\n\r\n let refsTable = context.model.controls.get('RefsTable') as GridViewModel;\r\n if (refsTable != null) {\r\n\r\n let isContextMenuEdit = false;\r\n\r\n refsTable.leftButtons.push(new UIButton(\"Редактировать\", () =>\r\n {\r\n isContextMenuEdit = true;\r\n refsTable.editRow(refsTable.selectedRow);\r\n }));\r\n \r\n \r\n \r\n \r\n if (context.model.card.typeId == CdCardTypes.IrdDocumentTypeID // TES-10558 в ИРД скрыть кнопки \"Редактировать\", \"Добавить\", \"Удалить\" для блока \"Ссылки\" \r\n || context.model.card.typeId == CdCardTypes.ArDocumentIdpTypeID// TES-12239 в ИДП скрыть кнопки \"Редактировать\", \"Добавить\", \"Удалить\" для блока \"Ссылки\" \r\n || context.model.card.typeId == PkCardTypes.PkWorkOrderTypeID // TES-12242 в НЗ скрыть кнопки \"Редактировать\", \"Добавить\", \"Удалить\" для блока \"Ссылки\" \r\n || context.model.card.typeId == PkCardTypes.PkProtocolTypeID // TES-12243 Отключение Протоколов\r\n || context.model.card.typeId == CdCardTypes.PkRequestForMaterialsTypeID // TES-12240 Отключение Заявок на материалы\r\n || context.model.card.typeId == CdCardTypes.PkExecutiveDocumentationTypeID // TES-12553 Отключение ИД\r\n || context.model.card.typeId == CdCardTypes.PkExecutiveSchemeTypeID // TES-12554 Отключение ИС\r\n // || context.model.card.typeId == CdCardTypes.TechnicalDocumentationTypeID // TES-12555 Отключение ТД \r\n )\r\n {\r\n refsTable.leftButtons.pop();\r\n refsTable.rightButtons.pop();\r\n }\r\n\r\n refsTable.rowInitializing.add(async () => {\r\n isContextMenuEdit = false;\r\n });\r\n\r\n refsTable.rowInvoked.add(async e => {\r\n if (e.action == GridRowAction.Opening && !isContextMenuEdit)\r\n {\r\n if (section == null) return;\r\n \r\n // TES-12295 Отключить возможность переходов по ссылкам в ИРД и ИДП\r\n if (context.model.card.typeId == CdCardTypes.IrdDocumentTypeID \r\n || context.model.card.typeId == CdCardTypes.ArDocumentIdpTypeID\r\n || context.model.card.typeId == PkCardTypes.PkWorkOrderTypeID // TES-12242 Отключить возможность переходов по ссылкам в НЗ\r\n || context.model.card.typeId == PkCardTypes.PkProtocolTypeID // TES-12243 Отключение Протоколов\r\n || context.model.card.typeId == CdCardTypes.PkRequestForMaterialsTypeID // TES-12240 Отключение Заявок на материалы\r\n || context.model.card.typeId == CdCardTypes.PkExecutiveDocumentationTypeID // TES-12553 Отключение ИД\r\n || context.model.card.typeId == CdCardTypes.PkExecutiveSchemeTypeID // TES-12554 Отключение ИС\r\n // || context.model.card.typeId == CdCardTypes.TechnicalDocumentationTypeID // TES-12555 Отключение ТД \r\n ) {\r\n e.cancel = true;\r\n return;\r\n }\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 return;\r\n }\r\n });\r\n \r\n \r\n refsTable.rowAdding.add(async e => {\r\n if (section == null) return;\r\n let refSection = \"DocChRefsSection\";\r\n let refType: NamedEntry | null = CdReferenceTypes.LinkDocuments;\r\n let nameParamList : RequestParameter[] = [];\r\n if (context.model.card.typeId === CdCardTypes.ArActTypeID ||\r\n context.model.card.typeId === CdCardTypes.ArContractTypeID ||\r\n context.model.card.typeId === CdCardTypes.ArEDocumentTypeID) {\r\n refSection = \"DocChRefsSectionForActs\";\r\n\r\n\r\n\r\n\r\n // представление выводим с параметром ид карточки.\r\n // Описание параметра\r\n const parameterMetadata = new ViewParameterMetadata();\r\n parameterMetadata.alias = 'CardID';\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 nameParamList = [new RequestParameterBuilder()\r\n .withMetadata(parameterMetadata)\r\n .addCriteria(equalsCriteriaOperator(), '', context.model.card.id )\r\n .asRequestParameter()];\r\n }\r\n\r\n if (context.model.card.typeId === CdCardTypes.RdndTypeID){\r\n // TES-8960 Выводить справочник \"Все документы\", ограниченный по условию:\r\n // 1. Тип документа = \"Внутренние нормативные документы\" и \"Распорядительные документы\"\r\n // 2. В Состоянии \"Действующий\"\r\n\r\n const parameterDocTypeMetadata = new ViewParameterMetadata();\r\n parameterDocTypeMetadata.alias = 'Value';\r\n parameterDocTypeMetadata.caption = 'Тип документа';\r\n parameterDocTypeMetadata.hidden = false;\r\n parameterDocTypeMetadata.dataType = DbType.Guid;\r\n parameterDocTypeMetadata.multiple = true;\r\n\r\n const parameterStatusMetadata = new ViewParameterMetadata();\r\n parameterStatusMetadata.alias = 'StateName';\r\n parameterStatusMetadata.caption = 'Состояние';\r\n parameterStatusMetadata.hidden = false;\r\n parameterStatusMetadata.dataType = DbType.Int32;\r\n parameterStatusMetadata.multiple = true;\r\n\r\n nameParamList = [\r\n new RequestParameterBuilder()\r\n .withMetadata(parameterDocTypeMetadata)\r\n .addCriteria(equalsCriteriaOperator(), \"Внутренний нормативный документ\", PkCardTypes.PkInternalDocumentationTypeID )\r\n .addCriteria(equalsCriteriaOperator(), \"ОРД\", PkCardTypes.RdndTypeID )\r\n .asRequestParameter(),\r\n\r\n new RequestParameterBuilder()\r\n .withMetadata(parameterStatusMetadata)\r\n .addCriteria(equalsCriteriaOperator(), CdDocStates.Active.caption, CdDocStates.Active.id )\r\n .asRequestParameter()\r\n ];\r\n\r\n refType = CdReferenceTypes.CancellInternalDocuments;\r\n }\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 || !section) {\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 let desc = selectedRow.get(\"Subject\");\r\n if (desc == null) desc = \"\";\r\n let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n if (selectedRow.has(\"DocID\")) {\r\n CdCommonHelper.SetValueToRowField(row, \"DocID\", selectedRow.get(\"DocID\"), DotNetType.Guid);\r\n }\r\n else {\r\n CdCommonHelper.SetValueToRowField(row, \"DocID\", selectedRow.get(\"ContractID\"), DotNetType.Guid);\r\n }\r\n if (selectedRow.has(\"DocNumber\")) {\r\n CdCommonHelper.SetValueToRowField(row, \"DocDescription\", selectedRow.get(\"DocNumber\"), DotNetType.String);\r\n }\r\n else {\r\n CdCommonHelper.SetValueToRowField(row, \"DocDescription\", selectedRow.get(\"ContractNumberVirtual\"), DotNetType.String);\r\n }\r\n if (selectedRow.has(\"DocNumber\")) {\r\n CdCommonHelper.SetValueToRowField(row, \"Number\", selectedRow.get(\"DocNumber\"), DotNetType.String);\r\n }\r\n else {\r\n CdCommonHelper.SetValueToRowField(row, \"Number\", selectedRow.get(\"ContractNumberVirtual\"), DotNetType.String);\r\n }\r\n CdCommonHelper.SetValueToRowField(row, \"DocDate\", selectedRow.get(\"DocDate\"), DotNetType.DateTime);\r\n row.set(\"Order\", createTypedField(section.rows.length, DotNetType.Int32));\r\n CdCommonHelper.SetValueToRowField(row, \"CardTypeName\", selectedRow.get(\"CardTypeTitle\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"StateName\", selectedRow.get(\"StateName\"), DotNetType.String);\r\n row.set(\"Description\", createTypedField(desc.Length > 128 ? (desc as string).substring(0, 128) : desc, DotNetType.String));\r\n\t\t\t row.set(\"RefTypeID\", createTypedField(refType!.id, DotNetType.Guid));\r\n row.set(\"RefTypeName\", createTypedField(refType!.name, DotNetType.String));\r\n row.set(\"IsVirtual\", createTypedField(true, DotNetType.Boolean));\r\n \r\n row.state = CardRowState.Inserted;\r\n section.rows.push(row);\r\n \r\n e.cancel = true;\r\n }, \r\n nameParamList\r\n );\r\n\r\n \r\n });\r\n\r\n this.RdndInitialized(context);\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\n\r\nexport class CdRemindersUIExtension 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 // TODO вроде небыло в вебе\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType, createTypedField } from 'tessa/platform';\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 '../Helpers/CdCardTypes';\r\n\r\nexport class CdTableUIExtension 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, CdCardTypes.ArDocumentIdpTypeID)\r\n )) {\r\n return;\r\n }\r\n // Документ ИДП\r\n let adipSection = context.model.card.sections.tryGet('ArDocumentsIDPPartners');\r\n if (adipSection != 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 (adipSection == 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\r\n || !adipSection) {\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 adipSection.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, ICardModel } from 'tessa/ui/cards';\r\nimport { Guid, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { CdUIHelper } from './CdUIHelper';\r\nimport { GridViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\n\r\nexport class CdDivisionRoleUIExtension 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.RdDivisionRoleTypeID)) {\r\n return;\r\n }\r\n\r\n this.IdpTeamTableHandle(context.model);\r\n }\r\n\r\n /** Логика для таблички \"Паспорт проекта\". */\r\n private IdpTeamTableHandle(model: ICardModel) {\r\n const idpTeamControl = CdUIHelper.GetUIControlFromModel(model, \"IdpTeamControl\");\r\n\r\n if (idpTeamControl == null) {\r\n return;\r\n }\r\n\r\n idpTeamControl.rowInitializing.add((e) => {\r\n if (e.action === GridRowAction.Inserted) {\r\n e.row.set(\"IsManualAdded\", createTypedField(true, DotNetType.Boolean));\r\n }\r\n });\r\n\r\n // сортировки нет\r\n // const sortColumn = idpTeamControl.columns.find();\r\n\r\n // if (sortColumn != null) {\r\n // sortColumn. = System.ComponentModel.ListSortDirection.Ascending;\r\n // }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { GridViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { Guid, DbType, DotNetType } from 'tessa/platform';\r\nimport { showViewsDialog } from 'tessa/ui/uiHost';\r\nimport { RequestParameterBuilder } from 'tessa/views';\r\nimport { ViewParameterMetadata, equalsCriteriaOperator } from 'tessa/views/metadata';\r\nimport { CardRow, CardRowState } from 'tessa/cards';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { CdCommonHelper } from '../Helpers/CdCommonHelper';\r\nimport { CdExecutiveDocumentationKinds } from '../Helpers/CdExecutiveDocumentationKinds';\r\nimport { CdExecutiveDocumentationClientHelper } from '../Helpers/Cards/CdExecutiveDocumentationClientHelper';\r\n\r\nexport class CdHiddenWorkTableExtension 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 const card = context.model.card;\r\n const model = context. model;\r\n if (card.typeId != CdCardTypes.PkExecutiveDocumentationTypeID){\r\n return;\r\n }\r\n if (model.controls.has(\"HiddenWorkTable\")){\r\n const section = card.sections.get(\"PkExecutiveDocumentationHiddenWorksSafetyStructureInfo\");\r\n const hiddenWorkTable = model.controls.get(\"HiddenWorkTable\") as GridViewModel;\r\n hiddenWorkTable.rowInvoked.add(async e => {\r\n if (e.action == GridRowAction.Opening){\r\n // TES-12554 Отключить процессы по виду документа \"Исполнительная схема\"\r\n /*\r\n let cardId = e.row.get(\"SubjectID\");\r\n await openCard({\r\n cardId: cardId,\r\n });\r\n */\r\n e.cancel = true;\r\n return;\r\n } \r\n });\r\n\r\n hiddenWorkTable.rowAdding.add(async e => {\r\n if (section == null) return;\r\n let refSection = \"PkExecutiveDocumentationInfo\";\r\n let departmentId = card.sections.get(\"DocumentCommonInfo\")!.fields.get(\"DepartmentID\");\r\n let departmentName = card.sections.get(\"DocumentCommonInfo\")!.fields.get(\"DepartmentName\");\r\n let objects = card.sections.get(\"PkObjectsVirtual\")!.fields.get(\"ObjectsLikeString\");\r\n\r\n const kindNewIdParameter = new ViewParameterMetadata();\r\n kindNewIdParameter.alias = 'EDKindNewId';\r\n kindNewIdParameter.caption = 'Вид ИД';\r\n kindNewIdParameter.hidden = true;\r\n kindNewIdParameter.dataType = DbType.Guid;\r\n kindNewIdParameter.multiple = false;\r\n const kindNewNameParameter = new ViewParameterMetadata();\r\n kindNewNameParameter.alias = 'EDKindNewName';\r\n kindNewNameParameter.caption = 'Вид ИД';\r\n kindNewNameParameter.hidden = false;\r\n kindNewNameParameter.dataType = DbType.String;\r\n kindNewNameParameter.multiple = false;\r\n const deparmentIdParameter = new ViewParameterMetadata();\r\n deparmentIdParameter.alias = 'DepartmentAuthorId';\r\n deparmentIdParameter.caption = 'Организация автора';\r\n deparmentIdParameter.hidden = true;\r\n deparmentIdParameter.dataType = DbType.Guid;\r\n deparmentIdParameter.multiple = false;\r\n const deparmentNameParameter = new ViewParameterMetadata();\r\n deparmentNameParameter.alias = 'DepartmentAuthorName';\r\n deparmentNameParameter.caption = 'Организация автора';\r\n deparmentNameParameter.hidden = false;\r\n deparmentNameParameter.dataType = DbType.String;\r\n deparmentNameParameter.multiple = false;\r\n const objectsParameter = new ViewParameterMetadata();\r\n objectsParameter.alias = 'Objects';\r\n objectsParameter.caption = 'Объекты';\r\n objectsParameter.hidden = true;\r\n objectsParameter.dataType = DbType.String;\r\n objectsParameter.multiple = false;\r\n \r\n const nameParamList = [\r\n new RequestParameterBuilder()\r\n .withMetadata(kindNewIdParameter)\r\n .addCriteria(equalsCriteriaOperator(), CdExecutiveDocumentationKinds.ActOfExaminationOfHiddenWorks, CdExecutiveDocumentationKinds.ActOfExaminationOfHiddenWorks)\r\n //.addCriteria(equalsCriteriaOperator(), \"f226620d-6c47-4df4-91a0-14a0d8cbdebf\", \"f226620d-6c47-4df4-91a0-14a0d8cbdebf\")\r\n .asRequestParameter(),\r\n new RequestParameterBuilder()\r\n .withMetadata(kindNewNameParameter)\r\n .addCriteria(equalsCriteriaOperator(), \"Акт освидетельствования скрытых работ\", \"Акт освидетельствования скрытых работ\")\r\n .asRequestParameter(),\r\n new RequestParameterBuilder()\r\n .withMetadata(deparmentIdParameter)\r\n .addCriteria(equalsCriteriaOperator(), departmentId, departmentId )\r\n .asRequestParameter(),\r\n new RequestParameterBuilder()\r\n .withMetadata(deparmentNameParameter)\r\n .addCriteria(equalsCriteriaOperator(), departmentName, departmentName )\r\n .asRequestParameter(),\r\n new RequestParameterBuilder()\r\n .withMetadata(objectsParameter)\r\n .addCriteria(equalsCriteriaOperator(), objects, objects )\r\n .asRequestParameter()\r\n ];\r\n\r\n let added = false;\r\n await showViewsDialog(\r\n refSection, \r\n async (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n\r\n let selectedItem = value;\r\n if (selectedItem == null\r\n || !selectedItem.selectedRow\r\n || !section) {\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 let row = new CardRow();\r\n row.rowId = Guid.newGuid();\r\n CdCommonHelper.SetValueToRowField(row, \"SubjectID\", selectedRow.get(\"ActID\"), DotNetType.Guid);\r\n CdCommonHelper.SetValueToRowField(row, \"SubjectSubject\", selectedRow.get(\"ActSubject\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"SecondaryFullNumber\", selectedRow.get(\"SecondaryFullNumber\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"СreationDate\", selectedRow.get(\"CreationDate\"), DotNetType.DateTime);\r\n CdCommonHelper.SetValueToRowField(row, \"Author\", selectedRow.get(\"AuthorFullName\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"Department\", selectedRow.get(\"DepartmentName\"), DotNetType.String);\r\n CdCommonHelper.SetValueToRowField(row, \"State\", selectedRow.get(\"StateName\"), DotNetType.String);\r\n row.state = CardRowState.Inserted;\r\n section!.rows.push(row);\r\n added = true; \r\n }, \r\n nameParamList\r\n );\r\n e.cancel = true;\r\n if (added) {\r\n CdExecutiveDocumentationClientHelper.SaveCardToUpdateFiles(context);\r\n }\r\n });\r\n }\r\n }\r\n}","import { CardUIExtension, ICardModel, ICardUIExtensionContext, IControlViewModel } from 'tessa/ui/cards';\r\nimport { ButtonViewModel } from 'tessa/ui/cards/controls';\r\nimport { Card } from 'tessa/cards';\r\nimport { showError, showLoadingOverlay } from 'tessa/ui';\r\nimport { PkCommonHelper } from 'src/pkScripts/Helpers/PkCommonHelper';\r\nimport { CardGetFileContentRequest, CardService } from 'tessa/cards/service';\r\nimport { CdFileTypes } from '../Helpers/CdFileTypes';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\n\r\nexport class CdDownloadAllFilesZipUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n if ((model = context.model) == null) {\r\n return;\r\n }\r\n\r\n if (!model.controls.has('DownloadAllFilesZip')) return;\r\n let downloadAllFilesZipControl: IControlViewModel | undefined = model.controls.get('DownloadAllFilesZip');\r\n if (!downloadAllFilesZipControl) return;\r\n let downloadAllFilesZipButton = downloadAllFilesZipControl as ButtonViewModel;\r\n\r\n downloadAllFilesZipButton.executeOnClick = async () => {\r\n downloadAllFilesZipButton.isReadOnly = true;\r\n let card: Card = model.card;\r\n let zipFileName: string = this.GetFileName(card);\r\n zipFileName += '.zip';\r\n\r\n try {\r\n await showLoadingOverlay(async () => {\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = CdFileTypes.GetZipArchiveType;\r\n getFileContentRequest.cardId = card.id;\r\n\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\r\n PkCommonHelper.SaveFileContent(zipFileName, getFileContentResponse.content);\r\n }, \"Формирование zip архива.\");\r\n } catch (err) {\r\n showError(err);\r\n }\r\n\r\n downloadAllFilesZipButton.isReadOnly = false;\r\n };\r\n }\r\n\r\n GetFileName(card: Card): string {\r\n\r\n let fileName: string;\r\n let number: string;\r\n if (card.sections.has('DocumentCommonInfo') && card.sections.get('DocumentCommonInfo')?.fields.has('SecondaryFullNumber')) {\r\n number = card.sections.get('DocumentCommonInfo')?.fields.get('SecondaryFullNumber');\r\n }\r\n else {\r\n number = card.id;\r\n }\r\n\r\n fileName = number;\r\n\r\n // TES-9149 для Технической документации свой формат имени ID_<Шифр раздела><Объект>\r\n if (card.typeId == CdCardTypes.TechnicalDocumentationTypeID) {\r\n if (card.sections.has('PkRdProperties')) {\r\n let divisionCipher: string = card.sections.get('PkRdProperties')?.fields.get('RdDivisionCipher');\r\n let objectName: string = card.sections.get('PkRdProperties')?.fields.get('ObjectName');\r\n\r\n fileName = number + '_' + divisionCipher + '_' + objectName;\r\n fileName = fileName.replace('/', '_');\r\n fileName = fileName.replace(/[/\\\\?%*:|\"<>]/g, '');\r\n }\r\n }\r\n\r\n return fileName\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CardRowState } from 'tessa/cards';\r\nimport { CdFdProcessHelper } from 'src/cdScripts/Helpers/CdFdProcessHelper';\r\nimport { CdTaskTypes } from 'src/cdScripts/Helpers/CdTaskTypes';\r\nimport { createTypedField, DotNetType, Guid, TypedField } from 'tessa/platform';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\nimport { showConfirm, showNotEmpty } from 'tessa/ui/tessaDialog';\r\n\r\n\r\nexport class CdAdditionalWorksContractOrderTaskUIExtension 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\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, CdCardTypes.PkAdditionalWorksContractOrderTypeID) || tasks == null || tasks.length < 1) {\r\n return;\r\n }\r\n\r\n let taskTypesForChecking =\r\n [\r\n CdTaskTypes.PkAWCORvrBlockFillTypeID,\r\n CdTaskTypes.PkAWCORvrBlockFillConfirmationTypeID\r\n ] as string[];\r\n\r\n let taskCompletionOptionsForChecking = [\r\n CdFdProcessHelper.Approve,\r\n CdFdProcessHelper.Confirm\r\n ] as string[];\r\n\r\n if (!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 return;\r\n }\r\n\r\n // Свяжем РВР с виновнымы и обернем в модель\r\n let rvrList = card.sections.tryGet('PkAdditionalWorksContractOrderRvrList');\r\n let guiltySection = card.sections.tryGet('PkAdditionalWorksContractOrderRvrGuilty');\r\n let partnerReasonList: { ReasonID: TypedField, PartnerExternalID: TypedField }[] = []\r\n rvrList!.rows.forEach(rvrRow => {\r\n if (rvrRow.state != CardRowState.Deleted) {\r\n guiltySection!.rows.forEach(guiltyRow => {\r\n if (guiltyRow.state != CardRowState.Deleted && rvrRow.tryGet(\"RowID\") == guiltyRow.tryGet(\"ParentRvrRowID\")) {\r\n partnerReasonList.push({ ReasonID: createTypedField(rvrRow.tryGet(\"ARFOIssueReasonID\"), DotNetType.Guid), PartnerExternalID: createTypedField(guiltyRow.tryGet(\"GuiltyPartyExternalID\"), DotNetType.Int64) });\r\n }\r\n });\r\n }\r\n });\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CheckSettingsLegalEntitiesRequest;\r\n request.info[\"PartnerReasonList\"] = partnerReasonList;\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 context.cancel = true;\r\n return;\r\n }\r\n else {\r\n let isPartnerValid: boolean = response.info.IsPartnerValid.$value;\r\n let message: string = response.info.Message.$value;\r\n\r\n if (isPartnerValid === false) {\r\n const result = await showConfirm(message + \"\\r\\n\\r\\nПродолжить согласование без внесения изменений в карточке по Виновному/Причине?\", \"Предупреждение\");\r\n if (!result) {\r\n context.cancel = true;\r\n return;\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 { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { CdApprovalListUIExtension } from './CdApprovalListUIExtension';\r\nimport { CdHideTaskHistoryUIExtension } from './CdHideTaskHistoryUIExtension';\r\nimport { CdProjectUIExtension } from './CdProjectUIExtension';\r\nimport { CdRefsTableUIExtension } from './CdRefsTableUIExtension';\r\nimport { CdRemindersUIExtension } from './CdRemindersUIExtension';\r\nimport { CdTableUIExtension } from './CdTableUIExtension';\r\nimport { CdDivisionRoleUIExtension } from './CdDivisionRoleUIExtension';\r\nimport { CdHiddenWorkTableExtension } from './CdHiddenWorkTableExtension';\r\nimport { CdDownloadAllFilesZipUIExtension } from './CdDownloadAllFilesZipUIExtension';\r\nimport { CdAdditionalWorksContractOrderTaskUIExtension } from './Tasks/CdAdditionalWorksContractOrderTaskUIExtension';\r\n\r\n\r\nExtensionContainer.instance.registerExtension({extension: CdApprovalListUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdHideTaskHistoryUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdProjectUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdRefsTableUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdRemindersUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdTableUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdDivisionRoleUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdDownloadAllFilesZipUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdHiddenWorkTableExtension, stage: ExtensionStage.Platform});\r\nExtensionContainer.instance.registerExtension({extension: CdAdditionalWorksContractOrderTaskUIExtension, stage: ExtensionStage.AfterPlatform});","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { ArrayStorage } from 'tessa/platform/storage';\r\nimport { CardTask, CardTaskAction} from 'tessa/cards';\r\nimport { showConfirm} from 'tessa/ui';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdTaskTypes } from 'src/cdScripts/Helpers/CdTaskTypes';\r\nimport { DefaultCompletionOptions } from 'src/cdScripts/Helpers/DefaultCompletionOptions';\r\nimport { CdProcessHelper } from 'src/cdScripts/Helpers/CdProcessHelper';\r\n\r\nexport class CdCompleteTaskUIExtension 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\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, CdCardTypes.PkIncomingTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkMemoTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkOutgoingTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.RdndTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkInternalDocumentationTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkAssignmentTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkLetterCreditTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.InstructionTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.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, CdCardTypes.PkProtocolTenderTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.ArEDocumentTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkPacketVirtualTypeID)\r\n )) {\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.CheckControler(context, tasks);\r\n await this.CheckSubTasksClose(context, tasks);\r\n\r\n }\r\n\r\n private async CheckControler(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (t.typeId === CdTaskTypes.PkCompleteTypeID ||\r\n t.typeId === CdTaskTypes.PkConsiderationTypeID ||\r\n t.typeId === CdTaskTypes.PkUksApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkProjectGroupApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkGipApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkOspApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkDepProductApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkExternalApprovalTaskTypeID ||\r\n t.typeId == CdTaskTypes.PkTDComissionOnRenovationTypeID) &&\r\n t.action === CardTaskAction.Complete &&\r\n (t.optionId === DefaultCompletionOptions.CreateChildResolution ||\r\n t.optionId === CdProcessHelper.Relocate)\r\n );\r\n if (task == null) {\r\n return;\r\n }\r\n\r\n let ptirSection = task.card.sections.tryGet('PkTaskIncomingResolution');\r\n if (ptirSection == null) return;\r\n let controlerID = ptirSection.fields.tryGet(\"ControlerID\");\r\n if (controlerID == null) {\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 CheckSubTasksClose(context: ICardUIExtensionContext, tasks: ArrayStorage) {\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (t.typeId === CdTaskTypes.PkCompleteTypeID ||\r\n t.typeId === CdTaskTypes.PkUksApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkProjectGroupApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkGipApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkOspApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkDepProductApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkExternalApprovalTaskTypeID ||\r\n t.typeId === CdTaskTypes.PkStartAcquaintanceProcessTechDocTaskTypeID ||\r\n t.typeId == CdTaskTypes.PkTDComissionOnRenovationTypeID) &&\r\n (t.action === CardTaskAction.Complete) &&\r\n (t.optionId === DefaultCompletionOptions.Delegate ||\r\n t.optionId === DefaultCompletionOptions.Complete));\r\n if (task == null) {\r\n return;\r\n }\r\n let ptisvSection = task.card.sections.tryGet('PkTasksInfoSubtasksVirtual');\r\n if (ptisvSection == null) return;\r\n let existSubTasks = false;\r\n for (let row of ptisvSection.rows) {\r\n if (row.get(\"Completed\") == null) {\r\n existSubTasks = true;\r\n break;\r\n }\r\n }\r\n if (existSubTasks) {\r\n let text = \"\";\r\n if (task.optionId === DefaultCompletionOptions.Delegate) {\r\n text = \"Вы уверены, что хотите делегировать Поручение? Все отправленные подзадачи будут отозваны\";\r\n }\r\n else {\r\n text = \"Вы уверены, что хотите завершить Поручение? Все отправленные подзадачи будут отозваны\";\r\n }\r\n const result = await showConfirm(text);\r\n if (!result) {\r\n context.cancel = true;\r\n }\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, Visibility } from 'tessa/platform';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class CdHideSubTaskTableUIExtension 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, CdCardTypes.PkIncomingTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkMemoTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkOutgoingTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.RdndTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkInternalDocumentationTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkAssignmentTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkLetterCreditTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.InstructionTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.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, CdCardTypes.ArEDocumentTypeID) ||\r\n Guid.equals(context.model.card.typeId, CdCardTypes.PkRequestForMaterialsTypeID)\r\n )) {\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 for (let task of tasks) {\r\n // при инциализации формы\r\n this.HideSubTaskTable(task);\r\n // подписываемся на изменения формы в задании\r\n task.workspaceChanged.add(e => this.HideSubTaskTable(e.task));\r\n }\r\n }\r\n\r\n private HideSubTaskTable(task: TaskViewModel) {\r\n let hasSubTasks = false;\r\n let ptisvSection = task.taskModel.card.sections.tryGet('PkTasksInfoSubtasksVirtual');\r\n if (ptisvSection != null) {\r\n hasSubTasks = ptisvSection.rows.length > 0 ? true : false;\r\n }\r\n const control = task.taskModel.blocks.get('SubTasksBlock');\r\n if (control) {\r\n control.blockVisibility = hasSubTasks ? Visibility.Visible : Visibility.Collapsed;\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 { CdExecutiveDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdExecutiveDocumentationClientHelper';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class CdExecutiveDocumentationTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\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, CdCardTypes.PkExecutiveDocumentationTypeID)) {\r\n return;\r\n }\r\n let tasks = context.card.tasks;\r\n\r\n await CdExecutiveDocumentationClientHelper.CheckFieldsAfterTaskComplete(context, tasks);\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 { CdExecutiveSchemeClientHelper } from 'src/cdScripts/Helpers/Cards/CdExecutiveSchemeClientHelper';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class CdExecutiveSchemeTaskUIExtension extends CardUIExtension {\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, CdCardTypes.PkExecutiveSchemeTypeID)) {\r\n return;\r\n }\r\n let tasks = context.card.tasks;\r\n\r\n await CdExecutiveSchemeClientHelper.CheckFieldsAfterTaskComplete(context, tasks);\r\n } \r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CdGeneralDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper';\r\nimport { CdDevelopmentScenarioSharedHelper } from 'src/cdScripts/Helpers/Cards/CdDevelopmentScenarioSharedHelper';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class CdDevelopmentScenarioTaskUIExtension extends CardUIExtension {\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, CdCardTypes.PkDevelopmentScenarionTypeID)) {\r\n return;\r\n }\r\n let tasks = context.card.tasks;\r\n\r\n await CdGeneralDocumentationClientHelper.CheckFieldsAfterTaskComplete(context, tasks\r\n ,CdDevelopmentScenarioSharedHelper.ApproverTaskStoreInfo.TaskStartProcessTypesList\r\n ,CdDevelopmentScenarioSharedHelper.ApproverTaskStoreInfo.TaskStartProcessOptionsList\r\n ,CdDevelopmentScenarioSharedHelper.CheckFileCategoryList \r\n ,CdDevelopmentScenarioSharedHelper.ExcludeRolesFromCheckList);\r\n } \r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { CdGeneralDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper';\r\nimport { CdRequestForMaterialsSharedHelper } from 'src/cdScripts/Helpers/Cards/CdRequestForMaterialsSharedHelper';\r\nimport { Guid } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\n\r\nexport class CdRequestForMaterialsTaskUIExtension extends CardUIExtension {\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, CdCardTypes.PkRequestForMaterialsTypeID)) {\r\n return;\r\n }\r\n let tasks = context.card.tasks;\r\n\r\n //пока убираем подписание для заявок на материалы 44075\r\n await CdGeneralDocumentationClientHelper.CheckFieldsAfterTaskComplete(context, tasks\r\n ,CdRequestForMaterialsSharedHelper.ApproverTaskStoreInfo.TaskStartProcessTypesList\r\n ,CdRequestForMaterialsSharedHelper.ApproverTaskStoreInfo.TaskStartProcessOptionsList\r\n ,CdRequestForMaterialsSharedHelper.CheckFileCategoryList\r\n //,undefined\r\n //,CdRequestForMaterialsSharedHelper.ApproverTaskStoreInfo.TaskSignTypesList\r\n );\r\n } \r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, Visibility, createTypedField, DotNetType } from 'tessa/platform';\r\nimport { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { TaskViewModel } from 'tessa/ui/cards/tasks';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { CdRequestTypes } from 'src/cdScripts/Helpers/CdRequestTypes';\r\n\r\nexport class CdHideControlUIExtension 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.TechnicalDocumentationTypeID)) {\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, context);\r\n task.workspaceChanged.add(e => this.HideControl(e.task, context));\r\n }\r\n }\r\n private async HideControl(taskModel: TaskViewModel, context: ICardUIExtensionContext) {\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 === 'WithRsoBeforeFr');\r\n\r\n if (control == null)\r\n return;\r\n\r\n let task = context.card.tasks.find(x => x.rowId === taskModel.taskModel.cardTask!.tryGetCard()!.id);\r\n\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetParentRoleID;\r\n request.info[\"CardID\"] = createTypedField(context.model.card.id, DotNetType.Guid);\r\n request.info[\"RoleID\"] = createTypedField(task!.roleId, 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 if (response.info.IsNewRenovationAgreementProcess && response.info.IsNewRenovationAgreementProcess.$value\r\n && response.info.ParentRoleId.$value === \"365588ca-1aa4-4fc1-b991-99d4de213a18\")\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 { CdCardTypes } from 'src/cdScripts/Helpers/CdCardTypes';\r\nimport { CdGeneralDocumentationClientHelper } from 'src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper';\r\nimport { CdTaskTypes } from 'src/cdScripts/Helpers/CdTaskTypes';\r\n\r\nexport class CdTechnicalDocumentationTaskUIExtension extends CardUIExtension {\r\n\r\n private _disposer: Function | null = null;\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, CdCardTypes.TechnicalDocumentationTypeID)) {\r\n return;\r\n }\r\n let tasks = context.card.tasks;\r\n\r\n await CdGeneralDocumentationClientHelper.SignFilesAsync(context, tasks, [CdTaskTypes.PkSigningTypeID]);\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 { CdCompleteTaskUIExtension } from './CdCompleteTaskUIExtension';\r\nimport { CdHideSubTaskTableUIExtension } from './CdHideSubTaskTableUIExtension';\r\nimport { CdExecutiveDocumentationTaskUIExtension } from './CdExecutiveDocumentationTaskUIExtension';\r\nimport { CdExecutiveSchemeTaskUIExtension } from './CdExecutiveSchemeTaskUIExtension';\r\nimport { CdDevelopmentScenarioTaskUIExtension } from './CdDevelopmentScenarioTaskUIExtension';\r\nimport { CdRequestForMaterialsTaskUIExtension } from './CdRequestForMaterialsTaskUIExtension';\r\nimport { CdHideControlUIExtension } from './CdHideControlUIExtension';\r\nimport { CdTechnicalDocumentationTaskUIExtension } from './CdTechnicalDocumentationTaskUIExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: CdCompleteTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdHideSubTaskTableUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdExecutiveDocumentationTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdExecutiveSchemeTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdDevelopmentScenarioTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdRequestForMaterialsTaskUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdHideControlUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdTechnicalDocumentationTaskUIExtension, stage: ExtensionStage.AfterPlatform});","import { FileExtension, IFileExtensionContext } from 'tessa/ui/files';\r\nimport { Card, CardSection, ICAdESProvider } from 'tessa/cards';\r\nimport { MenuAction, showNotEmpty } from 'tessa/ui';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { CdEDSHelper, CustomCertData } from '../Helpers/CdEDSHelper';\r\nimport { ChFileCategories } from 'src/pkScripts/Helpers/ChFileCategories';\r\nimport { FileContainer, IFile } from 'tessa/files';\r\nimport { CdGeneralDocumentationClientHelper } from '../Helpers/Cards/CdGeneralDocumentationClientHelper';\r\nimport { CdDocStates } from '../Helpers/CdDocStates';\r\n\r\nexport class CdSignFileContextMenuFileExtension extends FileExtension {\r\n public async openingMenu(context: IFileExtensionContext) {\r\n let card: Card = context.control.model.card;\r\n let files = context.files;\r\n if (card.typeId !== CdCardTypes.PkExecutiveDocumentationTypeID &&\r\n card.typeId !== CdCardTypes.TechnicalDocumentationTypeID) {\r\n return;\r\n }\r\n\r\n // Находим индексы действий: подписать, проверить подпись и разделитель\r\n let signActionIndex, checkActionIndex, separatorActionIndex: number = -1;\r\n context.actions.forEach(action => {\r\n if (action.name === 'SignEDS') {\r\n signActionIndex = context.actions.indexOf(action);\r\n } else if (action.name === 'CheckEDS') {\r\n checkActionIndex = context.actions.indexOf(action);\r\n } else if (action.name === 'Separator' && signActionIndex > separatorActionIndex) {\r\n separatorActionIndex = context.actions.indexOf(action);\r\n }\r\n });\r\n\r\n // В вебе все действия по подписанию скрыты, делаем их видимыми\r\n if (checkActionIndex && separatorActionIndex) {\r\n context.actions[checkActionIndex].isCollapsed = false;\r\n context.actions[separatorActionIndex].isCollapsed = false;\r\n }\r\n\r\n // Исключаем файлы в 1 и 7 категориях и вид подписания \"На бумаге\" для ИД\r\n if (card.typeId === CdCardTypes.PkExecutiveDocumentationTypeID) {\r\n let exeSect: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n if (!exeSect) return;\r\n let signingTypeID: number | null = exeSect.fields.tryGet('SigningTypeID');\r\n if (!signingTypeID || signingTypeID === 0) return;\r\n if (files.find(x =>\r\n x.model.category === null || \r\n x.model.category.id === ChFileCategories.DocumentID.id!.toLowerCase() || \r\n x.model.category.id === ChFileCategories.ElectronicSignatures.id!.toLowerCase()) != null) {\r\n return;\r\n } \r\n } \r\n\r\n // Исключаем файлы в 3 категория для ИC\r\n else if (card.typeId === CdCardTypes.PkExecutiveSchemeTypeID) { \r\n if (files.find(x =>\r\n x.model.category === null || x.model.category.id === ChFileCategories.ImplementingSchemes.id!.toLowerCase()) != null) \r\n return; \r\n }\r\n\r\n // Исключаем файлы в 7 категории, только для РД, только для состояния \"Выдано в производство работ\" для ТД\r\n // Исключаем подписание через контекстное меню для согласуемых файлов ТД (63650)\r\n else if (card.typeId === CdCardTypes.TechnicalDocumentationTypeID) {\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 || stateID !== CdDocStates.Production.id) return;\r\n let stageID: number | null = pdiSect.fields.tryGet('StageID');\r\n if (!stageID || stageID !== 2) return;\r\n if (files.length !== 1 ||\r\n files.find(x =>\r\n x.model.category === null ||\r\n x.model.category.id === ChFileCategories.ElectronicSignatures.id!.toLowerCase()) != null)\r\n return;\r\n if (files[0].model.category === null ||\r\n files[0].model.category.id !== ChFileCategories.Approval.id)\r\n return;\r\n if (files.find(x =>\r\n x.model.category == null ||\r\n x.model.category.id == ChFileCategories.Approval.id) != null)\r\n return;\r\n }\r\n \r\n context.actions[signActionIndex] = new MenuAction(\r\n 'PkSignFile',\r\n 'Подписать усиленной подписью',\r\n \"ta icon-thin-197\",\r\n async () => await this.SignFileAsync(context),\r\n null,\r\n false\r\n );\r\n \r\n if (card.typeId == CdCardTypes.PkExecutiveDocumentationTypeID) {\r\n context.actions.splice(signActionIndex + 1, 0, new MenuAction(\r\n 'PkSignFiles',\r\n 'Подписать все файлы в категории усиленной подписью',\r\n \"ta icon-thin-197\",\r\n async () => await this.SignFileAsync(context, true),\r\n null,\r\n false\r\n ));\r\n }\r\n }\r\n\r\n private async SignFileAsync(\r\n context: IFileExtensionContext,\r\n signAllFilesInCategory: boolean = false) {\r\n\r\n let card: Card = context.control.model.card;\r\n let fileContainer: FileContainer = context.control.fileContainer;\r\n let edsProvider: ICAdESProvider = context.control.model.edsProvider;\r\n let unsignedFiles: {ID: string, Hash?: string | null}[] = [];\r\n\r\n // список файлов на подписание\r\n let files: IFile[] = [];\r\n if (signAllFilesInCategory) {\r\n files = fileContainer.files\r\n .filter(x =>\r\n x.category && context.file.model.category &&\r\n x.category.id == context.file.model.category.id &&\r\n !x.name.includes(CdGeneralDocumentationClientHelper.PdfForPrint));\r\n if (files.length == 0) {\r\n return;\r\n }\r\n } else {\r\n files.push(context.file.model);\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(edsProvider);\r\n if (!selectedCert.Certificate) {\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 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 CdGeneralDocumentationClientHelper.CheckIsAttachedSignatureAsync(card, context.control.fileContainer.files);\r\n\r\n // TODO TIV: текущий context не подходит\r\n // // DSS подписание (с выходом из метода при успешном подписании)\r\n // if (!isAttachedSignature) {\r\n // let isDSS = await CdGeneralDocumentationClientHelper.SignFilesByDSSAsync(\r\n // context,\r\n // userSession.UserID,\r\n // null,\r\n // files\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 fileContainer,\r\n edsProvider,\r\n card,\r\n unsignedFiles,\r\n !isAttachedSignature,\r\n false,\r\n certificate\r\n );\r\n\r\n if (!edsResult.isSuccessful) {\r\n showNotEmpty(edsResult.build());\r\n return;\r\n }\r\n\r\n await context.control.model.saveAsync();\r\n }\r\n}","import { PkCommonHelper } from \"src/pkScripts/Helpers/PkCommonHelper\";\r\nimport { Card, CardGetMethod, CardGetMode } from \"tessa/cards\";\r\nimport { CardGetFileContentRequest, CardGetRequest, CardService } from \"tessa/cards/service\";\r\nimport { DotNetType } from \"tessa/platform\";\r\nimport { showError } from \"tessa/ui\";\r\nimport { FileViewModel } from \"tessa/ui/cards/controls\";\r\nimport { CdExecutiveDocumentationClientHelper } from \"../Helpers/Cards/CdExecutiveDocumentationClientHelper\";\r\nimport { CdCardTypes } from \"../Helpers/CdCardTypes\";\r\nimport { CdFileTypes } from \"../Helpers/CdFileTypes\";\r\n\r\nexport class CdContextMenuFileHelper {\r\n\r\n public static async SaveFileForPrintVirtual(cardId: DotNetType.Guid, fileId: string) {\r\n const getRequest = new CardGetRequest();\r\n getRequest.cardId = cardId;\r\n getRequest.cardTypeId = CdCardTypes.PkExecutiveSchemeTypeID;\r\n getRequest.getMode = CardGetMode.ReadOnly;\r\n getRequest.method = CardGetMethod.Backup;\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 const card = getResponse.card;\r\n if (!card.files.find(x => x.rowId === fileId)) {\r\n return;\r\n }\r\n \r\n const file = card.files.find(x => x.rowId === fileId);\r\n if (!file || !file.lastVersion || !file.lastVersion.rowId) {\r\n return;\r\n }\r\n \r\n this.Log('Формирование запроса');\r\n \r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = CdFileTypes.GetFileForPrintType;\r\n getFileContentRequest.cardId = cardId;\r\n getFileContentRequest.versionRowId = file.lastVersion.rowId;\r\n getFileContentRequest.fileId = file.rowId;\r\n getFileContentRequest.fileName = file.name;\r\n \r\n this.Log('Отправка запроса на сервер');\r\n \r\n const getFileContentResponse = await CardService.instance.getFileContent(getFileContentRequest);\r\n \r\n if (!getFileContentResponse.validationResult.isSuccessful) {\r\n await showError('Не удалось получить файл. Подробнее: F12 -> Console');\r\n this.Error('Ошибка на сервере: ' + getFileContentResponse.validationResult.build().toString());\r\n return;\r\n }\r\n \r\n this.Log('Получен ответ от сервера');\r\n \r\n if (getFileContentResponse.content != null &&\r\n getFileContentResponse.size !== 0) {\r\n const fileName: string = this.GetFileName(file.name, CdExecutiveDocumentationClientHelper.PdfForPrint);\r\n this.Info('Длина файла \"' + fileName + '\": ' + getFileContentResponse.size);\r\n PkCommonHelper.SaveFileContent(fileName, getFileContentResponse.content);\r\n } else {\r\n this.Error('Вернулся пустой файл');\r\n }\r\n }\r\n \r\n public static async SaveFileForPrint(file: FileViewModel, card: Card, fileTypeName: string, cardTypeId: string, cardTypeName: string, extension: string, info?: any) {\r\n this.Log('Формирование запроса');\r\n\r\n // CardTypeID обязательно, используется в расширении\r\n const getFileContentRequest = new CardGetFileContentRequest();\r\n getFileContentRequest.fileTypeName = fileTypeName;\r\n getFileContentRequest.cardId = card.id;\r\n getFileContentRequest.versionRowId = file.model.lastVersion.id;\r\n getFileContentRequest.fileId = file.model.id;\r\n getFileContentRequest.fileName = file.model.name;\r\n getFileContentRequest.cardTypeId = cardTypeId;\r\n getFileContentRequest.cardTypeName = cardTypeName;\r\n getFileContentRequest.info = info;\r\n\r\n this.Log('Отправка запроса на сервер');\r\n\r\n const getFileContentResponse = await CardService.instance.getFileContent(getFileContentRequest);\r\n\r\n if (!getFileContentResponse.validationResult.isSuccessful) {\r\n await showError('Не удалось получить файл. Подробнее: F12 -> Console');\r\n this.Error('Ошибка на сервере: ' + getFileContentResponse.validationResult.build().toString());\r\n return;\r\n }\r\n\r\n this.Log('Получен ответ от сервера');\r\n\r\n if (getFileContentResponse.content != null &&\r\n getFileContentResponse.size !== 0) {\r\n const fileName: string = this.GetFileName(file.model.name, extension);\r\n this.Info('Длина файла \"' + fileName + '\": ' + getFileContentResponse.size);\r\n PkCommonHelper.SaveFileContent(fileName, getFileContentResponse.content);\r\n } else {\r\n this.Error('Вернулся пустой файл');\r\n }\r\n }\r\n\r\n // ПОлучить имя файла для печати\r\n private static GetFileName(currentName: string, extension: string) {\r\n let pointIndex: number = currentName.lastIndexOf('.');\r\n if (pointIndex > 0) {\r\n currentName = currentName.substring(0, pointIndex) + extension;\r\n }\r\n return currentName;\r\n }\r\n\r\n private static Error(message: string) {\r\n console.error('[Печатная форма|Ошибка] ' + message);\r\n return message;\r\n }\r\n\r\n private static Log(message: string) {\r\n console.log('[Печатная форма|Сообщение] ' + message);\r\n }\r\n\r\n private static Info(message: string) {\r\n console.info('[Печатная форма|Информация] ' + message);\r\n }\r\n}","import { FileExtension, IFileExtensionContext } from 'tessa/ui/files';\r\nimport { Card, CardSection } from 'tessa/cards';\r\nimport { MenuAction, SeparatorMenuAction } from 'tessa/ui';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { PkCardTypes } from 'src/pkScripts/Helpers/PkCardTypes';\r\nimport { CdContextMenuFileHelper } from './CdContextMenuFileHelper';\r\nimport { CdFileTypes } from '../Helpers/CdFileTypes';\r\nimport { CdExecutiveDocumentationClientHelper } from '../Helpers/Cards/CdExecutiveDocumentationClientHelper';\r\n\r\nexport class CdGetFileForPrintContextMenuFileExtension extends FileExtension {\r\n public openingMenu(context: IFileExtensionContext) {\r\n let card: Card = context.control.model.card;\r\n if (card.typeId !== CdCardTypes.PkExecutiveDocumentationTypeID\r\n && card.typeId !== CdCardTypes.PkExecutiveSchemeTypeID\r\n && card.typeId !== CdCardTypes.PkRequestForMaterialsTypeID\r\n && card.typeId !== PkCardTypes.PkMemoTypeID\r\n && card.typeId !== CdCardTypes.TechnicalDocumentationTypeID) {\r\n return;\r\n }\r\n\r\n // @ts-ignore\r\n let cardFile = card.files.find(x => x.rowId === context.file.id).card;\r\n let fileES = card.files.find(x => x.rowId === context.file.id);\r\n\r\n if (fileES && card.info[fileES.name] != null && card.info[fileES.name].$value) {\r\n const cardExecutiveSchemeID = card.info[fileES.name].$value;\r\n\r\n // проверка наличия подписей виртуального файла происходит на сервере class: CdExecutiveDocumentationGetExtension\r\n this.AddMenuAction(context, () => CdContextMenuFileHelper.SaveFileForPrintVirtual(cardExecutiveSchemeID, context.file.id));\r\n return;\r\n }\r\n\r\n // Если у файла нет подписей\r\n if (!cardFile.sections.has('FileSignatures') ||\r\n // @ts-ignore\r\n cardFile.sections.get('FileSignatures').rows.length === 0) {\r\n return;\r\n }\r\n\r\n // Если без ЭЦП\r\n if (card.typeId === CdCardTypes.PkExecutiveDocumentationTypeID) {\r\n let exeSect: CardSection | undefined = card.sections.tryGet('PkExecutiveDocumentationInfo');\r\n if (!exeSect) return;\r\n let signingTypeID: number | null = exeSect.fields.tryGet('SigningTypeID');\r\n if (!signingTypeID || signingTypeID === 0) {\r\n return;\r\n }\r\n }\r\n\r\n this.AddMenuAction(context, () => CdContextMenuFileHelper.SaveFileForPrint(context.file, card, CdFileTypes.GetFileForPrintType, card.typeId, card.typeName, CdExecutiveDocumentationClientHelper.PdfForPrint));\r\n }\r\n\r\n private AddMenuAction(context: IFileExtensionContext, action: any) {\r\n // Вставляем действие до ЭЦП\r\n let actionIndex: number | null = -1;\r\n context.actions.forEach(action => {\r\n if (action.name === 'SignEDS' || action.name === 'PkSignFile') {\r\n actionIndex = context.actions.indexOf(action);\r\n }\r\n });\r\n\r\n context.actions.splice(actionIndex, 0, new SeparatorMenuAction(false));\r\n\r\n context.actions.splice(\r\n actionIndex,\r\n 0,\r\n new MenuAction(\r\n 'GetFileForPrint',\r\n 'Скачать печатную форму',\r\n \"ta icon-thin-063\",\r\n action,\r\n null,\r\n false\r\n ));\r\n }\r\n}","import { FileControlExtension, IFileControlExtensionContext } from \"tessa/ui/files\";\r\nimport { UIContext, MenuAction } from \"tessa/ui\";\r\nimport { ICardModel } from \"tessa/ui/cards\";\r\n\r\nexport class ChangeFileMenu extends FileControlExtension {\r\n\r\n public openingMenu(context: IFileControlExtensionContext) {\r\n const editor = UIContext.current.cardEditor;\r\n let model: ICardModel;\r\n\r\n if (editor == null || !(model = editor.cardModel!) || model.cardType.name !== 'ArContract') {\r\n return;\r\n }\r\n\r\n // Убираем из меню все варианты создания файла.\r\n // @ts-ignore\r\n let fileList: FileList = context.control;\r\n if (fileList[\"cardTypeControl\"].name === \"Files\") {\r\n [\"Upload\", \"Scan\", \"PasteFromClipboard\"].forEach(menuItemName => {\r\n let item: MenuAction | undefined;\r\n if (item = context.actions.find(i => i.name === menuItemName)) {\r\n item.isCollapsed = true;\r\n }\r\n });\r\n }\r\n }\r\n}","import { FileExtension, IFileExtensionContext } from 'tessa/ui/files';\r\nimport { Card, CardRow, CardRowState } from 'tessa/cards';\r\nimport { createCardModel, MenuAction, showError, showNotEmpty, UIButton, UIContext } from 'tessa/ui';\r\nimport { FileViewModel, GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { CardNewRequest, CardRequest, CardService } from 'tessa/cards/service';\r\nimport { createTypedField, DotNetType, Guid, Visibility } from 'tessa/platform';\r\nimport { CdRequestTypes } from '../Helpers/CdRequestTypes';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\n\r\nexport class CdCheckSignsContextMenuFileExtension extends FileExtension {\r\n public async openingMenu(context: IFileExtensionContext) {\r\n let action = context.actions.find(action => action.name == \"CheckEDS\");\r\n if (!action) {\r\n return;\r\n }\r\n\r\n const card = UIContext.current.cardEditor!.cardModel!.card;\r\n\r\n let checkEDSActionIndex = context.actions.indexOf(action);\r\n context.actions[checkEDSActionIndex] = new MenuAction(\r\n \"CheckEDS\",\r\n \"Проверить ЭП\",\r\n \"ta icon-thin-091\",\r\n async () => await this.CheckSignsAsync(context.file, card),\r\n null,\r\n false);\r\n }\r\n\r\n private async CheckSignsAsync(\r\n file: FileViewModel,\r\n card: Card) {\r\n let checkSignsRequest: CardRequest = new CardRequest();\r\n checkSignsRequest.requestType = CdRequestTypes.CheckSigns;\r\n checkSignsRequest.info[\"CardID\"] = createTypedField(card.id, DotNetType.Guid);\r\n checkSignsRequest.info[\"FileID\"] = createTypedField(file.model.id, DotNetType.Guid);\r\n checkSignsRequest.info[\"FileVersionID\"] = createTypedField(file.model.lastVersion.id, DotNetType.Guid);\r\n checkSignsRequest.info[\"FileName\"] = createTypedField(file.model.lastVersion.name, DotNetType.String);\r\n let checkSignsResponse = await CardService.instance.request(checkSignsRequest);\r\n await showNotEmpty(checkSignsResponse.validationResult.build());\r\n if (!checkSignsResponse.validationResult.isSuccessful) {\r\n return;\r\n }\r\n\r\n let error = checkSignsResponse.info.Error?.$value;\r\n if (error) {\r\n await showError(error);\r\n return;\r\n }\r\n\r\n if (!checkSignsResponse.info.SignaturesInfo) {\r\n return;\r\n }\r\n\r\n let signaturesInfo = checkSignsResponse.info.SignaturesInfo;\r\n\r\n let dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName(\"PkDialogs\");\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n let dialogForm = dialogsType.forms.find(x => x.name === \"CheckSignsDialog\");\r\n if (!dialogForm) {\r\n return;\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 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 let windowCardModel = createCardModel(response.card, response.sectionRows);\r\n const pkCheckSignsVirtual = windowCardModel.card.sections.get(\"PkCheckSignsVirtual\");\r\n if (!pkCheckSignsVirtual) {\r\n return;\r\n } \r\n\r\n signaturesInfo.forEach(signature => {\r\n let roleRow = new CardRow();\r\n roleRow.rowId = Guid.newGuid();\r\n roleRow.set(\"SubjectName\", signature.SubjectName);\r\n roleRow.set(\"Company\", signature.Company);\r\n roleRow.set(\"Date\", signature.Date);\r\n roleRow.set(\"Event\", signature.Event);\r\n roleRow.set(\"CadesType\", signature.CadesType);\r\n roleRow.set(\"UserName\", signature.UserName);\r\n roleRow.set(\"Comment\", signature.Comment);\r\n roleRow.set(\"ErrorText\", signature.ErrorText);\r\n roleRow.state = CardRowState.Inserted;\r\n pkCheckSignsVirtual.rows.push(roleRow);\r\n });\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n async (viewModel) => {\r\n let block = viewModel.blocks[0];\r\n if (!block) {\r\n return;\r\n }\r\n\r\n let contentControl = block.controls.find(x => x.name == \"CheckSignsTable\") as GridViewModel;\r\n if (!contentControl) {\r\n return;\r\n }\r\n\r\n contentControl.addButton.setVisibility(Visibility.Collapsed);\r\n contentControl.removeButton.setVisibility(Visibility.Collapsed);\r\n contentControl.rows.forEach(r => {\r\n let errorText = r.row.tryGet(\"ErrorText\");\r\n if (errorText)\r\n {\r\n r.style.backgroundColor = \"rgb(255, 0, 0)\";\r\n }\r\n });\r\n },\r\n [\r\n new UIButton('$UI_Common_OK', async (btn) => {\r\n btn.close();\r\n })\r\n ]\r\n );\r\n }\r\n}","import { FileExtension, IFileExtensionContext } from 'tessa/ui/files';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\n\r\nexport class PkTCOfferContextMenuFileExtension extends FileExtension {\r\n public async openingMenu(context: IFileExtensionContext) {\r\n let card = context.control.model.card;\r\n let files = context.files;\r\n\r\n if (card.typeId != CdCardTypes.PkTCOfferTypeID) {\r\n return;\r\n }\r\n\r\n let pkFilesPermissionsVirtual = card.sections.getOrAdd(\"PkFilesPermissionsVirtual\");\r\n let prohibitedCategories = new Array();\r\n pkFilesPermissionsVirtual.rows.forEach(r => {\r\n if (!r.tryGet(\"AllowAdd\")) {\r\n let category = {CategoryID: r.tryGet(\"FileCategoryID\")};\r\n prohibitedCategories.push(category);\r\n }\r\n });\r\n\r\n let createCopyAction = context.actions.find(a => a.name == \"MakeCopy\")!;\r\n let showVersionsAction = context.actions.find(a => a.name == \"ShowVersions\")!;\r\n if (!createCopyAction || !showVersionsAction) {\r\n return;\r\n }\r\n\r\n files.forEach(f => {\r\n if (prohibitedCategories.find(c => c.CategoryID == f.model.category?.id)) {\r\n createCopyAction.isCollapsed = true;\r\n showVersionsAction.isCollapsed = true;\r\n }\r\n });\r\n }\r\n}","\r\nimport { FileControlExtension, IFileControlExtensionContext } from \"tessa/ui/files\";\r\nimport { UIContext, showNotEmpty } from \"tessa/ui\";\r\nimport { ICardModel } from \"tessa/ui/cards\";\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { PkRequestTypes } from \"src/pkScripts/Helpers/PkRequestTypes\";\r\nimport { createTypedField, DotNetType, TypedField } from \"tessa/platform\";\r\nimport { PkCardTypes } from \"src/pkScripts/Helpers/PkCardTypes\";\r\n\r\nexport class ChAddContextMenuTemplates extends FileControlExtension {\r\n\r\n public async openingMenu(context: IFileControlExtensionContext) {\r\n const editor = UIContext.current.cardEditor;\r\n let model: ICardModel;\r\n\r\n if (editor == null || !(model = editor.cardModel!) || model.cardType.id !== PkCardTypes.PkOutgoingTypeID) {\r\n return;\r\n }\r\n \r\n var refDoc = null;\r\n var OutgoingRefDocs = model.card.sections.tryGet(\"OutgoingRefDocs\");\r\n if (OutgoingRefDocs != null ) {\r\n if (OutgoingRefDocs.rows.length > 0 ) {\r\n refDoc = OutgoingRefDocs.rows[0].tryGet(\"DocID\");\r\n }\r\n }\r\n\r\n let scanAction = context.actions.find(x => x.name === \"AddFromTemplate\"); \r\n \r\n if (refDoc == null || scanAction == null)\r\n {\r\n return;\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = PkRequestTypes.ChGetThemeTemplateIncomming;\r\n request.info[\"cardID\"] = createTypedField(refDoc, 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 if ((response.info.incTemplates != null) ) {\r\n let incTemplates = response.info.incTemplates as Array;\r\n // Удаляет все action которые не родительские и не относятся к этим шаблонам\r\n if (scanAction != null) {\r\n for(let index = (scanAction?.children.length -1); index >= 0; index--) {\r\n let element = scanAction.children[index];\r\n if ((element.children == null || element.children.length == 0)\r\n && (!incTemplates.some(x => \r\n x.$value.toLowerCase() == element.name.toLowerCase())) ) {\r\n scanAction?.children.splice(index, 1);\r\n }\r\n }\r\n }\r\n // scanAction.children.forEach(element => {\r\n // if ((element.children == null || element.children.length == 0)\r\n // && (!incTemplates.some(x => \r\n // x.$value.toLowerCase() == element.name.toLowerCase())) ) {\r\n // scanAction?.children.splice(scanAction!.children.findIndex(x => x == element), 1);\r\n // }\r\n // });\r\n // }\r\n }\r\n }\r\n }\r\n}\r\n","import { FileExtension, IFileExtensionContext } from 'tessa/ui/files';\r\nimport { Card } from 'tessa/cards';\r\nimport { createCardModel, MenuAction, SeparatorMenuAction, showNotEmpty, UIButton } from 'tessa/ui';\r\nimport { CdCardTypes } from '../Helpers/CdCardTypes';\r\nimport { CdContextMenuFileHelper } from './CdContextMenuFileHelper';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { CardNewRequest, CardService } from 'tessa/cards/service';\r\nimport { MetadataStorage } from 'tessa';\r\nimport { CdApprovalListHelper } from '../Helpers/CdApprovalListHelper';\r\n\r\nexport class CdPrintApprovalListFileExtension extends FileExtension {\r\n public openingMenu(context: IFileExtensionContext) {\r\n let card: Card = context.control.model.card;\r\n if (card.typeId !== CdCardTypes.ArContractTypeID) {\r\n return;\r\n }\r\n\r\n // @ts-ignore\r\n let cardFile = card.files.find(x => x.rowId === context.file.id).card; \r\n this.AddMenuAction(context, () => CdPrintApprovalListFileExtension.SaveFileForPrint(card, context));\r\n return;\r\n }\r\n\r\n private static async SaveFileForPrint(card: Card, fileContext: IFileExtensionContext) {\r\n let dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName(\"PkDialogs\");\r\n if (!dialogsType) {\r\n return;\r\n }\r\n\r\n let dialogForm = dialogsType.forms.find(x => x.name === \"PrintApprovalListVersion\");\r\n if (!dialogForm) {\r\n return;\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 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 response.card.id = card.id;\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 section;\r\n if ((section = viewModel.cardModel.card.sections.tryGet('PkPrintApprovalListVersionVirtual')) != null) {\r\n section.fields.set(\"VersionID\", 1, DotNetType.Int32);\r\n section.fields.set(\"VersionCaption\", \"печать последней версии\", DotNetType.String);\r\n }\r\n },\r\n [\r\n new UIButton('сохранить', async (btn) => {\r\n let pkPrintApprovalListVersionVirtual = windowCardModel.card.sections.tryGet('PkPrintApprovalListVersionVirtual'); \r\n let pkExternalBuilderApproverVirtual = windowCardModel.card.sections.tryGet('PkExternalBuilderApproverVirtual'); \r\n // при формировании листа согласования договора, если version 0 - то печать всех версий, если 1 - то последней версии \r\n let versionType = pkPrintApprovalListVersionVirtual!.fields.tryGet(\"VersionID\");\r\n // если организация не указана, то печать по всем организациям\r\n let organizationExtID = pkExternalBuilderApproverVirtual!.fields.tryGet(\"PartnerExternalID\");\r\n let info = { \r\n 'Version': createTypedField(versionType, DotNetType.Int32), \r\n 'Organization': organizationExtID != null ? createTypedField(organizationExtID, DotNetType.Int64) : null \r\n };\r\n CdContextMenuFileHelper.SaveFileForPrint(fileContext.file, card, CdApprovalListHelper.ApprovalListName, card.typeId, card.typeName, \".html\", info);\r\n btn.close();\r\n }),\r\n new UIButton('отмена', (btn) => {\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n }\r\n\r\n private AddMenuAction(context: IFileExtensionContext, action: any) {\r\n // Вставляем действие до ЭЦП\r\n let actionIndex: number | null = -1;\r\n context.actions.forEach(action => {\r\n if (action.name === 'PrintApprovalList') {\r\n actionIndex = context.actions.indexOf(action);\r\n }\r\n });\r\n\r\n context.actions.splice(actionIndex, 0, new SeparatorMenuAction(false));\r\n\r\n context.actions.splice(\r\n actionIndex,\r\n 0,\r\n new MenuAction(\r\n 'PrintApprovalList',\r\n 'Печать',\r\n \"ta icon-thin-048\",\r\n action,\r\n null,\r\n false\r\n ));\r\n }\r\n}\r\n","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { CdSignFileContextMenuFileExtension } from './CdSignFileContextMenuFileExtension';\r\nimport { CdGetFileForPrintContextMenuFileExtension } from './CdGetFileForPrintContextMenuFileExtension';\r\nimport { ChangeFileMenu } from './ChangeFileMenu';\r\nimport { CdCheckSignsContextMenuFileExtension } from './CdCheckSignsContextMenuFileExtension';\r\nimport { PkTCOfferContextMenuFileExtension } from './PkTCOfferContextMenuFileExtension';\r\nimport { ChAddContextMenuTemplates } from './ChAddContextMenuTemplates';\r\nimport { CdPrintApprovalListFileExtension } from './CdPrintApprovalListFileExtension';\r\n\r\n\r\nExtensionContainer.instance.registerExtension({extension: ChangeFileMenu, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdSignFileContextMenuFileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdGetFileForPrintContextMenuFileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdCheckSignsContextMenuFileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: PkTCOfferContextMenuFileExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChAddContextMenuTemplates, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: CdPrintApprovalListFileExtension, stage: ExtensionStage.AfterPlatform});\r\n\r\n \r\n\r\n"],"sourceRoot":""}