{"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:///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\"","webpack:///./node_modules/util/util.js","webpack:///./src/cdScripts/Helpers/CdFdProcessHelper.ts","webpack:///./src/cdScripts/Helpers/CdFdTaskTypes.ts","webpack:///external \"tessa.tessa\"","webpack:///./src/cdScripts/Helpers/CdTaskTypes.ts","webpack:///./src/comfortScripts/helpers/ComfortCardTypes.ts","webpack:///./src/cdScripts/Helpers/Cards/CdGeneralDocumentationClientHelper.ts","webpack:///./src/pkScripts/Helpers/ChRequestTypes.ts","webpack:///./src/pkScripts/Helpers/ChTaskTypes.ts","webpack:///./src/cdScripts/Helpers/CdFileTypes.ts","webpack:///external \"tessa.tessa.ui.files\"","webpack:///./src/cdScripts/Helpers/Dictionaries/ApproversRoleID.ts","webpack:///./src/cdScripts/Helpers/CdDssCspType.ts","webpack:///./src/pkScripts/Helpers/PkOutgoingKinds.ts","webpack:///./src/cdScripts/Helpers/Cards/CdRequestForMaterialsSharedHelper.ts","webpack:///./src/cdScripts/Helpers/CdEDSHelper.ts","webpack:///./src/cdScripts/Helpers/CdDSSHelper.ts","webpack:///./src/pkScripts/Helpers/Enums/DocumentSections.ts","webpack:///./src/comfortScripts/helpers/ECMRequestTypes.ts","webpack:///./src/cdScripts/Helpers/CdExecutiveSchemeTypes.ts","webpack:///./node_modules/prop-types/index.js","webpack:///external \"tessa.tessa.localization\"","webpack:///./src/cdScripts/Helpers/Cards/CdExecutiveSchemeSharedHelper.ts","webpack:///./src/cdScripts/Helpers/CdExtensionHelper.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:///./src/comfortScripts/Files/VirtualFilesOfFirstDocumentUIExtension.ts","webpack:///./src/comfortScripts/Files/ChangeFileMenu.ts","webpack:///./src/comfortScripts/Files/Registrator.ts","webpack:///./src/comfortScripts/helpers/ECMDocTypes.ts","webpack:///./src/comfortScripts/Tiles/ECMCreateBasedOnArchiveContractTileExtension.ts","webpack:///./src/comfortScripts/helpers/ECMTileNames.ts","webpack:///./src/comfortScripts/helpers/ECMStorageInfoKeys.ts","webpack:///./src/comfortScripts/Tiles/ECMCreateContractDocumentTileExtension.ts","webpack:///./src/comfortScripts/Tiles/ECMCreateContractCancelTileExtension.ts","webpack:///./src/comfortScripts/helpers/ECMStaticRoles.ts","webpack:///./src/comfortScripts/helpers/ECMProcessHelper.ts","webpack:///./src/comfortScripts/Tiles/ECMProcessRestartTileExtension.ts","webpack:///./src/comfortScripts/Tiles/Registrator.ts","webpack:///./src/comfortScripts/UI/ECMContractSectionsUpdateAddUIExtension.ts","webpack:///./src/comfortScripts/UI/ECMContractSectionUIExtension.ts","webpack:///./src/comfortScripts/UI/ECMContractCostItemsUIExtension.ts","webpack:///./src/comfortScripts/helpers/ECMContractCostItemsHelper.ts","webpack:///./src/comfortScripts/helpers/ECMUIHelper.ts","webpack:///./src/comfortScripts/UI/ECMContractDocumentUIExtension.ts","webpack:///./src/comfortScripts/UI/ECMContractCancelUIExtension.ts","webpack:///./src/comfortScripts/UI/ECMContract2UIExtension.ts","webpack:///./src/comfortScripts/UI/ECMContractBaseUIExtension.ts","webpack:///./src/comfortScripts/UI/ECMAccountObjectUIExtension.ts","webpack:///./src/comfortScripts/UI/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","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","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","PkSignExecutiveDocumentationAgreementWithAgreementorTypeID","PkSignExecutiveDocumentationAgreementTypeID","PkSignExecutiveDocumentationCoordinationAuthorSupervisionTypeID","PkSignExecutiveDocumentationInitializingTypeID","PkExecutiveDocumentationAgreementWithAgreementorTypeID","PkFdInArchiveTypeID","PkExecutiveDocumentationInitializingTypeID","PkExecutiveDocumentationToReworkTypeID","PkSignExecutiveSchemeAgreementWithAgreementorTypeID","PkSignExecutiveSchemeAgreementTypeID","PkSignExecutiveSchemeInitializingTypeID","PkExecutiveSchemeToReworkTypeID","PkExecutiveSchemeCancelTypeID","PkExecutiveSchemeCanUseInEDActsTypeID","PkDevelopmentScenarioInitializingTypeID","PkDevelopmentScenarioAgreementWithAgreementorTypeID","PkDevelopmentScenarioToReworkTypeID","PkSignRequestForMaterialsInitializingTypeID","PkSignRequestForMaterialsToReworkTypeID","PkSignRequestForMaterialsSigningTypeID","PkSignRequestForMaterialsEngeneerPTOSigningTypeID","PkSignInDiadocTypeID","PkProcessIncomingResponseTypeID","PkReworkTaskTypeID","CdTaskTypes","PkCompleteTypeID","PkConsiderationTypeID","PkUksApprovalTaskTypeID","PkProjectGroupApprovalTaskTypeID","PkGipApprovalTaskTypeID","PkOspApprovalTaskTypeID","PkDepProductApprovalTaskTypeID","PkExternalApprovalTaskTypeID","PkStartAcquaintanceProcessTechDocTaskTypeID","PkTDComissionOnRenovationTypeID","ArPreparationForSigningTypeID","PkSigningTypeID","PkPersonnelDocumentCuratorReviewingTypeID","PkPersonnelDocumentSigningTypeID","PkPersonnelDocumentEtkTransitionTypeID","PkPersonnelDocumentCuratorRevocationAgreementTypeID","PkPersonnelDocumentEmployeeRevocationAgreementTypeID","ArPowerOfAttorneyExecutionTaskTypeID","ArApproveUDOTypeID","ArPrintingTheContractTypeID","ArEditBeforeSigningTypeID","ArSigningTypeID","PkAWCORvrBlockFillTypeID","PkAWCORvrBlockFillConfirmationTypeID","ECMDefaultCardTypes","ContractTypeID","ContractTypeName","ECMContractDocumentTypeID","ECMContractDocumentTypeName","ECMContractSection","ECMAccountWithoutContractTypeID","ECMAccountContractTypeID","ECMContractTypeID","ECMAdditionalAgreementTypeID","ECMTerminationAgreementTypeID","ECMContractCancelTypeID","ECMContractCancelTypeName","PkIncomingTypeName","FdCriteriaOperators","certificate","ValidationResultBuilder","unsignedHash","Result","UnsignedHash","showLoadingOverlay","CheckQrCode","ValidationResultType","items","fileWithStamp","GetRdWithWorkStampAsync","ownerOrganization","ownerName","companyAdr","fileData","File","ex","ValidationResult","fromError","details","taskTypes","unsignedFiles","findIndex","toLocaleLowerCase","CardTaskAction","optionId","fileCategory","categoryID","fileContainer","category","includes","selectedCert","CdEDSHelper","GetCertificatePlatformAsync","edsProvider","Certificate","technicalDocumentationResult","TechnicalDocumentationCheckFileAsync","ID","Hash","isAttachedSignature","CheckIsAttachedSignatureAsync","SignFilesByDSSAsync","edsResult","SignFilesAsync","ExecutiveDocumentationAdditionalSignFileLogicAsync","ExecutiveSchemeAdditionalSignFileLogicAsync","RequestForMaterialsAdditionalSignFileLogicAsync","has","signatures","CdExecutiveSchemeTypes","GeodeticSchemeType","userID","signingInfo","CdDSSHelper","GetSigningInfoAsync","employeeGuid1C","dssCspType","SignFilesByDssAsync","externalUserGuid","certInfo","pdciSection","taskTypeID","ChTaskTypes","PkSignerAgreementTypeID","taskID","versionRowID","cardID","fileID","certCompany","certOwner","certAdr","cardGetFileContentRequest","CdFileTypes","GetInWorkStampType","DateTime","cardGetFileContentResponse","roles","matchingSectionName","matchingRolesSectionName","mSection","rSection","j","role","esmSectionRow","SpecialRoleID","SpecialRoleName","DefaultOrder","ediSection","e1","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","roleID","number","users","Users","roleApprover","GetRoles","FillTableApprovers","GetApprovers","clone","SetApprovers","matchingSection","matchingRolesSection","edrSection","edmSection","AddApproverFieldChanged","collectionChanged","added","rowValidating","matchingRowID","cardRow","FillLegalEntityField","excludeRolesFromCheck","rSectionRows","mSectionRows","rolesToFill","CdExecutiveSchemeSharedHelper","IntID","ApprovementRoles","AdditionalApproversID","executiveSchemeInfo","performedWithDeviation","stack","Modified","step","sort","b","roleIDIndex","invalidApprovers","errorMessage","uiContext","UIContext","current","editor","cardEditor","dialogsType","MetadataStorage","cardMetadata","getCardTypeByName","CardNewRequest","new","windowCardModel","createCardModel","sectionRows","dialogForm","showFormDialog","_form","getOrAdd","newRow","Role","Invalid","Valid","UIButton","btn","close","edMatchingSection","edRolesSection","matchingRoles","mr","currentRoleApprover","approver","matchingControl","CheckObjectsAreFilled","ApproversRoleID","Customer","hasChanges","isExternalBuilder","GetUIControl","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","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","completedTaskTypeID","signingFilesInfo","officeFormats","fileNameAndExt","fileExt","tryGetFromInfo","options","lastFileVersion","cardFile","pkfsaiSection","userId","lastFileVersionContentResult","GetFileContentAsync","signingFileInfo","SigningFileInfo","isNeedSigning","checkMainCertificate","withoutNep","withoutPikProjectCheck","organizationExtID","organizationName","withSignatureContent","pkpdiSection","dssUserCert","GetUserCertInfoAsync","nepUserCert","isExistsDssCert","isExistsNepCert","isQualifiedOrg","IsOrganizationNeedQualifiedSignature","isCuratorPersonnelSigning","IsCuratorPersonnelSigning","certEnhancedKey","isNeedNepRelease","isAutoSigningPersonnelDocuments","ExternalUserGuid","EmployeeGuid1C","IsAutoSigningPersonnelDocuments","SignatureContent","certIssuerName","boxID","departmentID","CertCompany","CertAdr","CertOwner","companyExternalID","signingFilesInfoResult","GetSigningFilesInfoAsync","dssRequestFilesSigningInfo","readFileContentAsBase64","Version","isInWork","CardFile","dssRequestFileSigningInfo","DssRequestFileSigningInfo","IsInWork","dssSignRequest","dssSignResponse","dssResponseFilesSigningInfoJson","dssOperationStatusName","dssResponseFilesSigningInfo","parse","dssRequestInfo","VersionRowID","ContentInBase64","ContentBase64","SendCdSignRequest","withEdRoles","withRoles","withApprovementRoles","dssResult","Company","SignBase64","ValidFrom","ValidTo","pkfsRow","fileVersionContent","setContent","version","contentBase64","FileName","ECMRequestTypes","ECMGetCostItemByCategoryRequestID","VisibilityTileCreateContractDocument","ECMIsPartnerInComfortPerimeterRequestID","ECMResetProcessesRequestID","PkIsUserBelongsToRole","NonGeodeticSchemeType","localization","string","docState","currentRole","templateFileRowID","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","copy","fill","readUInt8","ctor","superCtor","super_","TempCtor","VirtualFilesOfFirstDocumentUIExtension","CardUIExtension","initialized","cardType","controlFiles","controlFilesFirstDoc","selectedFiltering","FileDelegateFiltering","containerFileChanging","mainForm","selectedTab","ChangeFileMenu","FileControlExtension","openingMenu","menuItemName","actions","isCollapsed","ExtensionContainer","registerExtension","extension","stage","ExtensionStage","AfterPlatform","ECMDocTypes","SupplementaryAgreementDocTypeID","SupplementaryAgreementDocTypeCaption","NotificationDocTypeID","TechnicalRecordDocTypeID","ECMCreateBasedOnArchiveContractTileExtension","TileExtension","initializingGlobal","InitializeECMCreateBasedOnArchiveContractTileAsync","currentTile","setIsEnabledWithCollapsing","inSpecialMode","contextSource","workspace","leftPanel","createBasedOnArchiveContractTile","Tile","icon","command","CreateBasedOnArchiveContractTileActionAsync","tile","order","evaluating","CreateBasedOnArchiveContractEnableCondition","cardTypeID","targetCardTypeID","targetCardTypeName","requestInfo","baseCard","LoadingOverlay","show","createCard","creationModeDisplayText","splashResolve","ECMTileNames","CreateAdditionalAgreementRoot","CreateAdditionalAgreementSupplementaryAgreement","CreateAdditionalAgreementNotification","CreateAdditionalAgreementTechnicalRecord","CreateContractCancel","ECMStorageInfoKeys","ECMParentContractID","ECMPartnerExternalID","ECMPartnerInComfortPerimeter","ECMCreateContractDocumentTileExtension","panel","TileGroups","Cards","enableWhenVisibleInCardHandler","CreateAdditionalAgreementCardAsync","contractCard","cardEditorModifierAction","oldModel","oldacp","acpSection","ECMCreateContractCancelTileExtension","CreateContractCancelCardAsync","ECMStaticRoles","AccessRestartProcesses","ECMProcessHelper","ApprovalActProcessDiadocID","ECMProcessRestartTileExtension","_tileAvailibleForUser","CheckUserHasPermission","Views","enableIfMyDocumentsViewAndHasSelectedRow","TileActionAllCardAsync","TileActionSelectedCardAsync","TileActionOnPageCardAsync","viewContext","selectedRows","view","showConfirm","listID","rowValue","ValidationStorageResultBuilder","restartProcesses","RestartProcesses","notFoundProcesses","NotFoundProcesses","failedRestartProcesses","FailedRestartProcesses","Info","u","GetAllEntriesViewAsync","parameters","metadata","alias","selectedRow","viewRequest","TessaViewRequest","calculateRowCounting","references","entryPrefix","colPrefix","currentPage","entryIdIndex","viewPagingParameters","ViewPagingParameters","providePageLimitParameter","Paging","Always","providePageOffsetParameter","viewResult","getData","columns","docIDs","IsUserBelongsToRole","singleton","ECMContractSectionsUpdateAddUIExtension","grid","ECMContractSections","SetContractCategory","openCard","secECMContracts","currentContractCategoryID","selectedContractCategoryID","ECMContractSectionUIExtension","HidePartiesBlockHandler","partiesBlockModel","dciSection","eciSection","partner1","partner2","isPartiesBlockVisible","blockVisibility","ECMContractCostItemsUIExtension","ecSection","ecciSection","selectedCategoryID","vatTypeID","ecs","contractCategoryID","cciSection","costItemsList","vatRateID","vatRateCaption","vatRateValue","vatRequest","vatResponse","ClearAutoCompleteTableWithMarkingkDeletedItems2","costItemID","costItemName","costItemGuid1C","costItemRow","Decimal","AddCostItemsAsync","ECMUIHelper","contractsSection","contractControl","ECMContractDocumentUIExtension","ContractFieldHandler","ECMContractCancelUIExtension","ECMContract2UIExtension","ECMContractBaseUIExtension","ContractPartnersHandler","SetVisibilityFlags","migrationControl","partnersTable","partnersSection","partnerRoleID","partnerINN","rowsWithSamePartner","contractKind1CID","kindControl","UpdateContractKind1CControlAsync","partnerResponse","partnerInComfortPerimeter","ECMAccountObjectUIExtension","CardGetRequest","buildingResponse"],"mappings":"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","file":"comfScripts.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 = 88);\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}","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;","// 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 }","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;","export class CdTaskTypes {\r\n\r\n static PkCompleteTypeID = \"864d7962-f321-464c-ad68-9186fb2e610c\";\r\n\r\n // из другого модуля, не удалось разделить\r\n static PkConsiderationTypeID = \"e230b87d-d837-4448-bcd3-a018acdda81b\";\r\n static PkUksApprovalTaskTypeID = \"e135de09-4f50-4d2b-b29b-11ccde5aaefc\";\r\n static PkProjectGroupApprovalTaskTypeID = \"a5d25a39-042a-4bbb-93cf-2cbbe3924fd0\";\r\n static PkGipApprovalTaskTypeID = \"5f132e2c-0e77-49c2-9cc1-6623b332ba98\";\r\n static PkOspApprovalTaskTypeID = \"f3562560-8d12-4efe-8471-57b5a726c984\";\r\n static PkDepProductApprovalTaskTypeID = \"ca4842e0-3f6f-429b-990e-4c78413e2221\";\r\n static PkExternalApprovalTaskTypeID = \"a840f4f8-433a-42fd-8428-833c162de75b\";\r\n static PkStartAcquaintanceProcessTechDocTaskTypeID = \"291aff62-8e24-4d12-9669-44d8accd3aca\";\r\n static PkExecutiveDocumentationInitializingTypeID = \"91AEA9E4-44F8-45B9-952F-35A1F989F7A3\";\r\n static PkTDComissionOnRenovationTypeID = \"FFF72896-FED2-4C89-8B1D-0300A4406A71\";\r\n static ArPreparationForSigningTypeID = \"8ae557ff-ca56-4c4e-9930-badf6bc84163\";\r\n static PkSigningTypeID = \"8D4A0809-7B22-404E-810A-C75FA461034C\";\r\n static PkPersonnelDocumentCuratorReviewingTypeID = \"8f3bf968-feb5-45e8-8bfd-ca7321fb03d7\";\r\n static PkPersonnelDocumentSigningTypeID = \"9bc786d9-dbf8-4822-bb50-9f29d98615a7\";\r\n static PkPersonnelDocumentEtkTransitionTypeID = \"6d483723-ca60-4a16-921e-3702bfdfc000\";\r\n static PkPersonnelDocumentCuratorRevocationAgreementTypeID = \"18728975-1156-40fb-ae26-43c2a896592d\";\r\n static PkPersonnelDocumentEmployeeRevocationAgreementTypeID = \"726a4a7e-4a4c-4ce4-b549-4e41650c524b\";\r\n static ArPowerOfAttorneyExecutionTaskTypeID = \"abcf2062-b636-4a83-a6c3-1015bcaa98fb\";\r\n static ArApproveUDOTypeID = \"1b494f13-3357-4b95-8511-d7737800d412\";\r\n static ArPrintingTheContractTypeID = \"37cbf2a2-8eb6-4f54-b840-6b5d7c445ba1\";\r\n static ArEditBeforeSigningTypeID = \"71facfac-a2ef-4bdb-bf86-25cd5106c164\";\r\n static ArSigningTypeID = \"451d16fc-4162-4492-a6f5-9bf0d829da53\";\r\n\r\n static PkAWCORvrBlockFillTypeID = \"4ac81e42-12f3-482d-ae23-97dc8a182f1e\";\r\n static PkAWCORvrBlockFillConfirmationTypeID = \"d3745fc1-f4b5-41b9-aebe-550f55d9bf15\";\r\n}","export class ECMDefaultCardTypes {\r\n static ContractTypeID = '335F86A1-D009-012C-8B45-1F43C2382C2D';\r\n static ContractTypeName = 'Contract';\r\n\r\n static ECMContractDocumentTypeID = '0C983EEA-1320-4E8F-9F76-4626E12A8D18';\r\n static ECMContractDocumentTypeName = 'ECMContractDocument';\r\n\r\n static ECMContractSection = '39995A27-A020-44B8-89C6-84DE99B724F8';\r\n static ECMAccountWithoutContractTypeID = '0150AA81-E6C7-4211-87E6-F1D700F58AA3';\r\n static ECMAccountContractTypeID = '2B850929-60DD-4CC7-BAC7-532D950386AD';\r\n static ECMContractTypeID = 'FDD3DCB3-29BE-4B83-BF3F-B143859FAEC8';\r\n static ECMAdditionalAgreementTypeID = 'AAAFFC98-8B45-4826-A77E-6972F21743C5';\r\n static ECMTerminationAgreementTypeID = '145EC34D-3ECC-40AF-9EF3-79E3E684AEFB';\r\n\r\n static ECMContractCancelTypeID = '1848B6EC-DEC6-4389-927F-161A5B321BCE';\r\n static ECMContractCancelTypeName = 'ECMContractCancel';\r\n\r\n static PkIncomingTypeID = '0CA52091-FD54-4E72-BFBA-B31CA18DE901';\r\n static PkIncomingTypeName = 'PkIncoming';\r\n\r\n static ArActTypeID = \"29ea1af0-4cd0-4a34-9184-8dc275672e1a\";\r\n}","import { Card, CardSection, CardRow, CardRowState,CardFileState,CardFile, CardTask,CardTaskAction } from \"tessa/cards\";\r\nimport { IControlViewModel, ICardUIExtensionContext ,ICardModel} from \"tessa/ui/cards\";\r\nimport { DotNetType, TypedField, Guid, createTypedField} from \"tessa/platform\";\r\nimport { CheckBoxViewModel, GridRowAction, GridViewModel } from \"tessa/ui/cards/controls\";\r\nimport { showMessage, showError, showNotEmpty, showLoadingOverlay} from \"tessa/ui\";\r\nimport { CdCardTypes } from \"../CdCardTypes\";\r\nimport { ValidationResult, ValidationResultBuilder, ValidationResultType } from \"tessa/platform/validation\";\r\nimport { MetadataStorage } from 'tessa';\r\nimport { UIContext, UIButton, createCardModel } from \"tessa/ui\";\r\nimport { CardNewRequest, CardService, CardRequest, CardGetFileContentRequest } from \"tessa/cards/service\";\r\nimport { ChFileCategories } from \"src/pkScripts/Helpers/ChFileCategories\";\r\nimport { showFormDialog } from 'tessa/ui/uiHost';\r\nimport { CdRequestTypes } from \"../CdRequestTypes\";\r\nimport { ArrayStorage, IStorageArray } from \"tessa/platform/storage\";\r\nimport { CdEDSHelper, CustomCertData } from \"../CdEDSHelper\";\r\nimport { CdFdProcessHelper } from \"../CdFdProcessHelper\";\r\nimport { CdExtensionHelper } from \"../CdExtensionHelper\";\r\nimport { CdRequestForMaterialsSharedHelper } from \"./CdRequestForMaterialsSharedHelper\";\r\nimport { ApproversRoleID } from \"../Dictionaries/ApproversRoleID\";\r\nimport { CdUIHelper } from \"src/cdScripts/UI/CdUIHelper\";\r\nimport { CdExecutiveSchemeSharedHelper } from \"./CdExecutiveSchemeSharedHelper\";\r\nimport { IFile } from \"tessa/files\";\r\nimport { CdDocStates } from \"../CdDocStates\";\r\nimport { CdDSSHelper } from \"../CdDSSHelper\";\r\nimport { userSession } from \"common/utility\";\r\nimport { CdFileTypes } from \"../CdFileTypes\";\r\nimport { CdExecutiveSchemeTypes } from \"../CdExecutiveSchemeTypes\";\r\nimport { ChTaskTypes } from \"src/pkScripts/Helpers/ChTaskTypes\";\r\n\r\n\r\nexport class CdGeneralDocumentationClientHelper {\r\n \r\n public static PdfForPrint: string = ' (для печати).pdf';\r\n\r\n//#region Подписание\r\n\r\n /** Проверки РД */\r\n public static async TechnicalDocumentationCheckFileAsync(card: Card, file: IFile, certificate: CustomCertData | null) {\r\n let validationResult = new ValidationResultBuilder();\r\n let unsignedHash: string | null = null;\r\n \r\n if (!card.typeId || card.typeId !== CdCardTypes.TechnicalDocumentationTypeID) {\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n\r\n // проверка Qr кода\r\n await showLoadingOverlay(async () => {\r\n let stampAdded = await this.CheckQrCode(file.lastVersion.id);\r\n if (!stampAdded) {\r\n validationResult.add(ValidationResultType.Error, \"QR-код еще не проставлен.\");\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n }, \"Проверка наличия QR-кода.\");\r\n\r\n if (validationResult.items.length > 0) {\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n\r\n // проставление штампа и добавление его в карточку\r\n try {\r\n await showLoadingOverlay(async () => {\r\n // получение файла со штампом\r\n let fileWithStamp = await this.GetRdWithWorkStampAsync(\r\n card.id,\r\n file.lastVersion.id,\r\n file.id,\r\n file.name,\r\n certificate?.ownerOrganization ?? null,\r\n certificate?.ownerName ?? null,\r\n certificate?.companyAdr ?? null);\r\n\r\n // обновление файла в карточке\r\n const fileData = new File([fileWithStamp.Blob], file.name);\r\n await file.replace(fileData, false);\r\n \r\n // хеш файла со штампом\r\n unsignedHash = fileWithStamp.UnsignedHash;\r\n }, \"Проставление штампа \\\"Выдано в производство работ\\\".\");\r\n } catch (ex) {\r\n validationResult.add(\r\n ValidationResultType.Error,\r\n 'Возникли ошибки при проставлении штампа \\\"Выдано в производство работ\\\".\\n' +\r\n \"Пожалуйста, обратитесь к администратору, приложив детальное сообщение об ошибке.\\n\" +\r\n \"Детальное сообщение можно скопировать, нажав кнопку \\\"Копировать\\\", \" +\r\n \"либо открыв его кликом по ошибке и скопировав стандартным способом.\",\r\n undefined,\r\n undefined,\r\n undefined,\r\n ValidationResult.fromError(ex).items.map(x => x.message + \"\\n\" + x.details)[0]);\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n\r\n return {Result: validationResult, UnsignedHash: unsignedHash};\r\n }\r\n\r\n /** Подписние файлов */\r\n public static async SignFilesAsync(context: ICardUIExtensionContext, tasks: ArrayStorage, taskTypes:guid[]) {\r\n let card = context.card;\r\n let unsignedFiles: {ID: string, Hash?: string | null}[] = [];\r\n\r\n // проверка наличия завершенного задания на подписани\r\n if (tasks == null) return;\r\n let task = tasks.find(t => (taskTypes.findIndex(x =>\r\n x.toLocaleLowerCase() === t.typeId.toLocaleLowerCase()) >= 0) &&\r\n t.action === CardTaskAction.Complete &&\r\n t.optionId === CdFdProcessHelper.Sign);\r\n if (task == null) return;\r\n\r\n let fileCategory =\r\n Guid.equals(card.typeId, CdCardTypes.TechnicalDocumentationTypeID)\r\n ? ChFileCategories.Approval\r\n : Guid.equals(card.typeId, CdCardTypes.PkExecutiveSchemeTypeID)\r\n ? ChFileCategories.ImplementingSchemes\r\n : Guid.equals(card.typeId, CdCardTypes.PkExecutiveDocumentationTypeID) ? ChFileCategories.DocumentID \r\n : ChFileCategories.RequestForMaterials;\r\n\r\n let categoryID = fileCategory.id;\r\n\r\n // список файлов на подписание\r\n let files: IFile[] = context.fileContainer.files\r\n .filter(x =>\r\n x.category &&\r\n x.category.id == categoryID &&\r\n !x.name.includes(this.PdfForPrint));\r\n if (files.length == 0) {\r\n \r\n showError('Нет файла в категории '+ fileCategory.caption +'.');\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n // для РД сразу выбираем сертификат для заполнения штампа\r\n let isRD = card.typeId == CdCardTypes.TechnicalDocumentationTypeID;\r\n let certificate: CustomCertData | null = null;\r\n if (isRD) {\r\n let selectedCert = await CdEDSHelper.GetCertificatePlatformAsync(context.model.edsProvider);\r\n if (!selectedCert.Certificate) {\r\n context.cancel = true;\r\n throw new Error('Не выбран сертификат.');\r\n }\r\n certificate = selectedCert.Certificate;\r\n }\r\n for (let file of files) {\r\n let technicalDocumentationResult = await CdGeneralDocumentationClientHelper.TechnicalDocumentationCheckFileAsync(\r\n card,\r\n file,\r\n certificate);\r\n if (technicalDocumentationResult.Result.items && technicalDocumentationResult.Result.items.length > 0) {\r\n showNotEmpty(technicalDocumentationResult.Result.build());\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n unsignedFiles.push({ID: file.id, Hash: technicalDocumentationResult.UnsignedHash});\r\n }\r\n\r\n // прикрепленная подпись\r\n let isAttachedSignature = await this.CheckIsAttachedSignatureAsync(card, context.fileContainer.files);\r\n\r\n // DSS подписание (с выходом из метода при успешном подписании)\r\n if (!isAttachedSignature) {\r\n let isDSS = await this.SignFilesByDSSAsync(\r\n context,\r\n userSession.UserID,\r\n categoryID,\r\n unsignedFiles.map(x => x.ID)\r\n );\r\n\r\n if (isDSS) {\r\n return;\r\n }\r\n }\r\n \r\n // CAdES подписание\r\n let edsResult = await CdEDSHelper.SignFilesAsync(\r\n context.fileContainer,\r\n context.model.edsProvider,\r\n card,\r\n unsignedFiles,\r\n !isAttachedSignature\r\n );\r\n\r\n if (!edsResult.isSuccessful) {\r\n context.cancel = true;\r\n showNotEmpty(edsResult.build());\r\n return;\r\n }\r\n\r\n // Заполнение специальных полей\r\n await this.ExecutiveDocumentationAdditionalSignFileLogicAsync(card);\r\n await this.ExecutiveSchemeAdditionalSignFileLogicAsync(card, task.typeId);\r\n await this.RequestForMaterialsAdditionalSignFileLogicAsync(card, task.rowId);\r\n }\r\n\r\n /** Проверить необходимость подписания прикрепленной подписью. */\r\n public static async CheckIsAttachedSignatureAsync(card: Card, files: readonly IFile[]): Promise {\r\n let isAttachedSignature: boolean =\r\n (card.typeId == CdCardTypes.PkExecutiveDocumentationTypeID &&\r\n card.sections.has('PkExecutiveDocumentationInfo') &&\r\n card.sections.get('PkExecutiveDocumentationInfo')?.fields.has('isExternalBuilder') &&\r\n card.sections.get('PkExecutiveDocumentationInfo')?.fields.get('isExternalBuilder') == true &&\r\n files.find(x => x.lastVersion.signatures.length > 0) == undefined) ||\r\n\r\n (card.typeId == CdCardTypes.PkExecutiveSchemeTypeID &&\r\n card.sections.has('PkExecutiveDocumentationInfo') &&\r\n card.sections.get('PkExecutiveDocumentationInfo')?.fields.has('SigningTypeID') &&\r\n card.sections.get('PkExecutiveDocumentationInfo')?.fields.get('SigningTypeID') == 1 &&\r\n card.sections.has('PkExecutiveSchemeInfo') &&\r\n card.sections.get('PkExecutiveSchemeInfo')?.fields.has('IsRenovation') &&\r\n card.sections.get('PkExecutiveSchemeInfo')?.fields.get('IsRenovation') == true &&\r\n card.sections.get('PkExecutiveSchemeInfo')?.fields.has('ExecutiveSchemeTypeID') &&\r\n card.sections.get('PkExecutiveSchemeInfo')?.fields.get('ExecutiveSchemeTypeID') == CdExecutiveSchemeTypes.GeodeticSchemeType)\r\n\r\n ? true : false;\r\n\r\n return isAttachedSignature\r\n }\r\n\r\n /** Подписание файлов через DSS. */\r\n public static async SignFilesByDSSAsync(\r\n context: ICardUIExtensionContext,\r\n userID: string,\r\n categoryID: string | null,\r\n files: string[]): Promise {\r\n let card: Card = context.card;\r\n\r\n // получаем данные для подписания\r\n const signingInfo = await CdDSSHelper.GetSigningInfoAsync(card, userID, false, true, true); \r\n \r\n // если есть данные по DSS\r\n if (signingInfo.employeeGuid1C != null && signingInfo.dssCspType != null) {\r\n for (let file of card.files.filter(x => files.includes(x.rowId))) {\r\n // подписываем файлы через DSS\r\n await CdDSSHelper.SignFilesByDssAsync(\r\n context,\r\n userID,\r\n signingInfo.externalUserGuid,\r\n signingInfo.employeeGuid1C,\r\n signingInfo.dssCspType,\r\n signingInfo.certInfo,\r\n file.name,\r\n categoryID);\r\n }\r\n \r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** Добавить роль для печатной формы в ИД. */\r\n private static async ExecutiveDocumentationAdditionalSignFileLogicAsync(card: Card) {\r\n if (card.typeId != CdCardTypes.PkExecutiveDocumentationTypeID) {\r\n return;\r\n }\r\n \r\n let pdciSection = card.sections.tryGet('PkDocumentCommonInfo');\r\n if (pdciSection) {\r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n switch (stateID) {\r\n case CdDocStates.OnApprovalSubcontractor.id:\r\n case CdDocStates.OnSigningSubcontractor.id:\r\n card.info['SignRoleID'] = 0;\r\n break;\r\n\r\n case CdDocStates.OnApprovalContractor.id:\r\n case CdDocStates.OnSigningContractor.id:\r\n card.info['SignRoleID'] = 1;\r\n break;\r\n\r\n case CdDocStates.OnApprovalGPExecutorWorks.id:\r\n case CdDocStates.OnSigningGPExecutorWorks.id:\r\n card.info['SignRoleID'] = 2;\r\n break;\r\n\r\n case CdDocStates.OnApprovalGP.id:\r\n case CdDocStates.OnSigningGP.id:\r\n card.info['SignRoleID'] = 3;\r\n break;\r\n\r\n case CdDocStates.OnApprovalAuthorSupervision.id:\r\n case CdDocStates.OnSigningAuthorSupervision.id:\r\n card.info['SignRoleID'] = 4;\r\n break;\r\n\r\n case CdDocStates.OnApprovalCustomer.id:\r\n case CdDocStates.OnSigningCustomer.id:\r\n card.info['SignRoleID'] = 5;\r\n break;\r\n\r\n case CdDocStates.OnApprovalOperatingOrganization.id:\r\n case CdDocStates.OnSigningOperatingOrganization.id:\r\n card.info['SignRoleID'] = 6;\r\n break;\r\n\r\n case CdDocStates.OnApprovalASEngeneer.id:\r\n card.info['SignRoleID'] = 8;\r\n break;\r\n\r\n default:\r\n card.info['SignRoleID'] = -1;\r\n }\r\n }\r\n }\r\n \r\n /** Добавить роль для печатной формы в ИС. */\r\n private static async ExecutiveSchemeAdditionalSignFileLogicAsync(card: Card, taskTypeID: string) {\r\n if (card.typeId != CdCardTypes.PkExecutiveSchemeTypeID) {\r\n return;\r\n }\r\n\r\n if (taskTypeID == ChTaskTypes.PkSignerAgreementTypeID) {\r\n card.info['WithRole'] = true;\r\n }\r\n }\r\n \r\n /** Добавить роль для печатной формы в заявках на материалы. */\r\n private static async RequestForMaterialsAdditionalSignFileLogicAsync(card: Card, taskID: string) {\r\n if (card.typeId != CdCardTypes.PkRequestForMaterialsTypeID) {\r\n return;\r\n }\r\n\r\n card.info['WithRole'] = true;\r\n card.info['RoleTaskID'] = createTypedField(taskID, DotNetType.Guid);;\r\n }\r\n\r\n /** Проверка на наличие Qr кода у файла. */\r\n private static async CheckQrCode(versionRowID: string) {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.CdCheckQrCodeFile;\r\n request.info[\"FileVersionID\"] = createTypedField(versionRowID, DotNetType.Guid);\r\n\r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n\r\n if (!response.info!.Result ||\r\n !response.info!.Result.$value) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Сформировать штамп для РД */\r\n public static async GetRdWithWorkStampAsync(\r\n cardID: string,\r\n versionRowID: string,\r\n fileID: string,\r\n fileName: string,\r\n certCompany: string | null,\r\n certOwner: string | null,\r\n certAdr: string | null) {\r\n let unsignedHash: string | null = null;\r\n\r\n const cardGetFileContentRequest = new CardGetFileContentRequest();\r\n cardGetFileContentRequest.fileTypeName = CdFileTypes.GetInWorkStampType;\r\n cardGetFileContentRequest.cardId = cardID;\r\n cardGetFileContentRequest.versionRowId = versionRowID;\r\n cardGetFileContentRequest.fileId = fileID;\r\n cardGetFileContentRequest.fileName = fileName;\r\n cardGetFileContentRequest.info[\"CertCompany\"] = createTypedField(certCompany, DotNetType.String);\r\n cardGetFileContentRequest.info[\"CertOwner\"] = createTypedField(certOwner, DotNetType.String);\r\n cardGetFileContentRequest.info[\"CertAdr\"] = createTypedField(certAdr, DotNetType.String);\r\n cardGetFileContentRequest.info[\"Date\"] = createTypedField(new Date(), DotNetType.DateTime);\r\n cardGetFileContentRequest.info[\"WithHash\"] = createTypedField(true, DotNetType.Boolean);\r\n\r\n const cardGetFileContentResponse = await CardService.instance.getFileContent(cardGetFileContentRequest);\r\n\r\n if (!cardGetFileContentResponse.validationResult.isSuccessful) {\r\n throw new Error('Ошибка при получении файла со штампом (' + versionRowID + '): ' + cardGetFileContentResponse.validationResult.build().toString());\r\n }\r\n\r\n if (cardGetFileContentResponse.content == null ||\r\n cardGetFileContentResponse.size === 0) {\r\n throw new Error('Ошибка при получении файла со штампом (' + versionRowID + '): Вернулся пустой файл.');\r\n }\r\n\r\n // TODO TIV: В вебе не работает Response.Info\r\n //unsignedHash = cardGetFileContentResponse.info.UnsignedHash;\r\n\r\n return {Blob: cardGetFileContentResponse.content, UnsignedHash:unsignedHash};\r\n }\r\n\r\n//#endregion\r\n\r\n public static async FillTableApprovers(card: Card, roles: ApprovementRoles[] | null | undefined, matchingSectionName: string, matchingRolesSectionName: string)\r\n {\r\n let mSection = card.sections.tryGet(matchingSectionName);\r\n let rSection = card.sections.tryGet(matchingRolesSectionName);\r\n if (!mSection)\r\n {\r\n return;\r\n }\r\n if (mSection.rows.length != 0)\r\n {\r\n for (let i = mSection.rows.length - 1; i >= 0; i--) { \r\n if (mSection.rows[i].state === CardRowState.Inserted)\r\n mSection.rows.splice(i, 1);\r\n else mSection.rows[i].state = CardRowState.Deleted;\r\n } \r\n } \r\n //очищаем полностью роли\r\n if (rSection) {\r\n for (let j = rSection.rows.length - 1; j >= 0; j--) {\r\n let row = rSection.rows[j];\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n } \r\n else\r\n {\r\n rSection.rows.remove(row);\r\n }\r\n }\r\n }\r\n\r\n if (roles == null) return;\r\n if (roles.length > 0){\r\n roles.forEach(role => {\r\n const esmSectionRow = new CardRow(); \r\n esmSectionRow.rowId = Guid.newGuid(); \r\n esmSectionRow.set(\"RoleID\", role.RoleID, DotNetType.Guid);\r\n esmSectionRow.set(\"RoleName\", role.RoleName, DotNetType.String);\r\n esmSectionRow.set(\"SpecialRoleID\", role.SpecialRoleID, DotNetType.Guid);\r\n esmSectionRow.set(\"SpecialRoleName\", role.SpecialRoleName, DotNetType.String);\r\n esmSectionRow.set(\"LegalEntityID\",null, DotNetType.Guid);\r\n esmSectionRow.set(\"LegalEntityExternalID\", null, DotNetType.Int32);\r\n esmSectionRow.set(\"LegalEntityName\", null, DotNetType.String);\r\n esmSectionRow.set(\"Order\", role.DefaultOrder, DotNetType.Int32);\r\n esmSectionRow.state = CardRowState.Inserted;\r\n mSection!.rows.push(esmSectionRow);\r\n });\r\n } \r\n } \r\n\r\n public static FieldsObjectsLogic(card: Card, model: ICardModel) {\r\n let ediSection = card.sections.tryGet('PkExecutiveDocumentationInfo'); \r\n\r\n // Заполнение ЖК для при смене объекта\r\n const objects = model.controls.get('Objects') as GridViewModel;\r\n if (objects && ediSection && ediSection.fields.has('ResidentialComplexID')) {\r\n objects.rowInitializing.add(e => {\r\n e.row.fieldChanged.add(e1 => {\r\n if (e1.fieldName === 'ResidentialComplexID') {\r\n let residentialComplexID = e1.fieldValue as guid | undefined;\r\n if (residentialComplexID && ediSection) {\r\n ediSection.fields.set('ResidentialComplexID', createTypedField(residentialComplexID, DotNetType.Guid));\r\n }\r\n } else if (e1.fieldName === 'RegionID') {\r\n let regionID = e1.fieldValue as guid | undefined;\r\n if (regionID && ediSection) {\r\n ediSection.fields.set('RegionID', createTypedField(regionID, DotNetType.Guid));\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n public static async GetRoles(card: Card, ...additionalFilters: ((roles: ApprovementRoles[])=>void)[])\r\n {\r\n let roles: ApprovementRoles[] = []; \r\n \r\n try\r\n {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetApprovementRoles;\r\n request.info[\"CardTypeID\"] = createTypedField(card.typeId, DotNetType.Guid);\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n let result: [{RoleID: any, RoleName: any, SpecialRoleID: any, SpecialRoleName: any, DefaultOrder: any, ApprovementRolesCriteria: IStorageArray[], ApprovementRolesActiveCriteria: IStorageArray[]}] = response.info.Roles;\r\n if (result.length>0)\r\n {\r\n for (let index = 0; index < result.length; index++) {\r\n let role = result[index];\r\n roles.push( {\r\n RoleID: role.RoleID!.$value\r\n , RoleName: role.RoleName!.$value\r\n , SpecialRoleID: role.SpecialRoleID!=null?role.SpecialRoleID.$value:null\r\n , SpecialRoleName: role.SpecialRoleName!=null?role.SpecialRoleName.$value:null \r\n , DefaultOrder: role.DefaultOrder!.$value\r\n , ApprovementRolesCriteria: role.ApprovementRolesCriteria==null?null:role.ApprovementRolesCriteria.map(x=> { \r\n let a: ApprovementRolesCriteria = \r\n {\r\n RowID: x[\"RowID\"]!.$value,\r\n SectionName: x[\"SectionName\"]!.$value,\r\n FdCriteriaOperatorID : null,\r\n FieldName : x[\"FieldName\"]!.$value,\r\n Value: x[\"Value\"]!.$value,\r\n }; \r\n return a;\r\n })\r\n , ApprovementRolesActiveCriteria: role.ApprovementRolesActiveCriteria==null?null:role.ApprovementRolesActiveCriteria.map(x=> { \r\n let a: ApprovementRolesCriteria = \r\n {\r\n RowID: x[\"RowID\"]!.$value,\r\n SectionName: x[\"SectionName\"]!.$value,\r\n FieldName : x[\"FieldName\"]!.$value,\r\n FdCriteriaOperatorID : x[\"FdCriteriaOperatorID\"]!.$value,\r\n Value: x[\"Value\"]!.$value,\r\n }; \r\n return a;\r\n })\r\n });\r\n }\r\n }\r\n \r\n this.FilterRolesByActiveCriteria(card, roles);\r\n }\r\n catch (err)\r\n {\r\n showError(err);\r\n } \r\n additionalFilters.forEach(filter=>filter(roles))\r\n return roles;\r\n } \r\n\r\n private static async FilterRolesByActiveCriteria(card: Card, roles: ApprovementRoles[])\r\n {\r\n for (let i = roles.length - 1; i >= 0; i--)\r\n {\r\n if (roles[i].ApprovementRolesActiveCriteria == null || roles[i].ApprovementRolesActiveCriteria?.length == 0)\r\n {\r\n continue;\r\n }\r\n\r\n // проверка в зависимости от оператора \r\n roles[i]!.ApprovementRolesActiveCriteria!.forEach(item => {\r\n let operatorId = item.FdCriteriaOperatorID;\r\n switch (operatorId)\r\n {\r\n case (FdCriteriaOperators.NonEquals as number):\r\n case (FdCriteriaOperators.Equals as number):\r\n {\r\n let section = card.sections.tryGet(item.SectionName);\r\n if (!section|| !section.fields.has(item.FieldName))\r\n {\r\n return;\r\n }\r\n\r\n var value = section!.fields.get(item.FieldName)!.toString().toLowerCase();\r\n if (value != item.Value!.toLowerCase() && operatorId == (FdCriteriaOperators.Equals as number))\r\n {\r\n roles.splice(i, 1);\r\n }\r\n else if (value == item.Value!.toLowerCase() && operatorId == (FdCriteriaOperators.NonEquals as number))\r\n {\r\n roles.splice(i, 1);\r\n }\r\n\r\n break;\r\n }\r\n\r\n default:\r\n {\r\n break;\r\n }\r\n }\r\n });\r\n } \r\n }\r\n\r\n private static async GetApprovers(card: Card, roles: ApprovementRoles[] | null)\r\n {\r\n let roleIds = roles!.map(x => x.RoleID);\r\n let roleApprovers: RoleApprovers[] = [];\r\n let direction : guid|null = null;\r\n let investProjectInfoSection: CardSection | undefined = card.sections.tryGet('PkInvestProjectInfo'); \r\n if (investProjectInfoSection)\r\n direction = investProjectInfoSection.fields.tryGet(\"DirectionID\");\r\n \r\n try\r\n {\r\n const request = new CardRequest();\r\n let rolesList = roleIds.map(x=>createTypedField(x, DotNetType.Guid));\r\n request.requestType = CdRequestTypes.GetApprovementParticipants;\r\n request.cardId = card.id;\r\n request.info[\"DirectionID\"] = direction==null?null:createTypedField(direction, DotNetType.Guid);\r\n request.info[\"Roles\"] = rolesList\r\n\r\n // находим все необходимые поля из критериев ролей согласования\r\n let approvementRolesCriteria : ApprovementRolesCriteria[] = [];\r\n if (roles)\r\n {\r\n let rolesCriteria = roles!.filter(r => r.ApprovementRolesCriteria && r.ApprovementRolesCriteria.length>0)!.map(x => x.ApprovementRolesCriteria)!.filter(x=>x!.length>0);\r\n let totalApprovementRolesCriteria = (rolesCriteria!=null && rolesCriteria.length>0)?rolesCriteria!.reduce(self=>self):[];\r\n \r\n for (let i = 0; i < totalApprovementRolesCriteria!.length; i++) {\r\n let cur_criteria = totalApprovementRolesCriteria![i];\r\n if (approvementRolesCriteria.some(x => x!.SectionName == cur_criteria.SectionName && x.FieldName == cur_criteria.FieldName))\r\n continue;\r\n\r\n else \r\n { \r\n approvementRolesCriteria.push(cur_criteria);\r\n }\r\n }\r\n }\r\n\r\n // добавляем все в запрос\r\n for (let i = 0; i < approvementRolesCriteria!.length; i++)\r\n {\r\n let item = approvementRolesCriteria[i]; \r\n var key = item.SectionName+\"_\"+item.FieldName;\r\n \r\n let section = card.sections.tryGet(item.SectionName);\r\n if (section)\r\n { \r\n if (section.fields.has(item.FieldName))\r\n {\r\n request.info[key] = section.fields.get(item.FieldName)!+\"\";\r\n }\r\n }\r\n }\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n \r\n let participants = response.info.Participants;\r\n if (!participants || participants!.length == 0) return;\r\n if (!roleIds) return;\r\n roleIds.forEach(role => {\r\n let roleParticipants = participants.filter(x=>x.RoleID!.$value==role);\r\n\r\n if (!roleParticipants || roleParticipants!.length==0) return; \r\n let approversList:{ID:guid,Name:string}[] = []\r\n for (let k = 0; k < roleParticipants.length; k++) { \r\n approversList.push({ID:roleParticipants[k][\"ParticipantID\"]!.$value,Name:roleParticipants[k][\"ParticipantName\"]!.$value}); \r\n }\r\n roleApprovers.push( {\r\n RoleID: role\r\n , OrderNumber: createTypedField(null, DotNetType.String)\r\n , OrderDate: createTypedField(null, DotNetType.DateTime)\r\n , Approvers: approversList\r\n } );\r\n });\r\n if (await this.GetApproversByRdDivisionRoles(card,roleIds,roleApprovers)!=true) return;\r\n if (await this.GetApproversLegalEntityInfo(roleApprovers)!=true) return;\r\n }\r\n catch (err)\r\n {\r\n showError(err);\r\n } \r\n return roleApprovers;\r\n } \r\n\r\n\r\n public static async GetApproversLegalEntityInfo(roleApprovers:RoleApprovers[])\r\n {\r\n if (!roleApprovers|| roleApprovers.length==0) return true;\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetLegalEntity; \r\n\r\n request.info[\"Approvers\"] = roleApprovers\r\n .map(x=> x.Approvers)\r\n .reduce((x,y)=>x.concat(y),[])\r\n .map(x=>x.ID)\r\n .filter((val, i, arr) => arr.findIndex(x => x === val) === i)\r\n .map(x=>`('${x}')`)\r\n .join(',');\r\n\r\n if (request.info[\"Approvers\"]==='') return true;\r\n \r\n const response = await CardService.instance.request(request);\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n \r\n let userInfoList = response.info.UsersInfo;\r\n if (!userInfoList || userInfoList!.length == 0) return false;\r\n\r\n roleApprovers.forEach(ra => {\r\n ra.Approvers.forEach(appr => {\r\n let userInfo = userInfoList.find(x=>x.RoleID!.$value==appr.ID && (x.RoleKCKID || (x.RolePosition && x.RolePosition!==\"\")));\r\n if (userInfo)\r\n {\r\n if(userInfo.RoleKCKID) appr.OrganizationKCKID = userInfo.RoleKCKID!.$value\r\n if(userInfo.RoleKCKExternalID) appr.OrganizationKCKExternalID = userInfo.RoleKCKExternalID!.$value\r\n if(userInfo.RoleKCKName) appr.OrganizationKCKName = userInfo.RoleKCKName!.$value\r\n if(userInfo.RoleEntityID) appr.LegalEntityID = userInfo.RoleEntityID!.$value\r\n if(userInfo.RoleEntityName) appr.LegalEntityName = userInfo.RoleEntityName!.$value\r\n if(userInfo.RolePosition) appr.Position = userInfo.RolePosition!.$value\r\n }\r\n })\r\n }) \r\n\r\n return true;\r\n }\r\n\r\n\r\n public static async GetApproversByRdDivisionRoles(card: Card, roles: guid[], roleApprovers:RoleApprovers[])\r\n { \r\n if (!Guid.equals(card.typeId, CdCardTypes.PkRequestForMaterialsTypeID)) return true;\r\n let objectList = CdExtensionHelper.GetObjectListFromPkObjectListSection(card);\r\n if (!objectList|| objectList.length == 0) return false; \r\n\r\n let rolesByDivision = roles.filter(x=>CdRequestForMaterialsSharedHelper.RolesFromRdDivision.some(r=>Guid.equals(r.guid, x)));\r\n\r\n for (let index = 0; index < rolesByDivision.length; index++) {\r\n const roleID = rolesByDivision[index];\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.GetUsersForTable;\r\n request.info[\"IdpTeamRoleExtID\"] = createTypedField((CdRequestForMaterialsSharedHelper.RolesFromRdDivision.find(x=>Guid.equals(roleID, x.guid))!.number), DotNetType.Int32);\r\n request.info[\"ObjectList\"] = objectList;\r\n\r\n const response = await CardService.instance.request(request);\r\n showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return null;\r\n }\r\n let users: [{RoleID, RoleName}] = response.info.Users;\r\n let approversList:{ID:guid,Name:string}[] = []\r\n for (let i = 0; i < users.length; i++) {\r\n let userInfo = users[i];\r\n if (userInfo.RoleName.$value.length === 0) continue;\r\n approversList.push({ID:userInfo.RoleID.$value,Name:userInfo.RoleName.$value}); \r\n }\r\n let roleApprover = roleApprovers.find(x => x.RoleID == roleID);\r\n if (roleApprover != null)\r\n roleApprover.Approvers.concat(approversList);\r\n else\r\n roleApprovers.push({\r\n RoleID: roleID\r\n , OrderNumber: createTypedField(null, DotNetType.String)\r\n , OrderDate: createTypedField(null, DotNetType.DateTime)\r\n , Approvers: approversList\r\n });\r\n } \r\n return true;\r\n }\r\n\r\n /**Получает роли согласования по запросу, заполняет таблицу ими, затем получает и заполняет согласующих по этим ролям\r\n * !При использовании фильтров на роли не присваивать массиву новую ссылку *(ar=ar.filter)\r\n */\r\n public static async FillApprovers(card: Card, ...additionalFilters: ((roles: ApprovementRoles[])=>void)[]) {\r\n let roles = await this.GetRoles(card, ...additionalFilters);\r\n await this.FillTableApprovers(card, roles, 'PkApprovementMatching', 'PkApprovementMatchingRoles');\r\n let roleIds = roles!.map(x => x.RoleID);\r\n this.GetApprovers(card.clone(), roles).then(\r\n (result => this.SetApprovers(card, roleIds, result, 'PkApprovementMatching', 'PkApprovementMatchingRoles'))\r\n );\r\n }\r\n\r\n /** Заполнение юридического лица в ТЧ #25698 */\r\n public static ApprovementMatchingRolesChanged(model: ICardModel, matchingSection: string, matchingRolesSection: string) {\r\n let edrSection = model.card.sections.tryGet(matchingRolesSection);\r\n let edmSection = model.card.sections.tryGet(matchingSection);\r\n if (!edrSection || !edmSection) return;\r\n edrSection.rows.forEach(r => {\r\n this.AddApproverFieldChanged(r,model,matchingSection);\r\n });\r\n edrSection.rows.collectionChanged.add(e => { \r\n if (e.added.length > 0) {\r\n let row = e.added[0];\r\n this.AddApproverFieldChanged(row,model,matchingSection);\r\n } \r\n });\r\n\r\n let matchingTable = model.controls.get(\"Matching\") as GridViewModel;\r\n \r\n matchingTable.rowValidating.add(e => {\r\n let matchingRowID = e.row.rowId;\r\n let section = model.card.sections.get(matchingRolesSection);\r\n\r\n if (!section || !matchingRowID) {\r\n return;\r\n }\r\n\r\n let cardRow = new CardRow();\r\n \r\n section.rows.forEach(r => {\r\n if (r.tryGet(\"MatchingRowID\") == matchingRowID && r.state != CardRowState.Deleted) {\r\n cardRow = r;\r\n }\r\n });\r\n\r\n this.FillLegalEntityField(cardRow ?? new CardRow(), model.card, matchingRowID, matchingSection);\r\n });\r\n }\r\n\r\n public static AddApproverFieldChanged(row: CardRow, model: ICardModel, matchingSection: string)\r\n {\r\n row.fieldChanged.add(() => {\r\n \r\n if (! row.tryGet(\"RoleKCKExternalID\") \r\n || !row.tryGet(\"RoleKCKID\") \r\n || !row.tryGet(\"RoleEntityID\") \r\n || !row.tryGet(\"RoleEntityName\") \r\n || !row.tryGet(\"RoleKCKName\")) return; \r\n { \r\n let matchingRowID = row.tryGetField('MatchingRowID');\r\n if (matchingRowID) {\r\n this.FillLegalEntityField(row, model.card, matchingRowID.$value, matchingSection); \r\n }\r\n }\r\n }); \r\n }\r\n\r\n /** Проверить таблицу согласующих */\r\n protected static CheckApprovers(context: ICardUIExtensionContext, matchingSectionName: string, matchingRolesSectionName: string, excludeRolesFromCheck : T[] = []) {\r\n try {\r\n let card = context.model.card;\r\n\r\n // Проверить что в карточке имеются секции\r\n let edmSection = card.sections.tryGet(matchingSectionName);\r\n let edrSection = card.sections.tryGet(matchingRolesSectionName);\r\n if (!edmSection || !edrSection) {\r\n return false;\r\n }\r\n var rSectionRows = edrSection.rows.filter(x => x.state != CardRowState.Deleted);\r\n var mSectionRows = edmSection.rows.filter(x => x.state != CardRowState.Deleted);\r\n\r\n if (rSectionRows.length == 0 || mSectionRows.length == 0)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить согласующих');\r\n return false;\r\n }\r\n\r\n if (excludeRolesFromCheck!=null && excludeRolesFromCheck.length>0)\r\n {\r\n mSectionRows = mSectionRows.filter(x=>excludeRolesFromCheck.some(r=> x.tryGet(\"RoleID\")==r))\r\n }\r\n\r\n let rolesToFill: string[] = [];\r\n mSectionRows\r\n .filter(x =>\r\n x.tryGet(\"RoleID\") != CdExecutiveSchemeSharedHelper.GetRoles()[3].IntID\r\n )\r\n .forEach(r => {\r\n let roleID: number | null = r.tryGet(\"RoleID\");\r\n if (r.tryGet(\"RoleID\") != CdRequestForMaterialsSharedHelper.ApprovementRoles.AdditionalApproversID && rSectionRows.find(x => x.tryGet(\"MatchingRowID\") == r.rowId) == null) {\r\n if (roleID == 4) {\r\n // Авторский надзор проверяется, если стоит флаг \"Работы выполнены с отклонениями от РД\". TES-5659\r\n let executiveSchemeInfo: CardSection | undefined = card.sections.tryGet('PkExecutiveSchemeInfo');\r\n if (executiveSchemeInfo) {\r\n let performedWithDeviation: boolean | null = executiveSchemeInfo.fields.tryGet('PerformedWithDeviation');\r\n if (performedWithDeviation !== null && performedWithDeviation !== undefined && performedWithDeviation) {\r\n rolesToFill.push(r.tryGet(\"RoleName\"))\r\n }\r\n }\r\n }\r\n else {\r\n rolesToFill.push(r.tryGet(\"RoleName\"))\r\n }\r\n }\r\n });\r\n \r\n if (rolesToFill.length > 0)\r\n {\r\n context.validationResult.add(ValidationResultType.Error, 'Необходимо заполнить согласующих для следующих ролей: '+ rolesToFill.join(', '));\r\n }\r\n\r\n return true;\r\n } catch (ex) {\r\n context.validationResult.add(ValidationResultType.Error, 'Ошибка при проверке согласующих.\\nТекст ошибки: ' + ex.message + ' ' + ex.stack);\r\n return false;\r\n }\r\n }\r\n\r\n public static CheckApprovementTableOrder(context: ICardUIExtensionContext) {\r\n let card = context.card;\r\n let edmSection = card.sections.tryGet('PkApprovementMatching');\r\n if (edmSection &&\r\n edmSection.rows.findIndex(x => x.state === CardRowState.Modified ||\r\n x.state === CardRowState.Inserted) >= 0) {\r\n this.GetRoles(card).then(result => {\r\n let step = 0;\r\n result!.sort((a, b) => a.DefaultOrder - b.DefaultOrder);\r\n for (let i = 0; i < result!.length; i++) {\r\n let roleIDIndex = edmSection!.rows.findIndex(x => x.has('RoleID') &&\r\n x.get('RoleID') === result![i].RoleID);\r\n if (roleIDIndex>=0){\r\n edmSection!.rows[roleIDIndex].set('Order', createTypedField(step, DotNetType.Int32));\r\n step++;\r\n } \r\n }\r\n }\r\n );\r\n } \r\n }\r\n\r\n\r\n public static async ConfirmApproversChangesDialog(invalidApprovers: InvalidApprovers[]) {\r\n let errorMessage = \"Ошибка при проверке согласующих. Пожалуйста, обратитесь к администратору.\"\r\n let result = true;\r\n let uiContext = UIContext.current;\r\n let editor = uiContext.cardEditor;\r\n if (uiContext == null || editor == null ) {\r\n showError(errorMessage);\r\n return;\r\n }\r\n\r\n let meta = MetadataStorage.instance.cardMetadata;\r\n const dialogsType = meta.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n showError(errorMessage);\r\n return;\r\n }\r\n\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return;\r\n }\r\n const windowCardModel = createCardModel(response.card, response.sectionRows);\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'ConfirmApproversChanges');\r\n if (!dialogForm) {\r\n showError(errorMessage);\r\n return;\r\n }\r\n\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel,\r\n (_form) => {\r\n let section = _form.cardModel.card.sections.getOrAdd(\"PkInvalidApprovers\");\r\n for (let i = 0; i < invalidApprovers.length; i++)\r\n {\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"Role\", createTypedField(invalidApprovers[i].Role, DotNetType.String));\r\n newRow.set(\"Invalid\", createTypedField(invalidApprovers[i].Invalid, DotNetType.String));\r\n newRow.set(\"Valid\", createTypedField(invalidApprovers[i].Valid, DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n section.rows.push(newRow);\r\n } \r\n },\r\n [\r\n new UIButton('Изменить согласующих', async (btn) => { \r\n result = false;\r\n btn.close();\r\n }),\r\n new UIButton('Оставить без изменений', (btn) => {\r\n result = true;\r\n btn.close();\r\n }),\r\n ]\r\n );\r\n return result;\r\n }\r\n \r\n\r\n protected static async GetInvalidApprovers(card: Card, roleApprovers: RoleApprovers[]|undefined|null, matchingSectionName: string, matchingRolesSectionName: string )\r\n {\r\n let invalidApprovers: InvalidApprovers[] = [];\r\n let errorMessage = \"\";\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet(matchingSectionName);\r\n let edRolesSection: CardSection | undefined = card.sections.tryGet(matchingRolesSectionName);\r\n if (!edMatchingSection) return; \r\n if (!edRolesSection || edRolesSection.rows.length==0)\r\n {\r\n errorMessage = \"Согласующие не заполнены\";\r\n return errorMessage;\r\n }\r\n if (roleApprovers==undefined)\r\n return;\r\n\r\n edMatchingSection.rows.forEach(row=>{\r\n let roleID = row.tryGetField(\"RoleID\")!.$value;\r\n if (!roleID) return;\r\n let roleApprover = roleApprovers!.find(x=>x.RoleID==roleID);\r\n if (!roleApprover) return;\r\n let matchingRoles = edRolesSection!.rows.filter(x=>x.tryGetField(\"MatchingRowID\")!.$value==row.rowId).map(x=> ({RoleID:x.tryGetField(\"RoleID\")!.$value,RoleName: x.tryGetField(\"RoleName\")!.$value }) );\r\n if (roleApprover.Approvers.findIndex(x=>matchingRoles.findIndex(mr=>mr.RoleID===x.ID)==-1)!=-1)\r\n {\r\n invalidApprovers.push({\r\n RoleID: roleID\r\n , Role: row.tryGetField(\"RoleName\")!.$value\r\n , Valid:roleApprover.Approvers.map(x=>x.Name).join(\";\")\r\n , Invalid: matchingRoles.map(x=>x.RoleName as string).join(\";\")\r\n });\r\n }\r\n }); \r\n \r\n return invalidApprovers;\r\n }\r\n\r\n /** Проверить добавление нового согласующего в ТЧ */\r\n public static CheckAddNewMatchingRoles(context: ICardUIExtensionContext, matchingSectionName: string, matchingRolesSectionName: string) {\r\n try {\r\n let card = context.model.card;\r\n let edmSection = card.sections.tryGet(matchingSectionName);\r\n let edrSection = card.sections.tryGet(matchingRolesSectionName);\r\n if (edmSection && edrSection &&\r\n (edmSection.rows.findIndex(x =>\r\n x.state === CardRowState.Modified) >= 0 ||\r\n edrSection.rows.findIndex(x =>\r\n x.state === CardRowState.Inserted ||\r\n x.state === CardRowState.Modified) >= 0)) {\r\n context.validationResult.add(ValidationResultType.Error, 'Сохраните карточку перед тем как продолжить');\r\n return false;\r\n }\r\n return true;\r\n } catch (ex) {\r\n context.validationResult.add(ValidationResultType.Error, 'Ошибка при проверке добавления новых согласующих.\\nТекст ошибки: ' + ex.message + ' ' + ex.stack);\r\n return false;\r\n }\r\n }\r\n\r\n protected static async SetApprovers(card: Card, roles: T[],roleApprovers: RoleApprovers[]|null|undefined, matchingSectionName: string, matchingRolesSectionName: string)\r\n { \r\n let edRolesSection: CardSection | undefined = card.sections.tryGet(matchingRolesSectionName);\r\n let edMatchingSection: CardSection | undefined = card.sections.tryGet(matchingSectionName);\r\n\r\n // удаляем согласующих, если строка роли была удалена\r\n if (!edRolesSection || !edMatchingSection) return; \r\n for (let j = edRolesSection.rows.length - 1; j >= 0; j--) {\r\n let row = edRolesSection.rows[j]; \r\n if (!edMatchingSection.rows.some(x =>\r\n x.state != CardRowState.Deleted &&\r\n row.has('MatchingRowID') &&\r\n row.tryGet('MatchingRowID') === x.rowId &&\r\n x.has('RoleID'))) \r\n {\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n else\r\n {\r\n edRolesSection.rows.remove(row);\r\n }\r\n } \r\n }\r\n\r\n roles.forEach(role => {\r\n if (!edRolesSection || !edMatchingSection) return;\r\n for (let j = edRolesSection.rows.length - 1; j >= 0; j--) {\r\n let row = edRolesSection.rows[j]; \r\n let edmRow = edMatchingSection.rows.find(x =>\r\n x.state != CardRowState.Deleted &&\r\n row.has('MatchingRowID') &&\r\n row.tryGet('MatchingRowID') === x.rowId &&\r\n x.has('RoleID') &&\r\n x.tryGet('RoleID') === role);\r\n if (!edmRow) {\r\n continue;\r\n }\r\n else\r\n {\r\n if (row.state !== CardRowState.Inserted) {\r\n row.state = CardRowState.Deleted;\r\n }\r\n else\r\n {\r\n edRolesSection.rows.remove(row);\r\n }\r\n } \r\n }\r\n\r\n let row = edMatchingSection.rows.find(x=>x.tryGetField('RoleID')!.$value === role && x.state!= CardRowState.Deleted);\r\n if (!row) return;\r\n \r\n let currentRoleApprover = roleApprovers!.find(x=>x.RoleID===role)\r\n if (currentRoleApprover==null) return;\r\n row.set('OrderNumber', currentRoleApprover.OrderNumber);\r\n row.set('OrderDate', currentRoleApprover.OrderDate);\r\n currentRoleApprover.Approvers.forEach(approver => {\r\n\r\n let newRow = new CardRow(); \r\n \r\n newRow.rowId = Guid.newGuid();\r\n newRow.set(\"MatchingRowID\", createTypedField(row!.rowId, DotNetType.Guid));\r\n newRow.set(\"RoleID\", createTypedField(approver.ID, DotNetType.Guid));\r\n newRow.set(\"RoleName\", createTypedField(approver.Name, DotNetType.String));\r\n\r\n if (approver.OrganizationKCKID) {\r\n newRow.set(\"RoleKCKID\", createTypedField(approver.OrganizationKCKID, DotNetType.Guid)); \r\n row!.set(\"LegalEntityID\", createTypedField(approver.OrganizationKCKID, DotNetType.Guid)); \r\n }\r\n if (approver.OrganizationKCKName) {\r\n newRow.set(\"RoleKCKName\", createTypedField(approver.OrganizationKCKName, DotNetType.String)); \r\n row!.set(\"LegalEntityName\", createTypedField(approver.OrganizationKCKName, DotNetType.String)); \r\n }\r\n if (approver.OrganizationKCKExternalID) {\r\n newRow.set(\"RoleKCKExternalID\", createTypedField(approver.OrganizationKCKExternalID, DotNetType.Int64)); \r\n row!.set(\"LegalEntityExternalID\", createTypedField(approver.OrganizationKCKExternalID, DotNetType.Int64)); \r\n }\r\n if (approver.LegalEntityID) newRow.set(\"RoleEntityID\", createTypedField(approver.LegalEntityID, DotNetType.Guid));\r\n if (approver.LegalEntityName) newRow.set(\"RoleEntityName\", createTypedField(approver.LegalEntityName, DotNetType.String));\r\n if (approver.Position) newRow.set(\"RolePosition\", createTypedField(approver.Position, DotNetType.String));\r\n newRow.state = CardRowState.Inserted;\r\n card.sections.get(matchingRolesSectionName)!.rows.push(newRow);\r\n }); \r\n\r\n }); \r\n }\r\n\r\n public static MatchingVisabilityLogic (context: ICardUIExtensionContext){\r\n let card : Card = context.model.card;\r\n if (!card.sections.tryGet(\"PkObjectList\"))\r\n return;\r\n let matchingControl : IControlViewModel | undefined = context.model.controls.get(\"Matching\");\r\n if (!matchingControl)\r\n return;\r\n let matchingTable = matchingControl as GridViewModel;\r\n matchingTable.rowInitializing.add(async e =>{\r\n if (!this.CheckObjectsAreFilled(card)){\r\n if (card.typeId == CdCardTypes.PkExecutiveDocumentationTypeID)\r\n showMessage(\"Для заполнения таблицы согласования выберите объект\");\r\n if (card.typeId == CdCardTypes.PkExecutiveSchemeTypeID)\r\n showMessage(\"Для заполнения таблицы подписания выберите объект\");\r\n e.cancel = true;\r\n } \r\n else if(e.row.has(\"RoleID\") && e.row.get(\"RoleID\") == ApproversRoleID.Customer)\r\n { \r\n let objectList = card.sections.tryGet(\"PkObjectList\");\r\n if (context.card.hasChanges() && objectList && objectList.rows.some(r => r.state != CardRowState.None && r.has(\"ObjectID\")))\r\n {\r\n showMessage(\"Перед заполнением согласующих данной роли, сохраните карточку\");\r\n e.cancel = true;\r\n }\r\n \r\n let isExternalBuilder = CdUIHelper.GetUIControl(context, \"isExternalBuilder\"); \r\n let approversControl = e.rowModel?.controls.get(\"Approvers\");\r\n if (!approversControl) return;\r\n let approversTable = approversControl as GridViewModel;\r\n\r\n approversTable!.rowInvoked.add(async ee => {\r\n if (!isExternalBuilder || isExternalBuilder.isChecked === false) return;\r\n let currentRow = ee.row\r\n if (ee.action === GridRowAction.Inserted)\r\n { \r\n \r\n let pkExecutiveDocumentationRolesSection = card.sections.getOrAdd(\"PkExecutiveDocumentationRoles\");\r\n ee.cancel = true;\r\n let newRow = new CardRow();\r\n newRow.rowId = Guid.newGuid(); \r\n newRow.set(\"RoleID\", createTypedField(\"11111111-1111-1111-1111-111111111111\", DotNetType.Guid));\r\n if (await CdGeneralDocumentationClientHelper.addExternalBuilderApproverDialog(newRow)) \r\n {\r\n newRow.set(\"MatchingRowID\", e.row.rowId, DotNetType.Guid); \r\n newRow.state = CardRowState.Inserted;\r\n pkExecutiveDocumentationRolesSection!.rows.push(newRow);\r\n }\r\n }\r\n if (ee.action === GridRowAction.Opening){ \r\n \r\n ee.cancel = true; \r\n if (await CdGeneralDocumentationClientHelper.addExternalBuilderApproverDialog(currentRow)) \r\n currentRow.state = CardRowState.Modified;\r\n }\r\n\r\n }); \r\n }\r\n });\r\n }\r\n\r\n public static async addExternalBuilderApproverDialog(approverRow: CardRow): Promise {\r\n \r\n const dialogsType = MetadataStorage.instance.cardMetadata.getCardTypeByName('PkDialogs');\r\n if (!dialogsType) {\r\n return false;\r\n }\r\n const dialogForm = dialogsType.forms.find(x => x.name === 'AddExternalBuilderApproverDialog');\r\n if (!dialogForm) {\r\n return false;\r\n }\r\n const request = new CardNewRequest();\r\n request.cardTypeId = dialogsType.id;\r\n const response = await CardService.instance.new(request);\r\n response.card.id = Guid.newGuid();\r\n await showNotEmpty(response.validationResult.build());\r\n if (!response.validationResult.isSuccessful) {\r\n return false;\r\n }\r\n let result = false;\r\n const windowCardModel = createCardModel(response.card, response.sectionRows); \r\n let sectionRow = windowCardModel.card.sections.getOrAdd(\"PkExternalBuilderApproverVirtual\").fields; \r\n if (approverRow)\r\n {\r\n if (approverRow.has(\"RoleName\")) sectionRow.set(\"RoleName\", createTypedField(approverRow.get(\"RoleName\"), DotNetType.String));\r\n if (approverRow.has(\"RolePosition\")) sectionRow.set(\"RolePosition\", createTypedField(approverRow.get(\"RolePosition\"), DotNetType.String));\r\n if (approverRow.has(\"RoleKCKID\")) sectionRow.set(\"PartnerID\", createTypedField(approverRow.get(\"RoleKCKID\"), DotNetType.Guid)); \r\n if (approverRow.has(\"RoleKCKExternalID\")) sectionRow.set(\"PartnerExternalID\", createTypedField(approverRow.get(\"RoleKCKExternalID\"), DotNetType.Int64));\r\n if (approverRow.has(\"RoleKCKName\")) sectionRow.set(\"PartnerName\", createTypedField(approverRow.get(\"RoleKCKName\"), DotNetType.String));\r\n }\r\n await showFormDialog(\r\n dialogForm,\r\n windowCardModel, \r\n null,\r\n [\r\n new UIButton('Cохранить', async (btn) => {\r\n let msg = \"\";\r\n if (sectionRow.get(\"RoleName\") == null) msg += \"Поле \\\"Согласующий\\\" обязательно для заполнения!\\r\\n\";\r\n if (sectionRow.get(\"PartnerID\") == null) msg += \"Поле \\\"Организация\\\" обязательно для заполнения!\\r\\n\";\r\n\r\n if (msg !== \"\") \r\n {\r\n showError(\"Для заполнения таблицы подписания выберите объект\");(msg);\r\n return;\r\n }\r\n approverRow.set(\"RoleName\", createTypedField(sectionRow.get(\"RoleName\"), DotNetType.String));\r\n approverRow.set(\"RolePosition\", createTypedField(sectionRow.get(\"RolePosition\"), DotNetType.String));\r\n approverRow.set(\"RoleKCKID\", createTypedField(sectionRow.get(\"PartnerID\"), DotNetType.Guid));\r\n approverRow.set(\"RoleKCKExternalID\", createTypedField(sectionRow.get(\"PartnerExternalID\"), DotNetType.Int64));\r\n approverRow.set(\"RoleKCKName\", createTypedField(sectionRow.get(\"PartnerName\"), DotNetType.String));\r\n\r\n result = true; \r\n btn.close();\r\n })\r\n ]\r\n );\r\n return result;\r\n }\r\n\r\n /** Проверка после завершении задания */\r\n public static async CheckFieldsAfterTaskComplete(context: ICardUIExtensionContext, tasks: ArrayStorage,checkTaskTypes: guid[], checkTaskOptions: guid[]\r\n , categoryList: (guid|null)[], excludeRolesFromCheck?: guid[], taskTypesSigning?: guid[]) {\r\n let deletedTaskIndex = tasks.findIndex(x => x.state === CardRowState.Deleted);\r\n if (deletedTaskIndex >= 0) {\r\n let checkAddedFiles: boolean = await this.CheckAddedFiles(context, 1,checkTaskTypes,checkTaskOptions,categoryList);\r\n let checkAddNewMatchingRoles: boolean = this.CheckAddNewMatchingRoles(context,'PkApprovementMatching','PkApprovementMatchingRoles');\r\n \r\n if (!checkAddedFiles ||\r\n !checkAddNewMatchingRoles \r\n ) {\r\n context.cancel = true;\r\n return;\r\n }\r\n }\r\n\r\n deletedTaskIndex = tasks.findIndex(x =>\r\n x.state === CardRowState.Deleted &&\r\n (checkTaskTypes.find(xt=>xt===x.typeId)!=null) &&\r\n (checkTaskOptions.find(xt=>xt===x.optionId)!=null));\r\n \r\n if (deletedTaskIndex >= 0) {\r\n\r\n\r\n let checkContentFile: boolean = await CdUIHelper.CheckContentFileAsync(context.model.card);\r\n let checkApprovers: boolean = this.CheckApprovers(context,'PkApprovementMatching','PkApprovementMatchingRoles', excludeRolesFromCheck);\r\n\r\n if (!checkContentFile) {\r\n context.cancel = true;\r\n return;\r\n }\r\n\r\n //убираем проверку актуальности согласующих\r\n // let roles = (await this.GetRoles(context.model.card))!.map(x=>x.RoleID); \r\n\r\n // var approvers = await this.GetApprovers(context.model.card,roles);\r\n // if (approvers!.length>0)\r\n // {\r\n // let invalidApprovers = await this.GetInvalidApprovers(context.model.card,approvers,'PkApprovementMatching','PkApprovementMatchingRoles');\r\n // if (invalidApprovers!.length>0)\r\n // { \r\n // let result = await this.ConfirmApproversChangesDialog(invalidApprovers as InvalidApprovers[])\r\n // if (result==undefined)\r\n // {\r\n // context.cancel = true;\r\n // return;\r\n // }\r\n // else if (result as boolean == false) {\r\n // context.cancel = true;\r\n // this.SetApprovers(context.uiContext!.cardEditor!.cardModel!.card,roles.filter(x=>(invalidApprovers as InvalidApprovers[]).findIndex(ia=>ia.RoleID==x)!=-1)\r\n // ,approvers\r\n // ,'PkApprovementMatching','PkApprovementMatchingRoles')\r\n \r\n // return;\r\n // }\r\n \r\n // }\r\n // }\r\n\r\n if (!checkApprovers) {\r\n context.cancel = true;\r\n return;\r\n } \r\n } \r\n if (taskTypesSigning!=null && taskTypesSigning.length>0)\r\n await this.SignFilesAsync(context, tasks, taskTypesSigning);\r\n }\r\n\r\n public static Base64ToBlob(base64Data, contentType) {\r\n contentType = contentType || '';\r\n let sliceSize = 1024;\r\n let byteCharacters = atob(base64Data);\r\n let bytesLength = byteCharacters.length;\r\n let slicesCount = Math.ceil(bytesLength / sliceSize);\r\n let byteArrays = new Array(slicesCount);\r\n for (let sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\r\n let begin = sliceIndex * sliceSize;\r\n let end = Math.min(begin + sliceSize, bytesLength);\r\n let bytes = new Array(end - begin);\r\n for (let offset = begin, i = 0 ; offset < end; ++i, ++offset) {\r\n bytes[i] = byteCharacters[offset].charCodeAt(0);\r\n }\r\n byteArrays[sliceIndex] = new Uint8Array(bytes);\r\n }\r\n return new Blob(byteArrays, { type: contentType });\r\n }\r\n\r\n /** Проверка файлов\r\n * from: 0 - ui, 1 - задание */\r\n public static async CheckAddedFiles(context: ICardUIExtensionContext, from: number,checkTaskTypes: guid[], checkTaskOptions: guid[], categoryList: (guid|null)[]) {\r\n let card: Card = context.model.card;\r\n let result: boolean = true;\r\n\r\n switch (from) {\r\n // Проверяемые расширения файлов\r\n case 0:\r\n const availibleFileExtensions: string[] = [ 'DOCX', 'DOC', 'XLSX', 'XLS', 'PDF', 'SGN' ];\r\n for (let i = 0; i < card.files.length; i++) {\r\n let file = card.files[i];\r\n if (file.state === CardFileState.Deleted ||\r\n file.state === CardFileState.None ||\r\n file.name.toLowerCase() === 'история согласования.html') continue;\r\n let correctFile: boolean = false;\r\n for (let j = 0; j < availibleFileExtensions.length; j++) {\r\n let ext = availibleFileExtensions[j];\r\n if (file.name.toUpperCase().indexOf('.' + ext) !== -1) {\r\n correctFile = true;\r\n break;\r\n }\r\n }\r\n if (!correctFile) {\r\n showError('Приложенные файлы должены быть в формате: ' + availibleFileExtensions.join(', '));\r\n context.cancel = true;\r\n return true;\r\n }\r\n }\r\n break;\r\n // Проверка наличия файлов в категориях\r\n case 1:\r\n // Проверка, что все файлы сохранены\r\n if (context.card.tasks.findIndex(x =>\r\n x.state === CardRowState.Deleted &&\r\n checkTaskTypes.find(xt=>xt===x.typeId)!=null) >= 0 &&\r\n card.files.findIndex(x =>\r\n x.state === CardFileState.Inserted ||\r\n x.state === CardFileState.Modified ||\r\n x.state === CardFileState.ModifiedAndReplaced ||\r\n x.state === CardFileState.Replaced) >= 0) {\r\n context.validationResult.add(ValidationResultType.Error, 'Пожалуйста, сохраните карточку перед тем как продолжить.');\r\n return false;\r\n }\r\n // Проверка файлов в категориях\r\n let pdciSection: CardSection | undefined = card.sections.tryGet('PkDocumentCommonInfo');\r\n if ( !pdciSection) break;\r\n \r\n let stateID: number | null | undefined = pdciSection.fields.tryGet('StateID');\r\n if (!stateID) break;\r\n for (let i = 0; i < context.card.tasks.length; i++) {\r\n let task = context.card.tasks[i];\r\n if (task.state !== CardRowState.Deleted ||\r\n !task.optionId) continue;\r\n \r\n if (checkTaskTypes.findIndex(x=>task.typeId.toLowerCase()===x) >= 0 &&\r\n checkTaskOptions.findIndex(x=>task.optionId!.toLowerCase()===x) >= 0) { \r\n \r\n for (let j = 0; j < categoryList.length; j++) {\r\n let categoryId = categoryList[j]; \r\n\r\n let fileIndex = card.files.findIndex(x =>\r\n x.categoryId !== null &&\r\n x.categoryId.toLowerCase() === categoryId!.toLowerCase());\r\n if (fileIndex === -1) {\r\n let category = ChFileCategories.FileCategories.find(x => x.id === categoryId);\r\n if (category)\r\n context.validationResult.add(ValidationResultType.Error, 'Загрузите файл в категорию \"' + category.caption + '\"');\r\n result = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n\r\n return result;\r\n} \r\n\r\n /** Проверить что подписанный файл изменялся и пользователь согласен с изменениями */\r\n public static async CheckEditSignedFile(card: Card) {\r\n let hasSign: boolean = false;\r\n for (let i = 0; i < card.files.length; i++) {\r\n let file: CardFile = card.files[i];\r\n if ((file.state === CardFileState.Deleted ||\r\n file.state === CardFileState.ModifiedAndReplaced ||\r\n file.state === CardFileState.Replaced) &&\r\n !hasSign) {\r\n const request = new CardRequest();\r\n request.requestType = CdRequestTypes.SignInfo;\r\n request.info[\"OnlySignAvailability\"] = createTypedField(true, DotNetType.Boolean);\r\n request.info[\"FileID\"] = createTypedField(file.rowId, DotNetType.Guid);\r\n request.info[\"TypeID\"] = createTypedField(card.typeId, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n if (response.validationResult.build().isSuccessful) {\r\n let result: boolean | null = response.info!.Result.$value;\r\n if (result) {\r\n hasSign = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (hasSign) {\r\n let dialogResult: boolean = confirm('Внимание! При редактировании документа электронные подписи станут недействительными. Документ потребуется подписывать повторно. Подтверждаете необходимость отредактировать файл?');\r\n if (!dialogResult) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n /** Заполнение юридического лица в ТЧ #25698 */\r\n public static FillLegalEntityField(row: CardRow, card: Card, matchingRowID: string, matchingSectionName:string) {\r\n let section = card.sections.tryGet(matchingSectionName);\r\n if (!section) return;\r\n let mRow = section.rows.find(x => x.rowId.toLowerCase() === matchingRowID.toLowerCase());\r\n if (!mRow) return;\r\n if (!row.has('RoleKCKExternalID') || !row.has('RoleKCKID') || !row.has('RoleKCKName') ||\r\n row.tryGet('RoleKCKExternalID') === -1 || row.tryGet('RoleKCKID') === '00000000-0000-0000-0000-000000000000' || row.tryGet('RoleKCKName') === '' || row.tryGet('RoleKCKExternalID') === null) {\r\n mRow.set('LegalEntityExternalID', null);\r\n mRow.set('LegalEntityID', null);\r\n mRow.set('LegalEntityName', null);\r\n }\r\n else {\r\n mRow.set('LegalEntityExternalID', createTypedField(row.tryGet('RoleKCKExternalID'), DotNetType.Int64));\r\n mRow.set('LegalEntityID', createTypedField(row.tryGet('RoleKCKID'), DotNetType.Guid));\r\n mRow.set('LegalEntityName', createTypedField(row.tryGet('RoleKCKName'), DotNetType.String));\r\n }\r\n }\r\n\r\n /**Скрываем таблицу подписантов, если объект не заполнен */\r\n public static CheckObjectsAreFilled(card: Card) : boolean{\r\n if (card.sections.tryGet(\"PkObjectList\")!.rows.length > 0)\r\n return true;\r\n else\r\n return false;\r\n }\r\n\r\n /**Ищем последнюю запись в строковой секции */\r\n public static GetLast(card: Card) : boolean{\r\n if (card.sections.tryGet(\"PkObjectList\")!.rows.length > 0)\r\n return true;\r\n else\r\n return false;\r\n }\r\n}\r\n\r\n\r\nexport interface RoleApprovers{\r\n RoleID: T;\r\n OrderNumber: TypedField;\r\n OrderDate: TypedField;\r\n Approvers: {ID:guid,Name:string,OrganizationKCKID?:guid,OrganizationKCKName?:string,OrganizationKCKExternalID?:number,LegalEntityID?:guid,LegalEntityName?:string,Position?:string}[]\r\n} \r\n\r\nexport interface InvalidApprovers{\r\n RoleID: T;\r\n Role: string;\r\n Invalid: string;\r\n Valid: string;\r\n} \r\n\r\nexport interface ApprovementRoles{\r\n RoleID: guid;\r\n RoleName: string;\r\n SpecialRoleID: guid;\r\n SpecialRoleName: string;\r\n DefaultOrder: number;\r\n ApprovementRolesCriteria: ApprovementRolesCriteria[] | null;\r\n ApprovementRolesActiveCriteria: ApprovementRolesCriteria[] | null;\r\n} \r\n\r\nexport interface ApprovementRolesCriteria{\r\n RowID: guid;\r\n SectionName: string; \r\n FdCriteriaOperatorID: number | null;\r\n FieldName: string;\r\n Value: string;\r\n} \r\n\r\nexport class Objects {\r\n public ObjectsId: Array;\r\n}\r\nexport class FillMatching{\r\n public CopiedID: DotNetType.Guid;\r\n public ID: DotNetType.Guid;\r\n public IsExists: boolean\r\n}\r\n\r\n\r\n\r\nenum FdCriteriaOperators\r\n{\r\n Equals = 0,\r\n NonEquals = 1,\r\n GreatThan = 2,\r\n LessThan = 3,\r\n GreatOrEquals = 4,\r\n LessOrEquals = 5,\r\n IsNull = 6,\r\n IsNotNull = 7,\r\n Between = 8,\r\n Contains = 9,\r\n StartsWith = 10,\r\n EndsWith = 11,\r\n IsTrue = 12,\r\n IsFalse = 13,\r\n InRole = 14,\r\n ContainsAll = 15,\r\n ContainsAny = 16,\r\n NotContainsAny = 17,\r\n NotInRole = 18,\r\n ContainsInTable = 19,\r\n ContainsInRow = 20\r\n}\r\n","export class ChRequestTypes {\r\n\r\n static PkChangeDiadocFolderInCards = \"1DFF1F94-531D-4B6E-A6AA-78AFEB026929\";\r\n static SendMailIntoSupport = \"DA59F130-84B0-4E66-90C8-A42C506FD01F\";\r\n static ArActContractPartnersForFlag = \"6D57AD72-87DF-4C20-9256-9B203C250B97\";\r\n static GetRegionCityAndProjectByObject = \"4C90AAE7-AA20-4A4C-80B0-FB9412107BE6\";\r\n static ArActContractArticleOhr = \"DC143C58-31ED-47A3-AC6F-55AC1C3AAA30\";\r\n static ArActContractArticleIdp = \"618C013B-C7E1-4FD8-817B-C473ADE6ACB9\";\r\n static PkGetBookkeepers = \"919C1F1E-B53C-4DED-8B94-FE441D80BD94\";\r\n static ArDocumentIDPVirtualInfo = \"664940FD-44F8-4FD6-BE91-1883359C6351\";\r\n static ArDocumentKind = \"EB01185C-1EEA-47CE-A3F9-1E7B5BE8193E\";\r\n static GetCaseOfTheTopLevel = \"2D0CA46B-6C82-4E2A-AAC6-0ECB78E86C93\";\r\n static GetInstructionUrl = \"A4146DC3-FF46-4B3A-8BA1-BEE35322B3A7\";\r\n static PkProtocolAssignmentTable = \"4A67E514-F5A0-4CA1-A8CD-E74C61A18EB0\";\r\n static GetIsAdministrator = \"C7399F82-1D49-4A3B-808F-11118AF29B75\";\r\n static GetCrmDeal = \"B0409732-D624-4D53-97FB-8C4629171CD9\";\r\n static GetPacketDocsInfo = \"33063FD5-FDF3-44CD-8D27-BF030DCB3EB8\";\r\n static PkOutgoingMailSenderRequest = \"EFDBAB98-7517-40F1-9539-DB19A4306D02\";\r\n static PkGetExecutionDateByDocKind = \"1B484AE3-25E1-473B-8AF3-74C92BE7ACF2\";\r\n static CheckUserInRole = \"27458E64-F356-4BB7-9F99-7C96A05F24FB\";\r\n static PkProtocolGetRole = \"9D21500A-1E9F-4C71-9228-D8A78032ADB5\";\r\n static GetPayerByContract = \"D423A0C4-C578-486E-80FF-F8B1C2F91FF1\";\r\n static ChUpdateOutgoingStamp = \"9B0F9F11-4C61-408E-8A59-C334391A6F67\";\r\n static AttachCorrespondencePrintForm = \"77A9F5B1-BB3E-4931-A8BA-CB65B125EA9D\";\r\n static ChSendEmailNotificationToClient = \"EE856DC2-C812-43A3-AB32-75F9314A2B39\";\r\n static PkUpdateDataInMDS = \"9C489DCE-15DD-402B-8021-0AEF018C87BC\";\r\n}","export class ChTaskTypes {\r\n\r\n static PkPerformerTaskTypeID = \"2b11f708-441f-462e-b6ab-0cba1a077d47\";\r\n static PkRejectApprovalTypeID = \"fc8fb668-5ca4-4c9a-81b6-ed3092425e4c\";\r\n static PkStartAgreementProcessTypeID = \"71eff303-6c52-44b7-9c50-fb161cc0875b\";\r\n static PkRdndUdoTaskTypeID = \"568721da-cc11-44c7-b0c5-d8a47872550c\";\r\n static PkConsiderationTypeID = \"e230b87d-d837-4448-bcd3-a018acdda81b\";\r\n static PkUksApprovalTaskTypeID = \"e135de09-4f50-4d2b-b29b-11ccde5aaefc\";\r\n static PkProjectGroupApprovalTaskTypeID = \"a5d25a39-042a-4bbb-93cf-2cbbe3924fd0\";\r\n static PkGipApprovalTaskTypeID = \"5f132e2c-0e77-49c2-9cc1-6623b332ba98\";\r\n static PkOspApprovalTaskTypeID = \"f3562560-8d12-4efe-8471-57b5a726c984\";\r\n static PkDepProductApprovalTaskTypeID = \"ca4842e0-3f6f-429b-990e-4c78413e2221\";\r\n static PkExternalApprovalTaskTypeID = \"a840f4f8-433a-42fd-8428-833c162de75b\";\r\n static PkApproversAgreementTypeID = \"945b9439-0008-4d22-a3c3-003d1f05ae1b\";\r\n static PkApprovalTerminationTypeID = \"915a02b9-ea8f-4f28-924c-24218ad560B7\";\r\n static PkApprovalLawyerTypeID = \"84a30847-dcae-42d9-805d-33fe6d6dd0aa\";\r\n static PkApprovalOfTopsTypeID = \"96b2afe8-3988-417b-a10b-bbd1899945fb\";\r\n static PkOSSEmployeeCommentTypeID = \"9e3e26af-a5e8-4cc4-88fd-b095c979d7b1\";\r\n static PkRefundDDYTypeID = \"820b46bc-7d6d-4613-94d3-9618f9549c65\";\r\n static PkRevaluationTypeID = \"5d7c5f5d-6c35-4249-9e98-83acb35a524b\";\r\n static PkSendingByPostTypeID = \"11c33723-f8a2-4961-83ae-575f284db265\";\r\n static PkEditTypeID = \"a0844e7b-c0c2-4627-9d8c-4693c7a8d043\";\r\n static PkReviewLawyerTypeID = \"a98c998f-c277-4389-b6ef-1eec6025aeab\";\r\n static PkCheckCustomerDecisionTypeID = \"dbe8c80d-0a21-4ddb-8cf4-96e146594be9\";\r\n static PkRevaluationForPDKPTypeID = \"0ac01ea0-f316-476e-83cf-b2e4e3c96428\";\r\n static PkApprovalByCoordinator = \"22fe6d78-ed4c-4eae-aee1-161245e53748\";\r\n static PkStartPerformanceProcessTaskTypeID = \"4AF6051D-14BE-457C-941D-224344E1A7D2\";\r\n static PkSignerAgreementTypeID = \"DB4EE9F6-979A-46C6-B1E2-337299C0E2E8\";\r\n static PkAcceptPackageOfDocumentsTypeID = \"64f1df62-f840-4d32-b637-88c4bfb27412\";\r\n static PkSendAPackageOfDocumentsTypeID = \"4f71b6e1-969e-4bb8-a4e1-37a19c303767\";\r\n static PkRegisterFirstTastTypeID = \"cfc05f7a-b38f-4275-ba09-cf2f1161150b\";\r\n static PkReviewOutgoingTypeID = \"1876268f-ba04-4305-84af-4a01acaeffdc\";\r\n static PkSignTypeSelectingTypeID = \"b8063ff9-14b3-47c3-8087-9f5472e34565\";\r\n static PkSendToContractorTypeID = \"de059f98-a7f1-4f33-b45e-57bedb4eaf5d\";\r\n static PkSignerDiadocTypeID = \"64DF2A78-2445-41F1-A199-1C328A718034\";\r\n }","import { FileType } from \"tessa/files\";\r\n\r\n// Типы файлов\r\nexport class CdFileTypes {\r\n public static DefaultFileType: FileType = new FileType('ab387c69-fd62-0655-bbc3-b879e433a143', '$CardTypes_TypesNames_File');\r\n public static VirtualAdded: FileType = new FileType('ab387c69-fd62-0655-bbc3-b879e433a143', 'VirtualAddedFile');\r\n static EnhanceSignType = 'EnhanceSign';\r\n static GetInWorkStampType = 'GetInWorkStamp';\r\n static GetCSVReportType = 'GetCSVReport';\r\n static GetFileForPrintType = 'GetFileForPrint';\r\n static GetCompiledPdfType = \"GetCompiledPdf\";\r\n static GetZipArchiveType = \"GetZipArchive\";\r\n static GetExecutiveDocumentationRegistryFile = \"GetExecutiveDocumentationRegistryFile\";// Файл \"Реестр ИД\". TES-7477 \r\n static GetZipArchiveWithoutDirectoriesType = \"GetZipArchiveWithoutDirectories\";\r\n}","module.exports = tessa.tessa.ui.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 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}","\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}","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}","export class ECMRequestTypes {\r\n /** Определение связанной с категорией договора Статьи БК */\r\n static ECMGetCostItemByCategoryRequestID = '7C248788-EC83-4279-B40F-78A4EA8B97E0';\r\n\r\n /** Проверка доступности создать доп соглашение или СоР через тайл. */\r\n static VisibilityTileCreateContractDocument = 'D8BEE905-3278-438A-B716-5B08E1F619F7';\r\n\r\n /** Относится ли КА КСК к периметру ПИК-Комфорт. */\r\n static ECMIsPartnerInComfortPerimeterRequestID = 'FBF438EE-AE90-4EB4-AA97-D5288B53C8FC';\r\n\r\n /** Перезапускает указанный процесс.*/\r\n static ECMResetProcessesRequestID = 'BDE829B3-FCDA-4460-823F-A140EC2A4B06';\r\n\r\n /** Определяет вхождение в роль*/\r\n static PkIsUserBelongsToRole = '3D6D95D8-1773-423D-89C2-2CC75D5C017D';\r\n}","// Типы исполнительных схем\r\nexport class CdExecutiveSchemeTypes {\r\n // Геодезическая\r\n public static GeodeticSchemeType: guid = '0f8d8698-cabc-47d9-9a3a-0e8e75f32e96';\r\n // Негеодезическая\r\n public static NonGeodeticSchemeType : guid = 'eabd83d9-10cb-4fb0-af64-2c9fe604e372'; \r\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","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 } 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}","/**\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","import { CardFileType } from 'tessa/cards';\r\nimport { showMessage } from 'tessa/ui';\r\nimport { ICardUIExtensionContext, CardUIExtension, ICardModel } from 'tessa/ui/cards';\r\nimport { FileDelegateFiltering, FileListViewModel } from 'tessa/ui/cards/controls';\r\nimport { DefaultFormMainViewModel } from 'tessa/ui/cards/forms';\r\n\r\nexport class VirtualFilesOfFirstDocumentUIExtension extends CardUIExtension {\r\n\r\n public initialized(context: ICardUIExtensionContext) {\r\n let model: ICardModel;\r\n\r\n if (context == null || !(model = context.model!) || model.cardType.name !== 'Contract') {\r\n return;\r\n }\r\n\r\n const controlFiles = model.controls.get('Files') as FileListViewModel;\r\n const controlFilesFirstDoc = model.controls.get('FilesFirstDoc') as FileListViewModel;\r\n\r\n // Удаляем файлы первичных документов из первого контрола\r\n controlFiles.selectedFiltering = new FileDelegateFiltering('', '',\r\n file => (file.model.type as CardFileType).name !== \"VirtualFileOfFirstDocument\"\r\n );\r\n\r\n // Удаляем файлы не первичных документов из второго контрола\r\n controlFilesFirstDoc.selectedFiltering = new FileDelegateFiltering('', '',\r\n file => (file.model.type as CardFileType).name === \"VirtualFileOfFirstDocument\"\r\n );\r\n\r\n // Запрещаем добавлять файлы руками на вкладке первичка.\r\n context.fileContainer.containerFileChanging.add(async e => {\r\n const file = e.added;\r\n if (!file) {\r\n return;\r\n }\r\n\r\n try {\r\n const mainForm = context.model.mainForm as DefaultFormMainViewModel;\r\n const activeTabName = mainForm.selectedTab.tabCaption;\r\n\r\n if (activeTabName === \"Первичка\") {\r\n await showMessage(\"Нельзя добавлять файлы руками.\\nЗдесь находятся файлы из первичных документов\");\r\n e.cancel = true;\r\n }\r\n }\r\n catch (e) {\r\n await showMessage(e.message);\r\n return;\r\n }\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 !== 'Contract') {\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 === \"FilesFirstDoc\") {\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 { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { VirtualFilesOfFirstDocumentUIExtension } from './VirtualFilesOfFirstDocumentUIExtension';\r\nimport { ChangeFileMenu } from './ChangeFileMenu';\r\n\r\nExtensionContainer.instance.registerExtension({extension: VirtualFilesOfFirstDocumentUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ChangeFileMenu, stage: ExtensionStage.AfterPlatform});","export class ECMDocTypes {\r\n /** Дополнительное соглашение */\r\n static SupplementaryAgreementDocTypeID = 'c935927a-7873-4066-b39a-fee21f024194';\r\n\r\n /** Дополнительное соглашение */\r\n static SupplementaryAgreementDocTypeCaption = 'Дополнительное соглашение';\r\n\r\n /** Уведомление. */\r\n static NotificationDocTypeID = '2A478DB2-D2B8-40AA-8E05-506EE00054F8';\r\n\r\n /** Техническая запись. */\r\n static TechnicalRecordDocTypeID = 'aebdf58b-75ae-4a66-8d4a-20069dacf7ac'\r\n}","import { TileExtension, ITileGlobalExtensionContext, ITile, Tile, TileEvaluationEventArgs } from 'tessa/ui/tiles';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { createCard } from 'tessa/ui/uiHost';\r\nimport { ICardModel } from 'tessa/ui/cards';\r\nimport { CardStoreMode } from 'tessa/cards';\r\nimport { LoadingOverlay } from 'tessa/ui';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { ECMDefaultCardTypes } from '../helpers/ComfortCardTypes';\r\nimport { ECMDocTypes } from '../helpers/ECMDocTypes';\r\n\r\nexport class ECMCreateBasedOnArchiveContractTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n ECMCreateBasedOnArchiveContractTileExtension.InitializeECMCreateBasedOnArchiveContractTileAsync(context);\r\n }\r\n\r\n private static CreateBasedOnArchiveContractEnableCondition(e: TileEvaluationEventArgs) {\r\n const editor = e.currentTile.context.cardEditor;\r\n let model: ICardModel;\r\n\r\n e.setIsEnabledWithCollapsing(\r\n e.currentTile,\r\n !!editor\r\n && !!(model = editor.cardModel!)\r\n && model.card.storeMode !== CardStoreMode.Insert\r\n && !model.inSpecialMode\r\n // Договор/ДС/СоР (архив ЕСУД)\r\n && \r\n (\r\n Guid.equals(model.cardType.id, ECMDefaultCardTypes.ECMContractTypeID)\r\n || Guid.equals(model.cardType.id, ECMDefaultCardTypes.ECMAdditionalAgreementTypeID)\r\n || Guid.equals(model.cardType.id, ECMDefaultCardTypes.ECMTerminationAgreementTypeID)\r\n ));\r\n }\r\n\r\n private static InitializeECMCreateBasedOnArchiveContractTileAsync(\r\n context: ITileGlobalExtensionContext\r\n ) {\r\n const contextSource = context.workspace.leftPanel.contextSource;\r\n\r\n const createBasedOnArchiveContractTile = new Tile({\r\n name: 'ECMCreateBasedOnArchiveContractTile',\r\n caption: 'Создать активный документ на основании архивного',\r\n icon: 'ta icon-thin-002',\r\n contextSource,\r\n command: async (tile) => {\r\n await ECMCreateBasedOnArchiveContractTileExtension.CreateBasedOnArchiveContractTileActionAsync(tile);\r\n },\r\n order: 100,\r\n evaluating: ECMCreateBasedOnArchiveContractTileExtension.CreateBasedOnArchiveContractEnableCondition,\r\n });\r\n\r\n context.workspace.leftPanel.tiles.push(createBasedOnArchiveContractTile);\r\n }\r\n\r\n private static async CreateBasedOnArchiveContractTileActionAsync(\r\n tile: ITile) {\r\n const uiContext = tile.context;\r\n const editor = uiContext.cardEditor;\r\n if (!editor) {\r\n return;\r\n }\r\n\r\n const cardTypeID = editor.cardModel?.card.typeId;\r\n\r\n let targetCardTypeID: guid;\r\n let targetCardTypeName: string;\r\n\r\n const requestInfo: IStorage = {};\r\n\r\n const baseCard = editor.cardModel!.card;\r\n requestInfo['ECMCreateBasedOnArchiveContractBaseCardID'] = createTypedField(baseCard.id, DotNetType.Guid);\r\n\r\n // Договор\r\n if (Guid.equals(cardTypeID, ECMDefaultCardTypes.ECMContractTypeID))\r\n {\r\n targetCardTypeID = ECMDefaultCardTypes.ContractTypeID;\r\n targetCardTypeName = ECMDefaultCardTypes.ContractTypeName;\r\n }\r\n // ДС\r\n else if (Guid.equals(cardTypeID, ECMDefaultCardTypes.ECMAdditionalAgreementTypeID))\r\n {\r\n targetCardTypeID = ECMDefaultCardTypes.ECMContractDocumentTypeID;\r\n targetCardTypeName = ECMDefaultCardTypes.ECMContractDocumentTypeName;\r\n\r\n // для ДС также укажем тип документа, т.к. у него их несколько\r\n requestInfo['docTypeID'] = createTypedField(ECMDocTypes.SupplementaryAgreementDocTypeID, DotNetType.Guid);\r\n requestInfo['docTypeTitle'] = createTypedField(ECMDocTypes.SupplementaryAgreementDocTypeCaption, DotNetType.String);\r\n }\r\n // СоР\r\n else if (Guid.equals(cardTypeID, ECMDefaultCardTypes.ECMTerminationAgreementTypeID))\r\n {\r\n targetCardTypeID = ECMDefaultCardTypes.ECMContractCancelTypeID;\r\n targetCardTypeName = ECMDefaultCardTypes.ECMContractCancelTypeName;\r\n }\r\n\r\n await LoadingOverlay.instance.show(async (splashResolve) => {\r\n await createCard({\r\n cardTypeId: targetCardTypeID,\r\n cardTypeName: targetCardTypeName,\r\n context: tile.context,\r\n info: requestInfo,\r\n creationModeDisplayText: '$UI_Tiles_CreateCard_Suffix_BasedOn',\r\n splashResolve\r\n });\r\n });\r\n }\r\n}","export class ECMTileNames {\r\n /** Верхний тайл создания ДС. */\r\n static CreateAdditionalAgreementRoot = 'CreateAdditionalAgreementRoot';\r\n\r\n /** Вложенный тайл создания ДС - Дополнительное соглашение. */\r\n static CreateAdditionalAgreementSupplementaryAgreement = 'CreateAdditionalAgreementSupplementaryAgreement';\r\n\r\n /** Вложенный тайл создания ДС - Уведомление. */\r\n static CreateAdditionalAgreementNotification = 'CreateAdditionalAgreementNotification';\r\n\r\n //** Вложенный тайл создания ДС - Техническая запись. */\r\n static CreateAdditionalAgreementTechnicalRecord = 'CreateAdditionalAgreementTechnicalRecord';\r\n\r\n /** Тайл создания СоР. */\r\n static CreateContractCancel = 'CreateContractCancel';\r\n}","export class ECMStorageInfoKeys {\r\n /** ID родительского договора, откуда создается ДС или СоР. */\r\n static ECMParentContractID = 'ECMParentContractID';\r\n\r\n /** Внешний ID КА. */\r\n static ECMPartnerExternalID = 'ECMPartnerExternalID';\r\n\r\n /** КА относится к периметру ПИК-Комфорт. */\r\n static ECMPartnerInComfortPerimeter = \"ECMPartnerInComfortPerimeter\";\r\n}","import { TileExtension, ITileGlobalExtensionContext, ITile, Tile, enableWhenVisibleInCardHandler, TileGroups } from 'tessa/ui/tiles';\r\nimport { createTypedField, DotNetType, Guid } from 'tessa/platform';\r\nimport { createCard } from 'tessa/ui/uiHost';\r\nimport { LoadingOverlay, showNotEmpty } from 'tessa/ui';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { ECMDefaultCardTypes } from '../helpers/ComfortCardTypes';\r\nimport { ECMTileNames } from '../helpers/ECMTileNames';\r\nimport { CardService, CardRequest } from 'tessa/cards/service';\r\nimport { ECMRequestTypes } from '../helpers/ECMRequestTypes';\r\nimport { ECMStorageInfoKeys } from '../helpers/ECMStorageInfoKeys';\r\nimport { ECMDocTypes } from '../helpers/ECMDocTypes';\r\nimport { CardRow, CardRowState } from 'tessa/cards';\r\n\r\n/** Содает карточку доп соглашения из карточки договора. */\r\nexport class ECMCreateContractDocumentTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n ECMCreateContractDocumentTileExtension.InitializeECMCreateBasedOnArchiveContractTileAsync(context);\r\n }\r\n\r\n private static InitializeECMCreateBasedOnArchiveContractTileAsync(\r\n context: ITileGlobalExtensionContext\r\n ) {\r\n const panel = context.workspace.leftPanel;\r\n const contextSource = panel.contextSource;\r\n\r\n const tile = new Tile({\r\n name: ECMTileNames.CreateAdditionalAgreementRoot,\r\n caption: 'Создать доп. соглашение',\r\n icon: 'ta icon-thin-064',\r\n contextSource,\r\n group: TileGroups.Cards,\r\n order: 52,\r\n evaluating: enableWhenVisibleInCardHandler,\r\n tiles: [\r\n new Tile({\r\n name: ECMTileNames.CreateAdditionalAgreementSupplementaryAgreement,\r\n caption: 'Дополнительное соглашение',\r\n icon: 'ta icon-thin-064',\r\n contextSource,\r\n command: async (tile) => {\r\n await ECMCreateContractDocumentTileExtension.CreateAdditionalAgreementCardAsync(tile);\r\n },\r\n group: TileGroups.Cards,\r\n order: 1,\r\n evaluating: enableWhenVisibleInCardHandler\r\n }),\r\n\r\n new Tile({\r\n name: ECMTileNames.CreateAdditionalAgreementNotification,\r\n caption: 'Уведомление',\r\n icon: 'ta icon-thin-064',\r\n contextSource,\r\n command: async (tile) => {\r\n await ECMCreateContractDocumentTileExtension.CreateAdditionalAgreementCardAsync(tile);\r\n },\r\n group: TileGroups.Cards,\r\n order: 2,\r\n evaluating: enableWhenVisibleInCardHandler\r\n }),\r\n\r\n new Tile({\r\n name: ECMTileNames.CreateAdditionalAgreementTechnicalRecord,\r\n caption: 'Техническая запись',\r\n icon: 'ta icon-thin-064',\r\n contextSource,\r\n command: async (tile) => {\r\n await ECMCreateContractDocumentTileExtension.CreateAdditionalAgreementCardAsync(tile);\r\n },\r\n group: TileGroups.Cards,\r\n order: 3,\r\n evaluating: enableWhenVisibleInCardHandler\r\n }),\r\n ]\r\n });\r\n\r\n panel.tiles.push(tile);\r\n }\r\n\r\n /** Создает карточку доп соглашения. */\r\n private static async CreateAdditionalAgreementCardAsync(tile: ITile) {\r\n const uiContext = tile.context;\r\n const editor = uiContext.cardEditor;\r\n if (!editor) {\r\n return;\r\n }\r\n\r\n const contractCard = editor.cardModel!.card;\r\n\r\n // Дополнительная проверка возможности создания допника\r\n const request = new CardRequest();\r\n request.requestType = ECMRequestTypes.VisibilityTileCreateContractDocument;\r\n request.cardId = contractCard.id;\r\n request.cardTypeId = ECMDefaultCardTypes.ECMContractDocumentTypeID\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n await showNotEmpty(response.validationResult.build());\r\n return;\r\n }\r\n\r\n const info: IStorage = {};\r\n\r\n if (tile.name == ECMTileNames.CreateAdditionalAgreementSupplementaryAgreement)\r\n {\r\n info['docTypeID'] = createTypedField(ECMDocTypes.SupplementaryAgreementDocTypeID, DotNetType.Guid);\r\n info['docTypeTitle'] = createTypedField(ECMDocTypes.SupplementaryAgreementDocTypeCaption, DotNetType.String);\r\n }\r\n\r\n if (tile.name == ECMTileNames.CreateAdditionalAgreementNotification)\r\n {\r\n info['docTypeID'] = createTypedField(ECMDocTypes.NotificationDocTypeID, DotNetType.Guid);\r\n info['docTypeTitle'] = createTypedField(ECMDocTypes.SupplementaryAgreementDocTypeCaption, DotNetType.String);\r\n }\r\n\r\n if (tile.name == ECMTileNames.CreateAdditionalAgreementTechnicalRecord)\r\n {\r\n info['docTypeID'] = createTypedField(ECMDocTypes.TechnicalRecordDocTypeID, DotNetType.Guid)\r\n info['docTypeTitle'] = createTypedField(ECMDocTypes.SupplementaryAgreementDocTypeCaption, DotNetType.String);\r\n }\r\n\r\n // передадим ID договора для заполнения полей на сервере\r\n info[ECMStorageInfoKeys.ECMParentContractID] = createTypedField(contractCard.id, DotNetType.Guid);\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: ECMDefaultCardTypes.ECMContractDocumentTypeID,\r\n cardTypeName: ECMDefaultCardTypes.ECMContractDocumentTypeName,\r\n context: tile.context,\r\n info: info,\r\n cardEditorModifierAction: async (context) =>{\r\n const oldModel = tile.context.cardEditor!.cardModel;\r\n let oldacp = oldModel!.card.sections.get(\"ArContractPartners\");\r\n if (!oldModel){\r\n return;\r\n }\r\n\r\n const acpSection = context.card.sections.getOrAdd(\"ArContractPartners\");\r\n if (!acpSection)\r\n {\r\n return;\r\n }\r\n\r\n oldacp!.rows.forEach( row =>{\r\n var newRow = new CardRow();\r\n newRow = row.clone();\r\n newRow.rowId = Guid.newGuid();\r\n newRow.state = CardRowState.Inserted;\r\n acpSection.rows.push(newRow);\r\n })\r\n }\r\n });\r\n });\r\n }\r\n}","import { TileExtension, ITileGlobalExtensionContext, ITile, Tile, enableWhenVisibleInCardHandler, TileGroups } from 'tessa/ui/tiles';\r\nimport { createTypedField, DotNetType } from 'tessa/platform';\r\nimport { createCard } from 'tessa/ui/uiHost';\r\nimport { LoadingOverlay, showNotEmpty } from 'tessa/ui';\r\nimport { IStorage } from 'tessa/platform/storage';\r\nimport { ECMDefaultCardTypes } from '../helpers/ComfortCardTypes';\r\nimport { ECMTileNames } from '../helpers/ECMTileNames';\r\nimport { CardService, CardRequest } from 'tessa/cards/service';\r\nimport { ECMRequestTypes } from '../helpers/ECMRequestTypes';\r\nimport { ECMStorageInfoKeys } from '../helpers/ECMStorageInfoKeys';\r\n\r\n/** Содает карточку СоР из карточки договора. */\r\nexport class ECMCreateContractCancelTileExtension extends TileExtension {\r\n\r\n public initializingGlobal(context: ITileGlobalExtensionContext) {\r\n ECMCreateContractCancelTileExtension.InitializeECMCreateBasedOnArchiveContractTileAsync(context);\r\n }\r\n\r\n private static InitializeECMCreateBasedOnArchiveContractTileAsync(\r\n context: ITileGlobalExtensionContext\r\n ) {\r\n const contextSource = context.workspace.leftPanel.contextSource;\r\n\r\n context.workspace.leftPanel.tiles.push(\r\n new Tile({\r\n name: ECMTileNames.CreateContractCancel,\r\n caption: 'Создать соглашение о расторжении',\r\n icon: 'ta icon-thin-064',\r\n contextSource,\r\n command: async (tile) => {\r\n await ECMCreateContractCancelTileExtension.CreateContractCancelCardAsync(tile);\r\n },\r\n group: TileGroups.Cards,\r\n order: 53,\r\n evaluating: enableWhenVisibleInCardHandler\r\n })\r\n );\r\n }\r\n\r\n /** Создает карточку СоР. */\r\n private static async CreateContractCancelCardAsync(tile: ITile) {\r\n const uiContext = tile.context;\r\n const editor = uiContext.cardEditor;\r\n if (!editor) {\r\n return;\r\n }\r\n\r\n const contractCard = editor.cardModel!.card;\r\n\r\n // Дополнительная проверка возможности создания допника\r\n const request = new CardRequest();\r\n request.requestType = ECMRequestTypes.VisibilityTileCreateContractDocument;\r\n request.cardId = contractCard.id;\r\n request.cardTypeId = ECMDefaultCardTypes.ECMContractCancelTypeID\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n await showNotEmpty(response.validationResult.build());\r\n return;\r\n }\r\n\r\n const info: IStorage = {};\r\n\r\n // передадим ID договора для заполнения полей на сервере\r\n info[ECMStorageInfoKeys.ECMParentContractID] = createTypedField(contractCard.id, DotNetType.Guid);\r\n\r\n await LoadingOverlay.instance.show(async () => {\r\n await createCard({\r\n cardTypeId: ECMDefaultCardTypes.ECMContractCancelTypeID,\r\n cardTypeName: ECMDefaultCardTypes.ECMContractCancelTypeName,\r\n context: tile.context,\r\n info: info,\r\n });\r\n });\r\n }\r\n}","export class ECMStaticRoles {\r\n /** ecm: Доступ на перезапуск процессов по первичным документам. */\r\n static AccessRestartProcesses = '3240cda5-696e-4cd0-bd43-4f71a5e21e76';\r\n}","export class ECMProcessHelper {\r\n static ApprovalActProcessDiadocID = \"f34e617a-6d47-42f8-b56e-e67b11a423a3\";\r\n}","import { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { createTypedField, DotNetType, TypedField } from 'tessa/platform';\r\nimport { ValidationResultType, ValidationStorageResultBuilder } from 'tessa/platform/validation';\r\nimport { showConfirm, showError, showLoadingOverlay, showNotEmpty, UIContext } from 'tessa/ui';\r\nimport { ITileGlobalExtensionContext, Tile, TileEvaluationEventArgs, TileExtension, TileGroups } from 'tessa/ui/tiles';\r\nimport { IViewParameters } from 'tessa/ui/views/parameters';\r\nimport { ITessaView, Paging, TessaViewRequest, ViewPagingParameters } from 'tessa/views';\r\nimport { ECMDefaultCardTypes } from '../helpers/ComfortCardTypes';\r\nimport { ECMRequestTypes } from '../helpers/ECMRequestTypes';\r\nimport { ECMStaticRoles } from '../helpers/ECMStaticRoles';\r\nimport { userSession } from 'common/utility';\r\nimport { ECMProcessHelper } from '../helpers/ECMProcessHelper';\r\nimport { ViewReferenceMetadataSealed } from 'tessa/views/metadata';\r\n\r\n\r\n/**Выгрузка файлов из карточек в представлении */\r\nexport class ECMProcessRestartTileExtension extends TileExtension {\r\n\r\n private static _tileAvailibleForUser: boolean;\r\n\r\n public async initializingGlobal(context: ITileGlobalExtensionContext): Promise {\r\n let TitleName = \"RestartProcesses\";\r\n let TitleCaption = \"$Title_RestartProcesses\";\r\n\r\n let TitleNameAll = \"RestartAllProcesses\";\r\n let TitleCaptionAll = \"$Title_RestartAllProcesses\";\r\n\r\n let TitleNameSelected = \"RestartSelectedProcesses\";\r\n let TitleCaptionSelected = \"$Title_RestartSelectedProcesses\";\r\n\r\n let TitleNamePage = \"RestartPageProcesses\";\r\n let TitleCaptionPage = \"$Title_RestartPageProcesses\";\r\n \r\n ECMProcessRestartTileExtension._tileAvailibleForUser = await ECMProcessRestartTileExtension.CheckUserHasPermission();\r\n\r\n const panel = context.workspace.leftPanel;\r\n const tile = new Tile({\r\n name: TitleName,\r\n caption: TitleCaption,\r\n icon: 'ta icon-thin-411',\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 5,\r\n command: null,\r\n evaluating: ECMProcessRestartTileExtension.enableIfMyDocumentsViewAndHasSelectedRow,\r\n tiles: [\r\n new Tile({\r\n name: TitleNameAll,\r\n caption: TitleCaptionAll,\r\n icon: '',\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 5,\r\n command: ECMProcessRestartTileExtension.TileActionAllCardAsync,\r\n evaluating: ECMProcessRestartTileExtension.enableIfMyDocumentsViewAndHasSelectedRow,\r\n }),\r\n new Tile({\r\n name: TitleNameSelected,\r\n caption: TitleCaptionSelected,\r\n icon: '',\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 5,\r\n command: ECMProcessRestartTileExtension.TileActionSelectedCardAsync,\r\n evaluating: ECMProcessRestartTileExtension.enableIfMyDocumentsViewAndHasSelectedRow,\r\n }),\r\n new Tile({\r\n name: TitleNamePage,\r\n caption: TitleCaptionPage,\r\n icon: '',\r\n contextSource: panel.contextSource,\r\n group: TileGroups.Views,\r\n order: 5,\r\n command: ECMProcessRestartTileExtension.TileActionOnPageCardAsync,\r\n evaluating: ECMProcessRestartTileExtension.enableIfMyDocumentsViewAndHasSelectedRow,\r\n })]\r\n });\r\n panel.tiles.push(tile);\r\n }\r\n\r\n /**Перезагрузка процессов по выбранным карточкам. */\r\n private static async TileActionSelectedCardAsync() {\r\n // пытаемся получить текущий ViewContext\r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || viewContext.selectedRows === null\r\n || viewContext.view === null\r\n ) {\r\n return;\r\n }\r\n\r\n let dialogResult = await showConfirm(\r\n \"Перезапустяться только активные процессы\\n\" +\r\n \"Перезапустить процесс \\\"Согласование документа Акт. Из диадок\\\" по выбранным карточкам?\",\r\n \"Перезапуск процесса\");\r\n\r\n if (dialogResult) {\r\n await showLoadingOverlay(async (splashResolve) => {\r\n let listID = new Array;\r\n if (viewContext.selectedRows === null) return;\r\n for (let rowValue of viewContext.selectedRows) {\r\n const id = createTypedField(rowValue.get('ActID'), DotNetType.Guid);\r\n listID.push(id);\r\n }\r\n\r\n const request = new CardRequest();\r\n request.requestType = ECMRequestTypes.ECMResetProcessesRequestID;\r\n request.info['DocIDs'] = listID;\r\n request.info['TemplateProcessID'] = createTypedField(ECMProcessHelper.ApprovalActProcessDiadocID, DotNetType.Guid);\r\n request.info['CardTypeID'] = createTypedField(ECMDefaultCardTypes.ArActTypeID, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n let result = response.validationResult.build();\r\n let validationResult = new ValidationStorageResultBuilder();\r\n\r\n let restartProcesses: Array = response.info.RestartProcesses;\r\n let notFoundProcesses: Array = response.info.NotFoundProcesses;\r\n let failedRestartProcesses: Array = response.info.FailedRestartProcesses;\r\n\r\n validationResult.add(\r\n ValidationResultType.Info,\r\n 'Процессов успешно перезапустилось по карточкам ' + restartProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n restartProcesses.map(u => u.$value).toString().replace(/,/g, \"\"));\r\n validationResult.add(\r\n ValidationResultType.Info,\r\n 'Активных процессов не найдено по карточкам ' + notFoundProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n notFoundProcesses.map(u => u.$value).toString().replace(/,/gi, \"\"));\r\n validationResult.add(ValidationResultType.Info,\r\n 'Не перезапустилось процессов по карточкам ' + failedRestartProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n failedRestartProcesses.map(u => u.$value).toString().replace(/,/gi, \"\"));\r\n validationResult.add(result);\r\n\r\n await showNotEmpty(validationResult.build());\r\n splashResolve;\r\n return;\r\n });\r\n }\r\n else {\r\n // Пользователь выбрал \"Нет\"\r\n return;\r\n }\r\n\r\n }\r\n\r\n /**Перезагрузка процессов по все карточкам с установленным фильтром. */\r\n private static async TileActionAllCardAsync() {\r\n // пытаемся получить текущий ViewContext\r\n const viewContext = UIContext.current.viewContext;\r\n if (!viewContext\r\n || viewContext.view === null\r\n ) {\r\n return;\r\n }\r\n let dialogResult = await showConfirm(\r\n \"Перезапустяться только активные процессы\\n\" +\r\n \"Перезапустить процесс \\\"Согласование документа Акт. Из диадок\\\" по выбранным карточкам?\",\r\n \"Перезапуск процесса\");\r\n\r\n if (dialogResult) {\r\n await showLoadingOverlay(async (splashResolve) => {\r\n if (viewContext.view === null) return;\r\n const listID = await ECMProcessRestartTileExtension.GetAllEntriesViewAsync(viewContext.view, viewContext.parameters);\r\n\r\n const request = new CardRequest();\r\n request.requestType = ECMRequestTypes.ECMResetProcessesRequestID;\r\n request.info['DocIDs'] = listID;\r\n request.info['TemplateProcessID'] = createTypedField(ECMProcessHelper.ApprovalActProcessDiadocID, DotNetType.Guid);\r\n request.info['CardTypeID'] = createTypedField(ECMDefaultCardTypes.ArActTypeID, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n let result = response.validationResult.build();\r\n let validationResult = new ValidationStorageResultBuilder();\r\n\r\n let restartProcesses: Array = response.info.RestartProcesses;\r\n let notFoundProcesses: Array = response.info.NotFoundProcesses;\r\n let failedRestartProcesses: Array = response.info.FailedRestartProcesses;\r\n\r\n validationResult.add(\r\n ValidationResultType.Info,\r\n 'Процессов успешно перезапустилось по карточкам ' + restartProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n restartProcesses.map(u => u.$value).toString().replace(/,/g, \"\"));\r\n validationResult.add(\r\n ValidationResultType.Info,\r\n 'Активных процессов не найдено по карточкам ' + notFoundProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n notFoundProcesses.map(u => u.$value).toString().replace(/,/gi, \"\"));\r\n validationResult.add(ValidationResultType.Info,\r\n 'Не перезапустилось процессов по карточкам ' + failedRestartProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n failedRestartProcesses.map(u => u.$value).toString().replace(/,/gi, \"\"));\r\n validationResult.add(result);\r\n\r\n\r\n await showNotEmpty(validationResult.build());\r\n splashResolve;\r\n return;\r\n });\r\n }\r\n else {\r\n // Пользователь выбрал \"Нет\"\r\n return;\r\n }\r\n }\r\n\r\n /**Перезагрузка процессов по все карточкам на странице с установленным фильтром. */\r\n private static async TileActionOnPageCardAsync() {\r\n // пытаемся получить текущий ViewContext\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 dialogResult = await showConfirm(\r\n \"Перезапустяться только активные процессы\\n\" +\r\n \"Перезапустить процесс \\\"Согласование документа Акт. Из диадок\\\" по выбранным карточкам?\",\r\n \"Перезапуск процесса\");\r\n\r\n if (dialogResult) {\r\n await showLoadingOverlay(async (splashResolve) => {\r\n let listID = new Array;\r\n\r\n if (viewContext.data === null) return;\r\n\r\n for (let rowValue of viewContext.data) {\r\n const id = createTypedField(rowValue.get('ActID'), DotNetType.Guid);\r\n listID.push(id);\r\n }\r\n const request = new CardRequest();\r\n request.requestType = ECMRequestTypes.ECMResetProcessesRequestID;\r\n request.info['DocIDs'] = listID;\r\n request.info['TemplateProcessID'] = createTypedField(ECMProcessHelper.ApprovalActProcessDiadocID, DotNetType.Guid);\r\n request.info['CardTypeID'] = createTypedField(ECMDefaultCardTypes.ArActTypeID, DotNetType.Guid);\r\n const response = await CardService.instance.request(request);\r\n\r\n let result = response.validationResult.build();\r\n let validationResult = new ValidationStorageResultBuilder();\r\n\r\n let restartProcesses: Array = response.info.RestartProcesses;\r\n let notFoundProcesses: Array = response.info.NotFoundProcesses;\r\n let failedRestartProcesses: Array = response.info.FailedRestartProcesses;\r\n\r\n validationResult.add(\r\n ValidationResultType.Info,\r\n 'Процессов успешно перезапустилось по карточкам ' + restartProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n restartProcesses.map(u => u.$value).toString().replace(/,/g, \"\"));\r\n validationResult.add(\r\n ValidationResultType.Info,\r\n 'Активных процессов не найдено по карточкам ' + notFoundProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n notFoundProcesses.map(u => u.$value).toString().replace(/,/gi, \"\"));\r\n validationResult.add(ValidationResultType.Info,\r\n 'Не перезапустилось процессов по карточкам ' + failedRestartProcesses.length + ' из ' + listID?.length,\r\n undefined,\r\n undefined,\r\n undefined,\r\n failedRestartProcesses.map(u => u.$value).toString().replace(/,/gi, \"\"));\r\n validationResult.add(result);\r\n\r\n\r\n await showNotEmpty(validationResult.build());\r\n splashResolve;\r\n return;\r\n });\r\n }\r\n else {\r\n // Пользователь выбрал \"Нет\"\r\n return;\r\n }\r\n }\r\n\r\n /**Когда включать тайл */\r\n private static enableIfMyDocumentsViewAndHasSelectedRow(e: TileEvaluationEventArgs) {\r\n // пытаемся получить текущий ViewContext\r\n\r\n const viewContext = UIContext.current.viewContext;\r\n let view: ITessaView;\r\n e.setIsEnabledWithCollapsing(e.currentTile,\r\n !!viewContext\r\n && !!(view = viewContext.view!) // получаем модель текущего представления\r\n && view.metadata.alias === 'ArActComfort'\r\n && !!viewContext.selectedRow\r\n && ECMProcessRestartTileExtension._tileAvailibleForUser\r\n );\r\n }\r\n\r\n\r\n\r\n /**Возвращает список гуидов карточек, после фильтрации */\r\n private static async GetAllEntriesViewAsync(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 private static async CheckUserHasPermission() {\r\n const request = new CardRequest();\r\n request.requestType = ECMRequestTypes.PkIsUserBelongsToRole;\r\n request.info['UserID'] = createTypedField(userSession.UserID, DotNetType.Guid);\r\n request.info['RoleID'] = createTypedField(ECMStaticRoles.AccessRestartProcesses, DotNetType.Guid);\r\n request.info['withoutDeputy'] = true;\r\n const response = await CardService.instance.request(request);\r\n return response.validationResult.isSuccessful && response.info.IsUserBelongsToRole.$value;\r\n }\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\n\r\nimport { ECMCreateBasedOnArchiveContractTileExtension } from './ECMCreateBasedOnArchiveContractTileExtension';\r\nimport { ECMCreateContractDocumentTileExtension } from './ECMCreateContractDocumentTileExtension';\r\nimport { ECMCreateContractCancelTileExtension } from './ECMCreateContractCancelTileExtension';\r\nimport { ECMProcessRestartTileExtension } from './ECMProcessRestartTileExtension';\r\n\r\n\r\nExtensionContainer.instance.registerExtension({\r\n extension: ECMCreateBasedOnArchiveContractTileExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true,\r\n order: 1\r\n});\r\n\r\nExtensionContainer.instance.registerExtension({\r\n extension: ECMCreateContractDocumentTileExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true,\r\n order: 1\r\n});\r\n\r\nExtensionContainer.instance.registerExtension({\r\n extension: ECMCreateContractCancelTileExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true,\r\n order: 1\r\n});\r\n\r\nExtensionContainer.instance.registerExtension({\r\n extension: ECMProcessRestartTileExtension,\r\n stage: ExtensionStage.AfterPlatform,\r\n singleton: true,\r\n order: 1\r\n});","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType } from 'tessa/platform';\r\nimport { GridViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { ECMDefaultCardTypes } from 'src/comfortScripts/helpers/ComfortCardTypes';\r\nimport { showError } from 'tessa/ui';\r\nimport { openCard } from 'tessa/ui/uiHost';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { CardStoreMode, Card, CardRow } from 'tessa/cards';\r\n\r\nexport class ECMContractSectionsUpdateAddUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n const card = context.model.card;\r\n\r\n if (!Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ContractTypeID) && \r\n !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMContractDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n // запрет добавления более одного раздела в карточке Договора (Комфорт) и Доп соглашения\r\n const grid = context.model.controls.get('ControlGridContractSections') as GridViewModel;\r\n let ECMContractSections = context.model.card.sections.tryGet(\"ECMContractSections\");\r\n\r\n if (grid == null || ECMContractSections == null) {\r\n return;\r\n }\r\n\r\n grid.rowEditorClosed.add(async (e) =>\r\n { \r\n if (e.action == GridRowAction.Inserted\r\n || e.action == GridRowAction.Opening)\r\n {\r\n //Если была вставлена запись и она одна в гриде \r\n if (grid.rows.length == 1)\r\n {\r\n this.SetContractCategory(card, e.row);\r\n }\r\n }\r\n });\r\n\r\n grid.rowInvoked.add(async (e) => {\r\n if (!e.rowModel || !ECMContractSections) return;\r\n\r\n if (e.action == GridRowAction.Inserted && ECMContractSections.rows.length > 1 ) {\r\n e.cancel = true;\r\n showError('Запрещено добавление более одного раздела!');\r\n }\r\n\r\n //При добавлении записи в гриде \r\n if (e.action == GridRowAction.Inserted)\r\n {\r\n if (grid.rows.length == 1\r\n && Guid.equals(card.typeId, ECMDefaultCardTypes.ContractTypeID))\r\n {\r\n e.row.set('IsMain', true, DotNetType.Boolean);\r\n }\r\n }\r\n\r\n if (e.action == GridRowAction.Opening && context.model.card.storeMode != CardStoreMode.Insert) {\r\n e.cancel = true;\r\n let DocumentID = e.row.get(\"DocumentID\");\r\n if (isNullOrUndefined(DocumentID)) return;\r\n // открываем карточку раздела в отдельной вкладке вместо открытия формы\r\n await openCard({\r\n cardId: DocumentID\r\n });\r\n }\r\n });\r\n }\r\n\r\n //Установка категории договора \r\n private SetContractCategory(card: Card, row: CardRow)\r\n {\r\n const secECMContracts = card.sections.tryGet('ECMContracts');\r\n\r\n if (!secECMContracts)\r\n {\r\n return;\r\n }\r\n\r\n const currentContractCategoryID = secECMContracts.fields.tryGet('ContractCategoryID');\r\n\r\n const selectedContractCategoryID = row.tryGet('ContractCategoryID');\r\n\r\n if (selectedContractCategoryID != null\r\n && currentContractCategoryID != selectedContractCategoryID)\r\n {\r\n secECMContracts.fields.set('ContractCategoryID', row.tryGet('ContractCategoryID'), DotNetType.Guid);\r\n secECMContracts.fields.set('ContractCategoryNumber', row.tryGet('ContractCategoryNumber'), DotNetType.String);\r\n secECMContracts.fields.set('ContractCategoryName', row.tryGet('ContractCategoryName'), DotNetType.String);\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel } from 'tessa/ui/cards';\r\nimport { Guid, Visibility } from 'tessa/platform';\r\nimport { ECMDefaultCardTypes } from 'src/comfortScripts/helpers/ComfortCardTypes';\r\n\r\n\r\nexport class ECMContractSectionUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n\r\n if (!Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMContractSection)) {\r\n return;\r\n }\r\n\r\n // если нужно, скроем блок сторон\r\n this.HidePartiesBlockHandler(context.model);\r\n }\r\n\r\n private HidePartiesBlockHandler(cardModel: ICardModel)\r\n {\r\n const partiesBlockModel = cardModel.blocks.get(\"ECMContractSectionPartiesBlock\");\r\n const dciSection = cardModel.card.sections.tryGet(\"DocumentCommonInfo\");\r\n const eciSection = cardModel.card.sections.tryGet(\"ECMCommonInfo\");\r\n\r\n if (!partiesBlockModel\r\n || !dciSection\r\n || !eciSection)\r\n {\r\n return;\r\n }\r\n\r\n // определим значения сторон\r\n var partner1 = dciSection.fields.tryGet(\"PartnerID\");\r\n var partner2 = eciSection.fields.tryGet(\"Partner2ID\");\r\n\r\n // будем отображать блок тогда, когда в нем уже указаны значения\r\n const isPartiesBlockVisible = partner1 != null || partner2 != null;\r\n\r\n partiesBlockModel.blockVisibility = isPartiesBlockVisible ? Visibility.Visible : Visibility.Collapsed;\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { ECMDefaultCardTypes } from 'src/comfortScripts/helpers/ComfortCardTypes';\r\nimport { ECMContractCostItemsHelper } from '../helpers/ECMContractCostItemsHelper';\r\nimport { showNotEmpty } from 'tessa/ui';\r\n\r\n\r\nexport class ECMContractCostItemsUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n\r\n if (context.model == null || context.model.card == null) {\r\n return;\r\n }\r\n\r\n if (!Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ContractTypeID)\r\n //&& !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMContractDocumentTypeID)\r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMAccountWithoutContractTypeID)\r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMAccountContractTypeID)) {\r\n return;\r\n }\r\n\r\n const card = context.model.card;\r\n\r\n const ecSection = card.sections.tryGet('ECMContracts');\r\n const ecciSection = card.sections.tryGet('ECMContractCostItems');\r\n\r\n if (!ecSection || !ecciSection)\r\n {\r\n return;\r\n }\r\n\r\n ecSection.fields.fieldChanged.add(async e =>\r\n {\r\n // при изменении категории\r\n if (e.fieldName == \"ContractCategoryID\"\r\n && e.fieldValue)\r\n {\r\n const selectedCategoryID = e.fieldValue;\r\n\r\n // НДС (из типового справочника)\r\n let vatTypeID = null;\r\n\r\n // ищем в разделе\r\n const ecs = card.sections.tryGet('ECMContractSections');\r\n if (ecs && ecs.rows.length > 0)\r\n {\r\n vatTypeID = ecs.rows[0].tryGet(\"VATTypeID\");\r\n }\r\n\r\n // не нашли в разделе, ищем в общей секции\r\n if (vatTypeID == null)\r\n {\r\n vatTypeID = ecSection.fields.tryGet(\"VATTypeID\") ?? 0;\r\n }\r\n\r\n // добавим/обновим статьи БК, если нужно\r\n var result = await ECMContractCostItemsHelper.AddCostItemsAsync(card, selectedCategoryID, vatTypeID);\r\n if (!result.isSuccessful)\r\n {\r\n await showNotEmpty(result.build());\r\n }\r\n }\r\n });\r\n }\r\n}","import { Card, CardRow, CardRowState } from \"tessa/cards\";\r\nimport { ECMDefaultCardTypes } from \"./ComfortCardTypes\";\r\nimport { Guid, createTypedField, DotNetType } from \"tessa/platform\";\r\nimport { tryGetFromInfo } from \"tessa/ui\";\r\nimport { CardRequest, CardService } from \"tessa/cards/service\";\r\nimport { ECMRequestTypes } from \"./ECMRequestTypes\";\r\nimport { PkRequestTypes } from \"src/pkScripts/Helpers/PkRequestTypes\";\r\nimport { IValidationResultBuilder, ValidationResultBuilder } from \"tessa/platform/validation\";\r\nimport { CdUIHelper } from \"src/cdScripts/UI/CdUIHelper\";\r\n\r\nexport class ECMContractCostItemsHelper {\r\n \r\n /// \r\n /// Добавление Статей БК.\r\n /// \r\n public static async AddCostItemsAsync(card: Card, contractCategoryID, vatTypeID) : Promise\r\n {\r\n let validationResult = new ValidationResultBuilder();\r\n \r\n // категория не указана, выходим\r\n if (!contractCategoryID)\r\n {\r\n return validationResult;\r\n }\r\n\r\n // Для договора, ДС, счета без договора и тех. договора\r\n if (!Guid.equals(card.typeId, ECMDefaultCardTypes.ContractTypeID)\r\n && !Guid.equals(card.typeId, ECMDefaultCardTypes.ECMContractDocumentTypeID)\r\n && !Guid.equals(card.typeId, ECMDefaultCardTypes.ECMAccountContractTypeID)\r\n && !Guid.equals(card.typeId, ECMDefaultCardTypes.ECMAccountWithoutContractTypeID))\r\n {\r\n return validationResult;\r\n }\r\n\r\n var cciSection = card.sections.getOrAdd('ECMContractCostItems');\r\n\r\n if (!cciSection)\r\n {\r\n return validationResult;\r\n }\r\n\r\n // по выбранной категории определим статьи БК\r\n const request = new CardRequest();\r\n request.cardId = contractCategoryID;\r\n request.requestType = ECMRequestTypes.ECMGetCostItemByCategoryRequestID;\r\n\r\n const response = await CardService.instance.request(request);\r\n\r\n if (!response.validationResult.isSuccessful)\r\n {\r\n validationResult.add(response.validationResult);\r\n return validationResult;\r\n }\r\n\r\n const costItemsList = tryGetFromInfo(response.info, 'ECMContractCategoryCostItems', []);\r\n if (!costItemsList || costItemsList.length === 0) {\r\n return validationResult;\r\n }\r\n\r\n let vatRateID: number | null = null;\r\n let vatRateCaption: string | null = null;\r\n let vatRateValue: number | null = null;\r\n\r\n if (vatTypeID != null)\r\n {\r\n // определим через НДС из справочника ArVATRate по ID НДС из типового справочника VatTypes\r\n var vatRequest = new CardRequest();\r\n vatRequest.info[\"VATTypeID\"] = vatTypeID != null ? createTypedField(vatTypeID, DotNetType.Int32) : null;\r\n vatRequest.requestType = PkRequestTypes.ArGetVATRate;\r\n\r\n var vatResponse = await CardService.instance.request(vatRequest);\r\n\r\n if (!vatResponse.validationResult.isSuccessful)\r\n {\r\n validationResult.add(vatResponse.validationResult);\r\n return validationResult;\r\n }\r\n\r\n vatRateID = tryGetFromInfo(vatResponse.info, 'ID', null);\r\n vatRateCaption = tryGetFromInfo(vatResponse.info, 'Caption', null);\r\n vatRateValue = tryGetFromInfo(vatResponse.info, 'Value', null);\r\n }\r\n\r\n // очистим целевую секцию\r\n CdUIHelper.ClearAutoCompleteTableWithMarkingkDeletedItems2(card, 'ECMContractCostItems');\r\n\r\n costItemsList.forEach(costItem => {\r\n const costItemID = costItem['ID'].$value;\r\n const costItemName = costItem['Name'].$value;\r\n const costItemGuid1C = costItem['Guid1C'].$value;\r\n\r\n // добавим новую строку\r\n var costItemRow = new CardRow();\r\n\r\n // Статья БК\r\n costItemRow.set('CostItemID', costItemID, DotNetType.Guid);\r\n costItemRow.set('CostItemName', costItemName, DotNetType.String);\r\n costItemRow.set('CostItemGuid1C', costItemGuid1C, DotNetType.Guid);\r\n\r\n // Ставка НДС\r\n costItemRow.set('VatRateID', vatRateID?.toString() ?? null, DotNetType.Int32);\r\n costItemRow.set('VatRateCaption', vatRateCaption, DotNetType.String);\r\n costItemRow.set('VatRateValue', vatRateValue?.toString() ?? null, DotNetType.Decimal);\r\n\r\n // Сумма всего\r\n costItemRow.set('Amount', \"0\", DotNetType.Decimal);\r\n\r\n // Сумма аванса\r\n costItemRow.set('AmountPrepayment', \"0\", DotNetType.Decimal);\r\n \r\n // Сумма без НДС\r\n costItemRow.set('AmountWithoutVat', \"0\", DotNetType.Decimal);\r\n\r\n costItemRow.rowId = Guid.newGuid();\r\n costItemRow.state = CardRowState.Inserted;\r\n cciSection.rows.push(costItemRow);\r\n });\r\n\r\n return validationResult;\r\n }\r\n}","import { ICardModel } from \"tessa/ui/cards\";\r\nimport { DotNetType } from \"tessa/platform\";\r\n\r\nexport class ECMUIHelper {\r\n \r\n /// \r\n /// Обработчик поля \"Основной договор\" для ДС и СоР.\r\n /// \r\n public static async ContractFieldHandler(model: ICardModel)\r\n {\r\n const eciSection = model.card.sections.tryGet('ECMCommonInfo');\r\n const contractsSection = model.card.sections.tryGet('ECMContracts');\r\n const contractControl = model.controls.get('Contract');\r\n\r\n if (!eciSection\r\n || !contractsSection\r\n || !contractControl)\r\n {\r\n return;\r\n }\r\n\r\n const contractID = eciSection.fields.tryGet('ContractID');\r\n\r\n // если ссылка на основной договор уже задана, ничего не делаем\r\n if (!!contractID)\r\n {\r\n return;\r\n }\r\n\r\n // Откроем для редактирования ссылку на договор\r\n contractControl.isReadOnly = false;\r\n\r\n eciSection.fields.fieldChanged.add(e =>\r\n {\r\n // при изменении поля \"Основной договор\" также запомним значение в ссылке на родительский документ\r\n if (e.fieldName == 'ContractID'\r\n && !!e.fieldValue)\r\n {\r\n contractsSection.fields.set('ParentContractID', e.fieldValue, DotNetType.Guid);\r\n }\r\n });\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { ECMUIHelper } from \"../helpers/ECMUIHelper\";\r\nimport { ECMDefaultCardTypes } from \"../helpers/ComfortCardTypes\";\r\nimport { Guid } from \"tessa/platform\";\r\n\r\nexport class ECMContractDocumentUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null\r\n || context.model.card == null) {\r\n return;\r\n }\r\n\r\n const model = context.model;\r\n\r\n if (!Guid.equals(model.card.typeId, ECMDefaultCardTypes.ECMContractDocumentTypeID)) {\r\n return;\r\n }\r\n\r\n // Обработчик поля \"Основной договор\"\r\n ECMUIHelper.ContractFieldHandler(model);\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from \"tessa/ui/cards\";\r\nimport { ECMUIHelper } from \"../helpers/ECMUIHelper\";\r\nimport { ECMDefaultCardTypes } from \"../helpers/ComfortCardTypes\";\r\nimport { Guid } from \"tessa/platform\";\r\n\r\nexport class ECMContractCancelUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null\r\n || context.model.card == null) {\r\n return;\r\n }\r\n\r\n const model = context.model;\r\n\r\n if (!Guid.equals(model.card.typeId, ECMDefaultCardTypes.ECMContractCancelTypeID)) {\r\n return;\r\n }\r\n\r\n // Обработчик поля \"Основной договор\"\r\n ECMUIHelper.ContractFieldHandler(model);\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { Guid } from 'tessa/platform';\r\nimport { GridViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { ECMDefaultCardTypes } from 'src/comfortScripts/helpers/ComfortCardTypes';\r\nimport { openCard } from 'tessa/ui/uiHost';\r\n\r\nexport class ECMContract2UIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n \r\n if (context.model == null || context.model.card == null) {\r\n return;\r\n }\r\n\r\n // Договор\r\n if (!Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ContractTypeID))\r\n {\r\n return;\r\n }\r\n\r\n // Находим таблицу с доп. соглашениями\r\n const grid = context.model.controls.get('ControlGridECMContractDocuments') as GridViewModel;\r\n\r\n if (grid !== null)\r\n {\r\n grid.rowInvoked.add(async (e) =>\r\n {\r\n if (!e.rowModel)\r\n {\r\n return;\r\n }\r\n \r\n if (e.action == GridRowAction.Opening)\r\n {\r\n //открываем карточку в отдельной вкладке вместо открытия формы\r\n e.cancel = true;\r\n await openCard({cardId: e.row.rowId});\r\n }\r\n });\r\n }\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext, ICardModel, IControlViewModel } from 'tessa/ui/cards';\r\nimport { Guid, DotNetType, createTypedField, Visibility } from 'tessa/platform';\r\nimport { GridViewModel, GridRowAction } from 'tessa/ui/cards/controls';\r\nimport { ECMDefaultCardTypes } from 'src/comfortScripts/helpers/ComfortCardTypes';\r\nimport { CardRowState, CardRow } from 'tessa/cards';\r\nimport { ValidationResultType } from 'tessa/platform/validation';\r\nimport { CardRequest, CardService } from 'tessa/cards/service';\r\nimport { ECMRequestTypes } from '../helpers/ECMRequestTypes';\r\nimport { ECMStorageInfoKeys } from '../helpers/ECMStorageInfoKeys';\r\nimport { showNotEmpty, tryGetFromInfo } from 'tessa/ui';\r\nimport { userSession } from 'common/utility';\r\n\r\n/** Базовое расширение для основных договоров комфорта. */\r\nexport class ECMContractBaseUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n if (context.model == null ||\r\n context.model.card == null) {\r\n return;\r\n }\r\n\r\n const card = context.model.card;\r\n\r\n if (!Guid.equals(card.typeId, ECMDefaultCardTypes.ContractTypeID)\r\n && !Guid.equals(card.typeId, ECMDefaultCardTypes.ECMContractDocumentTypeID)\r\n && !Guid.equals(card.typeId, ECMDefaultCardTypes.ECMContractCancelTypeID)\r\n && !Guid.equals(card.typeId, ECMDefaultCardTypes.ECMAccountContractTypeID)\r\n && !Guid.equals(card.typeId, ECMDefaultCardTypes.ECMAccountWithoutContractTypeID))\r\n {\r\n return;\r\n }\r\n\r\n // Обработка таблицы \"Стороны документа\"\r\n this.ContractPartnersHandler(context.model);\r\n\r\n // Обработка флага \"Миграция 2021\"\r\n this.SetVisibilityFlags(context.model);\r\n }\r\n\r\n /** Обработка таблицы \"Стороны документа\". */\r\n private SetVisibilityFlags(model: ICardModel)\r\n {\r\n if (userSession.isAdmin)\r\n {\r\n const migrationControl = model.controls.get('Migration2021');\r\n if (!migrationControl) {\r\n return;\r\n }\r\n\r\n migrationControl.controlVisibility = Visibility.Visible;\r\n }\r\n }\r\n\r\n /** Обработка таблицы \"Стороны документа\". */\r\n private ContractPartnersHandler(model: ICardModel)\r\n {\r\n const partnersTable = model.controls.get('ArContractPartnersTable') as GridViewModel;\r\n const partnersSection = model.card.sections.tryGet('ArContractPartners');\r\n if (!partnersTable || !partnersSection) {\r\n return;\r\n }\r\n\r\n // валидация строки\r\n partnersTable.rowValidating.add(e => {\r\n // выбранная роль стороны\r\n var partnerRoleID = e.row.tryGet(\"RoleID\");;\r\n\r\n // это покупатель (0) или продавец (1)\r\n if (partnerRoleID == 0 || partnerRoleID == 1)\r\n {\r\n // найдем строки с такой же ролью\r\n var rowsWithSameRole = partnersSection.rows.filter(x => \r\n x.state != CardRowState.Deleted \r\n && x.tryGet(\"RoleID\") == partnerRoleID);\r\n\r\n // у нас может быть не больше 1ой строки с таким значением\r\n if (rowsWithSameRole.length > 1)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, `В документе не может быть более одной стороны с ролью \\\"${(partnerRoleID == 0 ? \"Покупатель\" : \"Продавец\")}\\\"!`);\r\n }\r\n }\r\n\r\n // внешний ID КА\r\n var partnerExternalID = e.row.tryGet(\"PartnerExternalID\");\r\n // ИНН КА\r\n var partnerINN = e.row.tryGet(\"PartnerINN\");\r\n\r\n if (partnerExternalID != null)\r\n {\r\n // найдем строки с таким же КА\r\n var rowsWithSamePartner = partnersSection.rows.filter(x =>\r\n x.state != CardRowState.Deleted\r\n && x.tryGet(\"PartnerExternalID\") == partnerExternalID\r\n // на всякий случай будет проверять INN, вдруг будет совпадение по внешнему ID\r\n && x.tryGet(\"PartnerINN\") == partnerINN);\r\n\r\n // один и тот же контрагент не может быть и покупателем и продавцом\r\n if (rowsWithSamePartner.some(x => x.tryGet(\"RoleID\") == 0)\r\n && rowsWithSamePartner.some(x => x.tryGet(\"RoleID\") == 1))\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Один и тот же контрагент не может быть и покупателем и продавцом!\");\r\n }\r\n }\r\n\r\n // вид договора 1C\r\n const contractKind1CID = e.row.tryGet(\"ContractKind1CID\");\r\n\r\n // кроме \"Прочее\"\r\n if (contractKind1CID != null\r\n && contractKind1CID != 8)\r\n {\r\n // найдем строки с таким же видом договора\r\n const rowsWithSameContractKind = partnersSection.rows.filter(x =>\r\n x.state != CardRowState.Deleted\r\n && x.tryGet(\"ContractKind1CID\") == contractKind1CID);\r\n\r\n // не может быть больше одной стороны с одним видом договора\r\n if (rowsWithSameContractKind.length > 1)\r\n {\r\n e.validationResult.add(ValidationResultType.Error, \"Выбран некорректный \\\"Вид договора 1C\\\".\");\r\n }\r\n }\r\n });\r\n\r\n // логика изменения видимости и значения поля \"Вид договора 1C\"\r\n partnersTable.rowInitializing.add(async e => \r\n {\r\n // открытие/создание строки\r\n if (e.action != GridRowAction.Inserted\r\n && e.action != GridRowAction.Opening)\r\n {\r\n return;\r\n }\r\n\r\n const kindControl = e.rowModel?.controls.get(\"ECMContractKind1CControl\");\r\n\r\n // если контрол изначально залочен, значит нет прав\r\n if (!kindControl\r\n || kindControl.isReadOnly)\r\n {\r\n return;\r\n }\r\n\r\n // при открытии формы\r\n await this.UpdateContractKind1CControlAsync(kindControl, e.row);\r\n\r\n // при изменении поля\r\n e.row.fieldChanged.add(async e2 =>\r\n {\r\n if (e2.fieldName == \"PartnerExternalID\")\r\n {\r\n await this.UpdateContractKind1CControlAsync(kindControl, e.row);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /** Обновление видимости и значения поля \"Вид договора 1C\" в зависимости от выбранного КА. */\r\n private async UpdateContractKind1CControlAsync(kindControl: IControlViewModel, row: CardRow)\r\n {\r\n // по умолчанию поле скрыто\r\n kindControl.isReadOnly = true;\r\n\r\n // внешний ID КА КСК\r\n const partnerExternalID = row.tryGet(\"PartnerExternalID\");\r\n\r\n if (partnerExternalID == null)\r\n {\r\n if (row.tryGet(\"ContractKind1CID\") != null)\r\n {\r\n // сбросим вид договора\r\n row.set(\"ContractKind1CID\", null);\r\n row.set(\"ContractKind1CName\", null);\r\n }\r\n\r\n return;\r\n }\r\n\r\n // определим, входит ли КА в периметр ПИК-Комфорт\r\n const request = new CardRequest();\r\n request.requestType = ECMRequestTypes.ECMIsPartnerInComfortPerimeterRequestID;\r\n request.info[ECMStorageInfoKeys.ECMPartnerExternalID] = createTypedField(partnerExternalID, DotNetType.Int64);\r\n \r\n const partnerResponse = await CardService.instance.request(request);\r\n\r\n if (!partnerResponse.validationResult.isSuccessful)\r\n {\r\n await showNotEmpty(partnerResponse.validationResult.build());\r\n return;\r\n }\r\n \r\n const partnerInComfortPerimeter = tryGetFromInfo(partnerResponse.info, ECMStorageInfoKeys.ECMPartnerInComfortPerimeter, false);\r\n\r\n // поле редактируемое, если КА в периметре\r\n kindControl.isReadOnly = !partnerInComfortPerimeter;\r\n }\r\n}","import { CardUIExtension, ICardUIExtensionContext } from 'tessa/ui/cards';\r\nimport { DotNetType, Guid } from 'tessa/platform';\r\nimport { ECMDefaultCardTypes } from 'src/comfortScripts/helpers/ComfortCardTypes';\r\nimport { GridViewModel } from 'tessa/ui/cards/controls';\r\nimport { CardGetRequest, CardService } from 'tessa/cards/service';\r\n\r\nexport class ECMAccountObjectUIExtension extends CardUIExtension {\r\n\r\n public async initialized(context: ICardUIExtensionContext) {\r\n \r\n if (context.model == null || context.model.card == null) {\r\n return;\r\n }\r\n\r\n // Договор\r\n if (!Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ContractTypeID) \r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMAdditionalAgreementTypeID)\r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMContractCancelTypeID)\r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMContractDocumentTypeID)\r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.PkIncomingTypeID)\r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMTerminationAgreementTypeID)\r\n && !Guid.equals(context.model.card.typeId, ECMDefaultCardTypes.ECMAccountContractTypeID))\r\n {\r\n return;\r\n }\r\n\r\n const grid = context.model.controls.get('ECMAccountingObjects') as GridViewModel;\r\n\r\n\r\n if (grid != null)\r\n {\r\n grid.rowInvoked.add(async (e) =>\r\n {\r\n if (!e.rowModel)\r\n {\r\n return;\r\n }\r\n e.row.fieldChanged.add(async event => {\r\n if (event.fieldName == \"BuildingID\") {\r\n if (event.fieldValue != null) {\r\n const request = new CardGetRequest();\r\n request.cardId = event.fieldValue;\r\n const buildingResponse = await CardService.instance.get(request);\r\n if (buildingResponse.validationResult.isSuccessful)\r\n {\r\n //e.row.set(\"BuildingName\", buildingResponse.card.sections.get(\"ECMBuildings\")?.fields.get(\"NormalizedAddress\"), DotNetType.String);\r\n e.row.set(\"BuildingAddress\", buildingResponse.card.sections.get(\"ECMBuildings\")?.fields.get(\"NormalizedAddress\"), DotNetType.String);\r\n e.row.set(\"BuildingTypeID\", buildingResponse.card.sections.get(\"ECMBuildings\")?.fields.get(\"BuildingTypeID\"), DotNetType.Guid);\r\n e.row.set(\"BuildingTypeName\", buildingResponse.card.sections.get(\"ECMBuildings\")?.fields.get(\"BuildingTypeName\"), DotNetType.String);\r\n }\r\n }\r\n else\r\n {\r\n e.row.set(\"BuildingAddress\", null, DotNetType.String);\r\n }\r\n }\r\n })\r\n });\r\n };\r\n\r\n }\r\n}","import { ExtensionContainer, ExtensionStage } from 'tessa/extensions';\r\nimport { ECMContractSectionsUpdateAddUIExtension } from './ECMContractSectionsUpdateAddUIExtension';\r\nimport { ECMContractSectionUIExtension } from './ECMContractSectionUIExtension';\r\nimport { ECMContractCostItemsUIExtension } from './ECMContractCostItemsUIExtension';\r\nimport { ECMContractDocumentUIExtension } from './ECMContractDocumentUIExtension';\r\nimport { ECMContractCancelUIExtension } from './ECMContractCancelUIExtension';\r\nimport { ECMContract2UIExtension } from './ECMContract2UIExtension';\r\nimport { ECMContractBaseUIExtension } from './ECMContractBaseUIExtension';\r\nimport { ECMAccountObjectUIExtension } from './ECMAccountObjectUIExtension';\r\n\r\nExtensionContainer.instance.registerExtension({extension: ECMContractSectionsUpdateAddUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ECMContractSectionUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ECMContractCostItemsUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ECMContractDocumentUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ECMContractCancelUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ECMContract2UIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ECMContractBaseUIExtension, stage: ExtensionStage.AfterPlatform});\r\nExtensionContainer.instance.registerExtension({extension: ECMAccountObjectUIExtension, stage: ExtensionStage.AfterPlatform});"],"sourceRoot":""}