{"version":3,"sources":["components/mediaRecorder/index.js","components/infrastructure/models.ts","components/infrastructure/appContext.ts","components/entityManager/interfaces.ts","components/infrastructure/core.ts","components/pageHeader/index.tsx","components/infrastructure/baseComponent.tsx","home/help.tsx","home/index.tsx","home/faq.tsx","home/errorpage.tsx","components/infrastructure/customSpinner.tsx","components/lookup/index.tsx","components/priceInput/index.tsx","components/entityManager/dataform.tsx","account/profile/userEdit.tsx","account/profile/index.tsx","components/captcha/index.tsx","home/simplePage.tsx","account/resetPassword/index.tsx","account/logout/index.tsx","account/login/changeContact.tsx","components/entityManager/resizabletitle.tsx","components/entityManager/columnfilter.tsx","components/infrastructure/filtering.ts","components/entityManager/searchform.tsx","baseInfo/auditLogItems/index.tsx","components/entityManager/index.tsx","account/userClaim/index.tsx","account/user/index.tsx","account/roleClaim/index.tsx","account/userRole/index.tsx","account/role/index.tsx","baseInfo/province/index.tsx","baseInfo/city/index.tsx","baseInfo/userRelation/zobdehUser.tsx","baseInfo/userRelation/index.tsx","baseInfo/insurerCenter/interfaces.ts","baseInfo/insurerCenterPersonnel/interfaces.ts","baseInfo/insurerCenterPersonnel/index.tsx","baseInfo/insurerCenter/index.tsx","baseInfo/insurer/index.tsx","baseInfo/damageType/index.tsx","baseInfo/problem/index.tsx","baseInfo/brand/index.tsx","baseInfo/documentType/index.tsx","baseInfo/damageReason/index.tsx","baseInfo/bank/index.tsx","baseInfo/sendingItem/index.tsx","baseInfo/equipment/equipmentItem.tsx","baseInfo/equipment/equipmentDocumentType.tsx","baseInfo/equipment/equipmentSendingItem.tsx","baseInfo/equipmentModel/index.tsx","baseInfo/equipment/equipmentProblem.tsx","baseInfo/equipment/index.tsx","components/map/loaders/neshan_map_loader.js","components/map/NeshanMap.js","components/map/index.tsx","baseInfo/evaluatorDamageType/index.tsx","baseInfo/evaluatorEquipment/index.tsx","baseInfo/repairCenterEquipment/index.tsx","baseInfo/center/interfaces.ts","baseInfo/center/index.tsx","baseInfo/policyholder/index.tsx","baseInfo/damageCase/interfaces.ts","components/pdfViewer/index.tsx","baseInfo/policy/index.tsx","evaluation/damageCaseEvaluator/interfaces.ts","evaluation/damageCaseEvaluator/allocateEvaluator.tsx","evaluation/damageCaseEvaluator/evaluationComponent.tsx","baseInfo/attachment/attachmentViewer.tsx","baseInfo/attachment/attachmentDownloader.tsx","components/helperPopover/index.tsx","evaluation/damageCaseEvaluator/documentCheck.tsx","evaluation/damageCaseEvaluator/contactSetting.tsx","baseInfo/attachment/attachmentUploader.tsx","components/jitsi/meet.tsx","evaluation/damageCaseEvaluator/makingContact.tsx","evaluation/damageCaseEvaluator/damageEstimation.tsx","evaluation/damageCaseEvaluator/policyholderConfirmation.tsx","financial/damageCaseVoucherPaymentDraft/damageCaseSummary.tsx","evaluation/damageCaseEvaluator/index.tsx","financial/interfaces.ts","report/damageCaseReport/interfaces.ts","components/advancedSearch/index.tsx","report/damageCaseReport/index.tsx","financial/damageCaseVoucherPaymentDraft/issueVoucher.tsx","financial/damageCaseVoucherPaymentDraft/index.tsx","financial/damageCaseVoucherReceiptDraft/index.tsx","financial/damageCaseVoucherPayment/damageCaseVoucherPaymentItem.tsx","financial/damageCaseVoucherPayment/index.tsx","policyholderPortal/damageCasePolicyholder/policyholderConfirmation.tsx","policyholderPortal/damageCasePolicyholder/documentsUploader.tsx","policyholderPortal/damageCasePolicyholder/uploadDocuments.tsx","policyholderPortal/damageCasePolicyholder/evaluator.tsx","policyholderPortal/policy/inquiry.tsx","policyholderPortal/policy/index.tsx","policyholderPortal/damageCasePolicyholder/damageCaseCreate.tsx","policyholderPortal/damageCasePolicyholder/index.tsx","inventory/receiveDepreciated/index.tsx","policyholderPortal/repairCasePolicyholder/customerEquipmentModelList.tsx","baseInfo/repairCase/interfaces.ts","policyholderPortal/repairCasePolicyholder/repairCaseCreate.tsx","repairation/repairCaseCenter/repairCenter.tsx","repairation/repairCaseCenter/assignCenter.tsx","repairation/repairCaseCenter/payment.tsx","repairation/repairCaseCenter/requestCheck.tsx","repairation/repairCaseCenter/estimation.tsx","repairation/repairCaseCenter/customerConfirmation.tsx","repairation/repairCaseCenter/repairationComplete.tsx","policyholderPortal/repairCasePolicyholder/index.tsx","repairation/repairCaseCenter/index.tsx","repairation/repairCaseCenter/archive.tsx","home/mainmenu.tsx","home/errorBoundary.tsx","components/backTopButton/index.tsx","components/signalR/signalRUserPanelConnection.ts","home/userPanel.tsx","home/mainlayout.tsx","account/login/userLogin.tsx","account/forgetPassword/timer.tsx","components/jalaliDatePicker/customJalaliDatePicker.tsx","account/login/registerPolicyholder.tsx","account/login/policyholderLogin.tsx","account/login/registerSerialOrIMEI.tsx","account/login/policyholderCheckLogin.tsx","account/login/index.tsx","account/forgetPassword/index.tsx","components/infrastructure/versionUpdateNotificationContainer.tsx","App.tsx","serviceWorkerRegistration.js","reportWebVitals.js","index.tsx"],"names":["__awaiter","this","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","Object","defineProperty","exports","ReactMediaRecorder","useReactMediaRecorder","RecorderErrors","react_1","require","_a","_this","_b","audio","_c","video","_d","onStop","_e","onStart","blobPropertyBag","_f","screen","_g","mediaRecorderOptions","_h","customMediaStream","_j","stopStreamsOnStop","_k","askPermissionOnMount","mediaRecorder","useRef","mediaChunks","mediaStream","_l","useState","status","setStatus","_m","isAudioMuted","setIsAudioMuted","_o","mediaBlobUrl","setMediaBlobUrl","_p","error","setError","getMediaStream","useCallback","requiredMedia","stream_1","stream","error_1","current","window","navigator","mediaDevices","getDisplayMedia","preferCurrentTab","getVideoTracks","addEventListener","stopRecording","getUserMedia","getAudioTracks","forEach","audioTrack","addTrack","name","useEffect","MediaRecorder","Error","checkConstraints","mediaType","supportedMediaConstraints","getSupportedConstraints","unSupportedConstraints","keys","filter","constraint","console","join","mimeType","isTypeSupported","getTracks","track","stop","onRecordingActive","data","onRecordingStart","onRecordingStop","chunk","blobProperty","assign","type","blob","Blob","url","URL","createObjectURL","muteAudio","mute","enabled","state","unMuteAudio","startRecording","some","readyState","active","undefined","ondataavailable","onstop","onstart","onerror","start","pauseRecording","pause","resumeRecording","resume","previewStream","MediaStream","previewAudioStream","clearBlobUrl","revokeObjectURL","props","render","enmEntityState","enmValidationLevel","enmOrderingType","AppContext","React","path","sidebarCollapsed","blockLayout","getMenuItems","setInfo","getUserInfo","setSidebarCollapsed","getPanelInfo","setPanelInfo","setBlockLayout","enmPropertyType","enmControlType","enmEntityManagerState","Core","isTestEnvironment","isDevelopement","operators","title","types","number","boolean","date","datetime","time","string","propertyType","lst","key","find","replace","c","r","Math","random","toString","propertySelector","fn","ind1","indexOf","chr","substr","message","createElement","dangerouslySetInnerHTML","__html","notification","decode","duration","placement","success","warning","obj","cloneObj","attribut","clone","options","a","retry","headers","contentType","i","fetch","method","JSON","stringify","response","get","errorNotification","json","onSuccess","onError","tryCount","callApi","onComplete","file","reader","FileReader","readAsDataURL","onload","s","d","text","persianToEnglish","isNaN","firstChar","yy","parseInt","charAt","params","search","k","encodeURIComponent","referenceUrl","stack","enm","map","id","renderBack","prefixCls","backIcon","onBack","componentName","back","className","onClick","getBackIcon","direction","renderTitle","avatar","subTitle","tags","extra","headingPrefixCls","hasHeading","backIconDom","hasTitle","renderFooter","footer","renderChildren","children","PageHeader","compact","updateCompact","isDestroyed","onResize","width","getPrefixCls","pageHeader","customizePrefixCls","style","breadcrumb","breadcrumbRender","customizeClassName","ghost","defaultBreadcrumbDom","routes","renderBreadcrumb","isBreadcrumbComponent","breadcrumbRenderDomFromProps","breadcrumbDom","classNames","BaseComponent","mounted","lookupForms","loadingCount","setState","windowSize","innerWidth","onLookupClosed","closeLookupForm","loading","header","backNode","color","icon","faReply","transform","flipX","size","margin","invokePath","fontSize","extraHeaderButtons","marginBottom","marginTop","backgroundColor","extraHeaderNodes","affix","offsetTop","target","document","getElementById","removeEventListener","destroyLookupForms","lookupForm","forceDisplay","displayLookupForm","res","setLoading","context","newOpt","hasError","withBlock","ValidationState","Successful","ValidationResults","Level","AccessDenied","Message","isAccessDenied","Unauthorized","isAuthorized","Warning","warningNotification","Info","successNotification","withBlockTitle","returnUrl","getUrl","to","pathname","lookups","display","displayMainForm","virtualRender","Component","contextType","AparatIcon","viewBox","height","FaqIcon","xmlns","fill","LinkIcon","over","setOver","onMouseOver","onMouseLeave","tooltip","isMobile","FilePdfFilled","colorClass","verticalAlign","VideoCameraFilled","position","marginLeft","marginRight","Help","getPageHeader","onClose","history","userInfo","isEvaluator","extraVariables","isInsurerCenter","transformIcon","TrashMenuItem","trashMenuItemRef","removeItem","detail","onTrashOver","onDragItem","showTooltip","ref","node","alignItems","visible","faTrashCan","faTrashAlt","bottom","MenuIcon","panelInfo","useContext","count","Icons","extraParams","isCustomLink","draggable","onDrag","trashIcon","dispatchEvent","CustomEvent","elementFromPoint","clientX","clientY","closest","onDragStart","onDragEnd","originalItem","whiteSpace","content","Home","tashElement","onMouseUp","addMenuItem","newItem","policyholderId","extraHomeMenuItems","localStorage","setItem","userFullName","item","splice","contentContainer","reports","Path","includes","Title","Icon","menuName","getItem","parse","evaluatorId","repairCenterId","insurerCenterId","isPolicyholder","menuItems","access","m","extraHomeLinkIcons","policyholderMenu","faListAlt","faFolderPlus","faFolderOpen","border","textAlign","justifyContent","faPlusCircle","faScrewdriverWrench","faComments","faQuestionCircle","readOnly","Item","faSearchPlus","faFileCircleCheck","faBusinessTime","faFileEdit","faEnvelopesBulk","faCalculator","faClipboardQuestion","faClipboardCheck","faFileInvoiceDollar","displayName","Faq","accordion","ErrorPage","decodeURIComponent","CustomSpinner","fontWeight","dayjs","extend","jalaliday","Lookup","self","component","lookupProps","debouncedSearch","isDropdownOpen","lookupBoxContainer","lookupBox","input","initializeComponent","disabled","property","lookup","lookupComponent","sender","onChange","selectedEntity","onLookupClose","parent","defaultValue","lookupDisplayFields","fields","split","isLookupMode","isChildComponent","preparelookupProps","AllComponents","addLookupForm","metadata","preLoad","initialize","onDataFetched","onSearch","selectedRowGuid","onClear","selectedItem","focus","dataIndex","newId","element","appendChild","ReactDOM","getComponent","getProperty","getContainer","openIfEmpty","allowTextChange","onSelect","debounce","prevProps","cancel","unmountComponentAtNode","remove","placeholder","defaultText","autoComplete","suffix","CloseCircleFilled","event","onFocus","classList","add","onBlur","showButton","padding","borderRight","RowGuid","LoadingOutlined","DownOutlined","onLookupOpen","fetchData","MoreOutlined","rotate","LookupBox","listBox","paging","ordering","columns","Properties","p","showInLookup","dropdownDisplayFields","showColumn","Number","newCol","onCell","record","rowIndex","responsive","index","renderColumn","displayData","lookupProperty","overflow","textOverflow","checked","combobox","optionsFunc","o","calendar","locale","format","controlType","numberinput","formatter","priceinput","sorter","sortable","allowNull","Data","Id","datasource","totalResultCount","TotalResultCount","open","setTimeout","isOpen","close","handleResize","handleScroll","PageNo","PageSize","container","exheight","parentBounding","getBoundingClientRect","contentContainerBounding","selfBounding","availableHeightOnTop","top","availableHeightOnBottom","min","max","left","overflowY","minHeight","right","floor","fa_IR","rowKey","sticky","showHeader","scroll","x","dataSource","indicator","pagination","defaultPageSize","ceil","showSizeChanger","total","showPrevNextJumpers","showLessItems","showQuickJumper","Array","field","order","Property","OrderBy","Ascending","Descending","pageSize","onRow","PriceInput","parser","onKeyPress","charCode","preventDefault","prefix","Option","Select","DataForm","Form","useForm","form","formLayout","formItemLayout","labelCol","xxl","xl","lg","md","sm","xs","wrapperCol","componentWillUnmount","onFinish","values","onSubmit","formNode","borderLess","scrollToFirstError","layout","initialValues","onReset","currentEntity","properties","showControl","isReadonly","disable","currentValue","textbox","stopPropagation","minWidth","initialValue","password","email","maxLength","minLength","template","renderControl","renderExtraParams","getFieldValue","precision","checkbox","valuePropName","mode","toDate","miladi","jalali","parsedDate","Date","getTime","getTimezoneOffset","currentDate","isDayjs","showTime","rules","rulesFunc","visibility","dir","zIndex","borderTop","htmlType","SaveOutlined","lineHeight","StopOutlined","resetable","background","UserEdit","inputFile","whiteList","whiteListExtensions","browseFile","click","changeFile","fileStream","files","toLowerCase","endsWith","getBase64","currentUser","setFile","filterable","required","len","mask","EyeOutlined","DeleteOutlined","ProfilePicturePath","src","preview","UserOutlined","CameraOutlined","hidden","accept","Phone","ModifiedProperties","State","Modified","entity","formData","FormData","append","Added","val","Unchanged","RowVrsn","fetchOpt","user","boxShadow","save","TabPane","Tabs","Profile","fetchProfileInfo","profile","extraTabs","Relations","Source","currentMenu","tab","dataformBoxShadow","defaultId","SourceId","defaultState","View","defaultActiveKey","User","Captcha","forceLoad","loadCaptchaImage","resetFields","newState","captchaImage","showLabel","paddingTop","opacity","alt","onKeyDown","keyCode","lang","ReloadOutlined","spin","SimplePage","span","backgroundImage","backgroundSize","extraHeaderCols","ResetPassword","userName","currentPassword","newPassword","captcha","getFieldsValue","borderTopLeftRadius","borderTopRightRadius","paddingLeft","paddingRight","paddingBottom","borderBottomLeftRadius","borderBottomRightRadius","validator","LockOutlined","confirmPassword","float","LogOut","logout","location","ChangeContact","phone","nationalCode","equipmentSerialNo","newPhoneNumber","newEmail","substring","remember","isNationalCode","emergencyCallNumber","MobileOutlined","MailOutlined","ResizableTitle","restProps","resizeHandles","handle","draggableOpts","enableUserSelectHack","enmConditionalOperators","enmLogicalOperators","ColumnFilter","getOperators","conditionIsOpen","currentFilter","operator","indeterminate","allowClear","filterIconStyle","dropdownMatchSelectWidth","suffixIcon","FilterFilled","onDropdownVisibleChange","Filter","typename","TypeName","AndFilter","OrFilter","collection","NotFilter","ComparisonFilter","propertyName","Operator","Value","getPropertyName","Create","Equal","NotEqual","Greater","GreaterOrEqual","Less","LessOrEqual","Like","StartsLike","EndsLike","InFilter","Values","Collection","IsNullFilter","TrueFilter","FalseFilter","Panel","Collapse","Search","Input","SearchForm","searchFilters","defaultValues","onFilterChanged","colsPerRow","columnsPerRow","searchAreaRows","slice","j","offset","allFilters","activeKey","showArrow","collapsible","UpOutlined","LeftOutlined","submit","renderExtraButtons","SearchOutlined","AuditLogItems","getColumns","Deleted","ModifiedColumns","entities","entityRowGuid","Items","TotalCount","EventId","AuditLog","EventUserFullName","EventDateTime","EventTitle","Entity","bordered","showTotal","BaseEntityManager","initialData","headerFilter","originalFilter","originalOrderings","onLoaded","onCellClick","onRowClick","onDataFetching","renderingToolbar","onEntityView","onEntityAdded","onEntityEdit","onEntityDelete","onEntitySaving","onEntitySaved","onEntityChanged","onFirstDataLoad","getInitialParams","searchable","searchArea","defaultSelectedRow","onStateChanged","extraViewNode","setRecordClassName","_gridContainer","_gridTable","viewRef","getDefaultState","viewButtonTitle","insertButtonTitle","baseUrl","getInitialDataUrl","extraFormNodeMarginTop","renderGridColumn","col","handleColumnResize","nextColumns","resizedCol","initSearchForm","propName","getCurrentFetchingInfo","fetchingInfo","Orderings","And","defaultSearchValues","filters","Paging","getHeaderFilter","navigationName","lookupMetadata","initMetadata","displayLookupProperties","comboboxOptions","currentOpt","enableAddCommand","visibleAddCommand","enableEditCommand","visibleEditCommand","enableDeleteCommand","visibleDeleteCommand","rightSideExtraComponent","constructor","onInitializing","List","expandedRowKeys","fixed","Table","EXPAND_COLUMN","getInitialData","prevProp","prevState","snapshot","initialParams","handleResultByInvoker","defaultRow","defaultEntity","expanded","rowGuid","Edit","CreatorId","New","excludeNavigationFromSearch","onHeaderCell","column","components","cell","AccessList","insertTitle","PlusCircleOutlined","modeTitle","hasBack","extraFormNode","colSpan","rowClassName","onExpand","onTableRowExpand","getElementsByClassName","scrollTo","expandable","expandRowByClick","columnWidth","showExpandColumn","indentSize","expandedRowRender","enableEdit","enableDelete","visibleEdit","visibleDelete","CheckOutlined","view","FileDoneOutlined","showHistory","HistoryOutlined","edit","FormOutlined","okButtonProps","cancelButtonProps","okText","cancelText","onConfirm","danger","expandIcon","emptyText","EntityManager","UserClaim","getIcon","renderClaims","claims","parentName","nodes","ParentName","Name","disableCheckbox","roleClaims","Claim","expandedKeysValue","expandedKeys","onCheck","checkedKeys","currentCheckedKeys","tmp","halfChecked","onSelectedRolesChanged","selectedRowKeys","selectedRows","roleIds","opt","userClaims","selectedRoles","userRoles","roles","allowEdit","loadData","userId","UserRoles","Role","Claims","RoleClaims","UserClaims","Roles","AllowEdit","UserId","role","u","RoleId","changes","extraButtons","descriptions","UserName","FullName","rowSelection","showLine","showIcon","checkable","treeData","checkStrictly","getRoles","onUserClaimsClick","onHeaderRow","RoleIds","startsWith","match","RoleClaim","roleId","Description","UserRole","onRoleClaimsClick","onUsersClick","Province","cityFormId","city","onCityClick","province","codes","enmUserTypes","City","ParentId","ZobdehUser","UserType","userType","RelationSourceId","relationSourceId","enmInsurerCenterTypes","enmInsurerCenterPersonnelTypes","UserRelation","metadataName","description","sourceId","InsurerCenterPersonnel","insurerCenter","InsurerCenterId","InsurerCenter","currentParams","insurer","Insurer","Branch","zobdehUserProps","Spc","Admin","DamageExpert1","DamageExpert2","DamageExpert3","DamageExpert4","onInsurerCenterClick","Type","Agency","Zone","onInsurerCenterPersonnelClick","currentType","insurerId","InsurerId","setFields","managerNameProp","parentProp","provinceProp","cityProp","isSearchForm","Parent","CityId","parentTitle","currentInsurerCenter","formated","onBranchesClick","insurerCenterAccess","DamageType","Problem","Brand","DocumentType","DamageReason","Bank","SendingItem","EquipmentItem","onlyGroups","parentId","IsGroup","onlySubItems","equipment","EquipmentDocumentType","selectedItems","documentTypes","equipmentDocumentTypes","saveAccess","currentEquipmentId","currentDamageReasonId","loginUrl","equipmentId","damageReasonId","EquipmentDocumentTypes","DocumentTypes","DocumentTypeId","Required","SaveAccess","documentType","documentTypeId","equipmentDocumentType","DamageReasonId","EquipmentId","defaultChecked","borderColor","EquipmentSendingItem","sendingItems","equipmentSendingItems","currentDamageTypeId","damageTypeId","EquipmentSendingItems","SendingItems","SendingItemId","sendingItem","DamageTypeId","EquipmentModel","brand","BrandId","Equipment","EquipmentProblem","equipmentProblems","problems","EquipmentProblems","Problems","ProblemId","problem","rootNode","equipmentItem","equipmentModel","getHeader","selectedkeys","equipments","renderEquipments","selectedKeys","equipmentItemInitialData","selectable","overflowX","LinkOutlined","OrderedListOutlined","BASE_URL","DEFAULT_URL_SCRIPT","DEFAULT_URL_STYLE","NeshanMap","onInit","mapEl","defaultOptions","maptype","poi","traffic","center","zoom","onLoad","head","querySelector","href","rel","L","script","createScriptStyle","neshan_map_loader","Map","SimpleMap","lat","lng","currentCityName","cityName","setPosition","items","onChangeMarker","myMap","marker","addTo","disableChangeMarker","on","setLatLng","latlng","EvaluatorDamageType","evaluator","EvaluatorId","Evaluator","Center","EvaluatorEquipment","enmPersonalityTypes","RepairCenterEquipment","isRepairCenter","repairCenter","RepairCenterId","RepairCenter","personalityTypesOptions","Actual","Legal","onEvaluatorEquipmentClick","onEvaluatorDamageTypeClick","onRepairCenterEquipmentClick","IsEvaluator","IsActive","IsRepairCenter","Or","provinceId","cityId","ProvinceId","insurers","Insurers","EvaluatorInsurers","parentCode","Code","Personality","MainCenterId","ParentCode","userEvaluatorAccess","evaluatorEquipmentAccess","evaluatorDamageTypeAccess","repairCenterEquipmentAccess","Latitude","Longitude","Policyholder","userPolicyholderFormId","userPolicyholder","BirthDate","enmIssuerTypes","enmDamageCaseStatus","enmEvaluationStatus","enmRepairationStatus","enmFinancialStatus","enmDocumentCheckStates","enmPolicyholderResponseTypes","enmEvaluationMethods","PdfViewer","toolbarPluginInstance","toolbarPlugin","renderDefaultToolbar","Toolbar","workerUrl","borderBottom","slot","restrictMode","Download","DownloadMenuItem","Print","PrintMenuItem","Open","OpenMenuItem","fileUrl","plugins","onDocumentLoad","Policy","tabsElement","onViewMode","minValidDate","loadPolicyEquipmentModels","MinValidDate","LoadPolicyEquipmentModels","LoadNavigations","LoadPolicyAttachments","returnurl","origin","invokepath","policyFranchiseAccess","policyEquipmentModelAccess","policyCoverageAccess","policyCert","PolicyAttachments","maxWidth","policyCertFrameDisplayed","itemLayout","PolicyCoverages","CoverageTitle","renderItem","Meta","PolicyEquipmentModels","brandTitle","BrandTitle","equipmentModelTitle","EquipmentModelTitle","EquipmentSerialNo","insuredValue","InsuredValue","PolicyFranchises","FranchiseTitle","percent","FranchisePercent","minimumValue","MinimumValue","scrollIntoView","enmContactStatus","evaluationMethodsOptions","makingContactStatusTitle","makingContactCommandTitle","makingContactTitle","contactSettingStatusTitle","contactSettingCommandTitle","VideoCall","PolicyholderInPerson","damageCaseIssuerTypesOptions","Self","Cp","Paliz","damageCaseStatusOptions","AssignEvaluator","Evaluation","AssignRepairCenter","Repairation","Financial","Closed","Rejected","ReceiveDepreciated","ReceiveEquipment","evaluationStatusOptions","DocumentCheck","DefectiveDocuments","ContactSetting","MakingContact","DamageEstimation","PolicyholderConfirmation","PolicyholderRejected","EvaluationComplete","SendEssentials","AllocateEvaluator","Check","WaitingForPiece","Done","Unrepairable","DamageCaseId","damageCase","Substatus","DefaultEvaluator","DefaultEvaluatorId","policy","PolicyEquipmentModel","policyholderNationalCode","NationalCode","policyholderFullName","TicketNo","SerialNo","Step","Steps","EvaluationComponentFormModal","formName","formProps","damageCaseDocumentTypeAttachments","EvaluationComponents","evaluationMethodChanged","onCancel","closable","centered","EvaluationComponent","statusName","onInitialDataFetching","onInitialDataFetched","extraHeaderDescriptions","policyUpdate","policyEquipmentModel","policyUpdated","EvaluationStatus","lastIndex","DamageCaseEvaluators","damageCaseEvaluator","DamageCaseEvaluatorId","evaluationSteps","allDamageCases","damageCaseEvaluatorId","EvaluationSteps","sort","b","CreateDateTime","DamageCaseDocumentTypeAttachments","PolicyCert","AllDamageCases","attachments","prevCheckCount","vIndex","flatMap","equipmentName","brandName","equipmentModelName","policyInfoTitle","InfoCircleFilled","closedDamageCaseCount","Status","currentDamageCaseCount","damageCaseHistoryTitle","DamageDate","EmergencyCallNumber","DownloadOutlined","download","ConfirmPossessionTransition","PlanName","StartDateTime","EndDateTime","row","PolicyholderFullName","PolicyholderNationalCode","PaymentDate","PaidAmount","steps","evaluationMethod","EvaluationMethod","ContactStatus","EvaluationMethodToPolicyholderInPerson","dateTime","cursor","renderBody","AttachmentViewer","fileNameParts","fileExtension","isImage","isPdf","FilePdfOutlined","FileOutlined","extraColumns","AttachmentDownloader","__","HelperPopover","descriptionPopoverOpen","setDescriptionPopoverOpen","handleClick","trigger","descriptionPopoverContent","QuestionCircleFilled","documentCheckStatesOptions","Reject","Defective","Complete","sampleDescriptions","DocumentCheckForm","CheckInPersonOrOnline","DefectiveDocumentTypes","setFieldsValue","numberOfPreviousEvaluations","NumberOfPreviousEvaluations","DamageCaseDocumentType","reduce","acc","documentTypesOptions","damageReasonOptions","damageReasons","documentCheckState","desc","onChangeDescription","requireDescription","DocumentCheckState","disableFormItems","needPolicyUpdate","CheckPolicyDate","Group","onChangeCheckInPersonOrOnline","buttonStyle","onChangeDocumentCheckState","onChangeDamageReason","rows","onChangeDefectiveDocumentTypes","columnTitle","selections","currentDocumentTypeAttachment","documentTypeAttachments","AttachmentId","onChangeDocumentTypeAttachment","WarningFilled","attachmentId","documentTypeAttachment","evaluation","defectiveDocumentTypes","assignEvaluatorAccess","Modal","confirm","autoFocusButton","onOk","nextStatus","damageCaseId","documentCheckInitialData","DamageReasons","ContactSettingForm","methodTypeTitle","policyholderConfirmation","ObjectionDescription","previousMakingContactAttachments","onChangeConferenceUrl","addonBefore","CopyOutlined","ConferenceUrl","clipboard","writeText","onChangeContactDate","inputReadOnly","ContactDate","contactSettingInitialData","PreviousMakingContactAttachments","AttachmentUploader","File","setValue","attachment","UploadOutlined","Meet","hasRecording","recordingStatus","setRecordingStatus","api","setApi","hangup","setHangup","startRecord","stopRecord","currentTimeSatmp","pathName","roomName","msSaveOrOpenBlob","link","removeChild","err","onClosed","removeAllListeners","emit","executeCommand","addListener","preventExecution","WarningOutlined","configOverwrite","prejoinConfig","buttonsWithNotifyClick","toolbarButtons","getIFrameRef","onApiReady","jitsiApi","spinner","contactStatusOptions","Unacceptable","Acceptable","Failed","MakingContactForm","onChangeContactStatus","EvaluationMakingContactAttachments","onChangeAttachments","contactSettings","contactSetting","contactDate","videoCall","conferenceUrl","fileName","damageTypes","makeingContactInitialData","SendingItemList","IsAvailable","Price","calculateAmount","EquipmentPrice","deductions","ratio","toPrecision","Franchise1EstimatedAmount","damageAmount","Franchise1DepreciationPercent","Franchise1DepreciationAmount","made10","Franchise1Made10","franchiseAmount","Franchise1Percent","Franchise1","payableAmount","Franchise1Amount","Franchise1PayableAmount","HasFranchise2","Franchise2EstimatedAmount","Franchise2DepreciationPercent","Franchise2DepreciationAmount","Franchise2Made10","Franchise2Percent","Franchise2","Franchise2Amount","Franchise2PayableAmount","PayableAmount","Deductions","DamageEstimationForm","currentEvaluatorId","confirmPermission","ExpertConfirmation","EssentialsReceived","policyCoverageOptions","policyCoverages","PolicyCoverage","PolicyCoverageId","policyFranchise1Options","policyFranchises","Franchise1Id","policyFranchise2Options","Franchise2Id","damageTypesOptions","onChangePolicyCoverage","onChangeDamageType","onChangeEquipmentPrice","wrap","onChangeSendingItemList","onChangeFranchise1","onChangeFranchise1DepreciationPercent","PercentageOutlined","onChangeFranchise1Description","onChangeFranchise1EstimatedAmount","onChangeHasFranchise2","onChangeFranchise2","onChangeFranchise2DepreciationPercent","onChangeFranchise2Description","onChangeFranchise2EstimatedAmount","onChangeExpertConfirmation","onChangeEssentialsReceived","onChangeExpertDescription","getSendingItems","Franchise1Description","Franchise2Description","ExpertDescription","damageEstimationInitialData","currentDamageEstimation","HasNextStep","sendingItemsList","DamageTypes","ConfirmPermission","policyholderResponseTypesOptions","Pay","Objection","PolicyholderConfirmationForm","responseType","ResponseType","bankProp","shebaNoRef","cardNoRef","PayableAmountString","unicodeBidi","selectionStart","selectionEnd","onPaste","clipboardData","getData","shebaNo","ShebaNo","bankCardNo","onKeyUp","p1","p2","p3","p4","SendOutlined","DamageCaseSummary","printDamageCaseSummary","invoker","pdfBase64String","TriesNames","DamageCaseEvaluator","evaluatorFilterProp","evaluatorFilterValue","evaluatorFilterOperator","handleCommand","assignEvaluator","command","forceAssignEvaluator","fetchItem","onAllocateEvaluatorClick","onPickupClick","showDamageCaseSummary","sendDamageCaseToBranch","SentToBranch","rowVrsn","removeDamageCase","ticketNo","receiveEssentials","downloadDamageCaseZipFile","base64Data","EvaluatorFilter","buttons","commands","handlePrint","PrinterOutlined","allocateEvaluatorAccess","pickupAccess","commandAccess","SecondEvaluationPermission","Estimations","commandTitle","damageEstimations","currentDamageEstiomation","pageBreakInside","Creator","DamageCaseDocumentTypes","evaluationStatusParam","statusParam","evaluationStatusId","enumToArray","statusId","lastEvaluation","estimation","waitingForExpert","isNewRecordOrDocumentChecking","EvaluationStartTime","damageEstiomationTitle","methodOpt","enmVoucherStatus","enmVoucherTypes","aggregateFunctions","AdvancedSearch","batchItem","getFilter","args","setStructure","itemId","isParent","defaultFilter","locked","defaultSearchParams","Batch","addItem","addBatch","getItems","logicalOperatorChanged","logicalOerator","notChanged","not","logicalOpr","forceUpdate","setFilter","onlyStructure","isValid","hasItem","subFilter","extraStyles","Button","borderRadius","PlusOutlined","_form","onColumnChanged","colName","currentColumn","firstOperator","onOperatorChanged","onInputValueChanged","onDefaultValueChanged","currentParam","onCheckboxValueChanged","onValueChanged","comparisonFilter","parentLogicalOperator","originalCol","NullOrEmpty","NotNullOrEmpty","inputComponent","operatorsList","toLocaleDateString","currentDatetime","String","showValueComponent","align","DamageCaseReport","_advancedSearch","currentRecord","reportColumns","displayColumnsData","aggregateTitles","dragColumn","setDefaults","resultColumns","groupingColumns","defaultGroupingColumns","displayColumns","defaultDisplayColumns","setDefaultStructure","loadTemplate","templateId","templateid","Template","Access","DefaultSearchParams","DisplayColumns","GroupingColumns","parts","aggregateFunc","DefaultFilter","showCountColumn","ShowCountColumn","currentTemplate","templateTitle","saveTemplate","getFilterStructure","reportTemplate","deleteTemplate","execute","source","dblClicked","aggregateTitle","colCount","currentExecuteData","detailsFetchingInfo","Excel","addSheet","addColumns","addDataSource","str2Percent","saveAs","excel","onSelectedDisplayColumnsChanged","onRowDoubleClick","currentFetchingInfo","onTableChange","onGroupingColumnsSelect","onGroupingColumnsDeselect","aggregateTitleRender","currentTitles","hasWarning","currentItem","onDisplayColumnDragEnd","fromIndex","currentTarget","dataset","toIndex","dataTransfer","dropEffect","onDisplayColumnDragOver","getReportColumns","displayColumn","orderNo","isDefaultDisplay","isGroupable","others","FilterOutlined","SettingOutlined","onDeselect","onDragOver","FileExcelOutlined","RowKey","onDoubleClick","IssueVoucherForm","insurerOptions","totalAmount","IssueVoucher","fetchInsurers","voucher","ChequeNo","ChequeDate","PolicyholderConfirmations","Amount","onSelectRows","sum","all","onSelectAll","DamageCaseVoucherPaymentDraft","issueVoucher","DamageCaseVoucherReceiptDraft","Issued","Receipt","DamageCaseVoucherPaymentItem","VoucherId","chequeDate","issueDate","IssueDate","VoucherNo","DamageCaseVoucherPayment","onVoucherItemsClick","Payment","bank","bankBranch","bankAccountNo","BankCode","BankBranch","BankAccountNo","BankCardNo","preventBack","DocumnetsUploader","UploadDocuments","notSelectedAttachments","DocumentTypeCode","essentialDocuments","removeable","onRemove","searchValue","provinceCode","cityCode","InquiryPolicy","equipmentType","inquiry","imei1","imei2","mobileFieldsStyle","otherFieldsStyle","PolicyList","inquiryPolicy","createDamage","defaultPolicyEquipmentModel","inquiryPolicies","LoadPolicyDamageCases","loadPolicyDamageCases","LoadPolicyNavigations","endDateTime","setMonth","getMonth","list","DamageCaseCreate","policyEquipmentModelProp","equipmentProp","brandProp","equipmentModelProp","damageReasonProp","damageProvinceProp","damageCityProp","evaluatorProp","initializing","onChangeDamageDate","toDateString","damageDate","submitDamage","IssuerType","DamageProvinceCode","damageProvince","DamageCityCode","damageCity","DamageAddress","damageAddress","ProvinceCode","CityCode","Address","address","DamageReasonCode","damageReason","confirmPossessionTransition","AvailableItems","EvaluatorCode","selectedEvaluator","createdItem","damageCreated","uploadDocuments","saved","showCurrentPolicyDamageCase","defaultDamageCaseId","policyEquipmentModelValidator","startDateTime","DamageCases","damageDateValidator","evaluatorsCount","matchMedia","matches","messageNode","listStyleType","disableEvaluator","onFinishFailed","errorInfo","errorFields","getFieldInstance","FileProtectOutlined","IssuesCloseOutlined","BarsOutlined","EnvironmentOutlined","WorkTime","CityName","EvaluatorsCount","DamageCasePolicyholder","scrolled","sendToEvaluation","PolicyholderId","createDamageCaseButton","needUserAction","policyholderPanel","behavior","policyholderName","msg","cntnt","zobdehLocation","FinancialStatus","WaitingForPay","InPayProgress","ReceiveDepreciatedDateTime","lastStep","action","arg","confirmReceiveDepreciated","PossessionTransition","enmRepairCaseStatus","enmSendMethods","enmRepairCaseCheckStates","enmPolicyholderRepairResponseTypes","CustomerEquipmentModelList","repairCaseStatusOptions","AssignCenter","Completed","ReturnDevice","Archived","repairationStatusOptions","userCartableTitle","centerCartableTitle","RequestCheck","SendDevice","Estimation","CustomerConfirmation","RepairationComplete","CustomerRejected","sendMethodsOptions","Courier","ProblemsList","Selected","RepairCaseCreate","customerEquipmentModelProp","getProblems","onChangeSerialOrIMEI","serialOrIMEI","customerEquipmentModel","inquiryIMEIisPassed","onChangeEquipment","getEquipmentBySerialOrIMEI","onChangeBrand","resetEquipmentModel","onChangeProvince","onChangeCity","equipmentPreparelookupProps","onChangeEquipmentModel","equipmentModelPreparelookupProps","provincePreparelookupProps","cityPreparelookupProps","submitRequest","repairCase","SendMethod","sendMethod","BrandCode","EquipmentModelCode","SerialOrIMEI","validateFields","equipmentSerialNoOrIMEI","AdminConfirm","adminDescription","AdminDescription","completeCallback","onChangeAdminConfirm","onChangeAdminDescription","repairCaseCenter","PaymentReceipts","RepairCaseId","ReceiptDateTime","PaymentReceiptDateTime","newEntity","Tag","CheckCircleOutlined","RepairCaseCenters","requestCheck","RepairCaseCenterId","Confirm","EstimatedAmount","complete","estimations","lastEstimation","CenterLocation","RepairCasePolicyholder","repairCaseId","repairationSteps","RepairationStatus","FetchingDetails","RepairCaseAttachments","RepairCaseProblems","CustomerEquipmentModel","Customer","repairCaseCenterId","RepairationComponents","Paid","estimatedAmount","DeviceReturned","returnDate","DeviceReturnedDateTime","datatype","RepairCaseCenter","repairCenterFilterProp","repairCenterFilterValue","repairCenterFilterOperator","showArchivesFilterProp","showArchivesFilterValue","executingCommand","receiveDevice","payment","returnDevice","archive","getExcelColumns","SentToRepairCenterDateTime","EstimationDateTime","RepairationCompleteDateTime","DeviceReceivedDateTime","PaymentDateTime","exportToExcel","RepairCenterFilter","ShowArchives","extraFilters","repairCenterFilterNode","currentRepairCenter","RepairCaseArchive","SubMenu","Menu","Sider","Layout","MainMenu","sider","isSmallWindow","onDragEndMenu","menuItem","handleClickOutside","contains","triggers","onOpenChange","latestOpenKey","openKeys","rootSubmenuKeys","parentid","_self","renderMenu","defautltOpenMenu","collapseWidth","collapsed","collapsedWidth","breakpoint","onBreakpoint","broken","onCollapse","_type","theme","defaultSelectedKeys","ErrorBoundary","logError","BackTopButton","setShowButton","lastPosition","checkScrollHeight","scrollTop","stroke","strokeWidth","strokeLinecap","strokeLinejoin","UserPanelHubConnector","connection","subscribeEvents","unsubscribeEvents","signalR","withUrl","skipNegotiation","transport","WebSockets","withAutomaticReconnect","build","catch","onMessageReceived","off","instance","PnlMsg","numbers","InfoCircleOutlined","UserPanel","drawerCollapsed","setDrawerCollapsed","selectedMessageId","panelInfoRef","changeDrawerCollapse","subscribeUserPanelHubEvanthandler","userPanelHubDto","MessageGuid","messageContent","showNotification","info","setUserPanelNotification","getUserPanelWaitingDamageCasesCount","newData","messageGuid","Notification","requestPermission","permission","visibilityState","vibrate","onclick","notify","msgs","messages","faMessage","bodyStyle","Header","Content","Footer","MainLayout","logo","toggle","getMenu","MenuItems","UserInfo","removeAccount","profilePicturePath","menu","KeyOutlined","UserDeleteOutlined","blockTitle","footerStyle","MenuFoldOutlined","MenuUnfoldOutlined","overlay","arrow","faUserAlt","faSignOutAlt","exact","currentPath","currentSearch","UserLogin","opts","rememberMe","resetPassword","FirstLogin","firstLogin","Timer","timer","estimationTime","minutes","seconds","startTimer","bind","countDown","secs","divisor_for_minutes","divisor_for_seconds","timeLeftVar","secondsToTime","clearInterval","setInterval","expired","padStart","monthList","month","days","CustomJalaliDatePicker","currentMonthDays","isLeapYear","thisYear","year","years","mounths","day","newValue","modulus","isLeapYearJalali","currentDays","RegisterPolicyholder","policyholderState","setPolicyholderState","loaded","originalProvinceList","provinceList","provinceState","setProvinceState","cityList","cityState","setCityState","policyholderLoading","register","policyholder","birthDate","FirstName","LastName","FatherName","Email","PostalCode","selectedProvinceCode","selectedCityCode","onReturn","IsNew","onRegistered","getProvinceList","getCityList","debouncedCitySearch","useMemo","checkPolicyholder","policyholderData","firstName","lastName","fatherName","option","newProvinceState","optionFilterProp","newCityState","PolicyholderLogin","forceCaptcha","firstSendCode","codeSent","lastSendCode","submitKind","login","sendCode","phoneNotDefined","disableLoginBtn","pointerEvents","RegisterSerialOrIMEI","PolicyholderCheckLogin","check","Exists","LastSendCode","exists","isNew","inquerySerialOrIMEI","Login","loginName","LockFilled","renderSwitch","ForgetPassword","sendActivationCode","phoneNumber","log","VersionUpdateNotificationContainer","setVisible","useUpdateCheck","interval","reloadPage","ExclamationCircleOutlined","App","layoutBlockCount","useLocation","URLSearchParams","parseParams","replaceState","Provider","Boolean","hostname","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","getElementsByTagName","getAttribute","rootElement","basename","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.fc50d27c.chunk.js","sourcesContent":["\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    function adopt(value) {\r\n        return value instanceof P ? value : new P(function (resolve) {\r\n            resolve(value);\r\n        });\r\n    }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) {\r\n            try {\r\n                step(generator.next(value));\r\n            } catch (e) {\r\n                reject(e);\r\n            }\r\n        }\r\n\r\n        function rejected(value) {\r\n            try {\r\n                step(generator[\"throw\"](value));\r\n            } catch (e) {\r\n                reject(e);\r\n            }\r\n        }\r\n\r\n        function step(result) {\r\n            result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\r\n        }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = {\r\n        label: 0,\r\n        sent: function () {\r\n            if (t[0] & 1) throw t[1];\r\n            return t[1];\r\n        },\r\n        trys: [],\r\n        ops: []\r\n    },\r\n        f, y, t, g;\r\n    return g = {\r\n        next: verb(0),\r\n        \"throw\": verb(1),\r\n        \"return\": verb(2)\r\n    }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\r\n        return this;\r\n    }), g;\r\n\r\n    function verb(n) {\r\n        return function (v) {\r\n            return step([n, v]);\r\n        };\r\n    }\r\n\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0:\r\n                case 1:\r\n                    t = op;\r\n                    break;\r\n                case 4:\r\n                    _.label++;\r\n                    return {\r\n                        value: op[1], done: false\r\n                    };\r\n                case 5:\r\n                    _.label++;\r\n                    y = op[1];\r\n                    op = [0];\r\n                    continue;\r\n                case 7:\r\n                    op = _.ops.pop();\r\n                    _.trys.pop();\r\n                    continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\r\n                        _ = 0;\r\n                        continue;\r\n                    }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {\r\n                        _.label = op[1];\r\n                        break;\r\n                    }\r\n                    if (op[0] === 6 && _.label < t[1]) {\r\n                        _.label = t[1];\r\n                        t = op;\r\n                        break;\r\n                    }\r\n                    if (t && _.label < t[2]) {\r\n                        _.label = t[2];\r\n                        _.ops.push(op);\r\n                        break;\r\n                    }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop();\r\n                    continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) {\r\n            op = [6, e];\r\n            y = 0;\r\n        } finally {\r\n                f = t = 0;\r\n            }\r\n        if (op[0] & 5) throw op[1];\r\n        return {\r\n            value: op[0] ? op[1] : void 0,\r\n            done: true\r\n        };\r\n    }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", {\r\n    value: true\r\n});\r\nexports.ReactMediaRecorder = exports.useReactMediaRecorder = exports.RecorderErrors = void 0;\r\nvar react_1 = require(\"react\");\r\nvar RecorderErrors;\r\n(function (RecorderErrors) {\r\n    RecorderErrors[\"AbortError\"] = \"media_aborted\";\r\n    RecorderErrors[\"NotAllowedError\"] = \"permission_denied\";\r\n    RecorderErrors[\"NotFoundError\"] = \"no_specified_media_found\";\r\n    RecorderErrors[\"NotReadableError\"] = \"media_in_use\";\r\n    RecorderErrors[\"OverconstrainedError\"] = \"invalid_media_constraints\";\r\n    RecorderErrors[\"TypeError\"] = \"no_constraints\";\r\n    RecorderErrors[\"NONE\"] = \"\";\r\n    RecorderErrors[\"NO_RECORDER\"] = \"recorder_error\";\r\n})(RecorderErrors = exports.RecorderErrors || (exports.RecorderErrors = {}));\r\n\r\nfunction useReactMediaRecorder(_a) {\r\n    var _this = this;\r\n    var _b = _a.audio,\r\n        audio = _b === void 0 ? true : _b,\r\n        _c = _a.video,\r\n        video = _c === void 0 ? false : _c,\r\n        _d = _a.onStop,\r\n        onStop = _d === void 0 ? function () {\r\n            return null;\r\n        } : _d,\r\n        _e = _a.onStart,\r\n        onStart = _e === void 0 ? function () {\r\n            return null;\r\n        } : _e,\r\n        blobPropertyBag = _a.blobPropertyBag,\r\n        _f = _a.screen,\r\n        screen = _f === void 0 ? false : _f,\r\n        _g = _a.mediaRecorderOptions,\r\n        mediaRecorderOptions = _g === void 0 ? null : _g,\r\n        _h = _a.customMediaStream,\r\n        customMediaStream = _h === void 0 ? null : _h,\r\n        _j = _a.stopStreamsOnStop,\r\n        stopStreamsOnStop = _j === void 0 ? true : _j,\r\n        _k = _a.askPermissionOnMount,\r\n        askPermissionOnMount = _k === void 0 ? false : _k;\r\n    var mediaRecorder = (0, react_1.useRef)(null);\r\n    var mediaChunks = (0, react_1.useRef)([]);\r\n    var mediaStream = (0, react_1.useRef)(null);\r\n    var _l = (0, react_1.useState)(\"idle\"),\r\n        status = _l[0],\r\n        setStatus = _l[1];\r\n    var _m = (0, react_1.useState)(false),\r\n        isAudioMuted = _m[0],\r\n        setIsAudioMuted = _m[1];\r\n    var _o = (0, react_1.useState)(null),\r\n        mediaBlobUrl = _o[0],\r\n        setMediaBlobUrl = _o[1];\r\n    var _p = (0, react_1.useState)(\"NONE\"),\r\n        error = _p[0],\r\n        setError = _p[1];\r\n    var getMediaStream = (0, react_1.useCallback)(function () {\r\n        return __awaiter(_this, void 0, void 0, function () {\r\n            var requiredMedia, stream_1, audioStream, stream, error_1;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        setStatus(\"acquiring_media\");\r\n                        requiredMedia = {\r\n                            audio: typeof audio === \"boolean\" ? !!audio : audio,\r\n                            video: typeof video === \"boolean\" ? !!video : video,\r\n                        };\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 9, , 10]);\r\n                        if (!customMediaStream) return [3, 2];\r\n                        mediaStream.current = customMediaStream;\r\n                        return [3, 8];\r\n                    case 2:\r\n                        if (!screen) return [3, 6];\r\n                        if (window.navigator.mediaDevices.getDisplayMedia) {\r\n                            return [4, window.navigator.mediaDevices.getDisplayMedia({\r\n                                video: video || true, audio: audio, preferCurrentTab: true\r\n                            })];\r\n                        }\r\n                        return [4, window.navigator.getDisplayMedia({\r\n                            video: video || true, audio: audio, preferCurrentTab: true\r\n                        })];\r\n                    case 3:\r\n                        stream_1 = (_a.sent());\r\n                        stream_1.getVideoTracks()[0].addEventListener(\"ended\", function () {\r\n                            stopRecording();\r\n                        });\r\n                        if (!audio) return [3, 5];\r\n                        if (window.navigator.mediaDevices.getUserMedia) {\r\n                            return [4, window.navigator.mediaDevices.getUserMedia({\r\n                                audio: audio,\r\n                            })];\r\n                        }\r\n                        return [4, window.navigator.getUserMedia({\r\n                            audio: audio,\r\n                        })];\r\n                    case 4:\r\n                        audioStream = _a.sent();\r\n                        audioStream.getAudioTracks().forEach(function (audioTrack) {\r\n                            return stream_1.addTrack(audioTrack);\r\n                        });\r\n                        _a.label = 5;\r\n                    case 5:\r\n                        mediaStream.current = stream_1;\r\n                        return [3, 8];\r\n                    case 6:\r\n                        if (window.navigator.mediaDevices.getUserMedia) {\r\n                            return [4, window.navigator.mediaDevices.getUserMedia(requiredMedia)];\r\n                        }\r\n                        return [4, window.navigator.getUserMedia(requiredMedia)];\r\n                    case 7:\r\n                        stream = _a.sent();\r\n                        mediaStream.current = stream;\r\n                        _a.label = 8;\r\n                    case 8:\r\n                        setStatus(\"idle\");\r\n                        return [3, 10];\r\n                    case 9:\r\n                        error_1 = _a.sent();\r\n                        setError(error_1.name);\r\n                        setStatus(\"idle\");\r\n                        return [3, 10];\r\n                    case 10:\r\n                        return [2];\r\n                }\r\n            });\r\n        });\r\n    }, [audio, video, screen]);\r\n    (0, react_1.useEffect)(function () {\r\n        if (!window.MediaRecorder) {\r\n            throw new Error(\"Unsupported Browser\");\r\n        }\r\n        if (screen) {\r\n            if (!window.navigator.getDisplayMedia && !window.navigator.mediaDevices.getDisplayMedia) {\r\n                throw new Error(\"This browser doesn't support screen capturing\");\r\n            }\r\n        }\r\n        var checkConstraints = function (mediaType) {\r\n            var supportedMediaConstraints = navigator.mediaDevices.getSupportedConstraints();\r\n            var unSupportedConstraints = Object.keys(mediaType).filter(function (constraint) {\r\n                return !supportedMediaConstraints[constraint];\r\n            });\r\n            if (unSupportedConstraints.length > 0) {\r\n                console.error(\"The constraints \" + unSupportedConstraints.join(\",\") + \" doesn't support on this browser. Please check your ReactMediaRecorder component.\");\r\n            }\r\n        };\r\n        if (typeof audio === \"object\") {\r\n            checkConstraints(audio);\r\n        }\r\n        if (typeof video === \"object\") {\r\n            checkConstraints(video);\r\n        }\r\n        if (mediaRecorderOptions && mediaRecorderOptions.mimeType) {\r\n            if (!MediaRecorder.isTypeSupported(mediaRecorderOptions.mimeType)) {\r\n                console.error(\"The specified MIME type you supplied for MediaRecorder doesn't support this browser\");\r\n            }\r\n        }\r\n        if (!mediaStream.current && askPermissionOnMount) {\r\n            getMediaStream();\r\n        }\r\n        return function () {\r\n            if (mediaStream.current) {\r\n                var tracks = mediaStream.current.getTracks();\r\n                tracks.forEach(function (track) {\r\n                    return track.stop();\r\n                });\r\n            }\r\n        };\r\n    }, [audio, screen, video, getMediaStream, mediaRecorderOptions, askPermissionOnMount,]);\r\n    var startRecording = function () {\r\n        return __awaiter(_this, void 0, void 0, function () {\r\n            var isStreamEnded;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        setError(\"NONE\");\r\n                        if (!!mediaStream.current) return [3, 2];\r\n                        return [4, getMediaStream()];\r\n                    case 1:\r\n                        _a.sent();\r\n                        _a.label = 2;\r\n                    case 2:\r\n                        if (!mediaStream.current) return [3, 5];\r\n                        isStreamEnded = mediaStream.current.getTracks().some(function (track) {\r\n                            return track.readyState === \"ended\";\r\n                        });\r\n                        if (!isStreamEnded) return [3, 4];\r\n                        return [4, getMediaStream()];\r\n                    case 3:\r\n                        _a.sent();\r\n                        _a.label = 4;\r\n                    case 4:\r\n                        if (!mediaStream.current.active) {\r\n                            return [2];\r\n                        }\r\n                        mediaRecorder.current = new MediaRecorder(mediaStream.current, mediaRecorderOptions || undefined);\r\n                        mediaRecorder.current.ondataavailable = onRecordingActive;\r\n                        mediaRecorder.current.onstop = onRecordingStop;\r\n                        mediaRecorder.current.onstart = onRecordingStart;\r\n                        mediaRecorder.current.onerror = function () {\r\n                            setError(\"NO_RECORDER\");\r\n                            setStatus(\"idle\");\r\n                        };\r\n                        mediaRecorder.current.start();\r\n                        setStatus(\"recording\");\r\n                        _a.label = 5;\r\n                    case 5:\r\n                        return [2];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    var onRecordingActive = function (_a) {\r\n        var data = _a.data;\r\n        mediaChunks.current.push(data);\r\n    };\r\n    var onRecordingStart = function () {\r\n        onStart();\r\n    };\r\n    var onRecordingStop = function () {\r\n        var chunk = mediaChunks.current[0];\r\n        var blobProperty = Object.assign({\r\n            type: chunk.type\r\n        }, blobPropertyBag || (video ? {\r\n            type: \"video/mp4\"\r\n        } : {\r\n            type: \"audio/wav\"\r\n        }));\r\n        var blob = new Blob(mediaChunks.current, blobProperty);\r\n        var url = URL.createObjectURL(blob);\r\n        setStatus(\"stopped\");\r\n        setMediaBlobUrl(url);\r\n        onStop(url, blob);\r\n    };\r\n    var muteAudio = function (mute) {\r\n        setIsAudioMuted(mute);\r\n        if (mediaStream.current) {\r\n            mediaStream.current.getAudioTracks().forEach(function (audioTrack) {\r\n                return (audioTrack.enabled = !mute);\r\n            });\r\n        }\r\n    };\r\n    var pauseRecording = function () {\r\n        if (mediaRecorder.current && mediaRecorder.current.state === \"recording\") {\r\n            setStatus(\"paused\");\r\n            mediaRecorder.current.pause();\r\n        }\r\n    };\r\n    var resumeRecording = function () {\r\n        if (mediaRecorder.current && mediaRecorder.current.state === \"paused\") {\r\n            setStatus(\"recording\");\r\n            mediaRecorder.current.resume();\r\n        }\r\n    };\r\n    var stopRecording = function () {\r\n        if (mediaRecorder.current) {\r\n            if (mediaRecorder.current.state !== \"inactive\") {\r\n                setStatus(\"stopping\");\r\n                mediaRecorder.current.stop();\r\n                if (stopStreamsOnStop) {\r\n                    mediaStream.current && mediaStream.current.getTracks().forEach(function (track) {\r\n                        return track.stop();\r\n                    });\r\n                }\r\n                mediaChunks.current = [];\r\n            }\r\n        }\r\n    };\r\n    return {\r\n        error: RecorderErrors[error],\r\n        muteAudio: function () {\r\n            return muteAudio(true);\r\n        },\r\n        unMuteAudio: function () {\r\n            return muteAudio(false);\r\n        },\r\n        startRecording: startRecording,\r\n        pauseRecording: pauseRecording,\r\n        resumeRecording: resumeRecording,\r\n        stopRecording: stopRecording,\r\n        mediaBlobUrl: mediaBlobUrl,\r\n        status: status,\r\n        isAudioMuted: isAudioMuted,\r\n        previewStream: mediaStream.current ? new MediaStream(mediaStream.current.getVideoTracks()) : null,\r\n        previewAudioStream: mediaStream.current ? new MediaStream(mediaStream.current.getAudioTracks()) : null,\r\n        clearBlobUrl: function () {\r\n            if (mediaBlobUrl) {\r\n                URL.revokeObjectURL(mediaBlobUrl);\r\n            }\r\n            setMediaBlobUrl(null);\r\n            setStatus(\"idle\");\r\n        },\r\n    };\r\n}\r\nexports.useReactMediaRecorder = useReactMediaRecorder;\r\nvar ReactMediaRecorder = function (props) {\r\n    return props.render(useReactMediaRecorder(props));\r\n};\r\nexports.ReactMediaRecorder = ReactMediaRecorder;","import { IFilter } from \"./filtering\";\r\n\r\nexport interface IUserInfo {\r\n    userName?: string | null;\r\n    userFullName?: string | null;\r\n    phone?: string | null;\r\n    profilePicturePath?: string | null;\r\n    extraVariables: any;\r\n}\r\n\r\nexport interface IPanelMessage {\r\n    id: number;\r\n    rowGuid: any;\r\n    content: string;\r\n    link?: string;\r\n}\r\n\r\nexport interface IPanelInfo {\r\n    data: { key: string; Message?: string; Id?: number; RowGuid: any; Path: string; }[];\r\n}\r\n\r\nexport interface IComponentItem {\r\n    Id: string;\r\n    ParentId?: string;\r\n    Path?: string;\r\n    Item?: string;\r\n    Title: string;\r\n    Icon?: string;\r\n}\r\n\r\nexport enum enmEntityState {\r\n    Unchanged = 0,\r\n    Added = 1,\r\n    Modified = 2,\r\n    Deleted = 3\r\n}\r\n\r\nexport interface IEntity {\r\n    Id: number;\r\n    RowGuid: string;\r\n    RowVrsn?: any;\r\n    CreatorId: number;\r\n    CreateDateTime: Date;\r\n    IsDeleted?: boolean;\r\n    State: enmEntityState;\r\n    ModifiedProperties: string[];\r\n}\r\n\r\nexport enum enmValidationLevel {\r\n    Info = 0,\r\n    Warning = 1,\r\n    Error = 2,\r\n    Exception = 3,\r\n    Unauthorized = 4,\r\n    AccessDenied = 5,\r\n    ResetPassword = 6,\r\n    FirstLogin = 7\r\n}\r\n\r\nexport interface IValidationResult {\r\n    Message?: string;\r\n    Level: enmValidationLevel;\r\n    RowGuid: string;\r\n    PropertyName: string;\r\n}\r\n\r\nexport interface IValidationState {\r\n    Successful: boolean;\r\n    ValidationResults: IValidationResult[];\r\n}\r\n\r\nexport interface IResult {\r\n    ValidationState: IValidationState;\r\n}\r\n\r\nexport interface IResultSet<T> extends IResult {\r\n    Data?: T;\r\n}\r\n\r\nexport interface IFetchingResult<T> extends IResult {\r\n    TotalResultCount: number;\r\n    Data?: T[];\r\n}\r\n\r\nexport enum enmOrderingType {\r\n    Ascending = 0,\r\n    Descending = 1\r\n}\r\n\r\nexport interface IPaging {\r\n    PageNo: number;\r\n    PageSize: number;\r\n}\r\n\r\nexport interface IOrdering {\r\n    Property: string;\r\n    OrderBy: enmOrderingType;\r\n}\r\n\r\nexport interface IFetchingInfo {\r\n    Filter?: IFilter;\r\n    Paging?: IPaging;\r\n    Orderings: IOrdering[];\r\n    FetchingDetails?: boolean;\r\n}\r\n\r\nexport interface ICallOptions {\r\n    tryCount?: number;\r\n    url: string;\r\n    data?: any;\r\n    onSuccess?: (result: IResult) => void;\r\n    onError?: (error: any) => void;\r\n    onComplete?: () => void;\r\n    withBlock?: boolean;\r\n    withBlockTitle?: string;\r\n    headers?: { key: string; value: string; }[];\r\n    contentType?: boolean;\r\n}\r\n","import * as React from \"react\";\r\nimport { IComponentItem, IPanelInfo, IUserInfo } from \"./models\";\r\n\r\nexport interface AppContextProps {\r\n    params?: any;\r\n    path: string;\r\n    sidebarCollapsed: boolean;\r\n    blockLayout: boolean;\r\n    blockTitle?: string;\r\n    getPanelInfo: () => IPanelInfo;\r\n    getMenuItems: () => IComponentItem[];\r\n    getUserInfo: () => IUserInfo | null | undefined;\r\n    setInfo: (menuItems: IComponentItem[], userInfo?: IUserInfo | null) => void;\r\n    setSidebarCollapsed: (collapsed: boolean) => void;\r\n    setPanelInfo: (panelInfo: IPanelInfo) => void;\r\n    setBlockLayout: (blockLayout: boolean, blockTitle?: string) => void;\r\n}\r\n\r\nconst AppContext = React.createContext<AppContextProps>({\r\n    path: \"/\",\r\n    sidebarCollapsed: false,\r\n    blockLayout: false,\r\n    getMenuItems: () => [],\r\n    setInfo: () => { },\r\n    getUserInfo: () => null,\r\n    setSidebarCollapsed: () => { },\r\n    getPanelInfo: () => {\r\n        return { data: [] }\r\n    },\r\n    setPanelInfo: () => { },\r\n    setBlockLayout: () => { },\r\n});\r\n\r\nexport default AppContext;","import { Rule } from \"antd/lib/form\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\nimport React from \"react\";\r\nimport { IBaseComponent, IBaseProps, IBaseStates } from \"../infrastructure/baseComponent\";\r\nimport { IEntity, IFetchingResult, IOrdering, IPaging } from \"../infrastructure/models\";\r\nimport { Breakpoint } from \"antd/lib/_util/responsiveObserve\";\r\n\r\nexport enum enmPropertyType {\r\n    string = 1,\r\n    date = 2,\r\n    time = 3,\r\n    datetime = 4,\r\n    boolean = 5,\r\n    number = 6\r\n}\r\n\r\nexport enum enmControlType {\r\n    textbox = 1,\r\n    numberinput = 2,\r\n    checkbox = 3,\r\n    date = 4,\r\n    datetime = 5,\r\n    autocomplete = 6, // autocomplete\r\n    dropdown = 7,\r\n    combobox = 8,\r\n    lookup = 9,\r\n    template = 10,\r\n    password = 11,\r\n    email = 12,\r\n    priceinput = 13\r\n}\r\n\r\nexport interface IProperty {\r\n    title?: string;\r\n    dataIndex?: string;\r\n    width?: number | string;\r\n    key?: string;\r\n    allowNull?: boolean;\r\n    disabled?: boolean;\r\n    disable?: (sender: any) => boolean;\r\n    propertyType?: enmPropertyType;\r\n    controlType?: enmControlType;\r\n    showColumn?: boolean;\r\n    showControl?: boolean;\r\n    renderColumn?: (value: any, record: any, index: number) => React.ReactNode | undefined;\r\n    renderControl?: (currentEntity: any) => React.ReactNode | undefined;\r\n    renderExtraParams?: (currentEntity: any) => any | undefined;\r\n    rules?: Rule[];\r\n    fixed?: 'left' | 'right';\r\n    responsive?: Breakpoint[];\r\n    rulesFunc?: (currentEntity: any) => Rule[] | undefined;\r\n    visibility?: (currentEntity: any) => boolean | undefined;\r\n    showInLookup?: boolean;\r\n    combobox?: {\r\n        options?: { value?: any; title?: string; }[];\r\n        optionsFunc?: (sender: any, record: any) => { value?: any; title?: string; }[];\r\n        defaultValue?: any;\r\n        mode?: 'multiple' | 'tags';\r\n    };\r\n    lookup?: {\r\n        lookupComponent: React.ComponentType<any> | string;\r\n        lookupProperty: string;\r\n        lookupDisplayFields: string[];\r\n        dropdownDisplayFields?: string[];\r\n        showButton?: boolean;\r\n    };\r\n    precision?: number;\r\n    filterable?: boolean;\r\n    sortable?: boolean;\r\n    formatter?: (value: any | undefined, info: {\r\n        userTyping: boolean;\r\n        input: string;\r\n    }) => string;\r\n    parser?: (displayValue: string | undefined) => string | number;\r\n    maxLength?: number;\r\n    minLength?: number;\r\n    onKeyPress?: (event: React.KeyboardEvent<HTMLInputElement>, value: any) => void;\r\n}\r\n\r\nexport interface IMetadata {\r\n    name: string;\r\n    title: string;\r\n    showHistory?: boolean;\r\n    Properties: IProperty[];\r\n    excludeNavigationFromSearch?: boolean;\r\n}\r\n\r\nexport interface IEntityManagerProps<TEntity extends IEntity> extends IBaseProps {\r\n    defaultId?: number;\r\n    defaultState?: enmEntityManagerState;\r\n    showHeader?: boolean;\r\n    dataformBoxShadow?: boolean;\r\n    hasBack?: boolean;\r\n    onClose?: (sender: any) => void;\r\n    preLoad?: boolean;\r\n    onEntitySaving?: (entity: TEntity) => boolean;\r\n    onEntitySaved?: (entity: TEntity) => void;\r\n    onLoaded?: (initialData: IInitialData) => void;\r\n    onStateChanged?: (prevSate: enmEntityManagerState, state: enmEntityManagerState) => void;\r\n    extraHeaderNodes?: () => React.ReactNode;\r\n    extraViewNode?: () => React.ReactNode;\r\n    onDataFetched?: (data: IFetchingResult<TEntity>) => void;\r\n    backNode?: (state: enmEntityManagerState) => React.ReactNode;\r\n}\r\n\r\nexport enum enmEntityManagerState {\r\n    List = 0,\r\n    View = 1,\r\n    New = 2,\r\n    Edit = 3,\r\n    Delete = 4\r\n}\r\n\r\nexport interface IEntityManager extends IBaseComponent {\r\n    preLoad?: boolean;\r\n    metadata: IMetadata;\r\n    fetchData(handleResultByInvoker?: boolean): Promise<void>;\r\n    search(value?: string, selectedRowGuid?: string, paging?: IPaging, ordering?: IOrdering, handleResultByInvoker?: boolean): Promise<void>;\r\n}\r\n\r\nexport interface IEntityManagerStates<TEntity extends IEntity> extends IBaseStates {\r\n    data: TEntity[];\r\n    totalResultCount?: number;\r\n    state: enmEntityManagerState;\r\n    columns: ColumnsType<any>;\r\n    expandedRowKeys: React.Key[];\r\n    currentEntity?: TEntity;\r\n}\r\n\r\nexport interface IInitialParams {\r\n\r\n}\r\n\r\nexport interface IInitialData {\r\n    AccessList: { [key: string]: boolean };\r\n}\r\n\r\n","import React from \"react\";\r\nimport { notification } from \"antd\";\r\nimport { enmPropertyType } from \"../entityManager/interfaces\";\r\nimport { ICallOptions, IResult } from \"./models\";\r\n\r\nclass TCore {\r\n    isTestEnvironment?: boolean;\r\n    isDevelopement?: boolean;\r\n    operators: { [op: number]: { title: string; types: Array<enmPropertyType>; }; };\r\n    constructor() {\r\n        this.operators = {\r\n            0: {\r\n                title: \"مساوی با\",\r\n                types: [\r\n                    enmPropertyType.number,\r\n                    enmPropertyType.boolean,\r\n                    enmPropertyType.date,\r\n                    enmPropertyType.datetime,\r\n                    enmPropertyType.time,\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            1: {\r\n                title: \"نا مساوی با\",\r\n                types: [\r\n                    enmPropertyType.boolean,\r\n                    enmPropertyType.date,\r\n                    enmPropertyType.datetime,\r\n                    enmPropertyType.time,\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            2: {\r\n                title: \"کوچکتر از\",\r\n                types: [\r\n                    enmPropertyType.number,\r\n                    enmPropertyType.date,\r\n                    enmPropertyType.datetime,\r\n                    enmPropertyType.time,\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            3: {\r\n                title: \"بزرگتر از\",\r\n                types: [\r\n                    enmPropertyType.number,\r\n                    enmPropertyType.date,\r\n                    enmPropertyType.datetime,\r\n                    enmPropertyType.time,\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            4: {\r\n                title: \"شروع با\", types: [\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            5: {\r\n                title: \"خاتمه با\", types: [\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            6: {\r\n                title: \"شامل\", types: [\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            7: {\r\n                title: \"کوچکتر یا مساوی با\",\r\n                types: [\r\n                    enmPropertyType.number,\r\n                    enmPropertyType.date,\r\n                    enmPropertyType.datetime,\r\n                    enmPropertyType.time,\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            8: {\r\n                title: \"بزرگتر یا مساوی با\",\r\n                types: [\r\n                    enmPropertyType.number,\r\n                    enmPropertyType.date,\r\n                    enmPropertyType.datetime,\r\n                    enmPropertyType.time,\r\n                    enmPropertyType.string\r\n                ]\r\n            },\r\n            9: {\r\n                title: \"شامل نباشد\", types: [\r\n                    enmPropertyType.string\r\n                ]\r\n            }\r\n        };\r\n    }\r\n    getOperators(propertyType: enmPropertyType): any[] {\r\n        let lst: any[] = [];\r\n        for (var key in Core.operators) {\r\n            let val = Core.operators[key].types.find(t => t === propertyType);\r\n            if (val != null)\r\n                lst.push({ key, value: Core.operators[key].title });\r\n        };\r\n\r\n        return lst;\r\n    }\r\n    newId(): string {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n            var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n            return v.toString(16);\r\n        });\r\n    }\r\n    getPropertyName<T>(propertySelector: (obj: T) => void): string {\r\n        let fn = propertySelector.toString();\r\n        let ind1 = fn.indexOf('.') + 1;\r\n        let chr = fn.indexOf(';') > -1 ? ';' : '}';\r\n        let propname = fn.substr(ind1, (fn.indexOf(chr) > -1 ? fn.indexOf(chr) - ind1 : fn.length - ind1));\r\n        return propname;\r\n    }\r\n    decode(message: string): any {\r\n        return React.createElement(\"div\", { dangerouslySetInnerHTML: { __html: message } });\r\n    }\r\n    errorNotification(message?: string | null) {\r\n        if (message)\r\n            notification.error({ message: this.decode(message), duration: 7, placement: 'bottomLeft' });\r\n    }\r\n    successNotification(message?: string | null) {\r\n        if (message)\r\n            notification.success({ message: this.decode(message), duration: 7, placement: 'bottomLeft' });\r\n    }\r\n    warningNotification(message?: string | null) {\r\n        if (message)\r\n            notification.warning({ message: this.decode(message), duration: 7, placement: 'bottomLeft' });\r\n    }\r\n    clone(obj: any): any {\r\n        var cloneObj: any = {};\r\n        for (var attribut in obj) {\r\n            if (typeof obj[attribut] === \"object\") {\r\n                cloneObj[attribut] = this.clone(obj[attribut]);\r\n            } else {\r\n                cloneObj[attribut] = obj[attribut];\r\n            }\r\n        }\r\n        return cloneObj;\r\n    }\r\n    async callApi(options: ICallOptions): Promise<boolean> {\r\n        let retry = false;\r\n        let result: IResult | null = null;\r\n        let headers: any = options.contentType !== false ? { 'content-type': 'application/json;charset=UTF-8' } : {};\r\n        if (options.headers?.length) {\r\n            for (let i = 0; i < options.headers.length; i++)\r\n                headers[options.headers[i].key] = options.headers[i].value;\r\n        }\r\n        try {\r\n            let response = await fetch(\"api/\" + options.url, {\r\n                method: 'POST',\r\n                body: options.contentType !== false ? JSON.stringify(options.data) : options.data,\r\n                headers\r\n            });\r\n\r\n            this.isTestEnvironment = response.headers.get('IsTestEnvironment') === \"true\";\r\n            this.isDevelopement = response.headers.get('IsDevelopement') === \"true\";\r\n\r\n            if (response.status === 429) {\r\n                this.errorNotification('تعداد درخواست بیش از حد مجاز است');\r\n            }\r\n            else if (response.status === 503) {\r\n                this.errorNotification('متأسفانه سرویس مورد نظر در دسترس نیست، لطفاً دقایقی دیگر تلاش نمایید');\r\n            }\r\n            else if (response.status === 500) {\r\n                this.errorNotification('متأسفانه خطایی در اجرای سرویس رخ داده است');\r\n            }\r\n            else if (response.status === 200) {\r\n                result = await response.json();\r\n                options.onSuccess?.call(this, result!);\r\n            }\r\n            else  {\r\n                retry = true;\r\n            }\r\n        }\r\n        catch (e) {\r\n            options.onError?.call(this, e);\r\n        }\r\n\r\n        if (retry) {\r\n            const tryCount = (options.tryCount ?? 0) + 1;\r\n            if (tryCount < 3) {\r\n                options.tryCount = tryCount;\r\n                return await this.callApi(options);\r\n            }\r\n            else {\r\n                this.errorNotification('متأسفانه سرویس در دسترس نیست، لطفاً دقایقی دیگر تلاش نمایید');\r\n            }\r\n        }\r\n\r\n        options.onComplete?.call(this);\r\n        return !retry;\r\n    }\r\n    getBase64(file: any) {\r\n        return new Promise<string>((resolve, reject) => {\r\n            const reader = new FileReader();\r\n            reader.readAsDataURL(file);\r\n            reader.onload = () => resolve(reader.result as string);\r\n            reader.onerror = error => reject(error);\r\n        });\r\n    }\r\n    persianToEnglish(s: string): string {\r\n        return s.replace(/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf(d).toString());\r\n    }\r\n    isNationalCode(text?: any): boolean {\r\n        text = text || '';\r\n        text = this.persianToEnglish(text);\r\n        if (isNaN(text)) {\r\n            return false;\r\n        } else if (text === \"\") {\r\n            return false;\r\n        } else if (text.length !== 10) {\r\n            return false;\r\n        } else {\r\n\r\n            let firstChar = text[0];\r\n            for (let i = 1; i <= text.length - 1; i++) {\r\n                if (firstChar !== text[i])\r\n                    break;\r\n                if (firstChar === text[i] && i === text.length - 1)\r\n                    return false;\r\n            }\r\n\r\n            let yy = 0;\r\n            for (let i = 0; i < text.length - 1; i++) {\r\n                let yv = text[i] * (text.length - i);\r\n                yy += yv;\r\n            }\r\n            let r = yy % 11;\r\n            let c = parseInt(text.charAt(9));\r\n            if ((r === 0 && r === c) || (r === 1 && c === 1) || (r > 1 && c === 11 - r)) {\r\n                return true;\r\n            } else {\r\n                return false\r\n            }\r\n        }\r\n    }\r\n    getUrl(path: string, params?: any) {\r\n        let url = '';\r\n        if (path) {\r\n            let search = '';\r\n            for (let k in params) {\r\n                if (search === '')\r\n                    search += '?';\r\n                if (search !== '?')\r\n                    search += '&';\r\n                search += k + '=' + params[k];\r\n            }\r\n            url = encodeURIComponent(path + search);\r\n        }\r\n        return url;\r\n    }\r\n    async logError(referenceUrl: string, message: string, stack: string) {\r\n        await this.callApi({ url: 'home/loguserinterfaceerror', data: { referenceUrl, message, stack } });\r\n    }\r\n    enumToArray(enm: any) {\r\n        let map: { id: number; name: string }[] = [];\r\n        for (var n in enm) {\r\n            if (typeof enm[n] === 'number') {\r\n                map.push({ id: enm[n] as any, name: n });\r\n            }\r\n        }\r\n        return map;\r\n    }\r\n}\r\n\r\nexport const Core = new TCore();","import { Avatar, AvatarProps, Breadcrumb, BreadcrumbProps, TagType } from \"antd\";\r\nimport classNames from 'classnames';\r\nimport ArrowLeftOutlined from '@ant-design/icons/ArrowLeftOutlined';\r\nimport ArrowRightOutlined from '@ant-design/icons/ArrowRightOutlined';\r\nimport ResizeObserver from 'rc-resize-observer';\r\nimport { ConfigConsumer, ConfigConsumerProps, DirectionType } from \"antd/lib/config-provider\";\r\nimport React from \"react\";\r\nimport LocaleReceiver from 'antd/lib/locale-provider/LocaleReceiver';\r\nimport TransButton from 'antd/lib/_util/transButton';\r\n\r\nexport interface PageHeaderProps {\r\n    backIcon?: React.ReactNode;\r\n    prefixCls?: string;\r\n    title?: React.ReactNode;\r\n    subTitle?: React.ReactNode;\r\n    style?: React.CSSProperties;\r\n    breadcrumb?: BreadcrumbProps | React.ReactElement<typeof Breadcrumb>;\r\n    breadcrumbRender?: (props: PageHeaderProps, defaultDom: React.ReactNode) => React.ReactNode;\r\n    tags?: React.ReactElement<TagType> | React.ReactElement<TagType>[];\r\n    footer?: React.ReactNode;\r\n    extra?: React.ReactNode;\r\n    avatar?: AvatarProps;\r\n    onBack?: (e?: React.MouseEvent<HTMLDivElement>) => void;\r\n    className?: string;\r\n    ghost?: boolean;\r\n}\r\nconst renderBack = (\r\n    prefixCls: string,\r\n    backIcon?: React.ReactNode,\r\n    onBack?: (e?: React.MouseEvent<HTMLDivElement>) => void,\r\n) => {\r\n    if (!backIcon || !onBack) {\r\n        return null;\r\n    }\r\n    return (\r\n        <LocaleReceiver componentName=\"PageHeader\">\r\n            {({ back }: { back: string }) => (\r\n                <div className={`${prefixCls}-back`}>\r\n                    <TransButton\r\n                        onClick={(e?: React.MouseEvent<HTMLDivElement>) => {\r\n                            onBack?.(e);\r\n                        }}\r\n                        className={`${prefixCls}-back-button`}\r\n                        aria-label={back}\r\n                    >\r\n                        {backIcon}\r\n                    </TransButton>\r\n                </div>\r\n            )}\r\n        </LocaleReceiver>\r\n    );\r\n};\r\nconst renderBreadcrumb = (breadcrumb: BreadcrumbProps) => <Breadcrumb {...breadcrumb} />;\r\nconst getBackIcon = (props: PageHeaderProps, direction: DirectionType = 'ltr') => {\r\n    if (props.backIcon !== undefined) {\r\n        return props.backIcon;\r\n    }\r\n    return direction === 'rtl' ? <ArrowRightOutlined /> : <ArrowLeftOutlined />;\r\n};\r\nconst renderTitle = (\r\n    prefixCls: string,\r\n    props: PageHeaderProps,\r\n    direction: DirectionType = 'ltr',\r\n) => {\r\n    const { title, avatar, subTitle, tags, extra, onBack } = props;\r\n    const headingPrefixCls = `${prefixCls}-heading`;\r\n    const hasHeading = title || subTitle || tags || extra;\r\n    // If there is nothing, return a null\r\n    if (!hasHeading) {\r\n        return null;\r\n    }\r\n    const backIcon = getBackIcon(props, direction);\r\n    const backIconDom = renderBack(prefixCls, backIcon, onBack);\r\n    const hasTitle = backIconDom || avatar || hasHeading;\r\n    return (\r\n        <div className={headingPrefixCls}>\r\n            {hasTitle && (\r\n                <div className={`${headingPrefixCls}-left`}>\r\n                    {backIconDom}\r\n                    {avatar && <Avatar {...avatar} />}\r\n                    {title && (\r\n                        <span\r\n                            className={`${headingPrefixCls}-title`}\r\n                            title={typeof title === 'string' ? title : undefined}\r\n                        >\r\n                            {title}\r\n                        </span>\r\n                    )}\r\n                    {subTitle && (\r\n                        <span\r\n                            className={`${headingPrefixCls}-sub-title`}\r\n                            title={typeof subTitle === 'string' ? subTitle : undefined}\r\n                        >\r\n                            {subTitle}\r\n                        </span>\r\n                    )}\r\n                    {tags && <span className={`${headingPrefixCls}-tags`}>{tags}</span>}\r\n                </div>\r\n            )}\r\n            {extra && <span className={`${headingPrefixCls}-extra`}>{extra}</span>}\r\n        </div>\r\n    );\r\n};\r\nconst renderFooter = (prefixCls: string, footer: React.ReactNode) => {\r\n    if (footer) {\r\n        return <div className={`${prefixCls}-footer`}>{footer}</div>;\r\n    }\r\n    return null;\r\n};\r\nconst renderChildren = (prefixCls: string, children: React.ReactNode) => (\r\n    <div className={`${prefixCls}-content`}>{children}</div>\r\n);\r\n\r\nconst PageHeader: React.FC<PageHeaderProps> = props => {\r\n    const [compact, updateCompact] = React.useState(false);\r\n    const isDestroyed = React.useRef(false);\r\n    const onResize = ({ width }: { width: number }) => {\r\n        if (!isDestroyed.current) {\r\n            updateCompact(width < 768);\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            isDestroyed.current = true;\r\n        };\r\n    },[]);\r\n\r\n    return (\r\n        <ConfigConsumer>\r\n            {({ getPrefixCls, pageHeader, direction }: ConfigConsumerProps) => {\r\n                const {\r\n                    prefixCls: customizePrefixCls,\r\n                    style,\r\n                    footer,\r\n                    children,\r\n                    breadcrumb,\r\n                    breadcrumbRender,\r\n                    className: customizeClassName,\r\n                } = props;\r\n                let ghost: undefined | boolean = true;\r\n                // Use `ghost` from `props` or from `ConfigProvider` instead.\r\n                if ('ghost' in props) {\r\n                    ghost = props.ghost;\r\n                } else if (pageHeader && 'ghost' in pageHeader) {\r\n                    ghost = pageHeader.ghost;\r\n                }\r\n                const prefixCls = getPrefixCls('page-header', customizePrefixCls);\r\n                const getDefaultBreadcrumbDom = () => {\r\n                    if ((breadcrumb as BreadcrumbProps)?.routes) {\r\n                        return renderBreadcrumb(breadcrumb as BreadcrumbProps);\r\n                    }\r\n                    return null;\r\n                };\r\n                const defaultBreadcrumbDom = getDefaultBreadcrumbDom();\r\n                const isBreadcrumbComponent = breadcrumb && 'props' in breadcrumb;\r\n                //  support breadcrumbRender function\r\n                const breadcrumbRenderDomFromProps =\r\n                    breadcrumbRender?.(props, defaultBreadcrumbDom) ?? defaultBreadcrumbDom;\r\n                const breadcrumbDom = isBreadcrumbComponent ? breadcrumb : breadcrumbRenderDomFromProps;\r\n                const className = classNames(prefixCls, customizeClassName, {\r\n                    'has-breadcrumb': !!breadcrumbDom,\r\n                    'has-footer': !!footer,\r\n                    [`${prefixCls}-ghost`]: ghost,\r\n                    [`${prefixCls}-rtl`]: direction === 'rtl',\r\n                    [`${prefixCls}-compact`]: compact,\r\n                });\r\n                return (\r\n                    <ResizeObserver onResize={onResize}>\r\n                        <div className={className} style={style}>\r\n                            {breadcrumbDom}\r\n                            {renderTitle(prefixCls, props, direction)}\r\n                            {children && renderChildren(prefixCls, children)}\r\n                            {renderFooter(prefixCls, footer)}\r\n                        </div>\r\n                    </ResizeObserver>\r\n                );\r\n            }}\r\n        </ConfigConsumer>\r\n    );\r\n};\r\nexport default PageHeader;","import { Space, Tooltip, Affix } from \"antd\";\r\nimport React, { ReactNode } from \"react\";\r\nimport { enmValidationLevel, ICallOptions, IResult } from \"./models\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport AppContext, { AppContextProps } from \"./appContext\";\r\nimport { Core } from \"./core\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faReply } from '@fortawesome/free-solid-svg-icons';\r\nimport PageHeader from \"../pageHeader\";\r\n\r\nexport interface IBaseProps {\r\n    onClose?: (sender: any) => void;\r\n    isLookupMode?: boolean;\r\n    isChildComponent?: boolean;\r\n    invokePath?: string;\r\n    style?: React.CSSProperties;\r\n}\r\n\r\nexport interface IBaseStates {\r\n    loading: boolean;\r\n    isAuthorized: boolean;\r\n    isAccessDenied?: boolean;\r\n    displayLookupForm?: string;\r\n    windowSize: number;\r\n    hasError?: boolean | null;\r\n}\r\n\r\nexport interface IBaseComponent {\r\n    //lookupForms: { [id: string]: ReactNode }\r\n    addLookupForm(id: string, lookupForm: React.ReactNode, forceDisplay?: boolean): void;\r\n    destroyLookupForms(id?: string | null): void;\r\n    title: string;\r\n}\r\n\r\nexport class BaseComponent<TProps extends IBaseProps, TStates extends IBaseStates> extends React.Component<TProps, TStates> implements IBaseComponent {\r\n    static contextType = AppContext;\r\n    title: string;\r\n    constructor(props: TProps) {\r\n        super(props)\r\n        this.title = \"\";\r\n    }\r\n    mounted: boolean = false;\r\n    private lookupForms: { [id: string]: ReactNode } = {};\r\n    private loadingCount: number = 0;\r\n    setLoading(loading: boolean = true) {\r\n        if (!this.mounted)\r\n            return;\r\n        if (loading)\r\n            this.loadingCount += 1;\r\n        else\r\n            this.loadingCount -= 1;\r\n\r\n        if (this.loadingCount === 1)\r\n            this.setState({ loading: true });\r\n        if (this.loadingCount <= 0) {\r\n            this.loadingCount = 0;\r\n            this.setState({ loading: false });\r\n        }\r\n    }\r\n    getPageHeader(props: {\r\n        title: string;\r\n        subTitle?: string;\r\n        onBack?: () => void;\r\n        extraHeaderButtons?: React.ReactNode;\r\n        extraHeaderNodes?: React.ReactNode;\r\n        backNode?: React.ReactNode;\r\n        affix?: boolean;\r\n    }) {\r\n        if (!this.mounted)\r\n            return <></>;\r\n\r\n        const header = (\r\n            <PageHeader\r\n                //className=\"box\"\r\n                key={props.title + \"-pageheader\"}\r\n                ghost={false}\r\n                onBack={props.backNode ? () => { } : async () => { props.onBack && props.onBack(); return Promise.resolve(); }}\r\n                backIcon={props.backNode ? props.backNode : (props.onBack ? <Tooltip title=\"بازگشت به صفحه قبل\" ><Space style={{ color: \"darkblue\" }}>  <FontAwesomeIcon key=\"back-icon\" className=\"back-color\" icon={faReply} transform={{ flipX: true }} size={'xl'} style={{ margin: 10 }} />{this.props.invokePath && this.props.invokePath}</Space></Tooltip> : undefined)}\r\n                title={props.title}\r\n                subTitle={<span style={{ fontSize: 'medium', color: 'lightblue' }}>{props.subTitle}</span>}\r\n                extra={props.extraHeaderButtons}\r\n                style={{ marginBottom: 10, marginTop: 10, backgroundColor: \"rgb(205, 215, 245)\" }}\r\n            >\r\n                {props.extraHeaderNodes}\r\n            </PageHeader>\r\n        );\r\n        return (\r\n            props.affix === true ? <Affix className=\"page-header-affix\" offsetTop={0} target={() => document.getElementById(\"content-container\")}>{header}</Affix > : header\r\n        );\r\n    }\r\n    componentDidMount() {\r\n        this.mounted = true;\r\n        window.addEventListener('resize', this.onResize);\r\n    }\r\n    onResize = () => {\r\n        if (!this.mounted)\r\n            return;\r\n        this.setState({ windowSize: window.innerWidth <= 765 ? 1 : 2 });\r\n    }\r\n    componentWillUnmount() {\r\n        this.mounted = false;\r\n        window.removeEventListener('resize', this.onResize);\r\n        this.destroyLookupForms();\r\n    }\r\n\r\n    addLookupForm(id: string, lookupForm: React.ReactNode, forceDisplay: boolean = true/*default forceDisplay is true*/) {\r\n        this.lookupForms[id] = lookupForm;\r\n        if (forceDisplay === true)\r\n            this.setState({ displayLookupForm: id });\r\n    }\r\n    destroyLookupForms(id?: string | null) {\r\n        if (id) {\r\n            delete this.lookupForms[id];\r\n            return;\r\n        }\r\n        for (let key in this.lookupForms)\r\n            delete this.lookupForms[key];\r\n    }\r\n    closeLookupForm() {\r\n        const { displayLookupForm } = this.state;\r\n        if (displayLookupForm)\r\n            delete this.lookupForms[displayLookupForm!];\r\n        this.setState({ displayLookupForm: undefined });\r\n    }\r\n    onLookupClosed = () => {\r\n        this.closeLookupForm();\r\n    }\r\n    async callApi(options: ICallOptions): Promise<boolean> {\r\n        let res: IResult | null = null;\r\n        if (this.mounted) {\r\n            this.setLoading();\r\n        }\r\n\r\n        let headers: any = [];\r\n        if (options.headers?.length) {\r\n            for (let i = 0; i < options.headers.length; i++)\r\n                headers.push(options.headers[i]);\r\n        }\r\n\r\n        const { setBlockLayout } = this.context as AppContextProps;\r\n\r\n        let newOpt: ICallOptions = {\r\n            url: options.url,\r\n            headers: headers,\r\n            data: options.data,\r\n            contentType: options.contentType,\r\n            onSuccess: (result) => {\r\n                res = result;\r\n                if (this.mounted && options.onSuccess) {\r\n                    try {\r\n                        options.onSuccess(result);\r\n                    } catch (error) {\r\n                        if (process.env.NODE_ENV === 'production') {\r\n                            console.error(error);\r\n                            this.setState({ hasError: true });\r\n                        }\r\n                        else\r\n                            throw error;\r\n                    }\r\n                }\r\n                return true;\r\n            },\r\n            onError: (error) => {\r\n                if (this.mounted && options.onError)\r\n                    options.onError(error);\r\n                return false;\r\n            },\r\n            onComplete: () => {\r\n                if (options.withBlock) {\r\n                    setBlockLayout(false);\r\n                }\r\n\r\n                if (this.mounted) {\r\n\r\n                    if (res) {\r\n                        if (!res.ValidationState.Successful) {\r\n                            if (res.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.AccessDenied)) {\r\n                                Core.errorNotification(res.ValidationState.ValidationResults[0].Message!);\r\n                                this.setState({ isAccessDenied: true });\r\n                                return;\r\n                            }\r\n                            if (res.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.Unauthorized)) {\r\n                                Core.errorNotification(res.ValidationState.ValidationResults[0].Message!);\r\n                                this.setState({ isAuthorized: false });\r\n                                return;\r\n                            }\r\n                        }\r\n                        res.ValidationState.ValidationResults.forEach(v => {\r\n                            if (v.Level === enmValidationLevel.Error)\r\n                                Core.errorNotification(v.Message);\r\n                            else if (v.Level === enmValidationLevel.Warning)\r\n                                Core.warningNotification(v.Message);\r\n                            else if (v.Level === enmValidationLevel.Info)\r\n                                Core.successNotification(v.Message);\r\n                        });\r\n                    }\r\n\r\n                    if (options.onComplete)\r\n                        options.onComplete();\r\n\r\n                    this.setLoading(false);\r\n                }\r\n            }\r\n        };\r\n\r\n        if (options.withBlock) {\r\n            setBlockLayout(true, options.withBlockTitle);\r\n        }\r\n\r\n        return await Core.callApi(newOpt);\r\n    }\r\n    virtualRender(): ReactNode {\r\n        return (<></>);\r\n    }\r\n    render() {\r\n        if (!this.mounted) {\r\n            return <></>;\r\n        }\r\n        if (!this.state) {\r\n            return (<p> در این کلاس مقدار state تنظیم نشده است </p>);\r\n        }\r\n        const { path, params } = this.context as AppContextProps;\r\n        if (this.state.hasError) {\r\n            let returnUrl = '';\r\n            const url = Core.getUrl(path, params);\r\n            if (url !== '')\r\n                returnUrl = '?returnUrl=' + url;\r\n            let errorPageUrl = '/errorpage';\r\n            return (<Redirect to={{ pathname: errorPageUrl, search: returnUrl }} />);\r\n        }\r\n        if (!this.state.isAuthorized) {\r\n            let returnUrl = '';\r\n            const url = Core.getUrl(path, params);\r\n            if (url !== '')\r\n                returnUrl = '?returnUrl=' + url;\r\n            return (<Redirect to={{ pathname: '/login', search: returnUrl }} />);\r\n        }\r\n        if (this.state.isAccessDenied === true) {\r\n            return (<Redirect to={'/'} />);\r\n        }\r\n        else {\r\n            const lookups: ReactNode[] = [];\r\n            for (let key in this.lookupForms)\r\n                lookups.push(<div key={key} style={{ display: this.state.displayLookupForm === key ? \"block\" : \"none\" }}>{this.lookupForms[key]}</div>);\r\n            const displayMainForm = this.state.displayLookupForm ? \"none\" : \"block\";\r\n\r\n            return (\r\n                <div style={this.props.style}>\r\n                    {lookups}\r\n                    <div style={{ display: displayMainForm }}>{this.virtualRender()}</div>\r\n                </div>\r\n            );\r\n        }\r\n    }\r\n}","import { Row, Tooltip } from 'antd';\r\nimport { FilePdfFilled, VideoCameraFilled } from '@ant-design/icons';\r\nimport { HTMLAttributeAnchorTarget } from 'react';\r\nimport './home.css';\r\nimport { Link } from 'react-router-dom';\r\nimport { Transform } from '@fortawesome/fontawesome-svg-core';\r\nimport React from 'react';\r\nimport AppContext, { AppContextProps } from '../components/infrastructure/appContext';\r\nimport { BaseComponent, IBaseProps, IBaseStates } from '../components/infrastructure/baseComponent';\r\nimport { isMobile } from 'react-device-detect';\r\n\r\n\r\nconst AparatIcon = (props: { width: string; height: string; }) => {\r\n    return (\r\n\r\n        <svg viewBox=\"0 0 69 69\" width={props.width} height={props.height} style={{ color: 'darkslategrey' }}>\r\n            <g>\r\n                <path d=\"M29.81,2.39 L23.51,0.72 C17.862943,-0.77904572 12.06978,2.58313791 10.57,8.23 L9,14.16 C14.182586,7.72726376 21.626533,3.51701609 29.81,2.39 Z\" id=\"Path\"></path>\r\n                <path d=\"M2.22,39.69 L0.68,45.49 C-0.819046,51.137057 2.543138,56.9302203 8.19,58.43 L14.19,60.03 C7.785492,54.9953325 3.511889,47.7334212 2.22,39.69 Z\" id=\"Path\"></path>\r\n                <path d=\"M60.78,10.61 L54,8.82 C60.869123,14.1038778 65.335137,21.9194019 66.4,30.52 L68.25,23.52 C69.73264,17.89483 66.395762,12.1278836 60.78,10.61 Z\" id=\"Path\"></path>\r\n                <path d=\"M39,66.62 L45.45,68.33 C51.097057,69.8290457 56.89022,66.4668621 58.39,60.82 L60.21,53.98 C55.083976,60.8260117 47.460467,65.3692061 39,66.62 Z\" id=\"Path\"></path>\r\n                <path d=\"M34.49,4.9 C22.505784,4.9 11.70161,12.1191177 7.115449,23.1910899 C2.529288,34.2630621 5.064305,47.0074533 13.538426,55.4815739 C22.012547,63.9556945 34.756938,66.4907116 45.82891,61.9045505 C56.900882,57.3183895 64.12,46.5142163 64.12,34.53 C64.12,18.1658029 50.854197,4.9 34.49,4.9 Z M17.71,19.68 C18.594678,15.092887 23.029988,12.0911064 27.617284,12.9748333 C32.20458,13.8585603 35.20728,18.293248 34.324504,22.8807273 C33.441727,27.4682066 29.007662,30.4718254 24.42,29.59 C22.215709,29.1662984 20.270158,27.8839602 19.011669,26.0252975 C17.75318,24.1666348 17.284928,21.8840271 17.71,19.68 Z M30,45.28 C29.115322,49.867113 24.680012,52.8688936 20.092716,51.9851667 C15.50542,51.1014397 12.50272,46.666752 13.385496,42.0792727 C14.268273,37.4917934 18.702338,34.4881746 23.29,35.37 C25.494291,35.7937016 27.439842,37.0760398 28.698331,38.9347025 C29.95682,40.7933652 30.425072,43.0759729 30,45.28 Z M33.59,38.43 C31.554147,38.0361572 30.221447,36.0684756 30.611139,34.0318239 C31.000831,31.9951723 32.965792,30.658464 35.003234,31.0440041 C37.040676,31.4295442 38.381386,33.3917767 38,35.43 C37.616059,37.4706248 35.650667,38.8137173 33.61,38.43 L33.59,38.43 Z M51.24,49.37 C50.355322,53.957113 45.920012,56.9588936 41.332716,56.0751667 C36.74542,55.1914397 33.74272,50.756752 34.625496,46.1692727 C35.508273,41.5817934 39.942338,38.5781746 44.53,39.46 C46.737973,39.8790968 48.688453,41.1595088 49.951057,43.0187072 C51.213661,44.8779055 51.684614,47.1630814 51.26,49.37 L51.24,49.37 Z M45.64,33.69 C41.052887,32.8053224 38.051106,28.3700124 38.934833,23.7827162 C39.81856,19.1954199 44.253248,16.1927201 48.840727,17.0754963 C53.428207,17.9582725 56.431825,22.3923378 55.55,26.98 C54.662614,31.5569205 50.239633,34.5532777 45.66,33.68 L45.64,33.69 Z\" id=\"Shape\"></path>\r\n            </g>\r\n        </svg >\r\n    );\r\n}\r\n\r\nconst FaqIcon = (props: { width: string; height: string; }) => {\r\n    return (\r\n        <svg\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            viewBox=\"0 0 122.88 116.17\"\r\n            transform=\"matrix(-1,0,0,1,0,0)\"\r\n            {...props}\r\n        >\r\n            <defs>\r\n                <style>{\".cls-1{fill-rule:evenodd;}\"}</style>\r\n            </defs>\r\n            <path\r\n                fill=\"#F0C51E\"\r\n                className=\"cls-1\"\r\n                d=\"M94.5,20.23,83.39,17.3,96.2,0l11.93,2L99.75,11l12.8,3.6L85.15,37.71,94.5,20.23Zm-61,27.86a20.49,20.49,0,0,1,.41-5,6.85,6.85,0,0,1,3.27-4.28c.69-.45,1.3-.89,1.84-1.31a5.75,5.75,0,0,0,1.29-1.33,2.88,2.88,0,0,0,.09-3C38.91,30.68,34.7,31.87,34.7,35H26.44a9.79,9.79,0,0,1,1.61-5.76A9.27,9.27,0,0,1,32.25,26a15.46,15.46,0,0,1,5.74-1,17.65,17.65,0,0,1,6.16,1,9.42,9.42,0,0,1,4.28,3A8.07,8.07,0,0,1,50,34a7.82,7.82,0,0,1-2.52,6,14.74,14.74,0,0,1-2.76,2,7.08,7.08,0,0,0-3.15,3,7.05,7.05,0,0,0-.41,3Zm33.33-5h4.42V22.84a7.61,7.61,0,0,0-7.6-7.6H12.74a7.61,7.61,0,0,0-7.6,7.6V59.75a7.61,7.61,0,0,0,7.6,7.6h13.5A1.94,1.94,0,0,1,28,69.42L29,78,44.21,67.91a2,2,0,0,1,1.36-.56h6.88V55.84a12.71,12.71,0,0,1,3.75-9h0a12.8,12.8,0,0,1,9-3.74Zm9.56,0h33.71a12.78,12.78,0,0,1,12.74,12.74V92.75a12.71,12.71,0,0,1-3.75,9h0a12.94,12.94,0,0,1-8.33,3.73l-.68,6.12a5.13,5.13,0,0,1-8.06,3.63l-14.63-9.74H65.19a12.8,12.8,0,0,1-9-3.74l-.34-.36a12.92,12.92,0,0,1-2.42-3.77,12.68,12.68,0,0,1-1-4.87V72.49H46.59L32,82.23a5.08,5.08,0,0,1-2.4.91,5.14,5.14,0,0,1-5.66-4.54l-.68-6.12H12.74v0a12.85,12.85,0,0,1-9-3.74h0a12.71,12.71,0,0,1-3.75-9V22.84A12.79,12.79,0,0,1,12.74,10.1H63.69a12.8,12.8,0,0,1,9,3.74h0a12.71,12.71,0,0,1,3.75,9V43.1Zm16,13H82.87V68l1.86,14h5.93l1.79-14V56.1ZM90.58,86.29H84.75v5.38h5.83V86.29ZM37.47,58.93a4.43,4.43,0,0,1-3.2-1.31A4.33,4.33,0,0,1,33,54.42a4.27,4.27,0,0,1,1.32-3.15,4.51,4.51,0,0,1,6.34,0A4.3,4.3,0,0,1,42,54.42a4.49,4.49,0,0,1-.66,2.28,4.94,4.94,0,0,1-1.65,1.63,4.23,4.23,0,0,1-2.22.6Z\"\r\n            />\r\n        </svg>\r\n    );\r\n}\r\n\r\ninterface LinkIconProps {\r\n    name?: string;\r\n    icon: \"aparat\" | \"video\" | \"pdf\" | \"faq\";\r\n    transformIcon?: Transform;\r\n    to?: string;\r\n    pathname?: string;\r\n    search?: string;\r\n    title?: string;\r\n    target?: HTMLAttributeAnchorTarget;\r\n    tooltip?: string;\r\n    height: number;\r\n    colorClass: string;\r\n}\r\n\r\nexport const LinkIcon = (props: LinkIconProps) => {\r\n    const [over, setOver] = React.useState<boolean>(false);\r\n\r\n    const icon = (icon: \"aparat\" | \"video\" | \"pdf\" | \"faq\") => {\r\n        switch (icon) {\r\n            case \"aparat\":\r\n                return <AparatIcon width={'4.5em'} height={'4em'} />\r\n            case \"faq\":\r\n                return <FaqIcon width={'4.5em'} height={'4em'} />\r\n            case \"pdf\":\r\n                return <FilePdfFilled className={props.colorClass} style={{ fontSize: 44, color: 'darkslategrey', verticalAlign: 'baseline' }} />\r\n            default:\r\n                return <VideoCameraFilled className={props.colorClass} style={{ fontSize: 48, color: 'darkslategrey', verticalAlign: 'baseline' }} />\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Link to={props.to ? props.to : { pathname: props.pathname, search: props.search }}\r\n            target={props.target}\r\n            onMouseOver={() => setOver(true)}\r\n            onMouseLeave={() => setOver(false)}>\r\n            <Tooltip title={props.tooltip}>\r\n                <div className={`btn-big`} style={{ height: props.height, margin: \"0 15px 15px 0\" }}>\r\n                    <div style={{ marginTop: isMobile || over ? -18 : -5 }}>\r\n                        {icon(props.icon)}\r\n                    </div>\r\n                    <div className=\"label bottom\" style={{ position: \"initial\", marginTop: isMobile || over ? 0 : -15, marginLeft: 10, marginRight: 10 }}>\r\n                        <span className=\"title\" style={{ display: 'block', fontSize: isMobile || over ? 12 : 14 }} >{props.title}</span>\r\n                    </div>\r\n                </div>\r\n            </Tooltip>\r\n        </Link>\r\n    );\r\n}\r\n\r\ninterface IHelpProps extends IBaseProps {\r\n\r\n}\r\ninterface IHelpStates extends IBaseStates {\r\n\r\n}\r\nexport class Help extends BaseComponent<IHelpProps, IHelpStates>{\r\n    static contextType = AppContext;\r\n    constructor(props: IHelpProps) {\r\n        super(props)\r\n\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.setLoading(false);\r\n    }\r\n    virtualRender() {\r\n        const header = this.getPageHeader({ title: \"راهنما\", onBack: () => this.props.onClose ? this.props.onClose({}) : window.history.back() });\r\n\r\n        const { getUserInfo } = this.context as AppContextProps;\r\n        const userInfo = getUserInfo();\r\n        const isEvaluator = !!userInfo?.extraVariables[\"EvaluatorId\"];\r\n        const isInsurerCenter = !!userInfo?.extraVariables[\"InsurerCenterId\"];\r\n\r\n        return (\r\n            <>\r\n                <div style={{ direction: 'rtl' }}>\r\n                    {header}\r\n                </div>\r\n                <div className=\" wrapper\" style={{ width: \"100%\", marginTop: 30 }} >\r\n                    <Row className=\"center\" style={{ height: 180, display: 'flex' }}>\r\n                        <LinkIcon to={\"/faq\"} icon=\"faq\" transformIcon={{ flipX: true }} title=\"پرسش های متداول\" height={150} colorClass=\"font-lemon\" />\r\n                        <LinkIcon pathname=\"https://www.aparat.com/Zobdeh_EE\" icon=\"aparat\" transformIcon={{ flipX: true }} title=\"کانال شرکت زبده در آپارات\" target=\"_blank\" height={150} colorClass=\"font-orange\" />\r\n                        {(isEvaluator || isInsurerCenter) && <LinkIcon to=\"Attachments/Help/evaluationPolicyholderInPerson.pdf\" icon=\"pdf\" transformIcon={{ flipX: true }} title=\"فایل آموزشی ارزیابی مراجعه حضوری مشتری به مرکز ارزیابی\" target=\"_blank\" height={150} colorClass=\"font-purple-light\" />}\r\n                        {!(isEvaluator || isInsurerCenter) && <LinkIcon to=\"Attachments/Help/createDamageCase.pdf\" icon=\"pdf\" transformIcon={{ flipX: true }} title=\"فایل آموزشی ثبت خسارت تا پایان پرونده توسط مشتری\" target=\"_blank\" height={150} colorClass=\"font-green-light\" />}\r\n                        {!(isEvaluator || isInsurerCenter) && <LinkIcon pathname=\"https://www.aparat.com/v/1GKTd\" icon=\"video\" transformIcon={{ flipX: true }} title=\"فیلم آموزشی ثبت خسارت تجهیزات الکترونیک توسط مشتری\" target=\"_blank\" height={150} colorClass=\"font-blue-light\" />}\r\n                        {(isEvaluator || isInsurerCenter) && <LinkIcon pathname=\"https://www.aparat.com/v/uMG2i\" icon=\"video\" transformIcon={{ flipX: true }} title=\"فیلم آموزشی ارزیابی پرونده خسارت در مراجعه حضوری مشتری به مراکز ارزیابی زبده\" target=\"_blank\" height={150} colorClass=\"font-green-light\" />}\r\n                        {(isEvaluator || isInsurerCenter) && <LinkIcon pathname=\"https://www.aparat.com/v/9t3hi\" icon=\"video\" transformIcon={{ flipX: true }} title=\"فیلم آموزشی ارزیابی پرونده خسارت در ارزیابی تماس تصویری (ویدئوکال) شرکت زبده\" target=\"_blank\" height={150} colorClass=\"font-blue-light\" />}\r\n                    </Row>\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import { Badge, Card, Row, Tooltip } from 'antd';\r\nimport * as Icons from '@ant-design/icons';\r\nimport { } from '@ant-design/icons';\r\nimport React, { Component, HTMLAttributeAnchorTarget, useContext } from 'react';\r\nimport AppContext, { AppContextProps } from '../components/infrastructure/appContext';\r\nimport './home.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faFolderOpen, faComments, faPlusCircle, faFolderPlus, faListAlt, faQuestionCircle, IconDefinition, faTrashAlt, faTrashCan, faScrewdriverWrench, faSearchPlus, faFileCircleCheck, faBusinessTime, faFileEdit, faCalculator, faClipboardQuestion, faClipboardCheck, faEnvelopesBulk, faFileInvoiceDollar } from '@fortawesome/free-solid-svg-icons';\r\nimport { Link } from 'react-router-dom';\r\nimport { Transform } from '@fortawesome/fontawesome-svg-core';\r\nimport { IComponentItem } from '../components/infrastructure/models';\r\nimport { isMobile } from 'react-device-detect';\r\nimport { LinkIcon as FaqLinkIcon } from './help';\r\n\r\ninterface LinkIconProps {\r\n    originalItem?: IComponentItem;\r\n    name?: string;\r\n    icon: IconDefinition | string;\r\n    transformIcon?: Transform;\r\n    to?: string;\r\n    pathname?: string;\r\n    search?: string;\r\n    title?: string;\r\n    colorClass: string;\r\n    content?: string;\r\n    target?: HTMLAttributeAnchorTarget;\r\n    tooltip?: string;\r\n    isCustomLink?: boolean;\r\n}\r\n\r\ninterface TrashMenuItemProps {\r\n    removeItem: (item: IComponentItem) => void;\r\n}\r\n\r\nclass TrashMenuItem extends Component<TrashMenuItemProps, { over: boolean; showTooltip: boolean; }>{\r\n    trashMenuItemRef?: HTMLDivElement | null;\r\n    constructor(props: TrashMenuItemProps) {\r\n        super(props)\r\n        this.state = {\r\n            over: false,\r\n            showTooltip: false\r\n        }\r\n    }\r\n    componentDidMount() {\r\n        this.trashMenuItemRef?.addEventListener('removeMenuItem', this.removeItem);\r\n        this.trashMenuItemRef?.addEventListener('onTrashOver', this.onTrashOver);\r\n        this.trashMenuItemRef?.addEventListener('onDragItem', this.onDragItem);\r\n    }\r\n    componentWillMount() {\r\n        this.trashMenuItemRef?.removeEventListener('removeMenuItem', this.removeItem);\r\n        this.trashMenuItemRef?.removeEventListener('onTrashOver', this.onTrashOver);\r\n        this.trashMenuItemRef?.removeEventListener('onDragItem', this.onDragItem);\r\n    }\r\n    removeItem = (e: Event) => {\r\n        this.props.removeItem((e as CustomEvent).detail);\r\n    }\r\n    onTrashOver = (e: Event) => {\r\n        this.setState({ over: (e as CustomEvent).detail });\r\n    }\r\n    onDragItem = (e: Event) => {\r\n        this.setState({ showTooltip: (e as CustomEvent).detail });\r\n    }\r\n    render() {\r\n        return (\r\n            <div id={\"home-trash\"}\r\n                ref={node => this.trashMenuItemRef = node}\r\n                style={{ display: 'none', alignItems: 'center' }}>\r\n                <Tooltip id=\"home-trash-tooltip\" visible={this.state.showTooltip} title={'برای حذف منو، اینجا رها نمایید'}>\r\n                    <FontAwesomeIcon icon={this.state.over ? faTrashCan : faTrashAlt} size={this.state.over ? '4x' : '3x'} style={{ position: 'absolute', bottom: 80 }} title=\"حذف\" />\r\n                </Tooltip>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nconst LinkIcon = (props: LinkIconProps) => {\r\n    const [over, setOver] = React.useState<boolean>(false);\r\n    const { getPanelInfo } = useContext(AppContext);\r\n    const panelInfo = getPanelInfo();\r\n    const count = props.name && panelInfo ? panelInfo.data.filter(d => d.key === props.name).length : 0;\r\n    let MenuIcon: any | undefined;\r\n    if (typeof props.icon === 'string')\r\n        MenuIcon = (Icons as any)[props.icon as string];\r\n\r\n    const onDrag = (e: React.DragEvent<HTMLDivElement>) => {\r\n        const trashIcon = document.getElementById(\"home-trash\");\r\n        if (trashIcon)\r\n            trashIcon.dispatchEvent(new CustomEvent('onTrashOver', { detail: !!document.elementFromPoint(e.clientX, e.clientY)?.closest(\"#home-trash\") }));\r\n    };\r\n\r\n    const onDragStart = (_: React.DragEvent<HTMLDivElement>) => {\r\n        const trashIcon = document.getElementById(\"home-trash\");\r\n        if (trashIcon) {\r\n            trashIcon.style.display = \"block\";\r\n            trashIcon.dispatchEvent(new CustomEvent('onDragItem', { detail: true }));\r\n        }\r\n    };\r\n\r\n    const onDragEnd = (e: React.DragEvent<HTMLDivElement>) => {\r\n        document.elementFromPoint(e.clientX, e.clientY)?.closest(\"#home-trash\")?.dispatchEvent(new CustomEvent('removeMenuItem', { detail: props.originalItem }));\r\n\r\n        const trashIcon = document.getElementById(\"home-trash\");\r\n        if (trashIcon) {\r\n            trashIcon.style.display = \"none\";\r\n            trashIcon.dispatchEvent(new CustomEvent('onDragItem', { detail: false }));\r\n        }\r\n    };\r\n\r\n    const extraParams = props.isCustomLink ? { draggable: true, onDrag, onDragStart, onDragEnd } : {};\r\n\r\n    return (\r\n        <Link to={props.to ? props.to : { pathname: props.pathname, search: props.search }}\r\n            target={props.target}\r\n            onMouseOver={() => setOver(true)}\r\n            onMouseLeave={() => setOver(false)}\r\n        >\r\n            <Tooltip title={props.tooltip}>\r\n                <div {...extraParams}\r\n                    className={\"btn-big\"}\r\n                    style={{ margin: \"0 15px 15px 0\" }}\r\n                >\r\n                    <div className={`icon ${props.colorClass}`} style={{ marginTop: isMobile || over ? -15 : -10 }}>\r\n                        {\r\n                            !!MenuIcon\r\n                                ? <MenuIcon style={{ fontSize: 48, verticalAlign: 'baseline' }} />\r\n                                : <FontAwesomeIcon className={props.colorClass} icon={props.icon as IconDefinition} size={'3x'} transform={props.transformIcon} />\r\n                        }\r\n                    </div>\r\n                    <div className=\"label bottom\">\r\n\r\n                        <span className=\"title\" style={{ display: 'inline-flex', margin: isMobile || over ? 3 : 0, fontSize: isMobile || over ? 10 : 13 }}>\r\n                            {props.title}\r\n                            {!!count && <Badge className=\"panel-badge\" count={count} style={{ marginTop: isMobile || over ? -6 : -3 }} />}\r\n                        </span>\r\n                        <span className=\"content\" style={{ whiteSpace: isMobile || over ? 'pre-line' : 'nowrap', fontSize: isMobile || over ? 9 : 12 }}>{props.content}</span>\r\n                    </div>\r\n                </div>\r\n            </Tooltip>\r\n        </Link>\r\n    );\r\n}\r\n\r\nexport class Home extends Component<{}, {\r\n    policyholderId?: number;\r\n    evaluatorId?: number;\r\n    repairCenterId?: number;\r\n    insurerCenterId?: number;\r\n    isPolicyholder?: boolean;\r\n    userFullName?: string | null;\r\n    reports?: { url: string; title: string; icon: string; }[];\r\n    extraHomeMenuItems: IComponentItem[];\r\n}> {\r\n    static displayName = Home.name;\r\n    static contextType = AppContext;\r\n    tashElement?: HTMLDivElement\r\n    constructor(props: {}) {\r\n        super(props)\r\n        this.state = {\r\n            extraHomeMenuItems: []\r\n        };\r\n    }\r\n    onMouseUp = (e: Event) => {\r\n        this.addMenuItem((e as CustomEvent).detail);\r\n    }\r\n    addMenuItem = (newItem: IComponentItem) => {\r\n        if (!this.state.policyholderId) {\r\n            // to do add menu item in home page\r\n            const extraHomeMenuItems = [...this.state.extraHomeMenuItems, newItem];\r\n            localStorage.setItem(`homeMenu_${this.state.userFullName!}`, JSON.stringify(extraHomeMenuItems))\r\n            this.setState({ extraHomeMenuItems });\r\n        };\r\n    }\r\n    removeItem = (item: IComponentItem) => {\r\n        if (!this.state.policyholderId) {\r\n            // to do remove menu item from home page\r\n            const extraHomeMenuItems = [...this.state.extraHomeMenuItems];\r\n            extraHomeMenuItems.splice(extraHomeMenuItems.indexOf(item), 1);\r\n            localStorage.setItem(`homeMenu_${this.state.userFullName!}`, JSON.stringify(extraHomeMenuItems))\r\n            this.setState({ extraHomeMenuItems });\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        const contentContainer = document.getElementById(\"content-container\");\r\n        if (contentContainer) {\r\n            //contentContainer.style.backgroundColor = \"rgb(207 218 219)\";\r\n            contentContainer.addEventListener('dragEndMenuItem', this.onMouseUp);\r\n        }\r\n\r\n        const { getUserInfo, getMenuItems } = this.context as AppContextProps;\r\n        const userInfo = getUserInfo();\r\n        const menuItems = getMenuItems();\r\n\r\n        const reports = menuItems.filter(i => i.Path?.includes(\"/damagecasereport?\"))\r\n            .map(i => { return { url: i.Path!, title: i.Title!, icon: i.Icon! }; });\r\n\r\n        const menuName = `homeMenu_${userInfo!.userFullName!}`;\r\n        const extraHomeMenuItems = localStorage.getItem(menuName) ? JSON.parse(localStorage.getItem(menuName)!) : [];\r\n\r\n        this.setState({\r\n            userFullName: userInfo?.userFullName,\r\n            policyholderId: userInfo?.extraVariables[\"PolicyholderId\"],\r\n            evaluatorId: userInfo?.extraVariables[\"EvaluatorId\"],\r\n            repairCenterId: userInfo?.extraVariables[\"RepairCenterId\"],\r\n            insurerCenterId: userInfo?.extraVariables[\"InsurerCenterId\"],\r\n            isPolicyholder: userInfo?.extraVariables[\"IsPolicyholder\"],\r\n            reports,\r\n            extraHomeMenuItems\r\n        });\r\n    }\r\n    componentWillUnmount() {\r\n        const contentContainer = document.getElementById(\"content-container\");\r\n        if (contentContainer) {\r\n            //contentContainer.style.backgroundColor = \"#FFF\";\r\n            contentContainer.removeEventListener('dragEndMenuItem', this.onMouseUp);\r\n        }\r\n    }\r\n    render() {\r\n        const { getMenuItems } = this.context as AppContextProps;\r\n        const menuItems = getMenuItems();\r\n\r\n        const reports = (\r\n            this.state.reports && this.state.reports.length ?\r\n                this.state.reports.map(r =>\r\n                    <LinkIcon key={r.url} to={r.url} icon={r.icon} transformIcon={{ flipX: true }} title={r.title} colorClass=\"font-lemon\" />\r\n                ) : []\r\n        );\r\n\r\n        const access = menuItems.map(m => m.Path);\r\n        const extraHomeLinkIcons = this.state.extraHomeMenuItems\r\n            .filter(i => access.includes(i.Path))\r\n            .map(i => <LinkIcon originalItem={i} key={i.Path} isCustomLink to={i.Path} icon={i.Icon!} transformIcon={{ flipX: true }} title={i.Title} colorClass=\"font-lemon\" />)\r\n\r\n        if (!!this.state.policyholderId) {\r\n            const policyholderMenu = (\r\n                <>\r\n                    <LinkIcon to=\"/policylist\" icon={faListAlt} transformIcon={{ flipX: true }} title=\"بیمه های من\" content=\"مشاهده بیمه‌نامه‌های خریداری شده\" colorClass=\"font-blue-light\" />\r\n                    <LinkIcon to=\"/damagecasecreate\" icon={faFolderPlus} title=\"ثبت خسارت بیمه نامه\" content=\"در صورتی که در حال حاضر صاحب بیمه نامه هستید از این قسمت ثبت خسارت نمایید\" colorClass=\"font-green-light\" />\r\n                    <LinkIcon name=\"DamageCasePolicyholder\" to=\"/damagecasepolicyholder\" icon={faFolderOpen} title=\"پیگیری پرونده های خسارت بیمه\" content=\"مشاهده جزئیات پرونده و پیگیری خسارت‌های جاری\" colorClass=\"font-lemon\" />\r\n                </>\r\n            )\r\n\r\n            return (\r\n                <div className=\"wrapper\" style={{ marginTop: 30 }} >\r\n                    <Card title={<h4><b>مشتری گرامی، به پورتال مشتریان شرکت زبده خوش آمدید</b></h4>}\r\n                        style={{ marginLeft: 20, marginRight: 20, backgroundColor: \"transparent\", border: 'none', textAlign: 'justify' }}>\r\n                        {this.state.isPolicyholder ? <>\r\n                            <h6>\r\n                                ضمن سپاس از انتخاب مجموعه سرویس‌های دیجیتالی شرکت زبده، در این بخش می توانید به اطلاعات بیمه نامه های خود و دریافت خدمات مختلف دسترسی داشته باشید:\r\n                            </h6>\r\n                            <ul>\r\n                                <ol>\r\n                                    <h6>  1- در صورتی که در حال حاضر صاحب بیمه هستید و دستگاه شما خسارت دیده و یا به سرقت رفته در قسمت <b><Link to=\"/damagecasecreate\">\"ثبت خسارت بیمه نامه\"</Link></b> درخواست خود را ثبت نمایید.</h6>\r\n                                </ol>\r\n                                <ol>\r\n                                    <h6>  2- اگر نیاز به تعمیرات خارج از تعهدات بیمه نامه و بصورت آزاد دارید در قسمت <b><Link to=\"/repaircasecreate\">\"ثبت درخواست تعمیرات (آزاد)\"</Link></b> درخواست خود را ثبت نمایید.</h6>\r\n                                </ol>\r\n                            </ul>\r\n                        </> :\r\n                            <h6>  اگر نیاز به تعمیرات دستگاه الکترونیکی دارید در قسمت <b><Link to=\"/repaircasecreate\">\"ثبت درخواست تعمیرات (آزاد)\"</Link></b> درخواست خود را ثبت نمایید.</h6>\r\n                        }\r\n                    </Card>\r\n\r\n                    <div style={{ width: \"100%\", display: 'flex', textAlign: \"center\", justifyContent: \"center\" }}>\r\n                        <Row className=\"center\">\r\n                            {this.state.isPolicyholder && policyholderMenu}\r\n                            <LinkIcon to=\"/inquirypolicy\" icon={faPlusCircle} title=\"استعلام بیمه نامه\" content=\"اگر بیمه نامه ای دارید که در پنل شما موجود نیست، جهت ثبت خسارت روی بیمه نامه، ابتدا از این قسمت نسبت به استعلام با IMEI و سریال دستگاه اقدام نمایید\" colorClass=\"font-blue\" />\r\n                            <LinkIcon to=\"/repaircasecreate\" icon={faFolderPlus} title=\"ثبت در خواست تعمیرات (آزاد)\" content=\"اگر تمایل به تعمیرات آزاد خارج از بیمه نامه دارید در این قسمت درخواست تعمیرات را ثبت نمایید\" colorClass=\"font-orange\" />\r\n                            <LinkIcon name=\"RepairCasePolicyholder\" to=\"/repaircasepolicyholder\" icon={faScrewdriverWrench} title=\"پیگیری تعمیرات (آزاد)\" content=\"مشاهده جزئیات و پیگیری درخواست‌های تعمیرات آزاد\" colorClass=\"font-red-light\" />\r\n                            <LinkIcon pathname=\"https://www.si24.ir/fa/services/form_Criticism/add/template/defaultTemplate/swd_id/54504\" icon={faComments} transformIcon={{ flipX: true }} title=\"ثبت انتقادات و نارضایتی ها\" target=\"_blank\" colorClass=\"font-lemon\" />\r\n                            <LinkIcon to=\"/help\" icon={faQuestionCircle} transformIcon={{ flipX: true }} title=\"راهنمای نرم افزار\" colorClass=\"font-green\" />\r\n                            <FaqLinkIcon to={\"/faq\"} icon=\"faq\" transformIcon={{ flipX: true }} title=\"پرسش های متداول\" height={115} colorClass=\"font-lemon\" />\r\n                        </Row>\r\n                    </div>\r\n                </div>\r\n            );\r\n        }\r\n        else if (!!this.state.evaluatorId || !!this.state.repairCenterId) {\r\n            const readOnly = !menuItems.filter(i => i.Item && [\"AllocateEvaluator\", \"DocumentCheck\", \"ContactSetting\", \"MakingContact\", \"DamageEstimation\"].indexOf(i.Item) > -1).length;\r\n            return (\r\n                <div className=\"wrapper\" style={{ width: \"100%\", display: 'flex', textAlign: \"center\", justifyContent: \"center\", marginTop: 30 }}>\r\n                    <div>\r\n                        <Row className=\"center\">\r\n                            {menuItems.filter(i => i.Item === \"DamageCaseEvaluator\").length !== 0 && <LinkIcon name=\"DamageCaseEvaluator\" to={\"/damagecaseevaluator\"} icon={faListAlt} transformIcon={{ flipX: true }} title=\"همه پرونده ها\" colorClass=\"font-blue-light\" />}\r\n                            {menuItems.filter(i => i.Item === \"AllocateEvaluator\").length !== 0 && this.state.evaluatorId === 1 && <LinkIcon name=\"AssignEvaluator\" to={`/refresh?${encodeURIComponent(\"/damagecaseevaluator?status=assignevaluator\")}`} icon={faSearchPlus} title=\"پرونده های جدید\" colorClass=\"font-green-light\" />}\r\n                            {menuItems.filter(i => i.Item === \"DocumentCheck\").length !== 0 && <LinkIcon name=\"DocumentCheck\" to={`/refresh?${encodeURIComponent(\"/damagecaseevaluator?evaluationstatus=documentcheck\")}`} icon={faFileCircleCheck} title=\"بررسی مدارک\" colorClass=\"font-purple-light\" />}\r\n                            {menuItems.filter(i => i.Item === \"ContactSetting\").length !== 0 && <LinkIcon name=\"ContactSetting\" to={`/refresh?${encodeURIComponent(\"/damagecaseevaluator?evaluationstatus=contactsetting\")}`} icon={faBusinessTime} transformIcon={{ flipX: true }} title=\"تنظیم تاریخ و زمان\" content=\"تنظیم تاریخ و زمان تماس تصویری یا مراجعه حضوری\" colorClass=\"font-lemon\" />}\r\n                            {menuItems.filter(i => i.Item === \"MakingContact\").length !== 0 && <LinkIcon name=\"MakingContact\" to={`/refresh?${encodeURIComponent(\"/damagecaseevaluator?evaluationstatus=makingcontact\")}`} icon={faFileEdit} title=\"ثبت نتیجه\" content=\"ثبت نتیجه تماس تصویری یا مراجعه حضوری\" colorClass=\"font-orange\" />}\r\n                            {menuItems.filter(i => i.Item === \"ReceiveEssentials\").length !== 0 && <LinkIcon name=\"ReceiveEssentials\" to={`/refresh?${encodeURIComponent(\"/damagecaseevaluator?evaluationstatus=sendessentials\")}`} icon={faEnvelopesBulk} title=\"دریافت دستگاه و متعلقات یا اصل مدارک\" colorClass=\"font-green-light\" />}\r\n                            {menuItems.filter(i => i.Item === \"DamageEstimation\").length !== 0 && <LinkIcon name=\"DamageEstimation\" to={`/refresh?${encodeURIComponent(\"/damagecaseevaluator?evaluationstatus=damageestimation\")}`} icon={faCalculator} transformIcon={{ flipX: true }} title=\"برآورد خسارت\" colorClass=\"font-blue\" />}\r\n                            {menuItems.filter(i => i.Item === \"DamageEstimation\").length !== 0 && <LinkIcon name=\"PolicyholderConfirmation\" to={`/refresh?${encodeURIComponent(\"/damagecaseevaluator?evaluationstatus=policyholderconfirmation\")}`} icon={faClipboardQuestion} transformIcon={{ flipX: true }} title=\"منتظر تأیید بیمه گزار/مشتری\" colorClass=\"font-purple\" />}\r\n                            {menuItems.filter(i => i.Item === \"ReceiveDepreciated\").length !== 0 && <LinkIcon name=\"ReceiveDepreciated\" to={`/refresh?${encodeURIComponent(\"/receivedepreciated\")}`} icon={faClipboardCheck} title=\"دریافت داغی و تأیید انتقال مالکیت\" colorClass=\"font-orange\" />}\r\n                            {menuItems.filter(i => i.Item === \"DamageCaseVoucherPaymentDraft\").length !== 0 && <LinkIcon name=\"DamageCaseVoucherPaymentDraft\" to={`/refresh?${encodeURIComponent(\"/damagecasevoucherpaymentdraft\")}`} icon={faFileInvoiceDollar} title=\"در انتظار پرداخت\" colorClass=\"font-green-light\" />}\r\n                            {menuItems.filter(i => i.Item === \"RepairCaseCenter\").length !== 0 && <LinkIcon name=\"RepairCaseCenter\" to={`/refresh?${encodeURIComponent(\"/repaircasecenter\")}`} icon={faScrewdriverWrench} transformIcon={{ flipX: true }} title=\"پرونده های تعمیرات\" colorClass=\"font-red-light\" />}\r\n                            {readOnly && menuItems.filter(i => i.Item === \"Center\").length !== 0 && <LinkIcon name=\"Center\" to={\"/center\"} icon={faListAlt} transformIcon={{ flipX: true }} title=\"مراکز\" colorClass=\"font-lemon\" />}\r\n                            {readOnly && menuItems.filter(i => i.Item === \"Policy\").length !== 0 && <LinkIcon name=\"Policy\" to={\"/policy\"} icon={faListAlt} transformIcon={{ flipX: true }} title=\"بیمه نامه ها\" colorClass=\"font-lemon\" />}\r\n                            {reports}\r\n                            {extraHomeLinkIcons}\r\n                            <LinkIcon to=\"/help\" icon={faQuestionCircle} transformIcon={{ flipX: true }} title=\"راهنمای نرم افزار\" colorClass=\"font-green\" />\r\n                            <FaqLinkIcon to={\"/faq\"} icon=\"faq\" transformIcon={{ flipX: true }} title=\"پرسش های متداول\" height={115} colorClass=\"font-lemon\" />\r\n                        </Row>\r\n                        <TrashMenuItem removeItem={this.removeItem} />\r\n                    </div>\r\n                </div>\r\n            );\r\n        }\r\n        return (\r\n            <div className=\"wrapper\" style={{ width: \"100%\", display: 'flex', textAlign: \"center\", justifyContent: \"center\", marginTop: 30 }} >\r\n                <div>\r\n                    <Row className=\"center\">\r\n                        {!!this.state.insurerCenterId && menuItems.filter(i => i.Item === \"DamageCaseEvaluator\").length !== 0 && <LinkIcon name=\"DamageCaseEvaluator\" to={\"/damagecaseevaluator\"} icon={faListAlt} transformIcon={{ flipX: true }} title=\"همه پرونده ها\" colorClass=\"font-blue-light\" />}\r\n                        {!!this.state.insurerCenterId && menuItems.filter(i => i.Item === \"Center\").length !== 0 && <LinkIcon name=\"Center\" to={\"/center\"} icon={faListAlt} transformIcon={{ flipX: true }} title=\"مراکز\" colorClass=\"font-red-light\" />}\r\n                        {!!this.state.insurerCenterId && menuItems.filter(i => i.Item === \"Policy\").length !== 0 && <LinkIcon name=\"Policy\" to={\"/policy\"} icon={faListAlt} transformIcon={{ flipX: true }} title=\"بیمه نامه ها\" colorClass=\"font-green-light\" />}\r\n                        {reports}\r\n                        {extraHomeLinkIcons}\r\n                        <LinkIcon to=\"/help\" icon={faQuestionCircle} transformIcon={{ flipX: true }} title=\"راهنمای نرم افزار\" colorClass=\"font-green\" />\r\n                        <FaqLinkIcon to={\"/faq\"} icon=\"faq\" transformIcon={{ flipX: true }} title=\"پرسش های متداول\" height={115} colorClass=\"font-lemon\" />\r\n                    </Row>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\n","import { Collapse } from \"antd\";\r\nimport './home.css';\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../components/infrastructure/baseComponent\";\r\nimport AppContext from \"../components/infrastructure/appContext\";\r\nimport CollapsePanel from \"antd/lib/collapse/CollapsePanel\";\r\n\r\ninterface IFaqProps extends IBaseProps {\r\n\r\n}\r\ninterface IFaqStates extends IBaseStates {\r\n\r\n}\r\nexport class Faq extends BaseComponent<IFaqProps, IFaqStates>{\r\n    static contextType = AppContext;\r\n    constructor(props: IFaqProps) {\r\n        super(props)\r\n\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.setLoading(false);\r\n    }\r\n    virtualRender() {\r\n        const header = this.getPageHeader({ title: \"پرسش های متداول\", onBack: () => window.history.back() });\r\n\r\n        return (\r\n            <div style={{ direction: 'rtl', height: \"100vh\" }}>\r\n                <div >\r\n                    {header}\r\n                </div>\r\n                <div className=\"wrapper\" style={{ width: \"100%\", display: 'flex', marginTop: 40 }} >\r\n                    <Collapse\r\n                        className=\"custom-scroll\"\r\n                        style={{ width: \"100%\", backgroundColor: 'transparent', border: 'none', color: 'darkslategrey' }}\r\n                        accordion\r\n                    >\r\n                        <CollapsePanel key=\"1\" header={<b>سوال: چگونه می‌توانم ثبت خسارت نمایم؟</b>}>\r\n                            <b>پاسخ : </b>\r\n                            <>ثبت خسارت در سایت https://claim.zobdeh.org/login</>\r\n                            <ul>\r\n                                <ol >1- وارد سایت “https://claim.zobdeh.org/login” شوید.</ol>\r\n                                <ol >2- در بالای صفحه سایت در تَب \"ورود بیمه‌گزار/مشتری\"، با وارد کردن کد ملّی و دریافت رمز عبور یکبار مصرف وارد \"پنل بیمه‌گزار/مشتری\" خود شوید.</ol>\r\n                                <ol >3- وارد قسمت \"ثبت خسارت\" شوید. از قسمت \"بیمه نامه‌های من\"، بیمه نامه مد نظر که خسارت خورده‌اید را انتخاب کنید و فرم \"ثبت خسارت\" را بصورت کامل تکمیل نمایید.</ol>\r\n                                <ol >4- در مرحله بعدی \"آپلود مدارک خسارت\" را تکمیل و بر روی\"ارسال مدارک\" کلیک و مدارک را ارسال نمایید.</ol>\r\n                                <ol >5- کارشناسان خسارت بیمه‌گر پس از بررسی پرونده خسارت، ظرف مدت حداکثر 1 روز کاری، نسبت به ارجاع پرونده به مراکز تخصصی ارزیابی تجهیزات الکترونیک اقدامات لازم را انجام خواهند داد و از طریق پیام کوتاه زمان و آدرس مراجعه حضوری به مرکز ارزیابی برای شما ارسال خواهد شد.</ol>\r\n                            </ul>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"2\" header={<b>سوال : برای دریافت خسارت چه مدارکی لازم دارم؟</b>} >\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                پس از ثبت خسارت در نرم افزار خسارت و دریافت پیامک زمان و آدرس مراجعه حضوری به مرکز ارزیابی، بیمه‌گزار محترم جهت بررسی خسارت می‌بایست کارت شناسایی معتبر، جعبه دستگاه و متعلقات آن، کارت بیمه نامه، پرینت گواهی بیمه نامه را به همراه داشته باشد.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"3\" header={<b>سوال : در صورت سرقت دستگاه چه مدارکی جهت دریافت خسارت الزامی می‌باشد؟</b>}>\r\n                            <b>پاسخ : </b>\r\n                            <ul>\r\n                                <ol> 1) نامه از مراجع انتظامی (حتماً اظهارات بیمه گزار توسط آگاهی در خصوص سرقت به تأیید مراجه انتظامی رسیده باشد.)</ol>\r\n                                <ol> 2) نامه از مراجع قضایی (حتماً اظهارات بیمه گزار توسط نامه مراجع قضایی و دادگاه به تأیید مراجع قضائی رسیده باشد.)</ol>\r\n                                <ol> 3) ثبت دستگاه در سایت همیاب 24 و همراه داشتن پرینت رسید پرداخت.</ol>\r\n                                <ol> 4) ارائه جعبه و متعلقات داخل جعبه الزامی است، در غیر اینصورت بیمه‌گر مجاز و محق خواهد بود ارزش بازیافتی موارد مزبور را مطابق نظر کارشناسان مستقر در مرکز تخصصی از مبلغ خسارت کسر نماید.</ol>\r\n                                <ol> 5) در زمان بروز خسارت کُلی و یا سرقت جهت دریافت خسارت بیمه‌گزار موظف است رجیستر گوشی را به مالکیت بیمه سامان انتقال دهد، در غیر اینصورت شرکت بیمه سامان تعهدی در خصوص پرداخت خسارت نخواهد داشت.</ol>\r\n                                <ol> 6) ارائه مستندات و شواهد لازم و کافی مبنی بر وقوع سرقت شامل فیلم دوربین مداربسته موقعیت وقوع سرقت و استشهاد محلی ضروری می باشد.</ol>\r\n                                <ol> 7) ارائه فاکتور خرید.</ol>\r\n                                <ol> 8) تاریخ سرقت با تأیید شده توسط مراجع انتظامی می‌بایست در دوره اعتبار بیمه‌نامه مربوطه باشد.</ol>\r\n                                <ol> 9) همراه داشتن مدارک شناسایی (کارت ملّی یا شناسنامه) جهت احراز هویت بیمه گذار.</ol>\r\n                                <ol> 10) ارائه فاکتور خرید دستگاه در صورت وجود. </ol>\r\n                            </ul>\r\n\r\n                            <b>نکات مهم :</b>\r\n                            <ul>\r\n                                <ol>1) در صورت عدم ارائه هریک از لوازم جانبی موجود در جعبه دستگاه توسط بیمه گزار محترم، هزینه مربوطه از مبلغ پرداختی خسارت کسر خواهد گردید. (جعبه، شارژر، سیم شارژر، هندزفری، قلم، بند ساعت هوشمند، باطری لپ تاپ)</ol>\r\n                                <ol>2) مبلغ خسارت پس از انجام انتقال مالکیت دستگاه سرقت شده به شرکت بیمه سامان انجام خواهد گرفت.</ol>\r\n                                <ol>3) بررسی مدارک ارائه شده توسط کارشناسان خسارت و پرداخت خسارت توسط شعبه مربوطه.</ol>\r\n                                <ol>4) در زمان بروز خسارت کلی و یا سرقت جهت دریافت خسارت بیمه گزار موظف است رجیستر گوشی را به مالکیت بیمه سامان انتقال دهد، در غیراینصورت بیمه‌گر تعهدی در خصوص پرداخت خسارت نخواهد داشت.</ol>\r\n                            </ul>\r\n\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"4\" header={<b>سوال : پوشش سرقت در بیمه نامه تجهیزات الکترونیکی به چه صورت می‌باشد؟</b>}>\r\n                            <b>پاسخ : </b>\r\n                            <ul>\r\n                                <li>\r\n                                    سرقت با شکست حرز: مورد پوشش بیمه نامه تجهیزات الکترونیک می‌باشد. شکست حرز به معنای شکست مانع برای سرقت است مثلاً درب، قفل یا پنجره برای انجام دزدی است. سرقت معمولی بدون رخداد شکست حرز مشمول این طرح قرار نمی‌گیرد.\r\n                                </li>\r\n                                <li>\r\n                                    سرقت کُلی : مورد پوشش بیمه نامه تجهیزات الکترونیک می‌باشد. سرقت تجهیزات بیمه شده به هر نحوی را شامل می‌باشد.\r\n                                </li>\r\n                            </ul>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"5\" header={<b>سوال : آیا “بیمه سامان” خسارت کامل موبایل، تبلت، لپ تاپ و ... را به من پرداخت می کند؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                بله. در صورتیکه کارشناسان مراکز خدمات تخصصی تأیید نمایند که امکان تعمیر و برطرف کردن کامل مشکلات دستگاه شما وجود نداشته باشد (خسارت کلی)، هزینه آن مطابق با شرایط مندرج در گواهی بیمه نامه و با کسر فرانشیز به شما پرداخت می‌شود.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"6\" header={<b>سوال : مبنای محاسبه پرداخت خسارت چیست؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                خسارت پرداختی به بیمه گذاران محترم مطابق با گواهی بیمه نامه و با کسر فرانشیز و کسورات قانونی انجام خواهد شد. (جهت اطلاع از مقدار فرانشیز و نحوه محاسبه پرداخت خسارت، بیمه نامه توسط بیمه گذاران محترم مطالعه شود.)\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"7\" header={<b>سوال : اگر برای دستگاه من حادثه‌ای اتفاق بیافتد و من از گواهی بیمه خود برای جبران خسارت استفاده کنم، آیا بیمه نامه من منقضی می‌شود؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                بله. مطابق شرایط مندرج در بیمه نامه فقط یکبار پرداخت خسارت (جزئی یا کلی یا سرقت با شکست حرز) در طول مدت اعتبار بیمه نامه انجام خواهد شد و پس از پرداخت یکبار خسارت، اعتبار نخواهد داشت.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"8\" header={<b>سوال : من در تهران سکونت ندارم. برای دریافت خسارت چکار کنم؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                پس از ثبت خسارت در سایت claim.zobdeh.org و بررسی مدارک ، شماره تماس و آدرس نزدیک‌ترین مرکز ارزیابی به بیمه‌گزار محترم جهت مراجعه حضوری از طریق پیامک اطلاع رسانی می‌گردد.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"9\" header={<b>سوال : من در تهران سکونت ندارم. آیا برای استفاده از خدمات فنی شما باید حضوری مراجعه کنم؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                خیر. کافیست در سایت claim.zobdeh.org ثبت خسارت را بصورت آنلاین انجام دهید یا با مراجعه به شعبه شهر مربوطه نسبت به تشکیل پرونده اقدامات لازم انجام دهید. در صورت لزوم و توافق طرفین دستگاه توسط شعبه مربوطه به تهران جهت ارزیابی و تعمیرات ارسال می شود.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"10\" header={<b>سوال : مدت زمانی که تعمیر دستگاه من طول می کشد چقدر است؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                مراکز خدمات فنی ما سعی بر آن دارند که حداکثر در مدت یک هفته کاری نسبت به تعمیر و تحویل دستگاه شما اقدام کنند. مدت زمان دقیق انجام تعمیرات بستگی به نوع خسارت وارده و قطعات یدکی مورد نیاز دارد و ممکن است در بعضی موارد خاص طولانی تر شود. اطمینان از کیفیت انجام تعمیرات و رضایت شما برای ما بالاترین اولویت را دارد.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"11\" header={<b>سوال : آیا گواهی بیمه نامه‌های تجهیزات الکترونیک مختص دستگاه‌های نو است؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                در صورتیکه دستگاه شما قبلاً باز نشده باشد و تعمیراتی بر روی آن صورت نگیرد تحت پوشش بیمه‌ای قرار خواهند گرفت.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"12\" header={<b>سوال : خسارت‌هایی که در بیمه ‌تجهیزات الکترونیک غیر قابل پرداخت می باشد کدامند؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                تمامی مواردی که در قسمت استثنائات گواهی بیمه نامه‌ای که در زمان خرید بیمه نامه به مشتری داده شده است. بسته به نوع طرح خریداری شده این موارد متغیر می‌باشد.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        <CollapsePanel key=\"13\" header={<b>سوال : مدت زمان پوشش بیمه‌نامه تجیهزات الکترونیک چقدر است؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                مدت زمان پوشش این بیمه ‌نامه از زمان خرید بیمه نامه به مدت یکسال می‌باشد.\r\n                            </p>\r\n                        </CollapsePanel>\r\n\r\n                        {/*<CollapsePanel key=\"14\" header={<b>سوال : آیا هنگام محاسبه و پرداخت خسارت، از ارزش تجهیزات الکترونیک من، استهلاک کسر می‌شود؟</b>}>\r\n                            <p>\r\n                                <b>پاسخ : </b>\r\n                                خیر. این حق بیمه‌گزار است که خسارت خود را بر اساس ارزش روز دستگاه خود دریافت کند. محاسبه و پرداخت خسارت در بیمه تجهیزات الکترونیک بر اساس ارزش روز دستگاه در مقطع وقوع حادثه و پس از کسر فرانشیز مطابق شرایط مندرج در گواهی بیمه‌نامه صورت می‌پذیرد.\r\n                            </p>\r\n                            <p >\r\n                                <b>نکته مهم : </b>\r\n                                ملاک پرداخت خسارت منوط به ثبت خسارت بیمه‌گزاران محترم در سایت claim.zobhde.org و یا مراجعه حضوری و اعلام خسارت بصورت حضوری در شعب سراسر کشور می‌باشد.\r\n                            </p>\r\n                        </CollapsePanel>*/}\r\n                    </Collapse>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n","import { Button, Result } from 'antd';\r\nimport { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport AppContext, { AppContextProps } from '../components/infrastructure/appContext';\r\nimport { ResultStatusType } from 'antd/lib/result';\r\n\r\nexport class ErrorPage extends Component<{ returnUrl?: string }> {\r\n    static contextType = AppContext;\r\n\r\n    render() {\r\n        const { params } = this.context as AppContextProps;\r\n        let id: ResultStatusType = params[\"id\"] ?? \"500\";\r\n        let returnUrl = params[\"returnurl\"];\r\n        if (returnUrl)\r\n            returnUrl = decodeURIComponent(returnUrl);\r\n        else\r\n            returnUrl = '';\r\n\r\n        const subTitle = (id: ResultStatusType) => {\r\n            switch (id) {\r\n                case \"403\":\r\n                    return \"به صفحه مورد نظر دسترسی ندارید\";\r\n                case \"404\":\r\n                    return \"صفحه مورد نظر یافت نشد\";\r\n                case \"500\":\r\n                default:\r\n                    return \"متأسفانه خطایی رخ داده است، لطفا با پشتیبانی تماس بگیرید.\";\r\n            }\r\n        };\r\n\r\n        return (\r\n            <Result\r\n                status={id}\r\n                title={id}\r\n                subTitle={subTitle(id)}\r\n                extra={<Button type=\"ghost\"> <Link to={returnUrl}>بازگشت</Link></Button>}\r\n            />\r\n        );\r\n    }\r\n}\r\n\r\n","////import { Spin } from 'antd';\r\n//import { LoadingOutlined } from '@ant-design/icons';\r\n\r\n//const antIcon = <LoadingOutlined spin height={100} />;\r\nconst CustomSpinner = (props: { title?: string }) => (\r\n    <div className=\"\" >\r\n        <div className=\"waiterCnt\">\r\n            <div className=\"lds-spinner\">\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n            </div>\r\n            {props.title && <div style={{ fontWeight: \"bold\", color: \"green\" }}>{props.title} </div>}\r\n        </div>\r\n    </div>\r\n);\r\n\r\nexport default CustomSpinner;","import { Button, Checkbox, Col, ConfigProvider, Input, Table, Tooltip } from \"antd\";\r\nimport * as AllComponents from '../../home/components';\r\nimport { BaseComponent, IBaseComponent, IBaseProps } from \"../infrastructure/baseComponent\";\r\nimport { ILookupProps, ILookupStates } from \"./interfaces\";\r\nimport { MoreOutlined, DownOutlined, LoadingOutlined, CloseCircleFilled } from '@ant-design/icons';\r\nimport debounce from 'lodash/debounce';\r\nimport { enmControlType, enmPropertyType, IEntityManager, IMetadata, IProperty } from \"../entityManager/interfaces\";\r\nimport { Core } from \"../infrastructure/core\";\r\nimport { DebouncedFunc } from \"lodash\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport React, { Component } from \"react\";\r\nimport { ColumnType } from \"antd/lib/table\";\r\nimport { CSSProperties } from \"react\";\r\nimport { enmOrderingType, IFetchingResult, IOrdering, IPaging } from \"../infrastructure/models\";\r\nimport ReactDOM from \"react-dom\";\r\nimport fa_IR from \"antd/lib/locale/fa_IR\";\r\nimport CustomSpinner from \"../infrastructure/customSpinner\";\r\nimport './index.css';\r\nimport { InputFocusOptions } from \"antd/lib/input/Input\";\r\n\r\ndayjs.extend(jalaliday);\r\n\r\nexport class Lookup extends BaseComponent<ILookupProps, ILookupStates> {\r\n    self?: HTMLDivElement | null;\r\n    component?: IEntityManager;\r\n    lookupProps?: IBaseProps;\r\n    id: string;\r\n    debouncedSearch?: DebouncedFunc<any>;\r\n    isDropdownOpen: boolean = false;\r\n    lookupBoxContainer?: Element;\r\n    private lookupBox?: LookupBox | null;\r\n    private input?: Input | null;\r\n    constructor(props: ILookupProps) {\r\n        super(props)\r\n        const defaultValue = this.props.value && this.props.property.lookup?.lookupDisplayFields?.map(f => {\r\n            let fields = f.split('.');\r\n            let value = this.props.value;\r\n            fields.forEach(i => {\r\n                if (value)\r\n                    value = value[i];\r\n            });\r\n            return value;\r\n        })?.join(\" \");\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: false,\r\n            value: defaultValue,\r\n            options: [],\r\n            selectedItem: this.props.value,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            title: ''\r\n        };\r\n\r\n        if (!this.props.property.lookup)\r\n            throw new Error(this.props.property.dataIndex + \": lookup not set...\");\r\n\r\n        this.id = Core.newId();\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n\r\n        const contentContainer = document.getElementById('content-container');\r\n        const element = document.createElement(\"DIV\");\r\n        this.lookupBoxContainer = element;\r\n        contentContainer!.appendChild(element);\r\n        ReactDOM.render(\r\n            <LookupBox\r\n                key={this.id}\r\n                parent={this.props.parent}\r\n                getComponent={() => this.component}\r\n                getProperty={() => this.props.property}\r\n                ref={node => {\r\n                    if (!this.lookupBox && !!node && this.mounted) {\r\n                        this.lookupBox = node;\r\n                        this.initializeComponent();\r\n                    }\r\n                }}\r\n                getContainer={() => this.self}\r\n                openIfEmpty={!this.props.allowTextChange}\r\n                loading={loading => this.setLoading(loading)}\r\n                style={{ direction: \"rtl\" }}\r\n                onDataFetched={this.props.onDataFetched}\r\n                onSelect={selectedItem => {\r\n                    const title = selectedItem && this.props.property.lookup?.lookupDisplayFields?.map(f => {\r\n                        let fields = f.split('.');\r\n                        let value = selectedItem;\r\n                        fields.forEach(i => {\r\n                            value = value[i];\r\n                        });\r\n                        return value;\r\n                    })?.join(\" \");\r\n\r\n                    this.setState({\r\n                        value: title, selectedItem\r\n                    });\r\n                    this.props.onChange && this.props.onChange(selectedItem);\r\n                }}\r\n            />, element);\r\n    }\r\n    initializeComponent = () => {\r\n        if (this.props.disabled)\r\n            return;\r\n        if (this.props.property.lookup?.lookupComponent) {\r\n            this.lookupProps = {\r\n                onClose: (sender) => {\r\n                    this.props.onChange && this.props.onChange(sender.selectedEntity);\r\n\r\n                    if (this.props.onLookupClose)\r\n                        this.props.onLookupClose(sender.selectedEntity);\r\n\r\n                    if (this.props.property.lookup) {\r\n                        let lookup = this.props.property.lookup;\r\n\r\n                        (this.props.parent as any).setState({ displayLookupForm: undefined });\r\n\r\n                        const defaultValue = sender.selectedEntity && lookup.lookupDisplayFields?.map(f => {\r\n                            let fields = f.split('.');\r\n                            let value = sender.selectedEntity;\r\n                            fields.forEach(i => {\r\n                                value = value[i];\r\n                            });\r\n                            return value;\r\n                        })?.join(\" \");\r\n                        this.setState({ value: defaultValue });\r\n                    }\r\n                },\r\n                isLookupMode: true,\r\n                isChildComponent: true,\r\n                invokePath: this.props.parent.title\r\n            };\r\n\r\n            if (this.props.preparelookupProps) {\r\n                this.lookupProps = this.props.preparelookupProps(this.lookupProps);\r\n            }\r\n\r\n            let lookupComponent = this.props.property.lookup.lookupComponent;\r\n            const Component = typeof lookupComponent === \"string\" ? (AllComponents as any)[lookupComponent as string] : lookupComponent;\r\n            if (this.props.parent) {\r\n                (this.props.parent as any).setState({ displayLookupForm: undefined });\r\n                this.props.parent.addLookupForm(this.id,\r\n                    (<Component ref={(node: any) => {\r\n                        if (node && this.mounted) {\r\n                            this.component = node;\r\n                            if (this.component?.metadata) {\r\n                                this.component.preLoad = this.props.preLoad === true;\r\n                                if (!this.state.title)\r\n                                    this.setState({ title: this.component.metadata.title });\r\n                                if (this.lookupBox && !this.lookupBox.state.metadata)\r\n                                    this.lookupBox.initialize(this.component.metadata);\r\n                            }\r\n                        }\r\n                    }} {...this.lookupProps} onDataFetched={this.lookupBox!.onDataFetched} />),\r\n                    false);\r\n            }\r\n        }\r\n    }\r\n    componentWillMount() {\r\n        this.debouncedSearch = debounce((value: string) => {\r\n            this.onSearch(value);\r\n        }, 700);\r\n    }\r\n    componentDidUpdate(prevProps: ILookupProps) {\r\n        if (prevProps.value !== this.props.value) {\r\n            const defaultValue = this.props.value && this.props.property.lookup?.lookupDisplayFields?.map(f => {\r\n                let fields = f.split('.');\r\n                let value = this.props.value;\r\n                fields.forEach(i => {\r\n                    if (value)\r\n                        value = value[i];\r\n                });\r\n                return value;\r\n            })?.join(\" \");\r\n            this.setState({ value: defaultValue });\r\n        }\r\n\r\n        if (prevProps.disabled && !this.props.disabled && !this.lookupProps)\r\n            this.initializeComponent();\r\n    }\r\n\r\n    componentWillUnmount() {\r\n        super.componentWillUnmount();\r\n        this.debouncedSearch?.cancel();\r\n        this.props.parent.destroyLookupForms(this.id);\r\n\r\n        if (!!this.lookupBoxContainer) {\r\n            ReactDOM.unmountComponentAtNode(this.lookupBoxContainer);\r\n            this.lookupBoxContainer.remove();\r\n        }\r\n    }\r\n    onSearch = async (value: string, selectedRowGuid?: string) => {\r\n        this.lookupBox?.onSearch(value, selectedRowGuid);\r\n    }\r\n    onClear = () => {\r\n        this.setState({ value: '', selectedItem: undefined });\r\n        this.props.onChange && this.props.onChange(undefined);\r\n    }\r\n    focus = (options?: InputFocusOptions) => {\r\n        this.input?.focus(options);\r\n    }\r\n    render() {\r\n        const placeholder = `جستجوی لیست ${this.state.title}`;\r\n        const value = !this.state.value ? this.props.defaultText : this.state.value;\r\n        return (\r\n            <div style={this.props.style}>\r\n                <Col ref={node => this.self = node} className={`lookup ${this.props.disabled ? 'lookup-disabled' : ''}`} style={{ height: 32 }}>\r\n                    <Input\r\n                        autoComplete={\"off\"}\r\n                        id={this.props.property.dataIndex}\r\n                        suffix={\r\n                            !!this.state.value && !this.props.disabled ? <CloseCircleFilled style={{ marginLeft: 2, color: 'lightgray' }} disabled={this.props.disabled} onClick={this.onClear} /> : <></>\r\n                        }\r\n                        onChange={event => {\r\n                            this.setState({ value: event.target.value, selectedItem: undefined });\r\n                            if (event.type === \"change\") {\r\n                                this.debouncedSearch && this.debouncedSearch(event.target.value);\r\n                                if (this.props.allowTextChange)\r\n                                    this.props.onChange && this.props.onChange(event.target.value);\r\n                            }\r\n                            else\r\n                                this.props.onChange && this.props.onChange(null);\r\n                        }}\r\n                        onFocus={() => {\r\n                            this.self?.classList.add('lookup-focused');\r\n                        }}\r\n                        onBlur={() => {\r\n                            this.self?.classList.remove('lookup-focused');\r\n                            if (this.props.allowTextChange)\r\n                                this.props.onChange && this.props.onChange(value);\r\n                        }}\r\n                        style={{ width: this.props.property.lookup?.showButton !== false ? \"calc(100% - 62px)\" : \"calc(100% - 32px)\", verticalAlign: 'middle', border: 'none', padding: \"0px 10px 0px 2px\" }}\r\n                        value={value}\r\n                        disabled={this.props.disabled}\r\n                        placeholder={this.props.disabled ? '' : placeholder}\r\n                        ref={node => this.input = node}\r\n                    />\r\n                    {\r\n                        <Tooltip title={this.props.disabled ? '' : `مشاهده لیست ${this.state.title}`}>\r\n                            <Button key=\"DropDownButton\"\r\n                                loading={this.state.loading}\r\n                                style={{ border: 'none', verticalAlign: 'middle', height: '100%', borderRight: '1px solid #d9d9d9' }}\r\n                                disabled={this.props.disabled || this.state.loading}\r\n                                onClick={() => {\r\n                                    if (this.state.selectedItem)\r\n                                        this.onSearch('', this.state.selectedItem.RowGuid);\r\n                                    else\r\n                                        this.onSearch(this.state.value);\r\n                                }}\r\n                                icon={this.state.loading\r\n                                    ? <LoadingOutlined style={{ color: 'rgba(0, 0, 0, 0.25)', fontSize: 12 }} />\r\n                                    : <DownOutlined style={{ color: 'rgba(0, 0, 0, 0.25)', fontSize: 12 }} />\r\n                                }\r\n                            />\r\n                        </Tooltip>\r\n\r\n                    }\r\n                    {\r\n                        this.props.property.lookup?.showButton !== false\r\n                            ?\r\n                            <Tooltip title={this.state.title}>\r\n                                <Button key=\"MoreButton\" loading={this.state.loading}\r\n                                    onClick={() => {\r\n                                        this.props.onLookupOpen && this.props.onLookupOpen();\r\n                                        (this.props.parent as any).setState({ displayLookupForm: this.id });\r\n                                        this.component && this.component.fetchData();\r\n                                    }}\r\n                                    icon={<MoreOutlined size={20} rotate={90} />}\r\n                                    style={{ marginRight: 1, width: 30, verticalAlign: 'middle', height: 30, border: 'none', borderRight: \"1px solid #d9d9d9\" }}\r\n                                    disabled={this.props.disabled}\r\n                                />\r\n                            </Tooltip>\r\n                            : <></>\r\n                    }\r\n                </Col>\r\n            </div>\r\n        );\r\n    }\r\n}\r\ninterface ILookupBoxStates {\r\n    isOpen: boolean;\r\n    loading: boolean;\r\n    value?: string;\r\n    datasource: any[];\r\n    metadata?: IMetadata;\r\n    width?: number;\r\n    totalResultCount?: number;\r\n    columns: ColumnType<any>[];\r\n}\r\ninterface ILookupBoxProps {\r\n    openIfEmpty?: boolean | null;\r\n    parent: IBaseComponent;\r\n    getComponent: () => IEntityManager | undefined;\r\n    getProperty: () => IProperty;\r\n    loading: { (loading: boolean): void };\r\n    onSelect?: (data: any, index?: number, event?: React.MouseEvent<any, MouseEvent>) => any;\r\n    style?: CSSProperties;\r\n    getContainer: () => HTMLDivElement | null | undefined;\r\n    onDataFetched?: (data: IFetchingResult<any>) => void;\r\n}\r\nclass LookupBox extends Component<ILookupBoxProps, ILookupBoxStates> {\r\n    listBox?: HTMLDivElement | null;\r\n    paging: IPaging;\r\n    ordering?: IOrdering;\r\n    mounted: boolean;\r\n    constructor(props: ILookupBoxProps) {\r\n        super(props)\r\n        this.state = {\r\n            isOpen: false,\r\n            loading: false,\r\n            datasource: [],\r\n            columns: []\r\n        };\r\n        this.paging = { PageNo: 1, PageSize: 10 };\r\n        this.mounted = false;\r\n    }\r\n    componentDidMount() {\r\n        this.mounted = true;\r\n        window.addEventListener('resize', this.handleResize);\r\n        const node = document.getElementById('content-container');\r\n        node?.addEventListener('scroll', this.handleScroll);\r\n\r\n    }\r\n    initialize = (metadata: IMetadata) => {\r\n        let width = 0;\r\n        const property = this.props.getProperty();\r\n        const displayProperties = metadata.Properties.filter(p => p.showInLookup !== false && (!property.lookup?.dropdownDisplayFields || property.lookup.dropdownDisplayFields.indexOf(p.dataIndex!) > -1)) ?? [];\r\n        const columns = displayProperties.filter(c => c.showColumn !== false).map(c => {\r\n            width += Number(c.width ?? 0);\r\n            let newCol: ColumnType<any> = {};\r\n            newCol.key = c.key ?? c.dataIndex;\r\n            newCol.title = c.title;\r\n            newCol.dataIndex = c.dataIndex;\r\n            newCol.width = c.width;\r\n            newCol.onCell = (record, rowIndex) => {\r\n                return {\r\n                    onClick: (event) => {\r\n                        if (this.props.onSelect)\r\n                            this.props.onSelect.call(this, record, rowIndex, event);\r\n                    },\r\n                };\r\n            };\r\n            newCol.responsive = ['lg', 'md', 'sm', 'xs'];\r\n            newCol.render = (text, record: any, index) => {\r\n                let result: any = null;\r\n                if (c.renderColumn) {\r\n                    result = c.renderColumn(text, record, index);\r\n                }\r\n\r\n                if (c.lookup?.lookupComponent && record) {\r\n                    let displayData = record as any;\r\n                    if (displayData[c.lookup?.lookupProperty!])\r\n                        return (\r\n                            <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                                <Col>{c.lookup?.lookupDisplayFields?.map(f => {\r\n                                    let fields = f.split('.');\r\n                                    let value = displayData[c.lookup?.lookupProperty!];\r\n                                    fields.forEach(i => {\r\n                                        value = value[i];\r\n                                    });\r\n                                    return value + \" \"\r\n                                })}</Col>\r\n                            </div>\r\n                        );\r\n                }\r\n\r\n                result = result ?? text;\r\n\r\n                let fields = c.dataIndex?.split('.');\r\n                let value = record as any;\r\n                fields?.forEach(i => {\r\n                    if (value !== undefined && value !== null && value[i] !== undefined && value[i] !== null)\r\n                        value = value[i];\r\n                    else\r\n                        value = undefined;\r\n                });\r\n\r\n                if (c.propertyType === enmPropertyType.boolean) {\r\n                    return (<Checkbox key={record.RowGuid} checked={value} />);\r\n                }\r\n                if (c.combobox && (c.combobox.options || c.combobox.optionsFunc)) {\r\n                    return (\r\n                        <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                            {c.combobox.options?.find(o => o.value === value)?.title}\r\n                            {c.combobox.optionsFunc && c.combobox.optionsFunc(this.props.parent, record).find(o => o.value === value)?.title}\r\n                        </div>\r\n                    );\r\n                }\r\n                if (c.propertyType === enmPropertyType.date) {\r\n                    result = text ? dayjs(text).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\") : undefined;\r\n                    return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {result}\r\n                    </div>);\r\n                }\r\n                if (c.propertyType === enmPropertyType.datetime) {\r\n                    result = value ? dayjs(value).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : undefined;\r\n                    return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {result}\r\n                    </div>);\r\n                }\r\n                if (c.controlType === enmControlType.numberinput) {\r\n                    result = text;\r\n                    if (value)\r\n                        result = value;\r\n                    return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {c.formatter ? c.formatter(result, {} as any) : result}\r\n                    </div>);\r\n                }\r\n                if (c.controlType === enmControlType.priceinput) {\r\n                    result = text;\r\n                    if (value)\r\n                        result = value;\r\n                    return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {`${result}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}\r\n                    </div>);\r\n                }\r\n                if (!result && !!value)\r\n                    result = value;\r\n                return (\r\n                    <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {result}\r\n                    </div>\r\n                );\r\n            };\r\n            newCol.sorter = c.sortable !== false;\r\n            return newCol;\r\n        });\r\n\r\n        this.setState({ columns, metadata, width });\r\n    }\r\n    onDataFetched = (result: IFetchingResult<any>) => {\r\n        if (!this.mounted)\r\n            return;\r\n        const property = this.props.getProperty();\r\n        const options: any[] = [];\r\n        if (property.allowNull)\r\n            options.push({ label: '...', value: null });\r\n\r\n        result.Data!.forEach((item: any) => {\r\n            let label = item && property.lookup?.lookupDisplayFields?.map(f => {\r\n                let fields = f.split('.');\r\n                let value = item;\r\n                fields.forEach(i => {\r\n                    value = value[i];\r\n                });\r\n                return value;\r\n            })?.join(\" \");\r\n            options.push({\r\n                key: item.RowGuid, label: label, value: item.Id.toString()\r\n            });\r\n        });\r\n        this.props.onDataFetched && this.props.onDataFetched(result);\r\n        this.setState({ datasource: result.Data!, loading: false, totalResultCount: result.TotalResultCount });\r\n        this.props.loading(false);\r\n    }\r\n    componentWillUnmount() {\r\n        this.mounted = false;\r\n        window.removeEventListener('resize', this.handleResize);\r\n        const node = document.getElementById('content-container');\r\n        node?.removeEventListener('scroll', this.handleScroll);\r\n    }\r\n    componentDidUpdate() {\r\n        const { isOpen } = this.state;\r\n        setTimeout(() => {\r\n            if (isOpen) {\r\n                window.addEventListener('click', this.close)\r\n            }\r\n            else {\r\n                window.removeEventListener('click', this.close)\r\n            }\r\n        }, 100);\r\n    }\r\n    open = () => {\r\n        if (this.mounted === false)\r\n            return;\r\n        setTimeout(() => {\r\n            this.listBox?.classList.remove(\"lookup-box-hidden\");\r\n            this.listBox?.classList.add(\"lookup-box-show\");\r\n            this.setState({ isOpen: true });\r\n        }, 100);\r\n    }\r\n    close = () => {\r\n        if (this.mounted === false)\r\n            return;\r\n        this.listBox?.classList.add(\"lookup-box-hidden\");\r\n        this.listBox?.classList.remove(\"lookup-box-show\");\r\n        this.setState({ isOpen: false });\r\n    }\r\n    handleResize = () => {\r\n        if (this.mounted && this.state.isOpen)\r\n            this.setState({ isOpen: false });\r\n    }\r\n    handleScroll = () => {\r\n        if (this.mounted && this.state.isOpen)\r\n            this.setState({ isOpen: false });\r\n    }\r\n    onSearch = async (value?: string, selectedRowGuid?: string) => {\r\n        if (!this.mounted)\r\n            return;\r\n        const property = this.props.getProperty();\r\n        const component = this.props.getComponent();\r\n        if (!!property.lookup && !!component) {\r\n            this.props.loading(true);\r\n            this.setState({ loading: true, value: value, isOpen: false });\r\n            await component.search(value, selectedRowGuid, this.paging, this.ordering, true);\r\n            if (!this.state.isOpen && (this.props.openIfEmpty || (!this.props.openIfEmpty && this.state.datasource?.length)))\r\n                this.open();\r\n        }\r\n    }\r\n    render() {\r\n        const { PageNo, PageSize } = this.paging!;\r\n\r\n        const contentContainer = document.getElementById('content-container');\r\n        const container = this.props.getContainer();\r\n        let style: CSSProperties = {};\r\n        let exheight = 0;\r\n\r\n        if (container && contentContainer && this.listBox && this.state.isOpen) {\r\n            const parentBounding = container.getBoundingClientRect();\r\n            const contentContainerBounding = contentContainer.getBoundingClientRect();\r\n            const selfBounding = this.listBox.getBoundingClientRect();\r\n            const availableHeightOnTop = parentBounding.top;\r\n            const availableHeightOnBottom = contentContainerBounding.height - parentBounding.bottom;\r\n            const width = Math.min(Math.max(parentBounding.width, this.state.width || 0), parentBounding.left + parentBounding.width - 20); //  عرض مورد نیاز جهت نمایش لیست\r\n            style = {\r\n                position: \"absolute\",\r\n                overflowY: \"hidden\",\r\n                top: 0,\r\n                bottom: 0,\r\n                height: 0,\r\n                minHeight: 0,\r\n                left: parentBounding.right - width,\r\n                width: Math.floor(width).toString() + \"px\"\r\n            };\r\n            if (selfBounding.height <= availableHeightOnBottom) {\r\n                style.top = parentBounding.bottom - 64;\r\n                style.height = selfBounding.height;\r\n            }\r\n            else if (selfBounding.height <= availableHeightOnTop) {\r\n                style.top = parentBounding.top - selfBounding.height - 64;\r\n                style.height = selfBounding.height;\r\n            }\r\n            else if (availableHeightOnBottom > availableHeightOnTop) {\r\n                style.top = parentBounding.bottom - 64;\r\n                style.height = availableHeightOnBottom;\r\n                exheight = selfBounding.height - availableHeightOnBottom;\r\n            }\r\n            else {\r\n                style.bottom = parentBounding.top;\r\n                style.height = availableHeightOnTop;\r\n                exheight = selfBounding.height - availableHeightOnTop;\r\n            }\r\n        }\r\n\r\n        return (\r\n            <ConfigProvider locale={fa_IR} direction=\"rtl\" >\r\n                <div >\r\n                    <div className=\"lookup-box\" ref={node => this.listBox = node} onClick={this.close} style={style}>\r\n                        <Table\r\n                            rowKey=\"RowGuid\"\r\n                            sticky={{ getContainer: () => { return this.listBox!; } }}\r\n                            showHeader={true}\r\n                            columns={this.state.columns}\r\n                            scroll={{ x: 'max-content', y: this.paging.PageSize * 30 - exheight }}\r\n                            dataSource={this.state.datasource}\r\n                            loading={this.state.loading && { indicator: <CustomSpinner /> }}\r\n                            pagination={{\r\n                                style: { marginRight: 10 },\r\n                                position: ['bottomRight'],\r\n                                defaultPageSize: this.paging?.PageSize ?? 10,\r\n                                current: Math.ceil(this.state.totalResultCount ?? 0 / PageSize) < PageNo ? 1 : PageNo,\r\n                                showSizeChanger: false,\r\n                                total: this.state.totalResultCount,\r\n                                showPrevNextJumpers: false,\r\n                                showLessItems: true,\r\n                                showQuickJumper: false,\r\n                                size: 'small'\r\n                            }}\r\n                            onChange={(pagination, _, sorter) => {\r\n                                if (!(sorter instanceof Array) && !!sorter.field && !!sorter.order) {\r\n                                    this.ordering = {\r\n                                        Property: sorter.field?.toString() ?? '',\r\n                                        OrderBy: sorter.order === 'ascend' ? enmOrderingType.Ascending : enmOrderingType.Descending\r\n                                    };\r\n                                }\r\n                                if (this.paging) {\r\n                                    this.paging.PageNo = pagination.current ?? 1;\r\n                                    this.paging.PageSize = pagination.pageSize ?? 10;\r\n                                }\r\n                                this.onSearch(this.state.value);\r\n                            }}\r\n                            onRow={() => {\r\n                                return {\r\n                                    className: \"lookup-row\",\r\n                                    //onClick: (event) => {\r\n                                    //    if (this.props.onSelect)\r\n                                    //        this.props.onSelect.call(this, record, rowIndex, event);\r\n                                    //}\r\n                                };\r\n                            }}\r\n                        />\r\n                    </div>\r\n                </div>\r\n            </ConfigProvider>\r\n        );\r\n    }\r\n\r\n}","import { InputNumber } from \"antd\";\r\nimport { CSSProperties } from \"react\";\r\n\r\nexport interface IPriceInput {\r\n    style?: CSSProperties;\r\n    defaultValue?: any;\r\n    onChange?: (value: any) => void;\r\n    placeholder?: string;\r\n    disabled?: boolean;\r\n    value?: any;\r\n}\r\n\r\nexport const PriceInput = (props: IPriceInput) => {\r\n\r\n    return (\r\n        <InputNumber\r\n            id={(props as any).key}\r\n            formatter={value => {\r\n                return `${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n            }}\r\n            parser={value => {\r\n                return value?.replace(/\\\\s?|(,*)/g, '') ?? \"\";\r\n            }}\r\n            style={props.style}\r\n            onKeyPress={(event) => {\r\n                if (event.charCode < 48 || event.charCode > 57) {\r\n                    event.preventDefault();\r\n                }\r\n            }}\r\n            defaultValue={props.defaultValue}\r\n            type={\"text\"}\r\n            onChange={props.onChange}\r\n            placeholder={props.placeholder}\r\n            disabled={props.disabled}\r\n            value={props.value}\r\n            prefix={<span> ریال </span>}\r\n        />\r\n    );\r\n}","import { useState } from 'react';\r\nimport { Form, Button, Input, InputNumber, Checkbox, FormInstance, Select, ColProps } from 'antd';\r\nimport 'moment/locale/fa';\r\nimport { DatePicker as DatePickerJalali } from \"antd-jalali\";\r\nimport { SaveOutlined, StopOutlined } from '@ant-design/icons';\r\nimport { enmControlType, IProperty } from './interfaces';\r\nimport { IEntity } from '../infrastructure/models';\r\nimport { IBaseComponent, IBaseStates } from '../infrastructure/baseComponent';\r\nimport Password from 'antd/lib/input/Password';\r\nimport locale from 'antd/es/date-picker/locale/fa_IR';\r\nimport dayjs from 'dayjs';\r\n//import jalaliday from 'jalaliday';\r\n\r\nimport { Lookup } from '../lookup';\r\nimport CustomSpinner from '../infrastructure/customSpinner';\r\nimport React from 'react';\r\nimport { PriceInput } from '../priceInput';\r\n\r\nconst { Option } = Select;\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\n\r\n//dayjs.locale('fa-IR');\r\n//dayjs.extend(jalaliday);\r\n\r\nexport interface IDataFormProps<TEntity extends IEntity> {\r\n    borderLess?: boolean;\r\n    onSubmit: (values: any) => Promise<boolean>;\r\n    onReset?: () => void;\r\n    isReadonly?: boolean;\r\n    labelCol?: ColProps;\r\n    wrapperCol?: ColProps;\r\n    properties: IProperty[];\r\n    currentEntity: TEntity;\r\n    onChange?: (property: IProperty, value: any, form: FormInstance<any>) => void;\r\n    resetable?: boolean;\r\n    style?: React.CSSProperties;\r\n    parent: IBaseComponent;\r\n    preparelookupProps?: (propName: string, lookupProps: any, form?: FormInstance<any>) => any;\r\n    onLookupOpen?: (propName: string) => void;\r\n    onLookupClose?: (propName: string, selectetEntity?: any) => void;\r\n}\r\n\r\nconst DataForm = <TEntity extends IEntity>(props: IDataFormProps<TEntity>) => {\r\n    const [state, setState] = useState<IBaseStates>({ loading: false, isAuthorized: true, windowSize: window.innerWidth <= 765 ? 1 : 2 });\r\n    const { loading } = state;\r\n    const [form] = Form.useForm();\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n    const formItemLayout = {\r\n        labelCol: props.labelCol ?? { xxl: 4, xl: 4, lg: 6, md: 6, sm: 8, xs: 8 },\r\n        wrapperCol: props.wrapperCol ?? { xxl: 10, xl: 10, lg: 16, md: 16, sm: 16, xs: 16 },\r\n    };\r\n\r\n    const componentWillUnmount = React.useRef(false);\r\n\r\n    const onFinish = async (values: any) => {\r\n        setState({ loading: true, isAuthorized: true, windowSize: window.innerWidth <= 765 ? 1 : 2 });\r\n        await props.onSubmit(values);\r\n        if (componentWillUnmount.current !== true)\r\n            setState({ loading: false, isAuthorized: true, windowSize: window.innerWidth <= 765 ? 1 : 2 });\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n        };\r\n    }, []);\r\n\r\n\r\n    let extraParams = {};\r\n\r\n    const formNode = (\r\n        <Form\r\n            style={{ padding: props.borderLess ? 0 : '5px 25px' }}\r\n            scrollToFirstError\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            form={form}\r\n            initialValues={{ layout: formLayout }}\r\n            onFinish={onFinish}\r\n            onReset={() => {\r\n                setState({ loading: true, isAuthorized: true, windowSize: window.innerWidth <= 765 ? 1 : 2 });\r\n                props.onReset && props.onReset();\r\n            }}\r\n        >\r\n\r\n            {!props.currentEntity ? <CustomSpinner /> :\r\n                <div style={{ marginBottom: 10, position: 'sticky' }}>\r\n                    {props.properties.filter(c => c.showControl !== false).map(c => {\r\n\r\n                        let disabled = props.isReadonly || c.disabled || c.disable?.call(c, props.parent);\r\n\r\n                        let currentValue = (props.currentEntity as any);\r\n                        let fields = c.dataIndex!.split('.');\r\n\r\n                        fields.forEach(i => {\r\n                            if (currentValue !== undefined && currentValue != null && currentValue[i] !== undefined && currentValue[i] != null)\r\n                                currentValue = currentValue[i];\r\n                            else\r\n                                currentValue = undefined;\r\n                        });\r\n\r\n                        let element: React.ReactNode | null = null;\r\n                        if (c.controlType === enmControlType.textbox) {\r\n                            element = (\r\n                                <Input\r\n                                    onChange={e => {\r\n                                        e.stopPropagation();\r\n                                        if (props.onChange)\r\n                                            props.onChange(c, e.target.value, form);\r\n                                    }}\r\n                                    placeholder={c.title}\r\n                                    style={{ width: '100%', minWidth: c.width, marginBottom: 8, display: 'block' }}\r\n                                    type={\"text\"}\r\n                                    key={c.dataIndex}\r\n                                    disabled={disabled}\r\n                                />);\r\n\r\n                            let fields = c.dataIndex?.split('.');\r\n                            let value = props.currentEntity as any;\r\n                            fields?.forEach(i => {\r\n                                if (value && value[i])\r\n                                    value = value[i];\r\n                                else\r\n                                    value = undefined;\r\n                            });\r\n                            extraParams = { initialValue: value ?? currentValue };\r\n                        }\r\n                        if (c.controlType === enmControlType.password) {\r\n                            element = (\r\n                                <Password\r\n                                    onChange={e => {\r\n                                        e.stopPropagation();\r\n                                        if (props.onChange)\r\n                                            props.onChange(c, e.target.value, form);\r\n                                    }}\r\n                                    placeholder={c.title}\r\n                                    style={{ width: '100%', minWidth: c.width, marginBottom: 8, display: 'block' }}\r\n                                    type={\"password\"}\r\n                                    key={c.dataIndex}\r\n                                    disabled={disabled}\r\n                                />);\r\n\r\n                            extraParams = { initialValue: undefined };\r\n                        }\r\n                        if (c.controlType === enmControlType.email) {\r\n                            element = (\r\n                                <Input\r\n                                    onChange={e => {\r\n                                        e.stopPropagation();\r\n                                        if (props.onChange)\r\n                                            props.onChange(c, e.target.value, form);\r\n                                    }}\r\n                                    placeholder={c.title}\r\n                                    style={{ width: '100%', minWidth: c.width, marginBottom: 8, display: 'block' }}\r\n                                    type={\"email\"}\r\n                                    key={c.dataIndex}\r\n                                    disabled={disabled}\r\n                                    maxLength={c.maxLength}\r\n                                    minLength={c.minLength}\r\n                                />);\r\n\r\n                            extraParams = { initialValue: currentValue };\r\n                        }\r\n                        if (c.controlType === enmControlType.template && c.renderControl) {\r\n                            element = c.renderControl(props.currentEntity);\r\n                            if (c.renderExtraParams)\r\n                                extraParams = c.renderExtraParams(props.currentEntity);\r\n                            else\r\n                                extraParams = { initialValue: currentValue };\r\n                        }\r\n                        if (c.controlType === enmControlType.numberinput) {\r\n                            element = (\r\n                                <InputNumber\r\n                                    onChange={value => {\r\n                                        if (props.onChange)\r\n                                            props.onChange(c, value, form);\r\n                                    }}\r\n                                    onKeyPress={e => c.onKeyPress && c.onKeyPress(e, form?.getFieldValue(c.dataIndex!))}\r\n                                    placeholder={c.title}\r\n                                    style={{ width: '100%', minWidth: c.width, marginBottom: 8, display: 'block' }}\r\n                                    type={\"text\"}\r\n                                    key={c.dataIndex}\r\n                                    disabled={disabled}\r\n                                    precision={c.precision}\r\n                                    formatter={c.formatter}\r\n                                    parser={c.parser}\r\n                                    maxLength={c.maxLength}\r\n                                    minLength={c.minLength}\r\n                                />);\r\n\r\n                            let fields = c.dataIndex?.split('.');\r\n                            let value = props.currentEntity as any;\r\n                            fields?.forEach(i => {\r\n                                if (value && value[i])\r\n                                    value = value[i];\r\n                                else\r\n                                    value = undefined;\r\n                            });\r\n                            extraParams = { initialValue: value ?? currentValue };\r\n                        }\r\n                        if (c.controlType === enmControlType.priceinput) {\r\n                            element = (\r\n                                <PriceInput\r\n                                    onChange={value => {\r\n                                        if (props.onChange)\r\n                                            props.onChange(c, value, form);\r\n                                    }}\r\n                                    placeholder={c.title}\r\n                                    style={{ width: '100%', minWidth: c.width, marginBottom: 8, display: 'block' }}\r\n\r\n                                    key={c.dataIndex}\r\n                                    disabled={disabled}\r\n                                />);\r\n\r\n                            let fields = c.dataIndex?.split('.');\r\n                            let value = props.currentEntity as any;\r\n                            fields?.forEach(i => {\r\n                                if (value && value[i])\r\n                                    value = value[i];\r\n                                else\r\n                                    value = undefined;\r\n                            });\r\n                            extraParams = { initialValue: value ?? currentValue };\r\n                        }\r\n                        if (c.controlType === enmControlType.lookup) {\r\n                            element = (\r\n                                <Lookup\r\n                                    onChange={value => {\r\n                                        if (value) {\r\n                                            (props.currentEntity as any)[c.dataIndex!] = value[\"Id\"];\r\n                                            (props.currentEntity as any)[c.lookup?.lookupProperty!] = value;\r\n                                            if (props.onChange)\r\n                                                props.onChange(c, value, form);\r\n                                        }\r\n                                        else {\r\n                                            (props.currentEntity as any)[c.dataIndex!] = undefined;\r\n                                            (props.currentEntity as any)[c.lookup?.lookupProperty!] = undefined;\r\n                                            if (props.onChange)\r\n                                                props.onChange(c, undefined, form);\r\n                                        }\r\n                                    }}\r\n                                    parent={props.parent}\r\n                                    isLookupMode={true}\r\n                                    property={c}\r\n                                    key={c.dataIndex}\r\n                                    disabled={disabled}\r\n                                    preparelookupProps={lookupProps => {\r\n                                        if (props.preparelookupProps)\r\n                                            return props.preparelookupProps(c.dataIndex!, lookupProps, form);\r\n                                        return lookupProps;\r\n                                    }}\r\n                                    onLookupOpen={() => props.onLookupOpen && props.onLookupOpen(c.dataIndex!)}\r\n                                    onLookupClose={(selectedEntity) => props.onLookupClose && props.onLookupClose(c.dataIndex!, selectedEntity)}\r\n                                />);\r\n\r\n                            extraParams = { initialValue: (props.currentEntity as any)[c.lookup?.lookupProperty!] };\r\n                        }\r\n                        if (c.controlType === enmControlType.checkbox) {\r\n                            element = (\r\n                                <Checkbox\r\n                                    onChange={e => {\r\n                                        if (props.onChange)\r\n                                            props.onChange(c, e.target.checked, form);\r\n                                    }}\r\n                                    key={c.dataIndex}\r\n                                    disabled={disabled}\r\n                                />);\r\n                            extraParams = { valuePropName: \"checked\" };\r\n                        }\r\n                        if (c.controlType === enmControlType.combobox) {\r\n                            let options: { value?: any; title?: string; }[] = [];\r\n\r\n                            let fields = c.dataIndex?.split('.');\r\n                            let value = props.currentEntity as any;\r\n                            fields?.forEach(i => {\r\n                                if (value && value[i])\r\n                                    value = value[i];\r\n                                else\r\n                                    value = undefined;\r\n                            });\r\n\r\n                            if (c.combobox?.options)\r\n                                options = c.combobox.options;\r\n                            if (c.combobox?.optionsFunc)\r\n                                options = c.combobox.optionsFunc(props.parent, props.currentEntity);\r\n\r\n                            element = (\r\n                                <Select\r\n                                    onChange={value => {\r\n                                        if (props.onChange)\r\n                                            props.onChange(c, value, form);\r\n                                    }}\r\n                                    key={c.dataIndex}\r\n                                    disabled={disabled}\r\n                                    defaultValue={c.combobox?.defaultValue}\r\n                                    mode={c.combobox?.mode}\r\n                                >\r\n                                    {options.map(o => <Option key={o.value} value={o.value}>{o.title}</Option>)}\r\n                                </Select>);\r\n                            extraParams = { initialValue: c.combobox?.defaultValue ?? value ?? currentValue };\r\n                        }\r\n                        if (c.controlType === enmControlType.date) {\r\n                            element = (\r\n                                <DatePickerJalali\r\n                                    key={c.dataIndex}\r\n                                    onChange={(e: any) => {\r\n                                        if (props.onChange) {\r\n                                            if (e) {\r\n                                                if (e.locale() === \"fa\") {\r\n                                                    const date = dayjs(e.toDate()).locale('fa').format('YYYY-MM-DD');\r\n                                                    const jalali = dayjs(date, { jalali: true } as any);\r\n                                                    const miladi = jalali.locale('en').format('YYYY-MM-DD');\r\n                                                    let parsedDate = new Date(miladi);\r\n                                                    parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                                    props.onChange(c, parsedDate, form);\r\n                                                }\r\n                                                else {\r\n                                                    let parsedDate = e.toDate();\r\n                                                    parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                                    props.onChange(c, parsedDate, form);\r\n                                                }\r\n                                            }\r\n                                            else\r\n                                                props.onChange(c, undefined, form);\r\n                                        }\r\n                                    }}\r\n                                    locale={locale}\r\n                                    placeholder={c.title}\r\n                                    format=\"YYYY/MM/DD\"\r\n                                    style={{ width: '100%', minWidth: c.width, marginBottom: 8, display: 'block' }}\r\n                                    disabled={disabled}\r\n                                //inputReadOnly={true}\r\n                                />);\r\n\r\n                            let currentDate = currentValue;\r\n                            if (currentDate && !dayjs.isDayjs(currentDate))\r\n                                currentDate = dayjs(currentDate).calendar('jalali');\r\n                            extraParams = { initialValue: currentDate };\r\n                        }\r\n                        if (c.controlType === enmControlType.datetime) {\r\n                            element = (\r\n                                <DatePickerJalali\r\n                                    key={c.dataIndex}\r\n                                    onChange={(e: any) => {\r\n                                        if (props.onChange) {\r\n                                            if (e) {\r\n                                                if (e.locale() === \"fa\") {\r\n                                                    const date = dayjs(e.toDate()).locale('fa').format('YYYY-MM-DD HH:mm');\r\n                                                    const jalali = dayjs(date, { jalali: true } as any);\r\n                                                    const miladi = jalali.locale('en').format('YYYY-MM-DD HH:mm');\r\n                                                    let parsedDate = new Date(miladi);\r\n                                                    parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                                    props.onChange(c, parsedDate, form);\r\n                                                }\r\n                                                else {\r\n                                                    let parsedDate = e.toDate();\r\n                                                    parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                                    props.onChange(c, parsedDate, form);\r\n                                                }\r\n                                            }\r\n                                            else\r\n                                                props.onChange(c, undefined, form);\r\n                                        }\r\n                                    }}\r\n                                    locale={locale}\r\n                                    placeholder={c.title}\r\n                                    format=\"YYYY/MM/DD HH:mm\"\r\n                                    style={{ width: '100%', minWidth: c.width, marginBottom: 8, display: 'block' }}\r\n                                    disabled={disabled}\r\n                                    showTime={true}\r\n                                //inputReadOnly={true}\r\n                                />);\r\n                            let currentDate = currentValue;\r\n                            if (currentDate && !dayjs.isDayjs(currentDate))\r\n                                currentDate = dayjs(currentDate).calendar('jalali');\r\n                            extraParams = { initialValue: currentDate };\r\n                        }\r\n                        return (\r\n                            <Form.Item\r\n                                label={c.title}\r\n                                name={c.dataIndex}\r\n                                rules={c.rules ?? (c.rulesFunc && c.rulesFunc(props.currentEntity))}\r\n                                key={c.dataIndex}\r\n                                initialValue={currentValue}\r\n                                style={{ display: !c.visibility || (c.visibility && c.visibility(props.currentEntity)) ? 'flex' : 'none', minHeight: 40 }}\r\n                                {...extraParams}\r\n                            >\r\n                                {element}\r\n                            </Form.Item>\r\n                        );\r\n                    })}\r\n                </div>}\r\n\r\n            {!props.isReadonly &&\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid #e5e5e5', position: \"sticky\", bottom: -10, backgroundColor: props.style?.backgroundColor ?? '#F5F5F5' }}>\r\n\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<SaveOutlined />} loading={loading} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        ذخیره\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={loading} style={{ display: props.resetable !== false ? 'inline-block' : 'none', lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n\r\n    if (props.borderLess)\r\n        return <>{formNode}</>;\r\n\r\n    return (\r\n        <div className=\"box box-blue\" style={{ margin: '0px 0px', ...props.style }}>\r\n            <div className=\"box-body form\">\r\n                <div className=\"form-body\">\r\n                    {formNode}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default DataForm;","import { Avatar, Button, Image, Input, Space, message } from \"antd\";\r\nimport { UserOutlined, CameraOutlined, EyeOutlined, DeleteOutlined } from '@ant-design/icons';\r\nimport DataForm from \"../../components/entityManager/dataform\";\r\nimport { enmControlType, enmPropertyType, IProperty } from \"../../components/entityManager/interfaces\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState, ICallOptions, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { IUser } from \"../user/interfaces\";\r\n\r\nexport interface IUserEditProps extends IBaseProps {\r\n    currentUser: IUser;\r\n}\r\n\r\nexport interface IUserEditStates extends IBaseStates {\r\n    currentUser: IUser;\r\n    file?: string;\r\n    fileStream?: any;\r\n}\r\n\r\nexport class UserEdit extends BaseComponent<IUserEditProps, IUserEditStates> {\r\n    properties: IProperty[];\r\n    inputFile?: Input | null;\r\n    whiteList: string = 'image/png,image/jpg,image/jpeg';\r\n    whiteListExtensions: string[] = \".png,.jpg,.jpeg\".split(\",\");\r\n    constructor(props: IUserEditProps) {\r\n        super(props)\r\n        this.properties = [\r\n            {\r\n                title: \"نام کاربری\",\r\n                dataIndex: \"UserName\",\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.textbox,\r\n                filterable: true,\r\n                width: 150,\r\n                disabled: true,\r\n                rules: [{ required: true, message: 'لطفا نام کاربری را وارد نمایید' }]\r\n            },\r\n            {\r\n                title: \"نام\",\r\n                dataIndex: \"FirstName\",\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.textbox,\r\n                filterable: true,\r\n                width: 150,\r\n                rules: [{ required: true, message: 'لطفا نام را وارد نمایید' }]\r\n            },\r\n            {\r\n                title: \"نام خانوادگی\",\r\n                dataIndex: \"LastName\",\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.textbox,\r\n                filterable: true,\r\n                width: 150,\r\n                rules: [{ required: true, message: 'لطفا نام خانوادگی را وارد نمایید' }]\r\n            },\r\n            {\r\n                title: \"ایمیل\",\r\n                dataIndex: \"Email\",\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.email,\r\n                filterable: true,\r\n                width: 150\r\n            },\r\n            {\r\n                title: \"شماره تلفن همراه\",\r\n                dataIndex: \"Phone\",\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.textbox,\r\n                filterable: true,\r\n                rules: [\r\n                    { len: 11, message: 'شماره موبایل باید 11 رقم باشد' }\r\n                ],\r\n                width: 150\r\n            },\r\n            {\r\n                title: \"تصویر پروفایل\",\r\n                dataIndex: \"ProfilePicture\",\r\n                showColumn: false,\r\n                controlType: enmControlType.template,\r\n                filterable: false,\r\n                renderControl: (_: IUser) => {\r\n                    const mask: React.ReactNode = (\r\n                        <>\r\n                            <Button style={{ backgroundColor: 'transparent', border: 'none' }} icon={<EyeOutlined />} size={\"large\"} title=\"نمایش\" />\r\n                            <Button style={{ backgroundColor: 'transparent', border: 'none' }} icon={<DeleteOutlined />} size={\"large\"} title=\"حذف\"\r\n                                onClick={() => {\r\n                                    let currentUser = this.state.currentUser;\r\n                                    currentUser.ProfilePicturePath = undefined;\r\n                                    this.setFile(currentUser);\r\n                                }} />\r\n                        </>\r\n                    );\r\n                    return (\r\n                        <Space direction=\"vertical\">\r\n                            <div style={{ textAlign: \"center\" }}>\r\n                                {this.state.file || this.state.currentUser?.ProfilePicturePath\r\n                                    ? <Avatar src={<Image preview={{ mask }} src={this.state.file ?? this.state.currentUser?.ProfilePicturePath} style={{ height: 100 }} />} size={100} />\r\n                                    : <Avatar icon={<UserOutlined style={{ verticalAlign: 'text-top', height: 100 }} />} size={100} />\r\n                                }\r\n                            </div>\r\n\r\n                            <Button onClick={this.browseFile} icon={<CameraOutlined style={{ verticalAlign: 'middle' }} />} style={{}} >\r\n                                تغییر تصویر\r\n                            </Button>\r\n                            <Input type=\"file\" hidden ref={node => this.inputFile = node} onChange={this.changeFile} accept={this.whiteList} />\r\n\r\n                        </Space>\r\n                    );\r\n                }\r\n            }\r\n        ];\r\n\r\n        const { currentUser } = this.props;\r\n        const { Phone } = currentUser;\r\n        this.state = {\r\n            loading: false,\r\n            isAuthorized: true,\r\n            currentUser: { ...currentUser, Phone: Phone ? '0' + Phone : '' },\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    browseFile = () => {\r\n        this.inputFile?.input.click();\r\n    }\r\n    changeFile = async (event: any) => {\r\n        let fileStream = event.target.files.length ? event.target.files[0] : undefined;\r\n        if (!fileStream || this.whiteList.split(',').indexOf(fileStream.type) === -1 || !fileStream.name || fileStream.name === '' || fileStream.name.split('.').length > 2 || fileStream.name.indexOf('\\0') > -1 || this.whiteListExtensions.filter(f => fileStream.name.toLowerCase().endsWith(f)).length === 0) {\r\n            message.error(`فایل انتخاب شده غیرمجاز است`);\r\n            return false;\r\n        }\r\n        if (fileStream.size > 2097152) {\r\n            message.error(`حداکثر حجم فایل 2 مگابایت باشد`);\r\n            return false;\r\n        }\r\n        let file = fileStream ? await Core.getBase64(fileStream) : undefined;\r\n        let currentUser = this.state.currentUser;\r\n        this.setFile(currentUser, file, fileStream);\r\n    }\r\n    setFile(currentUser: IUser, file?: string, fileStream?: any) {\r\n        if (currentUser && currentUser.ModifiedProperties.indexOf(\"ProfilePicturePath\") === -1) {\r\n            currentUser.ModifiedProperties.push(\"ProfilePicturePath\");\r\n            currentUser.State = enmEntityState.Modified;\r\n        }\r\n        this.setState({ file, fileStream, currentUser });\r\n    }\r\n    async save(entity: IUser): Promise<boolean> {\r\n        if (!entity)\r\n            return false;\r\n\r\n        let formData = new FormData();\r\n        if (this.state.fileStream)\r\n            formData.append(\"Avatar\", this.state.fileStream);\r\n\r\n        if (entity.State === enmEntityState.Modified || entity.State === enmEntityState.Added) {\r\n            for (var i = 0; i < entity.ModifiedProperties.length; i++) {\r\n                let val = entity.ModifiedProperties[i];\r\n                formData.append(val, (entity as any)[val]);\r\n            }\r\n            formData.append(\"ModifiedProperties\", entity.ModifiedProperties.join(','));\r\n        }\r\n        if (entity.State === enmEntityState.Unchanged) {\r\n            Core.warningNotification('لطفا اطلاعات را اصلاح سپس ذخیره نمایید');\r\n            return false;\r\n        }\r\n        formData.append(\"RowGuid\", entity.RowGuid);\r\n        formData.append(\"Id\", entity.Id.toString());\r\n        formData.append(\"RowVrsn\", entity.RowVrsn.toString());\r\n        formData.append(\"State\", entity.State.toString());\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"user/editprofile\",\r\n            data: formData,\r\n            headers: [{ key: \"encType\", value: \"multipart/form-data\" }],\r\n            contentType: false,\r\n            onSuccess: (result) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('تغییرات با موفقیت ذخیره شد');\r\n                    let res: IResultSet<IUser[]> = result as any;\r\n                    let user = res && res.Data && res.Data[0];\r\n                    user && this.setState({ currentUser: user });\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n\r\n    virtualRender() {\r\n        return (\r\n            <DataForm<IUser>\r\n                parent={this}\r\n                style={{ boxShadow: \"inherit\" }}\r\n                resetable={false}\r\n                currentEntity={this.state.currentUser}\r\n                properties={this.properties}\r\n                onSubmit={() => this.save(this.state.currentUser)}\r\n                onChange={(property, value) => {\r\n                    let currentUser = this.state.currentUser as any;\r\n                    if (currentUser) {\r\n                        currentUser[property.dataIndex!] = value;\r\n                        if (!this.state.currentUser?.ModifiedProperties.find(i => i === property.dataIndex!))\r\n                            currentUser.ModifiedProperties.push(property.dataIndex!);\r\n                        if (currentUser.State !== enmEntityState.Added)\r\n                            currentUser.State = enmEntityState.Modified;\r\n                    }\r\n                    this.setState({ currentUser });\r\n                }} />\r\n        );\r\n    }\r\n}","import { Tabs } from \"antd\";\r\nimport { BaseComponent } from \"../../components/infrastructure/baseComponent\";\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\nimport { ICallOptions, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { IProfile, IProfileProps, IProfileStates } from \"./interfaces\";\r\nimport * as AllComponents from '../../home/components';\r\nimport { enmEntityManagerState } from \"../../components/entityManager/interfaces\";\r\nimport React from \"react\";\r\nimport { UserEdit } from \"./userEdit\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport AppContext, { AppContextProps } from \"../../components/infrastructure/appContext\";\r\nconst { TabPane } = Tabs;\r\n\r\nexport class Profile extends BaseComponent<IProfileProps, IProfileStates> {\r\n    static contextType = AppContext;\r\n    constructor(props: IProfileProps) {\r\n        super(props)\r\n\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.fetchProfileInfo();\r\n    }\r\n    async fetchProfileInfo() {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"user/getprofileinfo\",\r\n            onSuccess: (result) => {\r\n                let res = result as IResultSet<IProfile>;\r\n                if (res.ValidationState.Successful)\r\n                    this.setState({ profile: res.Data });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    virtualRender() {\r\n        const header = this.getPageHeader({ title: \"پروفایل\", onBack: () => window.history.back() });\r\n\r\n        let extraTabs: React.ReactNode[] = [];\r\n\r\n        const { getMenuItems } = this.context as AppContextProps;\r\n        const menuItems = getMenuItems();\r\n\r\n        this.state.profile?.Relations.forEach(r => {\r\n            const Component = (AllComponents as any)[r.Source];\r\n            let currentMenu = menuItems.find(c => c.Item === r.Source);\r\n            extraTabs.push(\r\n                <TabPane\r\n                    tab={\r\n                        <span>\r\n                            {currentMenu?.Title}\r\n                        </span>\r\n                    }\r\n                    key={`${r.Source}_${r.SourceId}`}\r\n                >\r\n                    <Component showHeader={false} dataformBoxShadow={false} defaultId={r.SourceId} defaultState={enmEntityManagerState.View} />\r\n                </TabPane>\r\n            );\r\n        });\r\n\r\n        if (!this.state.profile && !this.state.loading)\r\n            return <Redirect to={'/'} />;\r\n\r\n        return (\r\n            <>\r\n                {header}\r\n                <div>\r\n                    <Tabs className=\"box\" defaultActiveKey=\"1\">\r\n                        <TabPane\r\n                            tab={\r\n                                <span style={{ marginRight: 4 }}>\r\n                                    اطلاعات کاربری\r\n                                </span>\r\n                            }\r\n                            key=\"User\"\r\n                        >\r\n                            {this.state.profile ? <UserEdit currentUser={this.state.profile.User} /> : <CustomSpinner />}\r\n                        </TabPane>\r\n                        {extraTabs}\r\n                    </Tabs>\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n}","import React from \"react\";\r\nimport { ReloadOutlined } from '@ant-design/icons';\r\nimport { Form, FormInstance, Input, Space, Spin, Tooltip } from \"antd\";\r\n\r\nexport interface ICaptchaProps {\r\n    name: string;\r\n    label?: string;\r\n    form: FormInstance;\r\n    showLabel?: boolean;\r\n}\r\n\r\ninterface ICaptchaState {\r\n    captchaImage?: string;\r\n    forceLoad: boolean;\r\n}\r\n\r\nexport const Captcha = (props: ICaptchaProps) => {\r\n    const [state, setState] = React.useState<ICaptchaState>({ forceLoad: false });\r\n\r\n    //e is React.KeyboardEvent<HTMLInputElement>\r\n    const checkNumberInput = (e: any) => {\r\n        if (e.keyCode === 8 || e.keyCode === 9 || e.keyCode === 13 || e.keyCode === 27)\r\n            return;\r\n        if (!(e.keyCode >= 96 && e.keyCode <= 105) && !(e.keyCode >= 48 && e.keyCode <= 57)) {\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n        }\r\n    };\r\n\r\n    const loading = React.useRef(false);\r\n\r\n    const componentWillUnmount = React.useRef(false);\r\n\r\n    React.useEffect(() => {\r\n        setState({ forceLoad: true });\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n        };\r\n    }, []);\r\n\r\n    const loadCaptchaImage = async () => {\r\n        if (loading.current)\r\n            return;\r\n\r\n        loading.current = true;\r\n\r\n\r\n        let response = await fetch(\"api/captcha/get\", {\r\n            method: 'POST',\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        let result = await response.json();\r\n        if (componentWillUnmount.current)\r\n            return;\r\n\r\n        props.form.resetFields([props.name]);\r\n        loading.current = false;\r\n\r\n        const newState = { ...state, forceLoad: false, captchaImage: result.Data };\r\n        setState(newState);\r\n    };\r\n\r\n    if (state.forceLoad)\r\n        loadCaptchaImage();\r\n\r\n    return (\r\n        <Form.Item\r\n            name={props.name}\r\n            label={props.showLabel ? props.label : ''}\r\n            style={{ textAlign: 'justify' }}\r\n            rules={[\r\n                { required: true, message: 'لطفا متن تصویر را وارد نمایید' },\r\n                { len: 6, message: 'لطفا متن کامل را وارد نمایید' }\r\n            ]}\r\n        >\r\n            <Space direction=\"vertical\"  >\r\n                {\r\n                    loading.current || !state.captchaImage\r\n                        ? <Spin style={{ paddingTop: 20, width: '160px', height: '50px' }} />\r\n                        : <img src={`data:image/jpeg;base64,${state.captchaImage}`} style={{ width: '160px', height: '50px', opacity: 0.7 }} alt=\"\" />\r\n                }\r\n                <Input\r\n                    autoComplete=\"off\"\r\n                    placeholder={props.label}\r\n                    onKeyDown={checkNumberInput}\r\n                    type=\"text\"\r\n                    lang={'en'}\r\n                    maxLength={6}\r\n                    style={{ width: 160 }}\r\n                    suffix={\r\n                        <Tooltip title=\"بروزرسانی تصویر\">\r\n                            <ReloadOutlined\r\n                                disabled={loading.current}\r\n                                spin={loading.current}\r\n                                onClick={(e) => {\r\n                                    e.stopPropagation();\r\n                                    setState({ forceLoad: true });\r\n                                }} />\r\n                        </Tooltip>\r\n                    } />\r\n            </Space>\r\n        </Form.Item>\r\n    );\r\n};","import { Col, Row } from \"antd\";\r\nimport { ReactNode } from \"react\";\r\n\r\nconst SimplePage = (props: { children: ReactNode, extraHeaderCols?: React.ReactNode }) => {\r\n    return (\r\n        <>\r\n            <div style={{ width: '100%', height: 90, background: 'rgb(205 215 245)', marginTop: 10, paddingTop: 10, direction: 'rtl' }}>\r\n                <Row className=\"col-xl-12 col-lg-12 col-sm-12\" style={{ padding: 0, margin: 0 }}>\r\n                    <Col span={14}>\r\n                        <Row style={{ margin: 0 }}>\r\n                            <div className=\"login-logo\" style={{ backgroundImage: \"url(/logo.png)\", backgroundSize: 'contain' }}></div>\r\n                            <div className=\"login-title\" style={{ marginRight: 20 }}>\r\n                                <span className=\"logo-title\">شرکت خدمات تجهیزات الکترونیک زبده</span>\r\n                                <span className=\"line\"></span>\r\n                                <span className=\"logo-subtitle\"> پورتال خسارت و تعمیرات تجهیزات الکترونیک </span>\r\n                            </div>\r\n                        </Row>\r\n                    </Col>\r\n                    {props.extraHeaderCols}\r\n                </Row>\r\n            </div>\r\n            <div className=\"login-scroll\" style={{ width: \"100%\", display: 'flex', textAlign: \"center\", justifyContent: \"center\", marginTop: 20 }}>\r\n                <div className=\"col-xl-3 col-xl-4 col-lg-5 col-md-8 col-sm-10 col-xs-10\" style={{ margin: 10 }}>\r\n                    {props.children}\r\n                </div>\r\n            </div>\r\n        </>\r\n    );\r\n};\r\n\r\nexport default SimplePage;","import { Form, Input, Button } from 'antd';\r\nimport { UserOutlined, LockOutlined } from '@ant-design/icons';\r\nimport '../index.css';\r\nimport { IResult } from '../../components/infrastructure/models';\r\nimport React, { useContext } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Core } from '../../components/infrastructure/core';\r\nimport AppContext from '../../components/infrastructure/appContext';\r\nimport { Captcha } from '../../components/captcha';\r\nimport SimplePage from '../../home/simplePage';\r\n\r\ninterface IForgetPasswordState {\r\n    success?: boolean;\r\n    userName?: string | null;\r\n    currentPassword?: string | null;\r\n    loading?: boolean;\r\n}\r\n\r\ninterface IResetPasswordData {\r\n    userName: string;\r\n    code: string;\r\n    newPassword: string;\r\n    confirmPassword: string;\r\n}\r\n\r\nexport const ResetPassword = () => {\r\n    const { params, getUserInfo } = useContext(AppContext);\r\n    const userInfo = getUserInfo();\r\n\r\n    const [state, setState] = React.useState<IForgetPasswordState>({\r\n        success: false,\r\n        userName: userInfo?.userName ?? params['username'],\r\n        currentPassword: params['code']\r\n    });\r\n\r\n    const [form] = Form.useForm();\r\n\r\n    const onFinish = async (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n        setState({ loading: true, userName: state.userName, currentPassword: state.currentPassword });\r\n        let response = await fetch(\"api/user/resetpassword\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                userName: values['userName'],\r\n                currentPassword: values['currentPassword'],\r\n                newPassword: values['newPassword'],\r\n                captcha: values['captcha']\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        let result: IResult = await response.json();\r\n        if (!result.ValidationState.Successful) {\r\n            Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n            setState({ loading: false, userName: state.userName, currentPassword: state.currentPassword });\r\n        }\r\n        else {\r\n            Core.successNotification('کلمه عبور با موفقیت بازنشانی شد');\r\n            setState({ success: true, userName: state.userName, currentPassword: state.currentPassword });\r\n        }\r\n    };\r\n\r\n    if (state.success) {\r\n        if (userInfo?.userName)\r\n            return (<Redirect to={'/'} />);\r\n        else {\r\n            const data = form.getFieldsValue() as IResetPasswordData;\r\n            return (<Redirect to={{ pathname: '/login', search: '?username=' + data.userName }} />);\r\n        }\r\n    }\r\n\r\n    return (\r\n        <SimplePage>\r\n            <div className=\"box box-blue\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                <img src={'/forgetpassword.png'} style={{ marginTop: 20, width: 80 }} alt=\"\" />\r\n                <p className=\"\" style={{ justifyContent: 'center', alignItems: 'center', display: 'flex', fontSize: 18, fontWeight: \"bold\", color: \"antiquewhite\" }}>بازنشانی کلمه عبور</p>\r\n            </div>\r\n            <Form\r\n                form={form}\r\n                //labelCol={{ span: 8 }}\r\n                wrapperCol={{ span: 24 }}\r\n                name=\"normal_login\"\r\n                className=\"box login-form\"\r\n                initialValues={{ userName: state.userName }}\r\n                onFinish={onFinish}\r\n                style={{ paddingLeft: 50, paddingRight: 50, paddingBottom: 50, paddingTop: 5, border: \"1px solid white\", backgroundColor: \"#fefefe90\", borderBottomLeftRadius: 15, borderBottomRightRadius: 15, width: \"100%\" }}\r\n            >\r\n                <Form.Item\r\n                    name=\"userName\"\r\n                    //label=\"نام کاربری\"\r\n                    rules={[{ required: true, message: 'لطفا نام کاربری را وارد نمایید' }]}\r\n                >\r\n                    <Input autoComplete=\"off\" disabled={!!state.userName} prefix={<UserOutlined className=\"site-form-item-icon\" />} placeholder=\"نام کاربری\" />\r\n                </Form.Item>\r\n                <Form.Item\r\n                    name=\"currentPassword\"\r\n                    //label=\"کلمه عبور فعلی\"\r\n                    rules={[{ required: true, message: 'لطفا کلمه عبور فعلی را وارد نمایید' }]}\r\n                    initialValue={state.currentPassword}\r\n                    hidden={!!state.currentPassword}\r\n                >\r\n                    <Input type=\"password\" autoComplete=\"off\" prefix={<UserOutlined className=\"site-form-item-icon\" />} placeholder=\"کلمه عبور فعلی\" />\r\n                </Form.Item>\r\n                <Form.Item\r\n                    //label=\"کلمه عبور جدید\"\r\n                    name=\"newPassword\"\r\n                    rules={[\r\n                        { required: true, message: 'لطفا کلمه عبور جدید را وارد نمایید' },\r\n                        {\r\n                            validator: () => {\r\n                                const data = form.getFieldsValue() as IResetPasswordData;\r\n                                if (data.newPassword && data.newPassword.length < 8)\r\n                                    return Promise.reject(new Error('کلمه عبور جدید باید حداقل 8 کاراکتر باشد'));\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]}\r\n                >\r\n                    <Input\r\n                        prefix={<LockOutlined className=\"site-form-item-icon\" />}\r\n                        type=\"password\"\r\n                        placeholder=\"کلمه عبور جدید\"\r\n                        autoComplete=\"off\"\r\n                    />\r\n                </Form.Item>\r\n                <Form.Item\r\n                    //label=\"تکرار کلمه عبور جدید\"\r\n                    name=\"confirmPassword\"\r\n                    rules={[\r\n                        { required: true, message: 'لطفا کلمه عبور جدید را تکرار نمایید' },\r\n                        {\r\n                            validator: () => {\r\n                                const data = form.getFieldsValue() as IResetPasswordData;\r\n                                if (data.confirmPassword && data.newPassword !== data.confirmPassword)\r\n                                    return Promise.reject(new Error('تکرار کلمه عبور جدید صحیح نیست'));\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]}\r\n                >\r\n                    <Input\r\n                        prefix={<LockOutlined className=\"site-form-item-icon\" />}\r\n                        type=\"password\"\r\n                        placeholder=\"تکرار کلمه عبور جدید\"\r\n                        autoComplete=\"off\"\r\n                    />\r\n                </Form.Item>\r\n\r\n                {!state.loading &&\r\n                    <Captcha\r\n                        form={form}\r\n                        name=\"captcha\"\r\n                        label=\"متن تصویر\"\r\n                    />\r\n                }\r\n\r\n                <Form.Item style={{ float: 'left' }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={state.loading}>\r\n                        بازنشانی رمز عبور\r\n                    </Button>\r\n                </Form.Item>\r\n                <Form.Item style={{ float: 'left' }}>\r\n                    <Button type=\"default\" htmlType=\"reset\" className=\"login-form-button\" loading={state.loading} onClick={() => {\r\n                        setState({ success: true });\r\n                    }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n\r\n            </Form>\r\n        </SimplePage>\r\n    );\r\n};\r\n\r\n","import { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\"\r\n\r\ninterface ILogOutProps extends IBaseProps {\r\n}\r\ninterface ILogOutStates extends IBaseStates {\r\n}\r\nexport class LogOut extends BaseComponent<ILogOutProps, ILogOutStates> {\r\n    constructor(props: ILogOutProps) {\r\n        super(props)\r\n        this.state = {\r\n            loading: true,\r\n            isAuthorized: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount()\r\n        this.logout();\r\n    }\r\n    logout = async () => {\r\n        await this.callApi({\r\n            url: \"user/logout\",\r\n            onComplete: () => {\r\n                window.location.replace(\"/\");\r\n            }\r\n        })\r\n    }\r\n    virtualRender() {\r\n        return (<CustomSpinner />);\r\n    }\r\n}","import { Button, Form, Input } from \"antd\";\r\nimport { UserOutlined, MobileOutlined, MailOutlined } from '@ant-design/icons';\r\nimport React from \"react\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { Captcha } from \"../../components/captcha\";\r\nimport { IResult } from \"../../components/infrastructure/models\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport SimplePage from \"../../home/simplePage\";\r\n\r\ninterface IChangecontactState {\r\n    success?: boolean;\r\n    loading?: boolean;\r\n    userName?: string;\r\n    phone?: string;\r\n}\r\n\r\nexport const ChangeContact = () => {\r\n    const { params } = React.useContext(AppContext);\r\n    const [state, setState] = React.useState<IChangecontactState>({ success: false, userName: params['username'], phone: params['phone'] === \"null\" ? null : params['phone']});\r\n    const [form] = Form.useForm();\r\n\r\n    const componentWillUnmount = React.useRef(false);\r\n\r\n    const onFinish = async (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n\r\n        setState({ ...state, loading: true })\r\n        let response = await fetch(\"api/userpolicyholder/changecontact\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                nationalCode: values['nationalcode'],\r\n                equipmentSerialNo: values['equipmentserialno'],\r\n                newPhoneNumber: values['phonenumber'],\r\n                newEmail: values['email'],\r\n                captcha: values['captcha']\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current)\r\n            return;\r\n\r\n        if (response.status === 200) {\r\n            let result: IResult = await response.json();\r\n            if (!result.ValidationState.Successful) {\r\n                Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n                setState({ ...state, loading: false });\r\n            }\r\n            else {\r\n                Core.successNotification('شماره موبایل بیمه گزار/مشتری با موفقیت ویرایش شد');\r\n                setState({ ...state, phone: values['phonenumber'], loading: false, success: true });\r\n            }\r\n        }\r\n        else {\r\n            setState({ ...state, loading: false });\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n        };\r\n    }, []);\r\n\r\n    if (state.success) {\r\n        const phone = state.phone ? (state.phone.substring(0, 4) + \"***\" + state.phone.substring(7, 11)) : null;\r\n        return <Redirect to={{ pathname: \"/login\", search: '?username=' + state.userName + '&phone=' + phone + '&phonenotdefined=' + !phone}} />;\r\n    }\r\n\r\n    return (\r\n        <SimplePage>\r\n            <div className=\"box box-blue\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                <img src={'/userlogo.png'} style={{ marginTop: 20, width: 80 }} alt=\"\" />\r\n                <p className=\"\" style={{ justifyContent: 'center', alignItems: 'center', display: 'flex', fontSize: 18, fontWeight: \"bold\", color: \"antiquewhite\" }}>تغییر شماره موبایل یا ایمیل</p>\r\n            </div>\r\n            <Form\r\n                form={form}\r\n                //labelCol={{ span: 6 }}\r\n                wrapperCol={{ span: 24 }}\r\n                name=\"normal_login\"\r\n                className=\"box login-form\"\r\n                initialValues={{ remember: true }}\r\n                onFinish={onFinish}\r\n                style={{ paddingLeft: 50, paddingRight: 50, paddingBottom: 50, paddingTop: 5, border: \"1px solid white\", backgroundColor: \"#fefefe90\", borderBottomLeftRadius: 15, borderBottomRightRadius: 15, width: \"100%\", textAlign: \"right\" }}\r\n                onReset={() => {\r\n                    setState({ ...state, success: true });\r\n                }}\r\n            >\r\n                <Form.Item\r\n                    name=\"nationalcode\"\r\n                    //label=\"کد ملی\"\r\n                    rules={[{\r\n                        required: true,\r\n                        validator: () => {\r\n                            const userName = form.getFieldValue('nationalcode');\r\n                            if (userName === \"\" || !userName)\r\n                                return Promise.reject(new Error('کد ملی الزامی است'));\r\n                            if (!Core.isNationalCode(userName))\r\n                                return Promise.reject(new Error('کد ملی معتبر نمی باشد'));\r\n                            return Promise.resolve();\r\n                        }\r\n                    }]}\r\n                    initialValue={state.userName ?? ''}\r\n                >\r\n                    <Input\r\n                        disabled={!!state.userName}\r\n                        autoComplete=\"off\"\r\n                        prefix={<UserOutlined className=\"site-form-item-icon\" />}\r\n                        placeholder=\"نام کاربری\"\r\n                    />\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    name=\"equipmentserialno\"\r\n                    //label=\"سریال (IMEI) دستگاه\"\r\n                    rules={[{ required: true, message: 'لطفا سریال دستگاه(IMEI)  را وارد نمایید' }]}\r\n                >\r\n                    <Input\r\n                        placeholder=\"(IMEI) سریال دستگاه\"\r\n                        style={{ width: \"100%\" }} />\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    name=\"phonenumber\"\r\n                    //label=\"شماره موبایل\"\r\n                    rules={[\r\n                        { len: 11, message: 'شماره موبایل باید 11 رقم باشد' },\r\n                        {\r\n                            validator: () => {\r\n                                const emergencyCallNumber = form.getFieldValue('phonenumber');\r\n                                const email = form.getFieldValue('email');\r\n                                if (!email && !emergencyCallNumber)\r\n                                    return Promise.reject(new Error('شماره موبایل یا آدرس ایمیل را وارد نمایید'));\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]}\r\n                >\r\n                    <Input\r\n                        placeholder=\"شماره موبایل جدید\"\r\n                        style={{ width: \"100%\" }}\r\n                        type=\"text\"\r\n                        prefix={<MobileOutlined className=\"site-form-item-icon\" />}\r\n                        onKeyPress={(event: any) => {\r\n                            if (event.charCode < 48 || event.charCode > 57) {\r\n                                event.preventDefault();\r\n                            }\r\n                        }}\r\n                        maxLength={11}\r\n                    />\r\n\r\n                </Form.Item>\r\n                <Form.Item\r\n                    name=\"email\"\r\n                    //label=\"آدرس ایمیل\"\r\n                    rules={[\r\n                        {\r\n                            validator: () => {\r\n                                const emergencyCallNumber = form.getFieldValue('phonenumber');\r\n                                const email = form.getFieldValue('email');\r\n                                if (!email && !emergencyCallNumber)\r\n                                    return Promise.reject(new Error('شماره موبایل یا آدرس ایمیل را وارد نمایید'));\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]}\r\n                >\r\n                    <Input\r\n                        placeholder=\"آدرس ایمیل جدید\"\r\n                        style={{ width: \"100%\" }}\r\n                        type=\"email\"\r\n                        prefix={<MailOutlined className=\"site-form-item-icon\" />}\r\n                    />\r\n\r\n                </Form.Item>\r\n\r\n                {!state.loading &&\r\n                    <Captcha\r\n                        form={form}\r\n                        name=\"captcha\"\r\n                        label=\"متن تصویر\"\r\n                    />\r\n                }\r\n\r\n                <Form.Item\r\n                    style={{ direction: 'ltr', textAlign: 'justify' }}\r\n                >\r\n                    <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={state.loading} >\r\n                        ثبت\r\n                    </Button>\r\n                    <Button type=\"default\" htmlType=\"reset\" className=\"login-form-button\" loading={state.loading}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            </Form>\r\n        </SimplePage>\r\n    );\r\n}\r\n","import { Resizable } from 'react-resizable';\r\n\r\nexport const ResizableTitle = (props: { [x: string]: any; onResize: any; width: any; }) => {\r\n    const { onResize, width, ...restProps } = props;\r\n\r\n    if (!width) {\r\n        return <th {...restProps} />;\r\n    }\r\n\r\n    return (\r\n        <Resizable\r\n            width={width}\r\n            resizeHandles={['w']}\r\n            height={0}\r\n            handle={\r\n                <span\r\n                    className=\"react-resizable-handle\"\r\n                    onClick={e => {\r\n                        e.stopPropagation();\r\n                    }}\r\n                />\r\n            }\r\n            onResize={onResize}\r\n            draggableOpts={{ enableUserSelectHack: true }}\r\n        >\r\n            <th {...restProps} />\r\n        </Resizable>\r\n    );\r\n};","import { Checkbox, Input, InputNumber, Select, Tooltip } from \"antd\";\r\nimport { FilterFilled } from '@ant-design/icons';\r\nimport { Component } from \"react\";\r\nimport { Core } from \"../infrastructure/core\";\r\nimport { enmControlType, enmPropertyType, IProperty } from \"./interfaces\";\r\nimport { enmConditionalOperators } from \"../infrastructure/filtering\";\r\nimport { Lookup } from \"../lookup\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport { DatePicker as DatePickerJalali } from \"antd-jalali\";\r\nimport locale from 'antd/es/date-picker/locale/fa_IR';\r\nimport { IBaseComponent } from \"../infrastructure/baseComponent\";\r\nimport './columnfilter.css';\r\nconst { Option } = Select;\r\n\r\ndayjs.extend(jalaliday);\r\n\r\nexport interface IColumnFilterState {\r\n    conditionIsOpen: boolean;\r\n    currentFilter: { operator: enmConditionalOperators; value?: any; };\r\n}\r\n\r\nexport interface IColumnFilterProps {\r\n    onChange?: (filter: { operator: enmConditionalOperators; value?: any; }) => void;\r\n    property: IProperty;\r\n    parent: IBaseComponent;\r\n    initialValue?: { operator: enmConditionalOperators; value?: any; };\r\n    preparelookupProps?: (lookupProps: any) => any;\r\n    onLookupOpen?: () => void;\r\n    onLookupClose?: (selectetEntity?: any) => void;\r\n}\r\n\r\nexport class ColumnFilter extends Component<IColumnFilterProps, IColumnFilterState> {\r\n    input?: Input | null;\r\n    operators: any[] = [];\r\n    constructor(props: IColumnFilterProps) {\r\n        super(props)\r\n        this.operators = Core.getOperators(this.props.property.propertyType!);\r\n        this.state = {\r\n            conditionIsOpen: false,\r\n            currentFilter: props.initialValue ?? {\r\n                operator: Number(this.operators[0].key),\r\n                value: undefined\r\n            }\r\n        };\r\n    }\r\n    render() {\r\n        let element: JSX.Element | null = null;\r\n        if (this.props.property.controlType === enmControlType.textbox) {\r\n            element = (\r\n                <Input\r\n                    id={this.props.property.dataIndex}\r\n                    ref={node => this.input = node}\r\n                    onChange={e => {\r\n                        e.stopPropagation();\r\n                        const currentFilter = { value: e.target.value, operator: this.state.currentFilter.operator };\r\n                        this.setState({ currentFilter });\r\n                        if (this.props.onChange)\r\n                            this.props.onChange(currentFilter);\r\n                    }}\r\n                    placeholder={this.props.property.title}\r\n                    style={{ width: \"calc(100% - 37px)\", marginBottom: 8, display: 'inline-block' }}\r\n                    type={\"text\"}\r\n                    value={this.state.currentFilter.value}\r\n                />);\r\n        }\r\n        else if (this.props.property.propertyType === enmPropertyType.boolean) {\r\n            element = (\r\n                <Checkbox\r\n                    id={this.props.property.dataIndex}\r\n                    onChange={e => {\r\n                        const currentFilter = this.state.currentFilter.value === false && e.target.checked === true\r\n                            ? { value: undefined, operator: this.state.currentFilter.operator }\r\n                            : { value: e.target.checked, operator: this.state.currentFilter.operator };\r\n                        this.setState({ currentFilter });\r\n                        if (this.props.onChange)\r\n                            this.props.onChange(currentFilter);\r\n                    }}\r\n                    indeterminate={this.state.currentFilter.value === undefined}\r\n                    checked={this.state.currentFilter.value}\r\n                />);\r\n        }\r\n        else if (this.props.property.controlType === enmControlType.numberinput) {\r\n            element = (\r\n                <InputNumber\r\n                    id={this.props.property.dataIndex}\r\n                    onChange={e => {\r\n                        const currentFilter = { value: e, operator: this.state.currentFilter.operator };\r\n                        this.setState({ currentFilter });\r\n                        if (this.props.onChange)\r\n                            this.props.onChange(currentFilter);\r\n                    }}\r\n                    placeholder={this.props.property.title}\r\n                    style={{ width: \"calc(100% - 37px)\", marginBottom: 8, display: 'inline-block' }}\r\n                    type={\"number\"}\r\n                    value={this.state.currentFilter.value}\r\n                />);\r\n        }\r\n        else if (this.props.property.controlType === enmControlType.password) {\r\n            element = (\r\n                <Input\r\n                    id={this.props.property.dataIndex}\r\n                    ref={node => this.input = node}\r\n                    onChange={e => {\r\n                        e.stopPropagation();\r\n                        const currentFilter = { value: e.target.value, operator: this.state.currentFilter.operator };\r\n                        this.setState({ currentFilter });\r\n                        if (this.props.onChange)\r\n                            this.props.onChange(currentFilter);\r\n                    }}\r\n                    placeholder={this.props.property.title}\r\n                    style={{ width: \"calc(100% - 37px)\", marginBottom: 8, display: 'inline-block' }}\r\n                    type={\"password\"}\r\n                    value={this.state.currentFilter.value}\r\n                />);\r\n        }\r\n        else if (this.props.property.controlType === enmControlType.email) {\r\n            element = (\r\n                <Input\r\n                    id={this.props.property.dataIndex}\r\n                    ref={node => this.input = node}\r\n                    onChange={e => {\r\n                        e.stopPropagation();\r\n                        const currentFilter = { value: e.target.value, operator: this.state.currentFilter.operator };\r\n                        this.setState({ currentFilter });\r\n                        if (this.props.onChange)\r\n                            this.props.onChange(currentFilter);\r\n                    }}\r\n                    placeholder={this.props.property.title}\r\n                    style={{ width: \"calc(100% - 37px)\", marginBottom: 8, display: 'inline-block' }}\r\n                    type={\"email\"}\r\n                    value={this.state.currentFilter.value}\r\n                />);\r\n        }\r\n        else if (this.props.property.controlType === enmControlType.lookup) {\r\n            element = (\r\n                <Lookup\r\n                    parent={this.props.parent}\r\n                    onChange={value => {\r\n                        const currentFilter = { value, operator: this.state.currentFilter.operator }\r\n                        this.setState({ currentFilter });\r\n                        if (this.props.onChange)\r\n                            this.props.onChange(currentFilter);\r\n                    }}\r\n                    isLookupMode={true}\r\n                    property={this.props.property}\r\n                    key={this.props.property.dataIndex}\r\n                    style={{ width: \"calc(100% - 37px)\", marginBottom: 8, display: 'inline-block' }}\r\n                    preparelookupProps={lookupProps => {\r\n                        if (this.props.preparelookupProps)\r\n                            return this.props.preparelookupProps(lookupProps);\r\n                        return lookupProps;\r\n                    }}\r\n                    onLookupOpen={this.props.onLookupOpen}\r\n                    onLookupClose={this.props.onLookupClose}\r\n                    value={this.state.currentFilter.value}\r\n                />);\r\n        }\r\n        else if (this.props.property.controlType === enmControlType.combobox) {\r\n            let options: { value?: any; title?: string; }[] = [];\r\n            if (this.props.property.combobox?.options)\r\n                options = this.props.property.combobox.options;\r\n            if (this.props.property.combobox?.optionsFunc)\r\n                options = this.props.property.combobox.optionsFunc(this.props.parent, this.state.currentFilter.value);\r\n            element = (\r\n                <Select\r\n                    id={this.props.property.dataIndex}\r\n                    onChange={value => {\r\n                        const currentFilter = { value, operator: this.state.currentFilter.operator };\r\n                        this.setState({ currentFilter });\r\n                        if (this.props.onChange)\r\n                            this.props.onChange(currentFilter);\r\n                    }}\r\n                    placeholder={this.props.property.title}\r\n                    style={{ width: \"calc(100% - 37px)\", marginBottom: 8, display: 'inline-block' }}\r\n                    allowClear\r\n                    value={this.state.currentFilter.value}\r\n                >\r\n                    {options.map(o => <Option key={o.value} value={o.value}>{o.title}</Option>)}\r\n                </Select>);\r\n        }\r\n        else if (this.props.property.controlType === enmControlType.date) {\r\n            let currentValue = this.state.currentFilter.value;\r\n            if (currentValue && !dayjs.isDayjs(currentValue))\r\n                currentValue = dayjs(currentValue).calendar('jalali');\r\n            element = (\r\n                <DatePickerJalali\r\n                    id={this.props.property.dataIndex}\r\n                    key={this.props.property.dataIndex}\r\n                    onChange={(value: any) => {\r\n                        if (value) {\r\n                            if (value.locale() === \"fa\") {\r\n                                const date = dayjs(value.toDate()).locale('fa').format('YYYY-MM-DD');\r\n                                const jalali = dayjs(date, { jalali: true } as any);\r\n                                const miladi = jalali.locale('en').format('YYYY-MM-DD');\r\n                                let parsedDate = new Date(miladi);\r\n                                parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                const currentFilter = { value: parsedDate, operator: this.state.currentFilter.operator };\r\n                                this.setState({ currentFilter });\r\n                                if (this.props.onChange)\r\n                                    this.props.onChange(currentFilter);\r\n                            }\r\n                            else {\r\n                                let parsedDate = value.toDate();\r\n                                parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                const currentFilter = { value: parsedDate, operator: this.state.currentFilter.operator };\r\n                                this.setState({ currentFilter });\r\n                                if (this.props.onChange)\r\n                                    this.props.onChange(currentFilter);\r\n                            }\r\n                        }\r\n                        else {\r\n                            const currentFilter = { value: undefined, operator: this.state.currentFilter.operator };\r\n                            this.setState({ currentFilter });\r\n                            if (this.props.onChange)\r\n                                this.props.onChange(currentFilter);\r\n                        }\r\n                    }}\r\n                    locale={locale}\r\n                    placeholder={this.props.property.title}\r\n                    format=\"YYYY/MM/DD\"\r\n                    style={{ width: \"calc(100% - 37px)\", marginBottom: 8, display: 'inline-block' }}\r\n                    value={currentValue}\r\n                />);\r\n        }\r\n        else if (this.props.property.controlType === enmControlType.datetime) {\r\n            let currentValue = this.state.currentFilter.value;\r\n            if (currentValue && !dayjs.isDayjs(currentValue))\r\n                currentValue = dayjs(currentValue).calendar('jalali');\r\n            element = (\r\n                <DatePickerJalali\r\n                    id={this.props.property.dataIndex}\r\n                    key={this.props.property.dataIndex}\r\n                    onChange={(value: any) => {\r\n                        if (value) {\r\n                            if (value.locale() === \"fa\") {\r\n                                const date = dayjs(value.toDate()).locale('fa').format('YYYY-MM-DD HH:mm');\r\n                                const jalali = dayjs(date, { jalali: true } as any);\r\n                                const miladi = jalali.locale('en').format('YYYY-MM-DD HH:mm');\r\n                                let parsedDate = new Date(miladi);\r\n                                parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                const currentFilter = { value: parsedDate, operator: this.state.currentFilter.operator };\r\n                                this.setState({ currentFilter });\r\n                                if (this.props.onChange)\r\n                                    this.props.onChange(currentFilter);\r\n                            }\r\n                            else {\r\n                                let parsedDate = value.toDate();\r\n                                parsedDate = new Date(parsedDate.getTime());\r\n                                const currentFilter = { value: parsedDate, operator: this.state.currentFilter.operator };\r\n                                this.setState({ currentFilter });\r\n                                if (this.props.onChange)\r\n                                    this.props.onChange(currentFilter);\r\n                            }\r\n                        }\r\n                        else {\r\n                            const currentFilter = { value: undefined, operator: this.state.currentFilter.operator };\r\n                            this.setState({ currentFilter });\r\n                            if (this.props.onChange)\r\n                                this.props.onChange(currentFilter);\r\n                        }\r\n                    }}\r\n                    locale={locale}\r\n                    showTime={true}\r\n                    placeholder={this.props.property.title}\r\n                    format=\"YYYY/MM/DD hh:mm\"\r\n                    style={{ width: \"calc(100% - 37px)\", marginBottom: 8, display: 'inline-block' }}\r\n                    value={currentValue}\r\n                />);\r\n        }\r\n\r\n        const filterIconStyle = this.state.currentFilter.operator !== 0 ? { color: \"#0093ff\" } : {};\r\n\r\n        return (\r\n            <div key={this.props.property.dataIndex} >\r\n\r\n                {element}\r\n\r\n                {this.props.property.controlType !== enmControlType.checkbox &&\r\n                    <Tooltip title=\"شرط\">\r\n                        <Select\r\n                            aria-required={true}\r\n                            onChange={(value: any) => {\r\n                                let op: enmConditionalOperators = Number(value);\r\n                                const currentFilter = { value: this.state.currentFilter.value, operator: op };\r\n                                this.setState({ currentFilter });\r\n                                if (this.props.onChange)\r\n                                    this.props.onChange(currentFilter);\r\n                            }}\r\n                            dropdownMatchSelectWidth={false}\r\n                            style={{ width: 20, marginRight: 6, marginBottom: 8, display: 'inline-block', direction: \"ltr\", position: \"absolute\" }}\r\n                            suffixIcon={<FilterFilled style={filterIconStyle} onClick={() => this.setState({ conditionIsOpen: true })} />}\r\n                            open={this.state.conditionIsOpen}\r\n                            onDropdownVisibleChange={visible => this.setState({ conditionIsOpen: visible })}\r\n                            placement=\"bottomLeft\"\r\n                            className=\"column-filter\"\r\n                            value={this.state.currentFilter.operator.toString()}\r\n\r\n                        >\r\n                            {this.operators.map(o => <Option key={o.key} value={o.key}>{o.value}</Option>)}\r\n                        </Select>\r\n                    </Tooltip>\r\n                }\r\n            </div>);\r\n    }\r\n}","import { Core } from \"./core\";\r\n\r\nexport interface IFilter {\r\n    TypeName: string;\r\n    And(filter: IFilter | Array<IFilter>): IFilter;\r\n    Or(filter: IFilter | Array<IFilter>): IFilter;\r\n    Not(): IFilter;\r\n}\r\nexport enum enmConditionalOperators {\r\n    Equal = 0,\r\n    NotEqual = 1,\r\n    Less = 2,\r\n    Greater = 3,\r\n    StartsLike = 4,\r\n    EndsLike = 5,\r\n    Like = 6,\r\n    LessOrEqual = 7,\r\n    GreaterOrEqual = 8,\r\n    NotLike = 9,\r\n    NullOrEmpty = 10,\r\n    NotNullOrEmpty = 11\r\n}\r\nexport enum enmLogicalOperators {\r\n    And,\r\n    Or,\r\n    Not\r\n}\r\nexport class Filter implements IFilter {\r\n    TypeName: string;\r\n    constructor(typename: string) {\r\n        this.TypeName = typename;\r\n    }\r\n    And(filter: IFilter | Array<IFilter>): IFilter {\r\n        if (this instanceof AndFilter || this instanceof OrFilter) {\r\n            if (filter instanceof Array) {\r\n                let collection = filter;\r\n                collection.push(this);\r\n                return new AndFilter(collection);\r\n            }\r\n            return new AndFilter([this, filter]);\r\n        }\r\n        else {\r\n            if (filter instanceof Array) {\r\n                let collection = filter;\r\n                collection.push(this);\r\n                return new AndFilter(collection);\r\n            }\r\n            return new AndFilter([this, filter]);\r\n        }\r\n    }\r\n    Or(filter: IFilter | Array<IFilter>): IFilter {\r\n        if (this instanceof OrFilter || this instanceof AndFilter) {\r\n            if (filter instanceof Array) {\r\n                let collection = filter;\r\n                collection.push(this);\r\n                return new OrFilter(collection);\r\n            }\r\n            return new OrFilter([this, filter]);\r\n        }\r\n        else {\r\n            if (filter instanceof Array) {\r\n                let collection = filter;\r\n                collection.push(this);\r\n                return new OrFilter(collection);\r\n            }\r\n            return new OrFilter([this, filter]);\r\n        }\r\n    }\r\n    Not(): IFilter {\r\n        return new NotFilter(this);\r\n    }\r\n}\r\nexport class ComparisonFilter extends Filter {\r\n    Property: string;\r\n    Operator: enmConditionalOperators;\r\n    Value: any;\r\n    constructor(propertyName: string, op: enmConditionalOperators, value: any) {\r\n        super(\"ComparisonFilter\");\r\n        this.Operator = op;\r\n        this.Property = propertyName;\r\n        this.Value = value;\r\n    }\r\n    static Create<T>(propertySelector: (obj: T) => void, op: enmConditionalOperators, value: any): ComparisonFilter {\r\n        let propName = Core.getPropertyName(propertySelector);\r\n        return new ComparisonFilter(propName, op, value);\r\n    }\r\n    static Equal<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.Equal, value);\r\n    }\r\n    static NotEqual<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.NotEqual, value);\r\n    }\r\n    static Greater<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.Greater, value);\r\n    }\r\n    static GreaterOrEqual<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.GreaterOrEqual, value);\r\n    }\r\n    static Less<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.Less, value);\r\n    }\r\n    static LessOrEqual<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.LessOrEqual, value);\r\n    }\r\n    static Like<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.Like, value);\r\n    }\r\n    static StartsLike<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.StartsLike, value);\r\n    }\r\n    static EndsLike<T>(propertySelector: (obj: T) => void, value: any): ComparisonFilter {\r\n        return ComparisonFilter.Create<T>(propertySelector, enmConditionalOperators.EndsLike, value);\r\n    }\r\n}\r\nexport class InFilter extends Filter {\r\n    Property: string;\r\n    Values: Array<any>;\r\n    constructor(propertyName: string, values: Array<any>) {\r\n        super(\"InFilter\");\r\n        this.Property = propertyName;\r\n        this.Values = values;\r\n    }\r\n    static Create<T>(propertySelector: (obj: T) => void, values: Array<any>): InFilter {\r\n        let propName = Core.getPropertyName(propertySelector);\r\n        return new InFilter(propName, values);\r\n    }\r\n}\r\nexport class AndFilter extends Filter {\r\n    Collection: Array<IFilter>;\r\n    constructor(collection: Array<IFilter>) {\r\n        super(\"AndFilter\");\r\n        this.Collection = collection;\r\n    }\r\n}\r\nexport class OrFilter extends Filter {\r\n    Collection: Array<IFilter>;\r\n    constructor(collection: Array<IFilter>) {\r\n        super(\"OrFilter\");\r\n        this.Collection = collection;\r\n    }\r\n}\r\nexport class NotFilter extends Filter {\r\n    Filter: IFilter;\r\n    constructor(filter: IFilter) {\r\n        super(\"NotFilter\");\r\n        this.Filter = filter;\r\n    }\r\n}\r\nexport class IsNullFilter extends Filter {\r\n    Property: string;\r\n    constructor(propertyName: string) {\r\n        super(\"IsNullFilter\");\r\n        this.Property = propertyName;\r\n    }\r\n    static Create<T>(propertySelector: (obj: T) => void): IsNullFilter {\r\n        let propName = Core.getPropertyName(propertySelector);\r\n        return new IsNullFilter(propName);\r\n    }\r\n}\r\nexport class TrueFilter extends Filter {\r\n    constructor() {\r\n        super(\"TrueFilter\");\r\n    }\r\n} \r\nexport class FalseFilter extends Filter {\r\n    constructor() {\r\n        super(\"FalseFilter\");\r\n    }\r\n} ","import React, { useRef, useState } from 'react';\r\nimport { Form, Button, Collapse, Row, Col, FormInstance, Input, Tooltip } from 'antd';\r\nimport { SearchOutlined, StopOutlined, LeftOutlined, FilterFilled, UpOutlined, ReloadOutlined, LoadingOutlined } from '@ant-design/icons';\r\nimport { enmControlType, IProperty } from './interfaces';\r\nimport { ColumnFilter } from './columnfilter';\r\nimport { AndFilter, ComparisonFilter, IFilter, enmConditionalOperators } from '../infrastructure/filtering';\r\nimport { IBaseComponent } from '../infrastructure/baseComponent';\r\nimport { useEffect } from 'react';\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\nconst { Panel } = Collapse;\r\nconst { Search } = Input;\r\n\r\nexport interface ISearchFormProps {\r\n    onSubmit: (values: any, filter?: IFilter) => void;\r\n    onSearch: (value: any) => void;\r\n    onReset: () => void;\r\n    render?: () => React.ReactNode[];\r\n    renderExtraButtons?: () => React.ReactNode;\r\n    columnsPerRow?: number;\r\n    loading: boolean;\r\n    properties: IProperty[];\r\n    onFilterChanged?: (property: IProperty, value?: { operator: enmConditionalOperators; value?: any; }, form?: FormInstance<any>) => void;\r\n    style?: React.CSSProperties;\r\n    defaultValues?: () => {\r\n        [key: string]: { operator: enmConditionalOperators; value?: any; };\r\n    };\r\n    parent: IBaseComponent;\r\n    preparelookupProps?: (propName: string, lookupProps: any, form?: FormInstance<any>) => any;\r\n    onLookupOpen?: (propName: string) => void;\r\n    onLookupClose?: (propName: string, selectetEntity?: any) => void;\r\n}\r\n\r\ninterface ISearchFormStates {\r\n    searchFilters: React.ReactNode[];\r\n    isOpen?: boolean;\r\n}\r\n\r\nconst SearchForm = (props: ISearchFormProps) => {\r\n    const [form] = Form.useForm();\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n\r\n    const [state, setState] = useState<ISearchFormStates>({ searchFilters: [] });\r\n    const { searchFilters } = state;\r\n\r\n    const values = useRef<{ [key: string]: { operator: enmConditionalOperators; value?: any; } }>({});\r\n\r\n    useEffect(() => {\r\n        setState({ ...state, searchFilters: [] });\r\n    }, [props.render]);\r\n\r\n    if (!searchFilters.length) {\r\n\r\n        if (props.render)\r\n            searchFilters.push(...props.render());\r\n\r\n        const defaultValues = props.defaultValues && props.defaultValues();\r\n        for (let key in defaultValues) {\r\n            values.current[key] = defaultValues[key];\r\n        }\r\n\r\n        props.properties.forEach(c => {\r\n            if (c.filterable && c.controlType && c.dataIndex) {\r\n                searchFilters.push(\r\n                    <Form.Item name={c.dataIndex} key={c.dataIndex} label={c.title} >\r\n                        <ColumnFilter\r\n                            initialValue={values.current && values.current[c.dataIndex]}\r\n                            parent={props.parent}\r\n                            property={c}\r\n                            onChange={currentFilter => {\r\n                                let value = c.lookup?.lookupProperty && currentFilter.value ? currentFilter.value[\"Id\"] : currentFilter.value;\r\n                                values.current[c.dataIndex!] = { operator: currentFilter.operator, value };\r\n\r\n                                if (values.current[c.dataIndex!].value === '')\r\n                                    delete values.current[c.dataIndex!];\r\n\r\n                                if (c.controlType === enmControlType.combobox && !currentFilter.value && currentFilter.value !== 0 && currentFilter.value !== \"\") {\r\n                                    if (props.onFilterChanged)\r\n                                        props.onFilterChanged(c, undefined, form);\r\n                                    return;\r\n                                }\r\n\r\n                                if (c.controlType === enmControlType.checkbox && currentFilter.value === undefined) {\r\n                                    if (props.onFilterChanged)\r\n                                        props.onFilterChanged(c, undefined, form);\r\n                                    return;\r\n                                }\r\n\r\n                                if (props.onFilterChanged)\r\n                                    props.onFilterChanged(c, currentFilter, form);\r\n                            }}\r\n                            preparelookupProps={lookupProps => {\r\n                                if (props.preparelookupProps)\r\n                                    return props.preparelookupProps(c.dataIndex!, lookupProps, form);\r\n                                return lookupProps;\r\n                            }}\r\n                            onLookupOpen={() => props.onLookupOpen && props.onLookupOpen(c.dataIndex!)}\r\n                            onLookupClose={(selectedEntity) => props.onLookupClose && props.onLookupClose(c.dataIndex!, selectedEntity)}\r\n\r\n                        />\r\n                    </Form.Item>\r\n                );\r\n            }\r\n        });\r\n    }\r\n\r\n    let colsPerRow = props.columnsPerRow ?? 1;\r\n    let searchAreaRows: React.ReactNode[] = []\r\n    for (let i = 0; i < searchFilters.length / colsPerRow; i++) {\r\n        searchAreaRows.push(\r\n            <Row key={i} style={{ marginTop: 0 }}>\r\n                {\r\n                    searchFilters.slice(i * colsPerRow, (i + 1) * colsPerRow).map((a, j) => {\r\n                        return (<Col key={j} lg={24 / colsPerRow - 1} md={23} sm={23} xs={23} offset={1}>{a}</Col>);\r\n                    })\r\n                } </Row>\r\n        );\r\n    }\r\n\r\n    let filterTitle = \"جستجوی پیشرفته\";\r\n\r\n    const style = !!props.style ? { ...props.style } : { boxShadow: 'rgb(0 0 0 / 12%) 0px 0px 5px 2px', margin: '10px 0px' };\r\n    const formItemLayout = {\r\n        labelCol: { span: 8 },\r\n        wrapperCol: { span: 16 },\r\n    };\r\n\r\n    return (\r\n        <div style={style}>\r\n            <Form\r\n                {...formItemLayout}\r\n                layout={formLayout}\r\n                form={form}\r\n                initialValues={{ layout: formLayout }}\r\n                onFinish={() => {\r\n                    let allFilters: IFilter[] = [];\r\n                    for (let key in values.current) {\r\n                        let filter = values.current[key];\r\n                        if (filter && filter.value !== undefined)\r\n                            allFilters.push(new ComparisonFilter(key, filter.operator, filter.value))\r\n                    }\r\n                    let filter: IFilter | undefined;\r\n                    if (allFilters.length)\r\n                        filter = new AndFilter(allFilters);\r\n                    props.onSubmit(values.current, filter);\r\n                }}\r\n                onReset={() => {\r\n                    for (let key in values.current) {\r\n                        delete values.current[key];\r\n                    }\r\n                    const defaultValues = props.defaultValues && props.defaultValues();\r\n                    for (let key in defaultValues) {\r\n                        values.current[key] = defaultValues[key];\r\n                    }\r\n                    props.onReset();\r\n                }}>\r\n\r\n                <Collapse activeKey={state.isOpen === true ? \"1\" : undefined} style={{ background: \"rgb(137 167 235 / 20%)\" }}>\r\n                    <Panel key=\"1\"\r\n                        showArrow={false}\r\n                        collapsible=\"header\"\r\n                        header={\r\n                            <Row>\r\n                                <Col span={2} lg={2} md={2} sm={2} xs={2}>\r\n                                    <span style={{ fontSize: 10, verticalAlign: 'sub', marginRight: 10 }} onClick={() => setState({ ...state, isOpen: !state.isOpen })}>{state.isOpen === true ? <UpOutlined /> : <LeftOutlined />}</span>\r\n                                </Col>\r\n                                <Col span={4} lg={4} md={4} sm={4} xs={4}>\r\n                                    <span style={{ verticalAlign: 'sub' }} onClick={() => setState({ ...state, isOpen: !state.isOpen })}>جستجو</span>\r\n                                </Col>\r\n                                <Col span={12} lg={12} md={12} sm={12} xs={12}>\r\n                                    <Search placeholder=\"جستجو\" allowClear={true} onSearch={props.onSearch} />\r\n                                </Col>\r\n                                <Col span={2} lg={2} md={2} sm={2} xs={2} >\r\n                                    <Tooltip title={'Refresh'}>\r\n                                        <Button style={{ marginRight: 1, width: 30, padding: 0, verticalAlign: 'middle' }} onClick={form.submit} icon={!props.loading ? <ReloadOutlined /> : <LoadingOutlined />}>\r\n\r\n                                        </Button>\r\n                                    </Tooltip>\r\n                                </Col>\r\n                                <Col span={2} lg={2} md={2} sm={2} xs={2} >\r\n                                    <Tooltip title={filterTitle}>\r\n                                        <Button style={{ marginRight: 3, padding: 0, width: 30, verticalAlign: 'middle' }} onClick={() => setState({ ...state, isOpen: !state.isOpen })} icon={<FilterFilled />} />\r\n                                    </Tooltip>\r\n                                </Col>\r\n                            </Row>\r\n                        }\r\n                        style={{ border: '0px', padding: 0, margin: 0 }}\r\n                    >\r\n\r\n                        {<>{searchAreaRows}</>}\r\n\r\n                        <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ marginTop: 0 }}>\r\n                            {props.renderExtraButtons?.()}\r\n                            <Button key={\"submit\"} type=\"primary\" htmlType=\"submit\" loading={props.loading} icon={<SearchOutlined />} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 10, marginLeft: 10, padding: 10 }}>\r\n                                جستجو\r\n                            </Button>\r\n                            <Button key={\"reset\"} type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 10, marginLeft: 10, background: '#fff' }}>\r\n                                ریست\r\n                            </Button>\r\n                        </Form.Item>\r\n                    </Panel>\r\n                </Collapse>\r\n            </Form>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default SearchForm;","import { Checkbox, Col, Table } from \"antd\";\r\nimport { ColumnType } from \"antd/lib/table\";\r\nimport { enmControlType, enmPropertyType, IMetadata, IProperty } from \"../../components/entityManager/interfaces\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { enmEntityState, enmOrderingType, ICallOptions, IOrdering, IPaging, IResultSet } from \"../../components/infrastructure/models\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\n\r\ndayjs.extend(jalaliday);\r\n\r\ninterface AuditLogItemsStates extends IBaseStates {\r\n    paging: IPaging;\r\n    ordering: IOrdering;\r\n    entities: any[];\r\n    totalResultCount: number;\r\n}\r\ninterface AuditLogItemsProps extends IBaseProps {\r\n    entityRowGuid: string;\r\n    metadata: IMetadata;\r\n}\r\n\r\nexport class AuditLogItems extends BaseComponent<AuditLogItemsProps, AuditLogItemsStates> {\r\n    columns: any;\r\n    constructor(props: AuditLogItemsProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            entities: [],\r\n            totalResultCount: 0,\r\n            paging: { PageNo: 1, PageSize: 10 },\r\n            ordering: { OrderBy: enmOrderingType.Ascending, Property: \"Id\" }\r\n        };\r\n        this.title = 'تاریخچه';\r\n        this.columns = this.getColumns();\r\n    }\r\n    async initialize(paging: IPaging, ordering: IOrdering) {\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.props.metadata.name + \"/auditlogitems\",\r\n            data: {\r\n                ordering,\r\n                paging,\r\n                entityRowGuid: this.props.entityRowGuid\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                const { Items, TotalCount } = result.Data\r\n                this.setState({ entities: Items, totalResultCount: TotalCount, paging, ordering });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.initialize(this.state.paging, this.state.ordering);\r\n    }\r\n    getColumns = () => {\r\n        const properties: IProperty[] = [\r\n            {\r\n                title: \"کاربر\",\r\n                dataIndex: \"EventUserFullName\",\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.textbox,\r\n                sortable: false\r\n            },\r\n            {\r\n                title: \"تاریخ و زمان رخداد\",\r\n                dataIndex: \"EventDateTime\",\r\n                propertyType: enmPropertyType.datetime,\r\n                controlType: enmControlType.datetime\r\n            },\r\n            {\r\n                title: \"شرح عملیات\",\r\n                dataIndex: \"EventTitle\",\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.textbox\r\n            },\r\n            {\r\n                title: \"وضعیت\",\r\n                dataIndex: \"State\",\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.textbox,\r\n                sortable: false,\r\n                renderColumn: (value: enmEntityState) => {\r\n                    switch (value) {\r\n                        case enmEntityState.Added:\r\n                            return \"ایجاد\";\r\n                        case enmEntityState.Modified:\r\n                            return \"ویرایش\";\r\n                        case enmEntityState.Deleted:\r\n                            return \"حذف\";\r\n                        default:\r\n                            return \"بدون تغییر\";\r\n                    }\r\n                }\r\n            }\r\n        ];\r\n\r\n        const columns = [\r\n            ...properties,\r\n            ...this.props.metadata.Properties.map(p => { return { ...p, sortable: false } })\r\n        ].filter(c => c.showColumn !== false).map(c => {\r\n            let newCol: ColumnType<any> = {};\r\n            newCol.key = c.key ?? c.dataIndex;\r\n            newCol.title = c.title;\r\n            newCol.dataIndex = c.dataIndex;\r\n            newCol.width = c.width;\r\n\r\n            newCol.responsive = ['lg', 'md', 'sm', 'xs'];\r\n            newCol.render = (text, record, index) => {\r\n                let result: any = null;\r\n                if (c.renderColumn) {\r\n                    result = c.renderColumn(text, record, index);\r\n                }\r\n\r\n                if (c.lookup?.lookupComponent && record) {\r\n                    let displayData = record as any;\r\n                    if (displayData[c.lookup?.lookupProperty!])\r\n                        return (\r\n                            <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                                <Col>{c.lookup?.lookupDisplayFields?.map(f => {\r\n                                    let fields = f.split('.');\r\n                                    let value = displayData[c.lookup?.lookupProperty!];\r\n                                    fields.forEach(i => {\r\n                                        value = value[i];\r\n                                    });\r\n                                    return value + \" \"\r\n                                })}</Col>\r\n                            </div>\r\n                        );\r\n                }\r\n\r\n                result = result ?? text;\r\n\r\n                let fields = c.dataIndex?.split('.');\r\n                let value = record as any;\r\n                fields?.forEach(i => {\r\n                    if (value !== undefined && value !== null && value[i] !== undefined && value[i] !== null)\r\n                        value = value[i];\r\n                    else\r\n                        value = undefined;\r\n                });\r\n\r\n                if (c.propertyType === enmPropertyType.boolean) {\r\n                    return (<Checkbox key={record.RowGuid} checked={value} />);\r\n                }\r\n                if (c.combobox && (c.combobox.options || c.combobox.optionsFunc)) {\r\n                    return (\r\n                        <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                            {c.combobox.options?.find(o => o.value === value)?.title}\r\n                            {c.combobox.optionsFunc && c.combobox.optionsFunc(this, record).find(o => o.value === value)?.title}\r\n                        </div>\r\n                    );\r\n                }\r\n                if (c.propertyType === enmPropertyType.date) {\r\n                    result = text ? dayjs(text).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\") : undefined;\r\n                    return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {result}\r\n                    </div>);\r\n                }\r\n                if (c.propertyType === enmPropertyType.datetime) {\r\n                    result = value ? dayjs(value).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : undefined;\r\n                    return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {result}\r\n                    </div>);\r\n                }\r\n                if (c.controlType === enmControlType.numberinput) {\r\n                    result = text;\r\n                    if (value)\r\n                        result = value;\r\n                    return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {c.formatter ? c.formatter(result, {} as any) : result}\r\n                    </div>);\r\n                }\r\n                if (c.controlType === enmControlType.priceinput) {\r\n                    result = text;\r\n                    if (value)\r\n                        result = value;\r\n                    return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {`${result}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}\r\n                    </div>);\r\n                }\r\n                if (!result && !!value)\r\n                    result = value;\r\n                return (\r\n                    <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\r\n                        {result}\r\n                    </div>\r\n                );\r\n            };\r\n            newCol.sorter = c.sortable !== false;\r\n            newCol.onCell = (data) => {\r\n                return {\r\n                    style: (data.ModifiedColumns as string[])?.indexOf(c.dataIndex!) > -1 ? { backgroundColor: \"lightblue\" } : (data.State === 1 ? { backgroundColor: \"greenyellow\" } : {})\r\n                };\r\n            };\r\n            return newCol;\r\n        });\r\n\r\n        return columns;\r\n    }\r\n    virtualRender() {\r\n        const header = this.getPageHeader({\r\n            title: this.title,\r\n            onBack: () => { this.props.onClose && this.props.onClose(this) }\r\n        });\r\n\r\n        const data = this.state.entities.map(e => {\r\n            let item: any = {\r\n                EventId: e.AuditLog.EventId,\r\n                EventUserFullName: e.AuditLog.EventUserFullName,\r\n                EventDateTime: e.AuditLog.EventDateTime,\r\n                EventTitle: e.AuditLog.EventTitle,\r\n                ModifiedColumns: e.ModifiedColumns\r\n            };\r\n\r\n            let entity = e.Entity;\r\n            if (!!entity) {\r\n                for (let key in entity)\r\n                    item[key] = entity[key];\r\n            }\r\n            return item;\r\n        });\r\n\r\n        const loading = this.state.loading ? { indicator: <CustomSpinner /> } : false;\r\n\r\n        const { PageSize, PageNo } = this.state.paging;\r\n        const { Property, OrderBy } = this.state.ordering;\r\n\r\n        return (\r\n            <>\r\n                {header}\r\n\r\n                <Table\r\n                    rowKey={a => a.EventId}\r\n                    columns={this.columns}\r\n                    dataSource={data}\r\n                    bordered\r\n                    scroll={{ x: 'max-content' }}\r\n                    loading={loading}\r\n                    onChange={(pagination, _, sorter) => {\r\n                        let ordering: IOrdering = { Property, OrderBy };\r\n                        let paging: IPaging = { PageNo, PageSize };\r\n                        if (!(sorter instanceof Array) && sorter.field) {\r\n                            ordering = {\r\n                                Property: \"AuditLog.\" + sorter.field?.toString() ?? '',\r\n                                OrderBy: sorter.order === 'ascend' ? enmOrderingType.Ascending : enmOrderingType.Descending\r\n                            };\r\n                        }\r\n                        paging = {\r\n                            PageNo: pagination.current ?? 1,\r\n                            PageSize: pagination.pageSize ?? 10\r\n                        };\r\n\r\n                        this.initialize(paging, ordering);\r\n                    }}\r\n                    pagination={{\r\n                        style: { marginRight: 10 },\r\n                        position: ['bottomRight'],\r\n                        responsive: true,\r\n                        defaultPageSize: PageSize,\r\n                        current: Math.ceil(this.state.totalResultCount ?? 0 / PageSize) < PageNo ? 1 : PageNo,\r\n                        total: this.state.totalResultCount,\r\n                        showSizeChanger: true,\r\n                        size: 'small',\r\n                        showTotal: (total, _) => {\r\n                            return (<div>تعداد کل ردیف ها: {total} </div>);\r\n                        }\r\n                    }}\r\n                />\r\n            </>\r\n        );\r\n    }\r\n}\r\n\r\nexport default AuditLogItems;","import * as React from 'react';\r\nimport * as AllComponents from '../../home/components';\r\nimport { PlusCircleOutlined, LeftOutlined, DownOutlined, FormOutlined, FileDoneOutlined, DeleteOutlined, CheckOutlined, HistoryOutlined } from '@ant-design/icons';\r\nimport { enmEntityState, enmOrderingType, ICallOptions, IEntity, IFetchingInfo, IFetchingResult, IOrdering, IPaging } from \"../infrastructure/models\";\r\nimport { enmControlType, enmEntityManagerState, enmPropertyType, IEntityManager, IEntityManagerProps, IEntityManagerStates, IInitialData, IInitialParams, IMetadata, IProperty } from \"./interfaces\"\r\nimport { Button, Checkbox, Col, FormInstance, Popconfirm, Row, Table, Tooltip } from 'antd'\r\nimport { Core } from '../infrastructure/core';\r\nimport { ColumnType } from 'antd/lib/table';\r\nimport { ResizableTitle } from './resizabletitle';\r\nimport './index.css';\r\nimport SearchForm from './searchform';\r\nimport DataForm from './dataform';\r\nimport { BaseComponent } from '../infrastructure/baseComponent';\r\nimport CustomSpinner from '../infrastructure/customSpinner';\r\nimport { AndFilter, ComparisonFilter, enmConditionalOperators, IFilter, OrFilter, TrueFilter } from '../infrastructure/filtering';\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport { AuditLogItems } from '../../baseInfo/auditLogItems';\r\n\r\ndayjs.extend(jalaliday);\r\n\r\nexport class BaseEntityManager<TEntity extends IEntity, TProps extends IEntityManagerProps<TEntity>, TStates extends IEntityManagerStates<TEntity>, TFetchingInfo extends IFetchingInfo, TInitialData extends IInitialData>\r\n    extends BaseComponent<TProps, TStates> implements IEntityManager {\r\n\r\n    initialData?: TInitialData;\r\n    paging?: IPaging;\r\n    ordering?: IOrdering;\r\n    filter?: IFilter;\r\n    headerFilter?: IFilter;\r\n    metadata: IMetadata;\r\n    preLoad?: boolean;\r\n    originalFilter?: () => IFilter | undefined;\r\n    originalOrderings?: () => IOrdering[];\r\n    onLoaded?: (initialData: TInitialData) => void;\r\n    onCellClick?: (data: any, dataIndex?: string, index?: number, event?: React.MouseEvent<TEntity, MouseEvent>) => any;\r\n    onRowClick?: (data: any, index?: number, event?: React.MouseEvent<TEntity, MouseEvent>) => any;\r\n    onDataFetching?: (fetchingInfo: TFetchingInfo, onViewMode?: boolean) => void;\r\n    onDataFetched?: (result: IFetchingResult<TEntity>) => IFetchingResult<TEntity>;\r\n    renderingToolbar?: () => React.ReactNode;\r\n    onEntityView?: (entity: TEntity) => boolean;\r\n    onEntityAdded?: (entity: TEntity) => Promise<boolean> | boolean;\r\n    onEntityEdit?: (entity: TEntity) => boolean;\r\n    onEntityDelete?: (entity: TEntity) => boolean;\r\n    onEntitySaving?: (entity: TEntity) => boolean;\r\n    onEntitySaved?: (entity: TEntity) => void;\r\n    onEntityChanged?: (entity: TEntity, propertyName: string, form: FormInstance<any>) => void;\r\n    onFirstDataLoad?: () => void;\r\n    getInitialParams?: () => IInitialParams;\r\n    onSearch?: (value: any) => void;\r\n    searchable?: boolean;\r\n    searchArea?: {\r\n        onSubmit?: (values: any, filter?: IFilter) => void,\r\n        onReset?: () => void,\r\n        render?: () => React.ReactNode[],\r\n        renderExtraButtons?: () => React.ReactNode,\r\n        columnsPerRow?: number;\r\n        onFilterChanged?: (property: IProperty, value: any, form?: FormInstance<any>) => void;\r\n        defaultValues?: () => {\r\n            [key: string]: { operator: enmConditionalOperators; value?: any; };\r\n        };\r\n    };\r\n    extraHeaderButtons?: () => React.ReactNode[];\r\n    extraHeaderNodes?: () => React.ReactNode;\r\n    backNode?: (state: enmEntityManagerState) => React.ReactNode;\r\n    defaultSelectedRow?: () => TEntity | undefined;\r\n    onStateChanged?: (prevSate: enmEntityManagerState, state: enmEntityManagerState) => void;\r\n    extraViewNode?: () => React.ReactNode;\r\n    setRecordClassName?: (record: TEntity, rowIndex?: number) => string | null;\r\n    private _gridContainer?: HTMLElement | null;\r\n    private _gridTable?: HTMLDivElement | null;\r\n    protected preparelookupProps?: (propName: string, lookupProps: any, form?: FormInstance<any>, isSearchForm?: boolean) => any;\r\n    protected onLookupOpen?: (propName: string) => void;\r\n    protected onLookupClose?: (propName: string, selectetEntity?: any) => void;\r\n\r\n    protected viewRef?: React.ReactInstance | null;\r\n\r\n    selectedEntity?: TEntity;\r\n\r\n    getDefaultState?: () => any;\r\n\r\n    content?: any = null;\r\n\r\n    viewButtonTitle = (): string => {\r\n        return \"نمایش\";\r\n    };\r\n\r\n    insertButtonTitle = (): string => {\r\n        return \"ایجاد\";\r\n    };\r\n\r\n    protected baseUrl: string = \"\";\r\n    protected getUrl: string = \"\";\r\n    protected getInitialDataUrl: string = \"\";\r\n    protected defaultId?: number;\r\n    protected extraFormNodeMarginTop?: number;\r\n\r\n    constructor(props: TProps) {\r\n        super(props)\r\n\r\n        this.paging = this.paging ?? { PageNo: 1, PageSize: 10 };\r\n\r\n        this.metadata = (this.constructor as any).initMetadata && (this.constructor as any).initMetadata();\r\n        if (!this.metadata)\r\n            throw new Error((this.constructor as any).name + ' metadata not found...');\r\n\r\n        this.backNode = props.backNode;\r\n\r\n        this.onInitializing();\r\n\r\n        if (!this.baseUrl)\r\n            this.baseUrl = this.metadata.name.toLowerCase();\r\n        if (!this.getUrl)\r\n            this.getUrl = this.baseUrl + \"/get\";\r\n        if (!this.getInitialDataUrl)\r\n            this.getInitialDataUrl = this.baseUrl + \"/getinitialdata\";\r\n\r\n        const defaultState = {\r\n            state: enmEntityManagerState.List,\r\n            loading: true,\r\n            data: [],\r\n            columns: this.getColumns(this.metadata),\r\n            expandedRowKeys: [],\r\n            isAuthorized: true\r\n        };\r\n        this.preLoad = this.preLoad || this.props.preLoad;\r\n        this.state = Object.assign(defaultState, this.getDefaultState! && this.getDefaultState());\r\n        this.title = this.metadata.title;\r\n\r\n        this.defaultId = this.props.defaultId;\r\n\r\n\r\n    }\r\n\r\n    getColumns(metadata: IMetadata): any {\r\n        const columns = metadata.Properties.filter(property => property.showColumn !== false).map(property => {\r\n            let newCol: ColumnType<any> = {};\r\n            newCol.key = property.key ?? property.dataIndex;\r\n            newCol.title = property.title;\r\n            newCol.dataIndex = property.dataIndex;\r\n            newCol.width = property.width;\r\n            newCol.onCell = (record, rowIndex) => {\r\n                return {\r\n                    onClick: (event) => {\r\n                        if (this.onCellClick)\r\n                            this.onCellClick.call(this, record, property.dataIndex, rowIndex, event);\r\n                    },\r\n                };\r\n            };\r\n            newCol.fixed = property.fixed;\r\n            newCol.responsive = property.responsive ?? ['lg', 'md', 'sm', 'xs'];\r\n            newCol.render = (text, record: TEntity, index) => this.renderGridColumn(text, record, index, property);\r\n            newCol.sorter = property.sortable !== false;\r\n            return newCol;\r\n        });\r\n\r\n        columns.push(Table.EXPAND_COLUMN);\r\n        return columns;\r\n    }\r\n\r\n    onInitializing() {\r\n\r\n    }\r\n\r\n    private renderGridColumn = (text: any, record: TEntity, index: number, property: IProperty) => {\r\n        let result: any = null;\r\n        const width = this.state.columns?.find((col: ColumnType<TEntity>) => col.dataIndex?.toString() === property.dataIndex)?.width ?? property.width ?? 150;\r\n        if (property.renderColumn) {\r\n            result = property.renderColumn(text, record, index);\r\n        }\r\n\r\n        if (property.lookup?.lookupComponent && record) {\r\n            let displayData = record as any;\r\n            if (displayData[property.lookup?.lookupProperty!])\r\n                return (\r\n                    <div key={record.RowGuid}>\r\n                        <Col style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width }}>\r\n                            {property.lookup?.lookupDisplayFields?.map(f => {\r\n                                let fields = f.split('.');\r\n                                let value = displayData[property.lookup?.lookupProperty!];\r\n                                fields.forEach(i => {\r\n                                    if (value !== undefined && value != null && value[i] !== undefined && value[i] != null)\r\n                                        value = value[i];\r\n                                    else\r\n                                        value = undefined;\r\n                                });\r\n                                return value + \" \"\r\n                            })}</Col>\r\n                    </div>\r\n                );\r\n        }\r\n\r\n        result = result ?? text;\r\n\r\n        let fields = property.dataIndex?.split('.');\r\n        let value = record as any;\r\n        fields?.forEach(i => {\r\n            if (value !== undefined && value != null && value[i] !== undefined && value[i] != null)\r\n                value = value[i];\r\n            else\r\n                value = undefined;\r\n        });\r\n\r\n        if (property.propertyType === enmPropertyType.boolean) {\r\n            return (<Checkbox key={record.RowGuid} checked={value} />);\r\n        }\r\n        if (property.combobox && (property.combobox.options || property.combobox.optionsFunc)) {\r\n            return (\r\n                <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width }}>\r\n                    {property.combobox.options?.find(o => o.value === value)?.title}\r\n                    {property.combobox.optionsFunc && property.combobox.optionsFunc(this, record).find(o => o.value === value)?.title}\r\n                </div>\r\n            );\r\n        }\r\n        if (property.propertyType === enmPropertyType.date) {\r\n            result = text ? dayjs(text).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\") : undefined;\r\n            return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width }}>\r\n                {result}\r\n            </div>);\r\n        }\r\n        if (property.propertyType === enmPropertyType.datetime) {\r\n            result = value ? dayjs(value).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : undefined;\r\n            return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width }}>\r\n                {result}\r\n            </div>);\r\n        }\r\n        if (property.controlType === enmControlType.numberinput) {\r\n            result = text;\r\n            if (value)\r\n                result = value;\r\n            return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width }}>\r\n                {property.formatter ? property.formatter(result, {} as any) : result}\r\n            </div>);\r\n        }\r\n        if (property.controlType === enmControlType.priceinput) {\r\n            result = text;\r\n            if (value)\r\n                result = value;\r\n            return (<div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width }}>\r\n                {`${result}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}\r\n            </div>);\r\n        }\r\n        if (!result && !!value)\r\n            result = value;\r\n        return (\r\n            <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width }}>\r\n                {result}\r\n            </div>\r\n        );\r\n    };\r\n\r\n    private handleColumnResize = (index: number) => (_: any, { size }: any) => {\r\n        this.setState(({ columns }) => {\r\n            const nextColumns = [...columns];\r\n            const resizedCol = nextColumns[index] as any;\r\n            nextColumns[index] = {\r\n                ...resizedCol,\r\n                width: size.width,\r\n            };\r\n            return { columns: nextColumns };\r\n        });\r\n    };\r\n\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        if (!this.props.isLookupMode) {\r\n            const { params } = this.context;\r\n            const defaultId = params['defaultid'];\r\n            if (!this.defaultId && defaultId)\r\n                this.defaultId = defaultId;\r\n        }\r\n        if (this.defaultId)\r\n            this.originalFilter = () => ComparisonFilter.Equal<TEntity>(i => i.Id, this.defaultId);\r\n\r\n        this.getInitialData();\r\n    }\r\n\r\n    private initSearchForm = () => {\r\n        return (<SearchForm\r\n            parent={this}\r\n            properties={this.metadata.Properties}\r\n            loading={this.state.loading}\r\n            columnsPerRow={this.searchArea?.columnsPerRow}\r\n            onSubmit={(values, filter) => {\r\n                if (this.searchArea?.onSubmit)\r\n                    this.searchArea.onSubmit(values, filter);\r\n                this.filter = filter ?? new TrueFilter();\r\n                this.fetchData();\r\n            }}\r\n            onReset={() => {\r\n                this.filter = undefined;\r\n                if (this.searchArea?.onReset)\r\n                    this.searchArea.onReset();\r\n            }}\r\n            onSearch={value => {\r\n                if (this.onSearch)\r\n                    this.onSearch(value);\r\n                this.paging = { PageNo: 1, PageSize: this.paging?.PageSize ?? 10 };\r\n                this.search(value);\r\n            }}\r\n            defaultValues={this.searchArea?.defaultValues}\r\n            onFilterChanged={this.searchArea?.onFilterChanged}\r\n            render={this.searchArea?.render}\r\n            renderExtraButtons={this.searchArea?.renderExtraButtons}\r\n            style={{ marginTop: this.props.showHeader === false ? 0 : 10, background: '#fff', boxShadow: 'rgb(0 0 0 / 12%) 0px 0px 5px 2px' }}\r\n            preparelookupProps={(propName, lookupProps, form) => {\r\n                if (this.preparelookupProps)\r\n                    return this.preparelookupProps(propName, lookupProps, form, true);\r\n                return lookupProps;\r\n            }}\r\n            onLookupOpen={this.onLookupOpen}\r\n            onLookupClose={this.onLookupClose}\r\n        />);\r\n    }\r\n\r\n    componentDidUpdate(prevProp: Readonly<TProps>, prevState: Readonly<TStates>, snapshot?: any) {\r\n        super.componentDidUpdate && super.componentDidUpdate(prevProp, prevState, snapshot);\r\n\r\n        if (prevState.state !== this.state.state) {\r\n            if (this.onStateChanged)\r\n                this.onStateChanged(prevState.state, this.state.state);\r\n            if (this.props.onStateChanged)\r\n                this.props.onStateChanged(prevState.state, this.state.state);\r\n        }\r\n        if (prevState.totalResultCount === undefined && this.state.totalResultCount !== undefined) {\r\n            if (this.onFirstDataLoad)\r\n                this.onFirstDataLoad();\r\n        }\r\n    }\r\n\r\n    componentWillUnmount() {\r\n        super.componentWillUnmount();\r\n    }\r\n\r\n    async getInitialData() {\r\n        let initialParams: IInitialParams = this.getInitialParams ? this.getInitialParams() : {};\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.getInitialDataUrl,\r\n            data: { initialParams },\r\n            onSuccess: (result) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                let res: any = result;\r\n                this.onLoaded?.call(this, res.Data);\r\n                this.props.onLoaded?.call(this, res.Data);\r\n                this.initialData = res.Data;\r\n                if (this.preLoad !== false)\r\n                    this.fetchData();\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n\r\n    getCurrentFetchingInfo = () => {\r\n        let fetchingInfo = {\r\n            Orderings: [] as IOrdering[]\r\n        } as TFetchingInfo;\r\n\r\n        fetchingInfo.Orderings = this.originalOrderings?.call(this) ?? [];\r\n        if (fetchingInfo.Filter) {\r\n            if (this.originalFilter) {\r\n                let originalFilter = this.originalFilter.call(this);\r\n                if (originalFilter)\r\n                    fetchingInfo.Filter = fetchingInfo.Filter.And(originalFilter);\r\n            }\r\n        }\r\n        else {\r\n            fetchingInfo.Filter = this.originalFilter?.call(this);\r\n        }\r\n\r\n        if (this.filter) {\r\n            if (fetchingInfo.Filter)\r\n                fetchingInfo.Filter = fetchingInfo.Filter.And(this.filter);\r\n            else\r\n                fetchingInfo.Filter = this.filter;\r\n        }\r\n        else if (this.searchArea?.defaultValues && !this.props.isLookupMode) {\r\n            const defaultSearchValues = this.searchArea.defaultValues();\r\n            let filters: IFilter[] = [];\r\n            for (let key in defaultSearchValues) {\r\n                let filter = defaultSearchValues[key];\r\n                if (filter && filter.value !== undefined)\r\n                    filters.push(new ComparisonFilter(key, filter.operator, filter.value))\r\n            }\r\n\r\n            if (fetchingInfo.Filter)\r\n                fetchingInfo.Filter = fetchingInfo.Filter.And(filters);\r\n            else\r\n                fetchingInfo.Filter = new AndFilter(filters);\r\n        }\r\n\r\n        if (this.headerFilter) {\r\n            if (fetchingInfo.Filter) {\r\n                fetchingInfo.Filter = fetchingInfo.Filter.And(this.headerFilter);\r\n            }\r\n            else {\r\n                fetchingInfo.Filter = this.headerFilter;\r\n            }\r\n        }\r\n\r\n        fetchingInfo.Paging = this.paging;\r\n\r\n        if (this.ordering)\r\n            fetchingInfo.Orderings.splice(0, 0, this.ordering);\r\n\r\n        this.onDataFetching?.call(this, fetchingInfo);\r\n        return fetchingInfo;\r\n    }\r\n\r\n    async fetchData(handleResultByInvoker?: boolean) {\r\n        let fetchingInfo = this.getCurrentFetchingInfo();\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.getUrl,\r\n            data: { fetchingInfo },\r\n            onSuccess: (result) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n\r\n                let res: any = result;\r\n                if (this.onDataFetched)\r\n                    res = this.onDataFetched(res);\r\n\r\n                if (handleResultByInvoker && this.props.onDataFetched) {\r\n                    this.props.onDataFetched(result as IFetchingResult<TEntity>);\r\n                    return;\r\n                }\r\n\r\n                let defaultRow = this.defaultSelectedRow ? this.defaultSelectedRow() : this.state.currentEntity ?? this.selectedEntity;\r\n                if (defaultRow?.RowGuid) {\r\n                    if (!this.selectedEntity)\r\n                        this.selectedEntity = defaultRow;\r\n                }\r\n\r\n                if (this.selectedEntity?.RowGuid) \r\n                    this.selectedEntity = (res.Data as TEntity[]).find(i => i.RowGuid === this.selectedEntity?.RowGuid);\r\n\r\n                let expandedRowKeys: React.Key[] = [];\r\n                if (this.selectedEntity?.RowGuid && defaultRow?.RowGuid)\r\n                    expandedRowKeys.push(defaultRow.RowGuid);\r\n\r\n                const defaultEntity = this.props.defaultId ? (res.Data as TEntity[]).find(i => i.Id === this.props.defaultId) : undefined;\r\n                if (defaultEntity && this.props.defaultState === enmEntityManagerState.View) {\r\n                    if (this.onEntityView) {\r\n                        if (!this.onEntityView(defaultEntity))\r\n                            return;\r\n                    }\r\n                }\r\n                this.setState({ data: res.Data, totalResultCount: res.TotalResultCount, state: this.props.defaultState ?? enmEntityManagerState.List, currentEntity: defaultEntity, expandedRowKeys });\r\n            },\r\n            onError: () => {\r\n                if (this.props.onDataFetched)\r\n                    this.props.onDataFetched({ Data: [], TotalResultCount: 0, ValidationState: { Successful: false, ValidationResults: [] } });\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n\r\n    onLookupClosed = () => {\r\n        this.closeLookupForm();\r\n        this.fetchData();\r\n    }\r\n\r\n    onTableRowExpand(expanded: boolean, record: TEntity) {\r\n        var keys: React.Key[] = [];\r\n        if (expanded) {\r\n            keys.push(record.RowGuid);\r\n        }\r\n        this.setState({ expandedRowKeys: keys });\r\n    }\r\n\r\n    async view(rowGuid: string) {\r\n        let fetchingInfo = {\r\n            Orderings: [] as IOrdering[],\r\n            Paging: { PageNo: 1, PageSize: 1 } as IPaging,\r\n            Filter: ComparisonFilter.Equal<TEntity>(e => e.RowGuid, rowGuid) as IFilter\r\n        } as TFetchingInfo;\r\n\r\n        this.onDataFetching?.call(this, fetchingInfo, true);\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.getUrl,\r\n            data: { fetchingInfo },\r\n            onSuccess: (result) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                let res: any = result;\r\n                if (this.onDataFetched)\r\n                    res = this.onDataFetched(res);\r\n                if (this.onEntityView) {\r\n                    if (!this.onEntityView(res.Data[0]))\r\n                        return;\r\n                }\r\n                this.setState({ state: enmEntityManagerState.View, currentEntity: res.Data[0] });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n\r\n    async edit(rowGuid: string) {\r\n        let fetchingInfo = {\r\n            Orderings: [] as IOrdering[],\r\n            Paging: { PageNo: 1, PageSize: 1 } as IPaging,\r\n            Filter: ComparisonFilter.Equal<TEntity>(e => e.RowGuid, rowGuid) as IFilter\r\n        } as TFetchingInfo;\r\n\r\n        this.onDataFetching?.call(this, fetchingInfo);\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.getUrl,\r\n            data: { fetchingInfo },\r\n            onSuccess: (result) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                let res: any = result;\r\n                if (this.onEntityEdit) {\r\n                    if (!this.onEntityEdit(res.Data[0]))\r\n                        return;\r\n                }\r\n                this.setState({ state: enmEntityManagerState.Edit, currentEntity: res.Data[0] });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n\r\n    async showHistory(rowGuid: string) {\r\n        this.addLookupForm(\"EntityHistory\",\r\n            <AuditLogItems\r\n                key=\"EntityHistory\"\r\n                metadata={this.metadata}\r\n                entityRowGuid={rowGuid}\r\n                invokePath={this.metadata.title}\r\n                onClose={this.onLookupClosed}\r\n            />\r\n        );\r\n    }\r\n\r\n    async add() {\r\n        let entity: any = { RowGuid: Core.newId(), State: enmEntityState.Added, ModifiedProperties: [], Id: 0, CreatorId: 0 };\r\n        if (this.onEntityAdded) {\r\n            if (! await this.onEntityAdded(entity))\r\n                return;\r\n        }\r\n        this.setState({ state: enmEntityManagerState.New, currentEntity: entity });\r\n    }\r\n\r\n    async remove(rowGuid: string) {\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.baseUrl + \"/getbyguid\",\r\n            data: { rowGuid },\r\n            onSuccess: async (result) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                let res: any = result;\r\n                if (this.onEntityDelete) {\r\n                    if (!this.onEntityDelete(res.Data))\r\n                        return;\r\n                }\r\n                if (res.Data) {\r\n                    res.Data.State = enmEntityState.Deleted;\r\n                    await this.save(res.Data);\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n\r\n    async save(entity: TEntity): Promise<boolean> {\r\n        let data: any = {};\r\n        if (!entity)\r\n            return false;\r\n\r\n        if (this.onEntitySaving) {\r\n            if (!this.onEntitySaving(entity))\r\n                return false;\r\n        }\r\n\r\n        if (this.props.onEntitySaving) {\r\n            if (!this.props.onEntitySaving(entity))\r\n                return false;\r\n        }\r\n        if (entity.State === enmEntityState.Modified || entity.State === enmEntityState.Added) {\r\n            for (var i = 0; i < entity.ModifiedProperties.length; i++) {\r\n                let val = entity.ModifiedProperties[i];\r\n                data[val] = (entity as any)[val];\r\n            }\r\n            data[\"ModifiedProperties\"] = entity.ModifiedProperties\r\n        }\r\n        else if (entity.State === enmEntityState.Unchanged) {\r\n            Core.warningNotification('لطفا اطلاعات را اصلاح سپس ذخیره نمایید');\r\n            return false;\r\n        }\r\n        data[\"RowGuid\"] = entity.RowGuid;\r\n        data[\"RowVrsn\"] = entity.RowVrsn;\r\n        data[\"State\"] = entity.State;\r\n        let url = \"\";\r\n        switch (entity.State) {\r\n            case enmEntityState.Modified:\r\n                url = \"/edit\";\r\n                break;\r\n            case enmEntityState.Deleted:\r\n                url = \"/delete\";\r\n                break;\r\n            default:\r\n                url = \"/add\";\r\n                break;\r\n        }\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.baseUrl + url,\r\n            data: { entities: [data] },\r\n            onSuccess: (result) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                let res: any = result;\r\n                if (this.onEntitySaved) {\r\n                    this.onEntitySaved(res.Data[0]);\r\n                }\r\n                if (this.props.onEntitySaved) {\r\n                    this.props.onEntitySaved(res.Data[0]);\r\n                }\r\n\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('تغییرات با موفقیت ذخیره شد');\r\n                    this.fetchData();\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n\r\n    onBack?: () => void;\r\n\r\n    back() {\r\n        this.onBack && this.onBack();\r\n        this.state.state === enmEntityManagerState.List ? window.history.back() : this.fetchData();\r\n    }\r\n\r\n    getHeaderFilter = (property: IProperty, value: any, navigationName?: string): IFilter | undefined => {\r\n        if (property.filterable === false)\r\n            return;\r\n        if (!navigationName && property.controlType === enmControlType.lookup && !!property.lookup && !!property.lookup.lookupComponent) {\r\n            const lookup = typeof property.lookup.lookupComponent === \"string\" ? (AllComponents as any)[property.lookup.lookupComponent as string] : property.lookup.lookupComponent;;\r\n            const lookupMetadata: IMetadata = lookup.initMetadata();\r\n            if (!!lookupMetadata) {\r\n                const displayLookupProperties = lookupMetadata.Properties.filter(i => i.filterable !== false) ?? [];\r\n                let filters: IFilter[] = [];\r\n                displayLookupProperties.forEach(i => {\r\n                    const filter = this.getHeaderFilter(i, value, (!!navigationName ? navigationName + '.' : '') + property.lookup!.lookupProperty);\r\n                    if (!!filter)\r\n                        filters.push(filter);\r\n                });\r\n                if (filters.length)\r\n                    return new OrFilter(filters);\r\n            }\r\n        }\r\n        else if (property.controlType === enmControlType.combobox && !!property.combobox) {\r\n            const comboboxOptions = property.combobox.options ?? (property.combobox.optionsFunc && property.combobox.optionsFunc(this, value));\r\n            if (!!comboboxOptions) {\r\n                if (isNaN(value) && property.propertyType === enmPropertyType.number) {\r\n                    const currentOpt = comboboxOptions.find(o => o.title === value);\r\n                    if (!!currentOpt)\r\n                        return new ComparisonFilter((!!navigationName ? navigationName + '.' : '') + property.dataIndex, enmConditionalOperators.Like, currentOpt.value);\r\n                }\r\n            }\r\n        }\r\n        else if (property.dataIndex) {\r\n            if ((!isNaN(value) && property.propertyType === enmPropertyType.number) || property.propertyType === enmPropertyType.string)\r\n                return new ComparisonFilter((!!navigationName ? navigationName + '.' : '') + property.dataIndex, enmConditionalOperators.Like, value);\r\n        }\r\n    }\r\n\r\n    async search(value?: any, selectedRowGuid?: string, paging?: IPaging, ordering?: IOrdering, handleResultByInvoker?: boolean) {\r\n        let filters: IFilter[] = [];\r\n        if (selectedRowGuid) {\r\n            filters.push(new ComparisonFilter(\"RowGuid\", enmConditionalOperators.Equal, selectedRowGuid));\r\n        }\r\n        else if (value) {\r\n            this.metadata.Properties.filter(p => !p.lookup || (!!p.lookup && this.metadata.excludeNavigationFromSearch !== true))\r\n                .forEach(p => {\r\n                    const filter = this.getHeaderFilter(p, value);\r\n                    if (!!filter)\r\n                        filters.push(filter);\r\n                });\r\n        }\r\n\r\n        if (filters.length)\r\n            this.headerFilter = new OrFilter(filters);\r\n        else\r\n            this.headerFilter = undefined;\r\n\r\n        if (ordering)\r\n            this.ordering = ordering;\r\n\r\n        if (paging)\r\n            this.paging = paging;\r\n\r\n        await this.fetchData(handleResultByInvoker);\r\n    }\r\n\r\n    enableAddCommand?: () => boolean;\r\n    visibleAddCommand?: () => boolean;\r\n\r\n    enableEditCommand?: (entity: TEntity) => boolean;\r\n    visibleEditCommand?: (entity: TEntity) => boolean;\r\n\r\n    enableDeleteCommand?: (entity: TEntity) => boolean;\r\n    visibleDeleteCommand?: (entity: TEntity) => boolean;\r\n\r\n    protected rightSideExtraComponent?: {\r\n        render: () => React.ReactNode;\r\n        colSpan: number;\r\n    };\r\n\r\n    virtualRender() {\r\n\r\n        const columns = this.state.columns.map((col, index) => ({\r\n            ...col,\r\n            onHeaderCell: (column: any) => ({\r\n                width: column.width,\r\n                onResize: this.handleColumnResize(index)\r\n            }),\r\n        }));\r\n\r\n        const { PageNo, PageSize } = this.paging!;\r\n\r\n        const components = {\r\n            header: {\r\n                cell: ResizableTitle,\r\n            },\r\n        };\r\n\r\n        const dataSource = this.state?.data;\r\n        const extra: React.ReactNode[] = [];\r\n\r\n        if (this.state.state === enmEntityManagerState.List && this.initialData?.AccessList[\"Add\"] && this.visibleAddCommand?.call(this) !== false) {\r\n            const insertTitle = this.insertButtonTitle();\r\n            extra.push(<Tooltip key=\"1\" title={insertTitle + \" \" + this.metadata.title}><Button disabled={this.enableAddCommand?.call(this) === false} style={{ lineHeight: '0.5em', verticalAlign: 'middle' }} type=\"primary\" onClick={() => this.add()} icon={<PlusCircleOutlined />}>{insertTitle}</Button></Tooltip>);\r\n        }\r\n\r\n        if (this.extraHeaderButtons)\r\n            extra.push(...this.extraHeaderButtons());\r\n\r\n        let title = this.metadata.title;\r\n        let modeTitle = \"\";\r\n        if (this.state.state === enmEntityManagerState.New) {\r\n            modeTitle = \" (جدید) \";\r\n        }\r\n        if (this.state.state === enmEntityManagerState.Edit) {\r\n            modeTitle = \" (ویرایش) \";\r\n        }\r\n        const loading = this.state.loading || !dataSource ? { indicator: <CustomSpinner /> } : false;\r\n        const extraHeaderNodes = this.extraHeaderNodes && this.extraHeaderNodes();\r\n        const header = this.props.showHeader === false\r\n            ? undefined\r\n            : this.getPageHeader({\r\n                title,\r\n                subTitle: modeTitle,\r\n                onBack: this.props.hasBack !== false ? () => {\r\n                    if (this.state.state === enmEntityManagerState.List && this.props.onClose)\r\n                        this.props.onClose(this);\r\n                    else\r\n                        this.back();\r\n                } : undefined,\r\n                extraHeaderButtons: extra,\r\n                extraHeaderNodes: extraHeaderNodes ?? undefined,\r\n                backNode: this.backNode && this.backNode(this.state.state),\r\n                affix: this.state.state === enmEntityManagerState.View\r\n            });\r\n\r\n        let extraFormNode: React.ReactNode = undefined;\r\n        switch (this.state.state) {\r\n            case enmEntityManagerState.New:\r\n                break;\r\n            case enmEntityManagerState.Edit:\r\n                break;\r\n            case enmEntityManagerState.View:\r\n                extraFormNode = (this.props.extraViewNode && this.props.extraViewNode()) ?? (this.extraViewNode && this.extraViewNode());\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return (\r\n            <div>\r\n                {header}\r\n\r\n                <div style={{ display: this.state.state === enmEntityManagerState.List && !this.state.currentEntity ? 'block' : 'none' }}>\r\n                    {this.searchable && this.initSearchForm()}\r\n\r\n                    <div className=\"row\" style={this.rightSideExtraComponent?.colSpan ? { margin: 0, marginTop: 10 } : { marginTop: 10 }}>\r\n                        {this.rightSideExtraComponent &&\r\n                            <div className={`col-md-${this.rightSideExtraComponent.colSpan}`}\r\n                                style={{\r\n                                    margin: 0,\r\n                                    padding: 0,\r\n                                    paddingBottom: this.state.windowSize === 1 ? 10 : 0\r\n                                }}>\r\n                                {this.rightSideExtraComponent.render()}\r\n                            </div>\r\n                        }\r\n                        <div className={this.rightSideExtraComponent?.colSpan ? `col-md-${12 - this.rightSideExtraComponent.colSpan}` : \"\"}\r\n                            style={this.rightSideExtraComponent?.colSpan\r\n                                ? {\r\n                                    margin: 0,\r\n                                    padding: 0,\r\n                                    paddingRight: this.state.windowSize === 1 ? 0 : 10\r\n                                }\r\n                                : {}\r\n                            }>\r\n                            <div ref={node => this._gridContainer = node}>\r\n                                <Table\r\n                                    className=\"box\"\r\n                                    rowKey=\"RowGuid\"\r\n                                    components={components}\r\n                                    columns={columns}\r\n                                    rowClassName={(_, index) => index % 2 === 0 ? 'table-row-light' : 'table-row-dark'}\r\n                                    dataSource={dataSource}\r\n                                    scroll={{ x: 'max-content' }}\r\n                                    loading={loading}\r\n                                    sticky={{ getContainer: () => { return this._gridContainer!; } }}\r\n                                    showHeader={true}\r\n                                    onChange={(pagination, _, sorter) => {\r\n                                        if (!(sorter instanceof Array) && !!sorter.field && !!sorter.order) {\r\n                                            this.ordering = {\r\n                                                Property: sorter.field.toString(),\r\n                                                OrderBy: sorter.order === 'ascend' ? enmOrderingType.Ascending : enmOrderingType.Descending\r\n                                            };\r\n                                        }\r\n                                        else\r\n                                            this.ordering = undefined;\r\n\r\n                                        if (this.paging) {\r\n                                            this.paging.PageNo = pagination.current ?? 1;\r\n                                            this.paging.PageSize = pagination.pageSize ?? 10;\r\n                                        }\r\n                                        this.fetchData();\r\n                                    }}\r\n                                    onRow={(record: TEntity, rowIndex) => {\r\n                                        let rowClassName = this.state.expandedRowKeys.find(r => r === record.RowGuid) ? \"table-expanded-parent\" : \"\";\r\n                                        if (this.setRecordClassName) {\r\n                                            const extraClassName = this.setRecordClassName(record, rowIndex);\r\n                                            rowClassName += rowClassName + ' ' + extraClassName;\r\n                                        }\r\n                                        return {\r\n                                            onClick: (event) => {\r\n                                                this.selectedEntity = record;\r\n                                                if (this.onRowClick)\r\n                                                    this.onRowClick.call(this, record, rowIndex, event);\r\n                                            },\r\n                                            className: rowClassName\r\n                                        };\r\n                                    }}\r\n                                    pagination={{\r\n                                        style: { marginRight: 10 },\r\n                                        position: ['bottomRight'],\r\n                                        responsive: true,\r\n                                        defaultPageSize: this.paging?.PageSize ?? 10,\r\n                                        current: Math.ceil(this.state.totalResultCount ?? 0 / PageSize) < PageNo ? 1 : PageNo,\r\n                                        total: this.state.totalResultCount,\r\n                                        showSizeChanger: true,\r\n                                        size: 'small',\r\n                                        showTotal: (total, _) => {\r\n                                            return (<div>تعداد کل ردیف ها: {total} </div>);\r\n                                        }\r\n                                    }}\r\n                                    expandedRowKeys={this.state.expandedRowKeys}\r\n                                    onExpand={(expanded, record) => {\r\n                                        this.selectedEntity = record;\r\n                                        this.onTableRowExpand(expanded, record);\r\n                                        this._gridTable?.getElementsByClassName('ant-table-body')[0]?.scrollTo({ left: 1000 });\r\n                                    }}\r\n                                    expandable={{\r\n                                        expandRowByClick: true,\r\n                                        columnWidth: 10,\r\n                                        showExpandColumn: true,\r\n                                        indentSize: 1,\r\n                                        expandedRowRender: () => {\r\n                                            if (!this.selectedEntity)\r\n                                                return <></>;\r\n\r\n                                            let enableEdit = this.selectedEntity && this.enableEditCommand?.call(this, this.selectedEntity) !== false;\r\n                                            let enableDelete = this.selectedEntity && this.enableDeleteCommand?.call(this, this.selectedEntity) !== false;\r\n                                            let visibleEdit = this.selectedEntity && this.visibleEditCommand?.call(this, this.selectedEntity) !== false;\r\n                                            let visibleDelete = this.selectedEntity && this.visibleDeleteCommand?.call(this, this.selectedEntity) !== false;\r\n\r\n                                            return (\r\n                                                <Row aria-colspan={12} style={{}}>\r\n                                                    {this.props.isLookupMode ? <Col style={{ marginLeft: 10 }}><Button type=\"primary\" className=\"bg-success\" onClick={() => this.props.onClose && this.props.onClose(this)} icon={<CheckOutlined />}>انتخاب</Button></Col> : \"\"}\r\n                                                    <Col style={{ marginLeft: 10 }}>\r\n                                                        <Button type=\"default\" onClick={() => this.view(this.state.expandedRowKeys[0].toString())} icon={<FileDoneOutlined />}>{this.viewButtonTitle()}</Button>\r\n                                                    </Col>\r\n                                                    {this.metadata.showHistory === true && this.initialData?.AccessList[\"AuditLogItems\"] ?\r\n                                                        <Col style={{ marginLeft: 10 }}>\r\n                                                            <Button type=\"default\" onClick={() => this.showHistory(this.state.expandedRowKeys[0].toString())} icon={< HistoryOutlined />}>تاریخچه</Button>\r\n                                                        </Col>\r\n                                                        : \"\"\r\n                                                    }\r\n                                                    {this.initialData?.AccessList[\"Edit\"] && visibleEdit ?\r\n                                                        <Col style={{ marginLeft: 10 }}>\r\n                                                            <Button type=\"primary\" disabled={!enableEdit} onClick={() => this.edit(this.state.expandedRowKeys[0].toString())} icon={< FormOutlined />}>ویرایش</Button>\r\n                                                        </Col>\r\n                                                        : \"\"\r\n                                                    }\r\n                                                    {this.initialData?.AccessList[\"Delete\"] && visibleDelete ?\r\n                                                        <Col style={{ marginLeft: 10 }}>\r\n                                                            <Popconfirm disabled={!enableDelete} okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} title=\"آیا مایلید ردیف جاری حذف شود؟\" okText=\"بلی\" cancelText=\"خیر\" onConfirm={() => this.remove(this.state.expandedRowKeys[0].toString())} >\r\n                                                                <Button type=\"primary\" danger disabled={!enableDelete} icon={<DeleteOutlined />}>حذف</Button>\r\n                                                            </Popconfirm>\r\n                                                        </Col>\r\n                                                        : \"\"\r\n                                                    }\r\n                                                    {this.renderingToolbar ? this.renderingToolbar() : <></>}\r\n                                                </Row>\r\n                                            );\r\n                                        },\r\n                                        expandIcon: ({ expanded, onExpand, record }) =>\r\n                                            expanded ? (\r\n                                                <Tooltip title=\"برای عدم مشاهد عملیات کلیک نمایید\">\r\n                                                    <DownOutlined onClick={e => onExpand(record, e)} />\r\n                                                </Tooltip>\r\n                                            ) : (\r\n                                                <Tooltip title=\"برای مشاهده عملیات روی سطر مورد نظر کلیک نمایید\">\r\n                                                    <LeftOutlined onClick={e => onExpand(record, e)} />\r\n                                                </Tooltip>\r\n                                            )\r\n                                    }}\r\n                                    locale={{ emptyText: this.state.loading ? \"در حال بازیابی اطلاعات\" : (this.state.totalResultCount === undefined ? \" لطفا ابتدا اطلاعات را فیلتر نمایید\" : \"اطلاعاتی یافت نشد\") }}\r\n                                    ref={node => this._gridTable = node}\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                {[enmEntityManagerState.New, enmEntityManagerState.Edit, enmEntityManagerState.View].indexOf(this.state.state) > -1 && !!this.state.currentEntity &&\r\n                    <div ref={node => this.viewRef = node} className=\"print-container\">\r\n                        <DataForm<TEntity>\r\n                            parent={this}\r\n                            style={this.props.dataformBoxShadow !== false ? {} : { boxShadow: \"inherit\" }}\r\n                            currentEntity={this.state.currentEntity!}\r\n                            properties={this.metadata.Properties}\r\n                            isReadonly={this.state.state === enmEntityManagerState.View}\r\n                            onSubmit={() => this.save(this.state.currentEntity!)}\r\n                            onReset={() => this.back()}\r\n                            onChange={(property, value, form) => {\r\n                                let currentEntity = this.state.currentEntity as any;\r\n                                if (currentEntity) {\r\n                                    currentEntity[property.dataIndex!] = property.lookup?.lookupProperty && value ? value[\"Id\"] : value;\r\n                                    if (property.lookup?.lookupProperty)\r\n                                        currentEntity[property.lookup.lookupProperty] = value;\r\n                                    if (this.onEntityChanged)\r\n                                        this.onEntityChanged(this.state.currentEntity!, property.dataIndex!, form);\r\n                                    if (!this.state.currentEntity?.ModifiedProperties.find(i => i === property.dataIndex!))\r\n                                        currentEntity.ModifiedProperties.push(property.dataIndex!);\r\n                                    if (currentEntity.State !== enmEntityState.Added)\r\n                                        currentEntity.State = enmEntityState.Modified;\r\n                                }\r\n                                this.setState({ currentEntity });\r\n                            }}\r\n                            preparelookupProps={(propName, lookupProps, form) => {\r\n                                if (this.preparelookupProps)\r\n                                    return this.preparelookupProps(propName, lookupProps, form, false);\r\n                                return lookupProps;\r\n                            }}\r\n                            onLookupOpen={this.onLookupOpen}\r\n                            onLookupClose={this.onLookupClose}\r\n                        />\r\n                        {extraFormNode ? <div style={{ marginTop: this.extraFormNodeMarginTop !== undefined ? this.extraFormNodeMarginTop : 10 }}>{extraFormNode}</div> : <></>}\r\n                    </div>\r\n                }\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport class EntityManager<TEntity extends IEntity, TProps extends IEntityManagerProps<TEntity>, TStates extends IEntityManagerStates<TEntity>> extends BaseEntityManager<TEntity, TProps, TStates, IFetchingInfo, IInitialData> {\r\n\r\n}\r\n","import { Button, Descriptions, Table, Tree } from \"antd\";\r\nimport React from \"react\";\r\nimport * as Icons from '@ant-design/icons';\r\nimport { SaveOutlined } from '@ant-design/icons';\r\nimport { BaseComponent } from \"../../components/infrastructure/baseComponent\";\r\nimport { enmEntityState, ICallOptions } from \"../../components/infrastructure/models\";\r\nimport { DataNode } from \"antd/lib/tree\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { IUserClaim, IUserClaimGetResult, IUserClaimProps, IUserClaimStates } from \"./interfaces\";\r\nimport { IClaim, IRoleClaim } from \"../roleClaim/interfaces\";\r\nimport { IRole } from \"../role/interfaces\";\r\nimport { IUserRole } from \"../userRole/interfaces\";\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\n\r\nexport class UserClaim extends BaseComponent<IUserClaimProps, IUserClaimStates>{\r\n\r\n    constructor(props: IUserClaimProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            userRoles: [],\r\n            userClaims: [],\r\n            roleClaims: [],\r\n            roles: [],\r\n            selectedRoles: [],\r\n            claims: [],\r\n            expandedKeys: [],\r\n            allowEdit: false,\r\n            checkedKeys: {\r\n                checked: [],\r\n                halfChecked: []\r\n            },\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.loadData();\r\n    }\r\n    async loadData() {\r\n        if (!this.props.params || !this.props.params().user?.Id)\r\n            return;\r\n\r\n        let opt: ICallOptions = {\r\n            url: 'user/getuserclaims',\r\n            data: { userId: this.props.params && this.props.params().user?.Id },\r\n            onSuccess: (result) => {\r\n                if (result.ValidationState.Successful) {\r\n                    let data: IUserClaimGetResult = (result as any).Data;\r\n                    let selectedRoles: React.Key[] = data.UserRoles.map(r => r.Role.RowGuid);\r\n                    let claims = data.Claims.map(c => (c.ParentName ? c.ParentName + \".\" : \"\") + c.Name);\r\n                    let checkedKeys: React.Key[] = data.RoleClaims.filter(r => claims.indexOf(r.Claim) > -1).map(r => r.Claim);\r\n                    data.UserClaims.filter(r => claims.indexOf(r.Claim) > -1).forEach(r => checkedKeys.push(r.Claim));\r\n\r\n                    let expandedKeys: React.Key[] = [];\r\n                    checkedKeys.forEach(k => {\r\n                        if (expandedKeys.indexOf(k) === -1)\r\n                            expandedKeys.push(k);\r\n                    });\r\n\r\n                    if (this.mounted) {\r\n                        this.setState({\r\n                            loading: false,\r\n                            userRoles: data.UserRoles,\r\n                            userClaims: data.UserClaims,\r\n                            roleClaims: data.RoleClaims,\r\n                            roles: data.Roles,\r\n                            claims: data.Claims,\r\n                            selectedRoles: selectedRoles,\r\n                            expandedKeys: expandedKeys,\r\n                            allowEdit: data.AllowEdit,\r\n                            checkedKeys: { checked: checkedKeys, halfChecked: [] }\r\n                        });\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    getIcon = (name?: string) => {\r\n        const Icon = name ? (Icons as any)[name] : null;\r\n        if (Icon)\r\n            return <Icon />;\r\n    }\r\n    renderClaims = (claims: IClaim[], parentName: string | null = null): DataNode[] => {\r\n        let nodes: DataNode[] = [];\r\n        claims.filter(c => c.ParentName === parentName)\r\n            .forEach(c => {\r\n                if (c.Name === \"Home\" || c.Name === \"Portal\")\r\n                    return;\r\n                let key = (c.ParentName ? c.ParentName + \".\" : \"\") + c.Name;\r\n                let node: DataNode = {\r\n                    key: key,\r\n                    title: c.Title,\r\n                    disableCheckbox: !!this.state.roleClaims.find(r => r.Claim === key),\r\n                    icon: this.getIcon(c.Icon)\r\n                };\r\n                let children = this.renderClaims(claims, c.Name);\r\n                if (children.length)\r\n                    node.children = children;\r\n                nodes.push(node);\r\n            });\r\n        return nodes;\r\n    }\r\n    onExpand = (expandedKeysValue: React.Key[]) => {\r\n        this.setState({ expandedKeys: expandedKeysValue });\r\n    }\r\n    onCheck = (checked: React.Key[] | { checked: React.Key[]; halfChecked: React.Key[]; }) => {\r\n        if ((checked as any)?.checked) {\r\n            let checkedKeys = checked as { checked: React.Key[]; halfChecked: React.Key[]; };\r\n            let currentCheckedKeys: React.Key[] = [];\r\n            checkedKeys.checked.forEach(key => {\r\n                let name: string | null = key as string;\r\n                while (name) {\r\n                    let tmp: string | null = name?.split('.')[0];\r\n                    let node = this.state.claims.map(c => { return { ParentName: c.ParentName, Name: c.Name } })\r\n                        .find(c => c.Name === tmp);\r\n\r\n                    if (node && checkedKeys.checked.indexOf(node.Name) === -1 && currentCheckedKeys.indexOf(node.Name) === -1) {\r\n                        name = (node.ParentName ? node.ParentName + \".\" : \"\") + node.Name;\r\n                        if (name.split('.').length === 1)\r\n                            break;\r\n                        if (currentCheckedKeys.indexOf(name) === -1)\r\n                            currentCheckedKeys.push(name);\r\n                    }\r\n                    else\r\n                        name = null;\r\n                }\r\n                if (currentCheckedKeys.indexOf(key) === -1)\r\n                    currentCheckedKeys.push(key);\r\n            });\r\n            this.setState({\r\n                checkedKeys: { checked: currentCheckedKeys, halfChecked: [] }\r\n            });\r\n        }\r\n    }\r\n    async save() {\r\n        let userClaims: IUserClaim[] = [];\r\n        let userRoles: IUserRole[] = [];\r\n        this.state.userClaims.forEach(item => {\r\n            if (this.state.checkedKeys.checked.indexOf(item.Claim) === -1 && !this.state.roleClaims.find(r => r.Claim === item.Claim))\r\n                userClaims.push({ Id: item.Id, RowGuid: item.RowGuid, RowVrsn: item.RowVrsn, State: enmEntityState.Deleted } as any);\r\n        });\r\n        this.state.checkedKeys.checked.forEach(item => {\r\n            if (this.state.userClaims.map(i => i.Claim).indexOf(item.toString()) === -1 && !this.state.roleClaims.find(r => r.Claim === item.toString()))\r\n                userClaims.push({ RowGuid: Core.newId(), State: enmEntityState.Added, UserId: this.props.params && this.props.params().user?.Id, Claim: item.toString() } as any);\r\n        });\r\n\r\n        this.state.userRoles.forEach(item => {\r\n            if (this.state.selectedRoles.indexOf(item.Role.RowGuid) === -1)\r\n                userRoles.push({ Id: item.Id, RowGuid: item.RowGuid, RowVrsn: item.RowVrsn, State: enmEntityState.Deleted } as any);\r\n        });\r\n        this.state.selectedRoles.forEach(item => {\r\n            if (this.state.userRoles.map(i => i.Role.RowGuid).indexOf(item.toString()) === -1) {\r\n                let role = this.state.roles.find(u => u.RowGuid === item.toString());\r\n                userRoles.push({ RowGuid: Core.newId(), State: enmEntityState.Added, UserId: this.props.params && this.props.params().user?.Id, RoleId: role?.Id } as any);\r\n            }\r\n        });\r\n\r\n        if (userClaims.length || userRoles.length) {\r\n            let opt: ICallOptions = {\r\n                url: 'user/saveuserclaims',\r\n                data: {\r\n                    changes: {\r\n                        UserClaims: userClaims,\r\n                        UserRoles: userRoles\r\n                    }\r\n                },\r\n                onSuccess: async (result) => {\r\n                    if (result.ValidationState.Successful) {\r\n                        Core.successNotification('تغییرات با موفقیت ذخیره شد');\r\n                        await this.loadData();\r\n                    }\r\n                }\r\n            };\r\n            await this.callApi(opt);\r\n        }\r\n    }\r\n    onSelectedRolesChanged = async (selectedRowKeys: React.Key[], selectedRows: IRole[]) => {\r\n        let roleIds = selectedRows.map(r => r.Id);\r\n        let opt: ICallOptions = {\r\n            url: 'role/getclaims',\r\n            data: { roleIds: roleIds ? roleIds : [] },\r\n            onSuccess: async (result) => {\r\n                if (result.ValidationState.Successful) {\r\n                    let roleClaims: IRoleClaim[] = (result as any).Data;\r\n                    let claims = this.state.claims.map(c => (c.ParentName ? c.ParentName + \".\" : \"\") + c.Name);\r\n                    let checkedKeys: React.Key[] = roleClaims.filter(r => claims.indexOf(r.Claim) > -1).map(r => r.Claim);\r\n                    this.state.userClaims.filter(r => claims.indexOf(r.Claim) > -1).forEach(r => checkedKeys.push(r.Claim));\r\n\r\n                    let expandedKeys = this.state.expandedKeys;\r\n                    checkedKeys.forEach(k => {\r\n                        if (expandedKeys.indexOf(k) === -1)\r\n                            expandedKeys.push(k);\r\n                    });\r\n                    if (this.mounted) {\r\n                        this.setState({\r\n                            selectedRoles: selectedRowKeys,\r\n                            roleClaims: roleClaims,\r\n                            expandedKeys: expandedKeys,\r\n                            checkedKeys: { checked: checkedKeys, halfChecked: [] }\r\n                        });\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    virtualRender() {\r\n\r\n        const nodes: DataNode[] = this.renderClaims(this.state.claims);\r\n        let expandedKeys: React.Key[] = this.state.expandedKeys;\r\n        nodes.forEach(c => {\r\n            if (expandedKeys.indexOf(c.key) === -1)\r\n                expandedKeys.push(c.key);\r\n        });\r\n\r\n        let extraButtons: React.ReactNode;\r\n        if (this.state.allowEdit)\r\n            extraButtons = (\r\n                <div key=\"userclaims-extraButtons\">\r\n                    <Button key=\"userclaims-1\" type=\"ghost\" onClick={() => {\r\n                        if (this.props.onClose)\r\n                            this.props.onClose(this);\r\n                        else\r\n                            window.history.back();\r\n                    }} icon={this.getIcon(\"StopOutlined\")} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '100px', marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                    <Button key=\"userclaims-2\" style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '100px' }} type=\"primary\" onClick={() => this.save()} icon={<SaveOutlined />} loading={this.state.loading}>\r\n                        ذخیره\r\n                    </Button>\r\n                </div>\r\n            );\r\n\r\n        let descriptions: React.ReactNode | undefined =\r\n            this.props.params &&\r\n            (\r\n                <Descriptions key=\"userclaims-description\" className=\"header-page\">\r\n                    <Descriptions.Item key=\"userclaims-username\" label=\"نام کاربری\">{this.props.params().user?.UserName}</Descriptions.Item>\r\n                    <Descriptions.Item key=\"userclaims-fullname\" label=\"نام و نام خانوادگی\">{this.props.params().user?.FullName}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n\r\n        const header = this.getPageHeader({\r\n            title: \"دسترسی های کاربران\",\r\n            onBack: () => {\r\n                if (this.props.onClose)\r\n                    this.props.onClose(this);\r\n                else\r\n                    window.history.back();\r\n            },\r\n            extraHeaderButtons: extraButtons,\r\n            extraHeaderNodes: descriptions\r\n        });\r\n\r\n        return (\r\n            <>\r\n                <div style={{ position: \"sticky\", top: 0, zIndex: 1 }}>\r\n                    {header}\r\n                </div>\r\n                <div key=\"userclaims-container\" className=\"row\" style={{ margin: 0, marginTop: 10 }}>\r\n                    <div key=\"userclaims-grid\" className=\"col-md-4\"\r\n                        style={{\r\n                            margin: 0,\r\n                            padding: 0,\r\n                            paddingBottom: this.state.windowSize === 1 ? 10 : 0\r\n                        }}>\r\n                        {!this.state.loading &&\r\n                            <Table\r\n                                rowKey=\"RowGuid\"\r\n                                rowSelection={{\r\n                                    type: 'checkbox',\r\n                                    selectedRowKeys: this.state.selectedRoles,\r\n                                    onChange: this.onSelectedRolesChanged\r\n                                }}\r\n                                pagination={{\r\n                                    style: { marginLeft: 10 },\r\n                                    size: \"small\"\r\n                                }}\r\n                                dataSource={this.state.roles}\r\n                                className=\"box\"\r\n                                columns={[\r\n                                    {\r\n                                        dataIndex: \"Description\",\r\n                                        title: \"نقش\"\r\n                                    }\r\n                                ]}\r\n                            />\r\n                        }\r\n                    </div>\r\n                    <div key=\"userclaims-tree\" className=\"col-md-8\"\r\n                        style={{\r\n                            margin: 0,\r\n                            padding: 0,\r\n                            paddingRight: this.state.windowSize === 1 ? 0 : 10\r\n                        }}>\r\n                        <div >\r\n                            {this.state.loading\r\n                                ? <div className=\"center\" style={{ background: \"#fff\" }}><CustomSpinner /></div>\r\n                                :\r\n                                <Tree\r\n                                    className=\"box\"\r\n                                    showLine={true}\r\n                                    showIcon={true}\r\n                                    checkable\r\n                                    expandedKeys={expandedKeys}\r\n                                    checkedKeys={this.state.checkedKeys}\r\n                                    onExpand={this.onExpand}\r\n                                    onCheck={this.onCheck}\r\n                                    treeData={nodes}\r\n                                    checkStrictly={true}\r\n                                    style={{ margin: 10 }}\r\n                                />}\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n}","import { Button, Col, Table } from \"antd\";\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IInitialData, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\nimport { enmEntityState, ICallOptions, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { UserClaim } from \"../userClaim\";\r\nimport { IUser, IUserFetchingInfo, IUserProps, IUserStates } from \"./interfaces\";\r\n\r\nexport class User extends BaseEntityManager<IUser, IUserProps, IUserStates, IUserFetchingInfo, IInitialData> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"User\",\r\n            title: \"کاربر\",\r\n            showHistory: true,\r\n            Properties: [\r\n                {\r\n                    title: \"نام کاربری\",\r\n                    dataIndex: \"UserName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    disable: (sender: User) => {\r\n                        return sender.state.currentEntity?.State !== enmEntityState.Added;\r\n                    },\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام کاربری را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کلمه عبور\",\r\n                    dataIndex: \"Password\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.password,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false,\r\n                    filterable: false,\r\n                    sortable: false\r\n                },\r\n                {\r\n                    title: \"فعال؟\",\r\n                    dataIndex: \"IsActive\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"FirstName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"نام خانوادگی\",\r\n                    dataIndex: \"LastName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام خانوادگی را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"ایمیل\",\r\n                    dataIndex: \"Email\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.email,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"شماره تلفن همراه\",\r\n                    dataIndex: \"Phone\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.numberinput,\r\n                    formatter: value => {\r\n                        const formated = `${value}`.length ? `0${value}`.replace(/\\D+/g, '') : \"\";\r\n                        return formated;\r\n                    },\r\n                    parser: value => {\r\n                        const parsed = (value && value.length && value.startsWith('0') ? value.substring(1) : value) ?? \"\";\r\n                        return parsed;\r\n                    },\r\n                    onKeyPress: (event, value) => {\r\n                        if (!event.key.match(/\\d/g) || `${value}`.length >= 10) {\r\n                            event.preventDefault();\r\n                        }\r\n                    },\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    private selectedRoles: React.Key[] = [];\r\n\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.getRoles();\r\n    }\r\n    onSelectedRolesChanged = async (selectedRowKeys: React.Key[]) => {\r\n        this.selectedRoles = selectedRowKeys;\r\n\r\n        this.fetchData();\r\n    }\r\n    getRoles = async () => {\r\n        let opt: ICallOptions = {\r\n            url: 'role/get',\r\n            data: {},\r\n            onSuccess: async (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    this.setState({\r\n                        roles: result.Data\r\n                    });\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    onInitializing() {\r\n        this.getDefaultState = () => {\r\n            return {\r\n                roles: [],\r\n                selectedRoles: []\r\n            };\r\n        }\r\n        if (!this.props.isLookupMode)\r\n            this.rightSideExtraComponent = {\r\n                render: () => (\r\n                    <Table\r\n                        loading={this.state.loading ? { indicator: <CustomSpinner /> } : false}\r\n                        rowKey=\"RowGuid\"\r\n                        rowSelection={{\r\n                            type: 'checkbox',\r\n                            selectedRowKeys: this.selectedRoles,\r\n                            onChange: this.onSelectedRolesChanged\r\n                        }}\r\n                        pagination={{\r\n                            style: { marginLeft: 10 },\r\n                            size: \"small\"\r\n                        }}\r\n                        onHeaderRow={() => {\r\n                            return {\r\n                                className: 'ant-table-thead-checkbox',\r\n                            };\r\n                        }}\r\n                        dataSource={this.state.roles}\r\n                        className=\"box\"\r\n                        columns={[\r\n                            {\r\n                                dataIndex: \"Description\",\r\n                                title: \"فیلتر بر اساس نقش\"\r\n                            }\r\n                        ]}\r\n                    />),\r\n                colSpan: 4\r\n            };\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n        this.renderingToolbar = () => {\r\n            let userAccess = this.initialData?.AccessList[\"SaveUserClaims\"];\r\n            if (userAccess) {\r\n                return (\r\n                    <>\r\n                        <Col style={{ marginLeft: 10 }}>\r\n                            <Button type=\"default\" onClick={this.onUserClaimsClick}>دسترسی ها</Button>\r\n                        </Col>\r\n                    </>);\r\n            }\r\n            else\r\n                return <></>;\r\n        };\r\n        this.onDataFetching = (fetchingInfo: IUserFetchingInfo) => {\r\n            fetchingInfo.RoleIds = this.selectedRoles.map(k => k as string);\r\n        };\r\n    }\r\n    onUserClaimsClick = () => {\r\n        this.addLookupForm(\"UserClaim\",\r\n            <UserClaim\r\n                key=\"UserClaim\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { user: this.selectedEntity }\r\n                }}\r\n            />);\r\n    }\r\n}","import { Button, Descriptions, Tree } from \"antd\";\r\nimport React from \"react\";\r\nimport { SaveOutlined, StopOutlined } from '@ant-design/icons';\r\nimport * as Icons from '@ant-design/icons';\r\nimport { BaseComponent } from \"../../components/infrastructure/baseComponent\";\r\nimport { enmEntityState, ICallOptions } from \"../../components/infrastructure/models\";\r\nimport { IClaim, IRoleClaim, IRoleClaimGetResult, IRoleClaimProps, IRoleClaimStates } from \"./interfaces\";\r\nimport { DataNode } from \"antd/lib/tree\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\n\r\nexport class RoleClaim extends BaseComponent<IRoleClaimProps, IRoleClaimStates>{\r\n\r\n    constructor(props: IRoleClaimProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            roleClaims: [],\r\n            claims: [],\r\n            nodes: [],\r\n            expandedKeys: [],\r\n            allowEdit: false,\r\n            checkedKeys: {\r\n                checked: [],\r\n                halfChecked: []\r\n            },\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.loadData();\r\n    }\r\n    async loadData() {\r\n        let roleIds: number[] = [];\r\n        let roleId = this.props.params && this.props.params().role?.Id;\r\n        if (roleId)\r\n            roleIds.push(roleId);\r\n        let opt: ICallOptions = {\r\n            url: 'role/getroleclaims',\r\n            data: { roleIds },\r\n            onSuccess: (result) => {\r\n                if (result.ValidationState.Successful) {\r\n                    let data: IRoleClaimGetResult = (result as any).Data;\r\n                    let nodes: DataNode[] = this.renderClaims(data.Claims);\r\n                    let expandedKeys: React.Key[] = nodes.map(c => c.key);\r\n                    let claims = data.Claims.map(c => (c.ParentName ? c.ParentName + \".\" : \"\") + c.Name);\r\n                    let checkedKeys: React.Key[] = data.RoleClaims.filter(r => claims.indexOf(r.Claim) > -1).map(r => r.Claim);\r\n                    checkedKeys.forEach(k => {\r\n                        if (expandedKeys.indexOf(k) === -1)\r\n                            expandedKeys.push(k);\r\n                    });\r\n                    this.setState({\r\n                        loading: false,\r\n                        roleClaims: data.RoleClaims,\r\n                        claims: data.Claims,\r\n                        nodes: nodes,\r\n                        expandedKeys: expandedKeys,\r\n                        allowEdit: data.AllowEdit,\r\n                        checkedKeys: {\r\n                            checked: checkedKeys,\r\n                            halfChecked: []\r\n                        }\r\n                    })\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    renderClaims(claims: IClaim[], parentName: string | null = null): DataNode[] {\r\n        let nodes: DataNode[] = [];\r\n        claims.filter(c => c.ParentName === parentName)\r\n            .forEach(c => {\r\n                if (c.Name === \"Home\" || c.Name === \"Portal\")\r\n                    return;\r\n\r\n                let node: DataNode = {\r\n                    key: (c.ParentName ? c.ParentName + \".\" : \"\") + c.Name,\r\n                    title: c.Title,\r\n                    icon: this.getIcon(c.Icon),\r\n                    disableCheckbox: this.props.params && this.props.params().role?.Id === 1 ? true : false\r\n                };\r\n                let children = this.renderClaims(claims, c.Name);\r\n                if (children.length)\r\n                    node.children = children;\r\n                nodes.push(node);\r\n            });\r\n        return nodes;\r\n    }\r\n    getIcon = (name?: string) => {\r\n        const Icon = name ? (Icons as any)[name] : null;\r\n        if (Icon)\r\n            return <Icon />;\r\n    }\r\n    onExpand = (expandedKeysValue: React.Key[]) => {\r\n        this.setState({ expandedKeys: expandedKeysValue });\r\n    }\r\n    onCheck = (checked: React.Key[] | { checked: React.Key[]; halfChecked: React.Key[]; }) => {\r\n        if ((checked as any)?.checked) {\r\n            let checkedKeys = checked as { checked: React.Key[]; halfChecked: React.Key[]; };\r\n            let currentCheckedKeys: React.Key[] = [];\r\n            checkedKeys.checked.forEach(key => {\r\n                let name: string | null = key as string;\r\n                while (name) {\r\n                    let tmp: string | null = name?.split('.')[0];\r\n                    let node = this.state.claims.map(c => { return { ParentName: c.ParentName, Name: c.Name } })\r\n                        .find(c => c.Name === tmp);\r\n\r\n                    if (node && checkedKeys.checked.indexOf(node.Name) === -1 && currentCheckedKeys.indexOf(node.Name) === -1) {\r\n                        name = (node.ParentName ? node.ParentName + \".\" : \"\") + node.Name;\r\n                        if (name.split('.').length === 1)\r\n                            break;\r\n                        if (currentCheckedKeys.indexOf(name) === -1)\r\n                            currentCheckedKeys.push(name);\r\n                    }\r\n                    else\r\n                        name = null;\r\n                }\r\n                if (currentCheckedKeys.indexOf(key) === -1)\r\n                    currentCheckedKeys.push(key);\r\n            });\r\n            this.setState({\r\n                checkedKeys: { checked: currentCheckedKeys, halfChecked: [] }\r\n            });\r\n        }\r\n    }\r\n    async save() {\r\n        let changes: IRoleClaim[] = [];\r\n        this.state.roleClaims.forEach(item => {\r\n            if (this.state.checkedKeys.checked.indexOf(item.Claim) === -1)\r\n                changes.push({ Id: item.Id, RowGuid: item.RowGuid, RowVrsn: item.RowVrsn, State: enmEntityState.Deleted } as any);\r\n        });\r\n        this.state.checkedKeys.checked.forEach(item => {\r\n            if (this.state.roleClaims.map(i => i.Claim).indexOf(item.toString()) === -1)\r\n                changes.push({ RowGuid: Core.newId(), State: enmEntityState.Added, RoleId: this.props.params && this.props.params().role?.Id, Claim: item.toString() } as any);\r\n        });\r\n        if (changes.length) {\r\n            let opt: ICallOptions = {\r\n                url: 'role/saveroleclaims',\r\n                data: { changes },\r\n                onSuccess: async (result) => {\r\n                    if (result.ValidationState.Successful) {\r\n                        Core.successNotification('تغییرات با موفقیت ذخیره شد');\r\n                        await this.loadData();\r\n                    }\r\n                }\r\n            };\r\n            await this.callApi(opt);\r\n        }\r\n    }\r\n    virtualRender() {\r\n\r\n        let extraButtons: React.ReactNode;\r\n        if (this.state.allowEdit && (this.props.params && this.props.params().role?.Id === 1 ? false : true))\r\n            extraButtons = (\r\n                <div key=\"roleclaims\">\r\n                    <Button key=\"roleclaims-1\" type=\"ghost\" onClick={() => {\r\n                        if (this.props.onClose)\r\n                            this.props.onClose(this);\r\n                        else\r\n                            window.history.back();\r\n                    }} icon={<StopOutlined />} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '100px', marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                    <Button key=\"roleclaims-2\" style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '100px' }} type=\"primary\" onClick={() => this.save()} icon={<SaveOutlined />} loading={this.state.loading}>\r\n                        ذخیره\r\n                    </Button>\r\n                </div>\r\n            );\r\n\r\n        let descriptions: React.ReactNode | undefined =\r\n            this.props.params &&\r\n            (\r\n                <Descriptions className=\"header-page\">\r\n                    <Descriptions.Item label=\"نام نقش\">{this.props.params().role?.Name}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"عنوان نقش\">{this.props.params().role?.Description}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n\r\n        const header = this.getPageHeader({\r\n            title: \"دسترسی های نقش ها\",\r\n            onBack: () => {\r\n                if (this.props.onClose)\r\n                    this.props.onClose(this);\r\n                else\r\n                    window.history.back();\r\n            },\r\n            extraHeaderButtons: extraButtons,\r\n            extraHeaderNodes: descriptions\r\n        });\r\n\r\n        return (\r\n            <>\r\n                <div style={{ position: \"sticky\", top: 0, zIndex: 1 }}>\r\n                    {header}\r\n                </div>\r\n                <div className=\"box\" style={{ marginTop: 10 }} >\r\n                    {this.state.loading\r\n                        ? <div className=\"center\"><CustomSpinner /></div>\r\n                        :\r\n                        <Tree\r\n                            showLine={true}\r\n                            showIcon={true}\r\n                            checkable\r\n                            expandedKeys={this.state.expandedKeys}\r\n                            checkedKeys={this.state.checkedKeys}\r\n                            onExpand={this.onExpand}\r\n                            onCheck={this.onCheck}\r\n                            treeData={this.state.nodes}\r\n                            checkStrictly={true}\r\n                            style={{ margin: 10 }}\r\n                        />}\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n    resize() {\r\n\r\n    }\r\n}","import { Descriptions } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { AndFilter, ComparisonFilter, enmConditionalOperators, IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { Role } from \"../role\";\r\nimport { User } from \"../user\";\r\nimport { IUserRole, IUserRoleProps, IUserRoleStates } from \"./interfaces\";\r\n\r\nexport class UserRole extends EntityManager<IUserRole, IUserRoleProps, IUserRoleStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        let metadata: IMetadata = {\r\n            name: \"UserRole\",\r\n            title: \"نقش کاربر\",\r\n            Properties: [\r\n                {\r\n                    title: \"کاربر\",\r\n                    dataIndex: \"UserId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 300,\r\n                    rules: [{ required: true, message: 'کاربر اجباری است' }],\r\n                    lookup: {\r\n                        lookupComponent: User,\r\n                        lookupProperty: \"User\",\r\n                        lookupDisplayFields: [\"UserName\", \"FullName\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"نقش\",\r\n                    dataIndex: \"RoleId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: false,\r\n                    width: 300,\r\n                    rules: [{ required: true, message: 'نقش اجباری است' }],\r\n                    lookup: {\r\n                        lookupComponent: Role,\r\n                        lookupProperty: \"Role\",\r\n                        lookupDisplayFields: [\"Description\"]\r\n                    }\r\n                }]\r\n        };\r\n        return metadata;\r\n    }\r\n\r\n    onInitializing() {\r\n        this.insertButtonTitle = () => 'افزودن';\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n        this.onEntityAdded = (entity) => {\r\n            if (this.props.params) {\r\n                let role = this.props.params()?.role;\r\n                if (role) {\r\n                    entity.RoleId = role.Id;\r\n                    entity.Role = role;\r\n                    entity.ModifiedProperties.push(\"RoleId\");\r\n                }\r\n                let user = this.props.params()?.user;\r\n                if (user) {\r\n                    entity.UserId = user.Id;\r\n                    entity.User = user;\r\n                    entity.ModifiedProperties.push(\"UserId\");\r\n                }\r\n            }\r\n            return true;\r\n        };\r\n        this.onDataFetching = (fetchingInfo) => {\r\n            if (this.props.params) {\r\n                let filters: IFilter[] = [];\r\n                if (this.props.params()?.role?.Id)\r\n                    filters.push(new ComparisonFilter(\"RoleId\", enmConditionalOperators.Equal, this.props.params()?.role?.Id));\r\n                if (this.props.params()?.user?.Id)\r\n                    filters.push(new ComparisonFilter(\"UserId\", enmConditionalOperators.Equal, this.props.params()?.user?.Id));\r\n                if (filters.length) {\r\n                    if (fetchingInfo.Filter)\r\n                        fetchingInfo.Filter = fetchingInfo.Filter.And(filters);\r\n                    else\r\n                        fetchingInfo.Filter = new AndFilter(filters);\r\n                }\r\n            }\r\n        };\r\n        //this.renderingToolbar = () => {\r\n        //    return (\r\n        //        <>\r\n        //            {!this.props.isChildComponent ?\r\n        //                <>\r\n        //                    <Col style={{ marginLeft: 10 }}>\r\n        //                        <Button type=\"default\" onClick={() => this.onRolesClick()}>نقش ها</Button>\r\n        //                    </Col>\r\n        //                    <Col style={{ marginLeft: 10 }}>\r\n        //                        <Button type=\"default\" onClick={() => this.onUsersClick()}>کاربر ها</Button>\r\n        //                    </Col>\r\n        //                </>\r\n        //                : <></>}\r\n        //        </>);\r\n        //};\r\n        this.extraHeaderNodes = () => {\r\n            if (this.props.params) {\r\n                const params = this.props.params();\r\n                if (params.role?.Id)\r\n                    return (\r\n                        <Descriptions className=\"header-page\">\r\n                            <Descriptions.Item label=\"نام نقش\">{params.role?.Description}</Descriptions.Item>\r\n                            <Descriptions.Item label=\"عنوان نقش\">{params.role?.Description}</Descriptions.Item>\r\n                        </Descriptions>\r\n                    );\r\n                if (params.user?.Id)\r\n                    return (\r\n                        <Descriptions className=\"header-page\">\r\n                            <Descriptions.Item label=\"نام کاربری\">{params.user?.UserName}</Descriptions.Item>\r\n                            <Descriptions.Item label=\"نام و نام خانوادگی\">{params.user?.FullName}</Descriptions.Item>\r\n                        </Descriptions>\r\n                    );\r\n            }\r\n        };\r\n    }\r\n}","import { Button, Col } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { RoleClaim } from \"../roleClaim\";\r\nimport { UserRole } from \"../userRole\";\r\nimport { IRole, IRoleProps, IRoleStates } from \"./interfaces\";\r\n\r\nexport class Role extends EntityManager<IRole, IRoleProps, IRoleStates> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Role\",\r\n            title: \"نقش\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"شرح\",\r\n                    dataIndex: \"Description\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا شرح را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"فعال؟\",\r\n                    dataIndex: \"IsActive\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n\r\n        this.visibleEditCommand = entity => entity.Id > 1;\r\n        this.enableEditCommand = entity => entity.Id > 1;\r\n\r\n        this.visibleDeleteCommand = entity => entity.Id > 1;\r\n        this.enableDeleteCommand = entity => entity.Id > 1;\r\n\r\n        this.renderingToolbar = () => {\r\n            return (\r\n                <>\r\n                    <Col style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={() => this.onRoleClaimsClick()}>دسترسی ها</Button>\r\n                    </Col>\r\n                    <Col style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={() => this.onUsersClick()}>کاربر ها</Button>\r\n                    </Col>\r\n                </>);\r\n        };\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n        this.defaultSelectedRow = () => this.selectedEntity;\r\n        this.searchable = true;\r\n        this.preLoad = true;\r\n    }\r\n    onUsersClick() {\r\n        this.addLookupForm(\"UserRole\",\r\n            <UserRole\r\n                key=\"UserRole\"\r\n                preLoad={false}\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { role: this.selectedEntity }\r\n                }}\r\n            />);\r\n    }\r\n    onRoleClaimsClick() {\r\n        this.addLookupForm(\"RoleClaim\",\r\n            <RoleClaim\r\n                key=\"RoleClaim\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { role: this.selectedEntity }\r\n                }}\r\n            />);\r\n    }\r\n}","import { Button, Col } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { City } from \"../city\";\r\nimport { IProvince, IProvinceProps, IProvinceStates } from \"./interfaces\";\r\nimport { InFilter } from \"../../components/infrastructure/filtering\";\r\n\r\nexport class Province extends EntityManager<IProvince, IProvinceProps, IProvinceStates> {\r\n    cityFormId: string;\r\n    city?: City | null;\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Province\",\r\n            title: \"استان\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام استان\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام استان را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"نام لاتین\",\r\n                    dataIndex: \"NameEn\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }],\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    constructor(props: IProvinceProps) {\r\n        super(props)\r\n        this.cityFormId = Core.newId();\r\n    }\r\n    onInitializing() {\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n        this.originalFilter = () => {\r\n            const params = this.props.params && this.props.params();\r\n            if (!!params && params.codes?.length) {\r\n                return new InFilter(\"Code\", params.codes);\r\n            }\r\n        };\r\n        this.renderingToolbar = () => {\r\n            let cityAccess = this.initialData?.AccessList[\"City\"];\r\n            if (cityAccess === true) {\r\n                return (\r\n                    <Col style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onCityClick}>شهر ها</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n            return (<></>);\r\n        }\r\n    }\r\n    onCityClick = () => {\r\n        this.addLookupForm(\"City\",\r\n            <City\r\n                key=\"City\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { province: this.selectedEntity }\r\n                }}\r\n                ref={node => this.city = node}\r\n            />);\r\n    }\r\n}","import { Descriptions } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { AndFilter, ComparisonFilter, enmConditionalOperators, IFilter, InFilter } from \"../../components/infrastructure/filtering\";\r\nimport { Province } from \"../province\";\r\nimport { ICity, ICityProps, ICityStates } from \"./interfaces\";\r\n\r\n\r\nexport class City extends EntityManager<ICity, ICityProps, ICityStates> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"City\",\r\n            excludeNavigationFromSearch: true,\r\n            title: \"شهر\",\r\n            Properties: [\r\n                {\r\n                    title: \"استان\",\r\n                    dataIndex: \"ParentId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 300,\r\n                    rules: [{ required: true, message: 'لطفا استان را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Province,\r\n                        lookupProperty: \"Province\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    },\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نام شهر\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام شهر را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"نام لاتین\",\r\n                    dataIndex: \"NameEn\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }],\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n        this.originalFilter = () => {\r\n            const params = this.props.params && this.props.params();\r\n            const filters: IFilter[] = [];\r\n            if (!!params) {\r\n                if (params.province)\r\n                    filters.push(new ComparisonFilter(\"ParentId\", enmConditionalOperators.Equal, params.province.Id));\r\n                if (params.codes?.length)\r\n                    filters.push(new InFilter(\"Code\", params.codes));\r\n                if (filters.length)\r\n                    return new AndFilter(filters);\r\n            }\r\n        };\r\n        this.onEntityAdded = (entity) => {\r\n            let province = this.props.params && this.props.params().province;\r\n            if (province) {\r\n                entity.ParentId = province!.Id;\r\n                entity.Province = province!;\r\n                entity.ModifiedProperties.push(\"ParentId\");\r\n            }\r\n            return true;\r\n        };\r\n        this.extraHeaderNodes = () => {\r\n            return (\r\n                <Descriptions className=\"header-page\">\r\n                    <Descriptions.Item label=\"نام استان\">{this.props.params && this.props.params().province?.Name}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n        };\r\n    }\r\n}","import { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IEntityManagerProps, IEntityManagerStates, IInitialData, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { IEntity, IFetchingInfo } from \"../../components/infrastructure/models\";\r\n\r\nexport enum enmUserTypes {\r\n    Policyholder = 1,\r\n    Spc = 2\r\n}\r\n\r\ninterface IZobdehUser extends IEntity {\r\n\r\n}\r\n\r\nexport interface IZobdehUserProps extends IEntityManagerProps<IZobdehUser> {\r\n    userType?: enmUserTypes;\r\n    relationSourceId?: number;\r\n}\r\n\r\ninterface IZobdehUserStates extends IEntityManagerStates<IZobdehUser> {\r\n\r\n}\r\n\r\ninterface IZobdehUserFetchingInfo extends IFetchingInfo {\r\n    UserType?: enmUserTypes;\r\n    RelationSourceId?: number;\r\n}\r\n\r\nexport class ZobdehUser extends BaseEntityManager<IZobdehUser, IZobdehUserProps, IZobdehUserStates, IZobdehUserFetchingInfo, IInitialData> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"ZobdehUser\",\r\n            title: \"کاربر\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام کاربری\",\r\n                    dataIndex: \"UserName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"FirstName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"نام خانوادگی\",\r\n                    dataIndex: \"LastName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    width: 150\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n\r\n        this.onDataFetching = (fetchingInfo: IZobdehUserFetchingInfo) => {\r\n            fetchingInfo.UserType = this.props.userType;\r\n            fetchingInfo.RelationSourceId = this.props.relationSourceId;\r\n        }\r\n    }\r\n}","import { Descriptions } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { IUserRelation, IUserRelationProps, IUserRelationStates } from \"./interfaces\";\r\nimport { IZobdehUserProps, ZobdehUser } from \"./zobdehUser\";\r\n\r\nexport class UserRelation extends EntityManager<IUserRelation, IUserRelationProps, IUserRelationStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"\",\r\n            title: \"\",\r\n            Properties: [\r\n                {\r\n                    title: \"کاربر\",\r\n                    dataIndex: \"UserId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 300,\r\n                    rules: [{ required: true, message: 'کاربر اجباری است' }],\r\n                    lookup: {\r\n                        lookupComponent: ZobdehUser,\r\n                        lookupProperty: \"User\",\r\n                        lookupDisplayFields: [\"UserName\", \"FullName\"]\r\n                    }\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n        this.metadata.name = this.props.metadataName;\r\n        this.metadata.title = this.props.title;\r\n        this.insertButtonTitle = () => \"افزودن\";\r\n        this.preparelookupProps = (propName, lookupProps) => {\r\n            if (propName === \"UserId\")\r\n                (lookupProps as IZobdehUserProps).userType = this.props.userType;\r\n            return lookupProps;\r\n        }\r\n        this.extraHeaderNodes = () => {\r\n            return (\r\n                <Descriptions className=\"header-page\">\r\n                    <Descriptions.Item label=\"مرجع\">{this.props.params && this.props.params().description}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n        }\r\n        this.onEntityAdded = (entity: IUserRelation) => {\r\n            let sourceId = this.props.params && this.props.params().sourceId;\r\n            if (sourceId) {\r\n                entity.SourceId = sourceId;\r\n                entity.ModifiedProperties.push(\"SourceId\");\r\n            }\r\n            return true;\r\n        };\r\n        this.originalFilter = () => {\r\n            let sourceId = this.props.params && this.props.params()?.sourceId;\r\n            if (sourceId) {\r\n                return ComparisonFilter.Equal<IUserRelation>(m => m.SourceId, sourceId);\r\n            }\r\n        };\r\n    }\r\n}","import { IEntityManagerProps, IEntityManagerStates } from \"../../components/entityManager/interfaces\";\r\nimport { IEntity } from \"../../components/infrastructure/models\";\r\nimport { ICity } from \"../city/interfaces\";\r\nimport { IInsurer } from \"../insurer/interfaces\";\r\nimport { IProvince } from \"../province/interfaces\";\r\n\r\nexport enum enmInsurerCenterTypes {\r\n    Zone = 0,\r\n    Branch = 1,\r\n    Agency = 2\r\n}\r\n\r\nexport interface IInsurerCenter extends IEntity {\r\n    InsurerId: number;\r\n    Insurer: IInsurer;\r\n    ParentId?: number;\r\n    Parent?: IInsurerCenter;\r\n    Type: enmInsurerCenterTypes;\r\n    Name: string;\r\n    NameEn?: string;\r\n    ManagerName?: string;\r\n    ProvinceId: number;\r\n    Province?: IProvince;\r\n    CityId: number;\r\n    City?: ICity;\r\n    Address?: string;\r\n    Phone?: string;\r\n    Fax?: string;\r\n}\r\n\r\nexport interface IInsurerCenterProps extends IEntityManagerProps<IInsurerCenter> {\r\n    params?: () => { insurer?: IInsurer; type?: enmInsurerCenterTypes; parent?: IInsurerCenter; };\r\n}\r\n\r\nexport interface IInsurerCenterStates extends IEntityManagerStates<IInsurerCenter> {\r\n\r\n}\r\n","import { IEntityManagerProps, IEntityManagerStates } from \"../../components/entityManager/interfaces\";\r\nimport { IEntity } from \"../../components/infrastructure/models\";\r\nimport { IInsurer } from \"../insurer/interfaces\";\r\nimport { IInsurerCenter } from \"../insurerCenter/interfaces\";\r\n\r\nexport enum enmInsurerCenterPersonnelTypes {\r\n    Admin = 0,\r\n    DamageExpert1 = 1,\r\n    DamageExpert2 = 2,\r\n    DamageExpert3 = 3,\r\n    DamageExpert4 = 4\r\n}\r\n\r\nexport interface IInsurerCenterPersonnel extends IEntity {\r\n    InsurerId: number;\r\n    Insurer: IInsurer;\r\n    InsurerCenterId?: number;\r\n    InsurerCenter?: IInsurerCenter;\r\n    Type: enmInsurerCenterPersonnelTypes;\r\n    FullName: string;\r\n}\r\n\r\nexport interface IInsurerCenterPersonnelProps extends IEntityManagerProps<IInsurerCenterPersonnel> {\r\n    params?: () => { insurerCenter?: IInsurerCenter; };\r\n}\r\n\r\nexport interface IInsurerCenterPersonnelStates extends IEntityManagerStates<IInsurerCenterPersonnel> {\r\n\r\n}\r\n","import { Checkbox, Descriptions } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { IMetadata, enmControlType, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { InsurerCenter } from \"../insurerCenter\";\r\nimport { IInsurerCenterPersonnel, IInsurerCenterPersonnelProps, IInsurerCenterPersonnelStates, enmInsurerCenterPersonnelTypes } from \"./interfaces\";\r\nimport { IInsurerCenterProps, enmInsurerCenterTypes } from \"../insurerCenter/interfaces\";\r\nimport { IZobdehUserProps, ZobdehUser, enmUserTypes } from \"../userRelation/zobdehUser\";\r\n\r\nexport class InsurerCenterPersonnel extends EntityManager<IInsurerCenterPersonnel, IInsurerCenterPersonnelProps, IInsurerCenterPersonnelStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"InsurerCenterPersonnel\",\r\n            title: \"پرسنل اتوماسیون شعبه\",\r\n            Properties: [\r\n                {\r\n                    title: \"شعبه\",\r\n                    dataIndex: \"InsurerCenterId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا نام شعبه را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: InsurerCenter,\r\n                        lookupProperty: \"InsurerCenter\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                }, {\r\n                    title: \"نوع\",\r\n                    dataIndex: \"Type\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        options: [\r\n                            { title: 'ریاست شعبه', value: enmInsurerCenterPersonnelTypes.Admin },\r\n                            { title: 'کارشناس خسارت 1', value: enmInsurerCenterPersonnelTypes.DamageExpert1 },\r\n                            { title: 'کارشناس خسارت 2', value: enmInsurerCenterPersonnelTypes.DamageExpert2 },\r\n                            { title: 'کارشناس خسارت 3', value: enmInsurerCenterPersonnelTypes.DamageExpert3 },\r\n                            { title: 'کارشناس خسارت 4', value: enmInsurerCenterPersonnelTypes.DamageExpert4 },\r\n                        ]\r\n                    },\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نوع پرسنلی را را تعیین نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کاربر\",\r\n                    dataIndex: \"UserId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 300,\r\n                    rules: [{ required: true, message: 'کاربر اجباری است' }],\r\n                    lookup: {\r\n                        lookupComponent: ZobdehUser,\r\n                        lookupProperty: \"User\",\r\n                        lookupDisplayFields: [\"UserName\", \"FullName\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"نام کاربری اتوماسیون\",\r\n                    dataIndex: \"OAUserName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"تایید اتوماسیون؟\",\r\n                    dataIndex: \"OAUserId\",\r\n                    controlType: enmControlType.template,\r\n                    filterable: false,\r\n                    showControl: false,\r\n                    renderColumn: (_, record) => {\r\n                        return <Checkbox checked={record && !!record['OAUserId']} />\r\n                    },\r\n                    width: 100\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n\r\n        this.onEntityAdded = (entity) => {\r\n            let params = this.props.params && this.props.params();\r\n            if (params) {\r\n                if (params.insurerCenter?.Id) {\r\n                    entity.InsurerCenterId = params.insurerCenter.Id;\r\n                    entity.InsurerCenter = params.insurerCenter;\r\n                    entity.ModifiedProperties.push(\"InsurerCenterId\");\r\n                }\r\n            }\r\n            return true;\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            let params = this.props.params && this.props.params();\r\n            if (params?.insurerCenter !== undefined)\r\n                return ComparisonFilter.Equal<IInsurerCenterPersonnel>(r => r.InsurerCenterId, params.insurerCenter.Id);\r\n        };\r\n\r\n        this.extraHeaderNodes = () => {\r\n            let params = this.props.params && this.props.params();\r\n            let insurerCenter = params && params.insurerCenter;\r\n            return (\r\n                <Descriptions className=\"header-page\" key=\"\">\r\n                    <Descriptions.Item label=\"نام شعبه\">{insurerCenter?.Name}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n        };\r\n\r\n        this.preparelookupProps = (propName, lookupProps) => {\r\n          \r\n            if (propName === \"InsurerCenterId\")\r\n                (lookupProps as IInsurerCenterProps).params = () => {\r\n                    let currentParams = this.props.params && this.props.params();\r\n                    let insurer = currentParams?.insurerCenter?.Insurer;\r\n                    return { insurer, type: enmInsurerCenterTypes.Branch };\r\n                };\r\n\r\n            if (propName === \"UserId\") {\r\n                const zobdehUserProps = lookupProps as IZobdehUserProps;\r\n                zobdehUserProps.userType = enmUserTypes.Spc;\r\n                let currentParams = this.props.params && this.props.params();\r\n                zobdehUserProps.relationSourceId = currentParams?.insurerCenter?.Id;\r\n            }\r\n\r\n            return lookupProps;\r\n        }\r\n    }\r\n}","import { Button, Col, Descriptions } from 'antd';\r\nimport { ReactNode } from 'react';\r\nimport { EntityManager } from '../../components/entityManager';\r\nimport { enmControlType, enmPropertyType, IMetadata } from '../../components/entityManager/interfaces';\r\nimport { AndFilter, ComparisonFilter, IFilter } from '../../components/infrastructure/filtering';\r\nimport { City } from '../city';\r\nimport { ICityProps } from '../city/interfaces';\r\nimport { Province } from '../province';\r\nimport { UserRelation } from '../userRelation';\r\nimport { enmInsurerCenterTypes, IInsurerCenter, IInsurerCenterProps, IInsurerCenterStates } from './interfaces';\r\nimport { InsurerCenterPersonnel } from '../insurerCenterPersonnel';\r\n\r\n\r\nexport class InsurerCenter extends EntityManager<IInsurerCenter, IInsurerCenterProps, IInsurerCenterStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"InsurerCenter\",\r\n            title: \"مراکز بیمه\",\r\n            Properties: [\r\n                {\r\n                    title: \"نوع مرکز بیمه\",\r\n                    dataIndex: \"Type\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        options: [\r\n                            { title: 'منطقه', value: enmInsurerCenterTypes.Zone },\r\n                            { title: 'شعبه', value: enmInsurerCenterTypes.Branch },\r\n                            { title: 'نمایندگی', value: enmInsurerCenterTypes.Agency }\r\n                        ]\r\n                    },\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نوع مرکز را تعیین نمایید' }]\r\n                },\r\n                {\r\n                    title: \"مرکز اصلی\",\r\n                    dataIndex: \"ParentId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rulesFunc: (entity: IInsurerCenter) => {\r\n                        if (entity.Type === enmInsurerCenterTypes.Branch) {\r\n                            return [{ required: true, message: 'لطفا منطقه بیمه گر را وارد نمایید' }];\r\n                        }\r\n                        if (entity.Type === enmInsurerCenterTypes.Agency) {\r\n                            return [{ required: true, message: 'لطفا شعبه بیمه گر را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: IInsurerCenter) => {\r\n                        return entity.Type !== enmInsurerCenterTypes.Zone;\r\n                    },\r\n                    lookup: {\r\n                        lookupComponent: InsurerCenter,\r\n                        lookupProperty: \"Parent\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام مرکز بیمه را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"نام لاتین\",\r\n                    dataIndex: \"NameEn\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد مرکز\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"مدیر مرکز\",\r\n                    dataIndex: \"ManagerName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    visibility: (entity: IInsurerCenter) => {\r\n                        return entity.Type !== enmInsurerCenterTypes.Zone;\r\n                    }\r\n                },\r\n                {\r\n                    title: \"استان\",\r\n                    dataIndex: \"ProvinceId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rulesFunc: (entity: IInsurerCenter) => {\r\n                        if (entity.Type !== enmInsurerCenterTypes.Zone) {\r\n                            return [{ required: true, message: 'لطفا استان را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: IInsurerCenter) => {\r\n                        return entity.Type !== enmInsurerCenterTypes.Zone;\r\n                    },\r\n                    \r\n                    lookup: {\r\n                        lookupComponent: Province,\r\n                        lookupProperty: \"Province\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"شهر\",\r\n                    dataIndex: \"CityId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rulesFunc: (entity: IInsurerCenter) => {\r\n                        if (entity.Type !== enmInsurerCenterTypes.Zone) {\r\n                            return [{ required: true, message: 'لطفا شهر را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: IInsurerCenter) => {\r\n                        return entity.Type !== enmInsurerCenterTypes.Zone;\r\n                    },\r\n                    lookup: {\r\n                        lookupComponent: City,\r\n                        lookupProperty: \"City\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"آدرس\",\r\n                    dataIndex: \"Address\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    visibility: (entity: IInsurerCenter) => {\r\n                        return entity.Type !== enmInsurerCenterTypes.Zone;\r\n                    }\r\n                },\r\n                {\r\n                    title: \"تلفن\",\r\n                    dataIndex: \"Phone\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: true,\r\n                    formatter: value => {\r\n                        const formated = `${value}`.length ? `0${value}`.replace(/\\D+/g, '') : \"\";\r\n                        return formated.startsWith('09') ? formated : formated.replace(/(\\d{3})(\\d+)/, '$1-$2');\r\n                    },\r\n                    parser: value => {\r\n                        const parsed = (value && value.length && value.startsWith('0') ? value.substring(1) : value)?.replace(/\\\\s?|(-*)/g, '') ?? \"\";\r\n                        return parsed;\r\n                    },\r\n                    onKeyPress: (event, value) => {\r\n                        if (!event.key.match(/\\d/g) || `${value}`.length >= 10) {\r\n                            event.preventDefault();\r\n                        }\r\n                    },\r\n                    maxLength: 12,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    visibility: (entity: IInsurerCenter) => {\r\n                        return entity.Type !== enmInsurerCenterTypes.Zone;\r\n                    }\r\n                },\r\n                {\r\n                    title: \"نمابر\",\r\n                    dataIndex: \"Fax\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    visibility: (entity: IInsurerCenter) => {\r\n                        return entity.Type !== enmInsurerCenterTypes.Zone;\r\n                    }\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    constructor(props: IInsurerCenterProps) {\r\n        super(props)\r\n        let title: string | null = null;\r\n        let currentType = this.props.params && this.props.params()?.type;\r\n        if (currentType === enmInsurerCenterTypes.Agency) {\r\n            title = \"نمایندگان\";\r\n        }\r\n        if (currentType === enmInsurerCenterTypes.Branch) {\r\n            title = \"شعب\";\r\n        }\r\n        if (currentType === enmInsurerCenterTypes.Zone) {\r\n            title = \"مناطق\";\r\n        }\r\n\r\n        this.metadata.title = title ?? \"مراکز بیمه\";\r\n    }\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2,\r\n            defaultValues: () => {\r\n                let params = this.props.params && this.props.params();\r\n                if (params) {\r\n                    let defaultValues: any = {};\r\n                    let insurerId = params.insurer?.Id;\r\n                    if (insurerId) {\r\n                        defaultValues.InsurerId = insurerId!;\r\n                    }\r\n                    let parent = params.parent;\r\n                    if (parent) {\r\n                        defaultValues.ParentId = parent.Id;\r\n                    }\r\n                    let type = params.type;\r\n                    if (type !== undefined) {\r\n                        defaultValues.Type = type;\r\n                    }\r\n                    return defaultValues;\r\n                }\r\n            },\r\n            onFilterChanged: (property, _, form) => {\r\n                if (property.dataIndex === \"ProvinceId\") {\r\n                    form?.resetFields([\"CityId\"]);\r\n                    form?.setFields([{ name: \"CityId\", value: null }]);\r\n                }\r\n            }\r\n        };\r\n\r\n        let currentType = this.props.params && this.props.params()?.type;\r\n\r\n        let managerNameProp = this.metadata.Properties.find(p => p.dataIndex === \"ManagerName\")\r\n        if (managerNameProp && currentType === enmInsurerCenterTypes.Zone)\r\n            managerNameProp.showColumn = false;\r\n\r\n        let parentProp = this.metadata.Properties.find(p => p.dataIndex === \"ParentId\")\r\n        if (parentProp && currentType === enmInsurerCenterTypes.Zone)\r\n            parentProp.showColumn = false;\r\n\r\n        let provinceProp = this.metadata.Properties.find(p => p.dataIndex === \"ProvinceId\")\r\n        if (provinceProp && currentType === enmInsurerCenterTypes.Zone)\r\n            provinceProp.showColumn = false;\r\n\r\n        let cityProp = this.metadata.Properties.find(p => p.dataIndex === \"CityId\")\r\n        if (cityProp && currentType === enmInsurerCenterTypes.Zone)\r\n            cityProp.showColumn = false;\r\n\r\n        this.preparelookupProps = (propName, lookupProps, form, isSearchForm) => {\r\n            if (propName === \"CityId\")\r\n                (lookupProps as ICityProps).params = () => {\r\n                    let province = isSearchForm && form ? form.getFieldValue(\"ProvinceId\") : this.state.currentEntity?.Province;\r\n                    if (isSearchForm && form)\r\n                        return { province: province?.value };\r\n                    else\r\n                        return { province };\r\n                };\r\n\r\n            if (propName === \"ParentId\")\r\n                (lookupProps as IInsurerCenterProps).params = () => {\r\n                    let currentParams = this.props.params && this.props.params();\r\n                    let insurer = currentParams?.insurer ?? this.state.currentEntity?.Insurer;\r\n                    let type = currentParams?.type;\r\n                    if (type !== undefined) {\r\n                        if (type === enmInsurerCenterTypes.Branch)\r\n                            type = enmInsurerCenterTypes.Zone;\r\n                        if (type === enmInsurerCenterTypes.Agency)\r\n                            type = enmInsurerCenterTypes.Branch;\r\n                    }\r\n                    return { insurer, type };\r\n                };\r\n\r\n            return lookupProps;\r\n        }\r\n\r\n        this.onEntityAdded = (entity) => {\r\n            let params = this.props.params && this.props.params();\r\n            if (params) {\r\n                let insurer = params.insurer;\r\n                if (insurer) {\r\n                    entity.InsurerId = insurer.Id;\r\n                    entity.Insurer = insurer;\r\n                    entity.ModifiedProperties.push(\"InsurerId\");\r\n                }\r\n                let parent = params.parent;\r\n                if (parent) {\r\n                    entity.ParentId = parent.Id;\r\n                    entity.Parent = parent;\r\n                    entity.ModifiedProperties.push(\"ParentId\");\r\n                }\r\n                let type = params.type;\r\n                if (type !== undefined) {\r\n                    entity.Type = type;\r\n                    entity.ModifiedProperties.push(\"Type\");\r\n                }\r\n            }\r\n            return true;\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            let params = this.props.params && this.props.params();\r\n            let filter: IFilter[] = [];\r\n            if (params?.type !== undefined)\r\n                filter.push(ComparisonFilter.Equal<IInsurerCenter>(r => r.Type, params.type))\r\n            if (params?.insurer)\r\n                filter.push(ComparisonFilter.Equal<IInsurerCenter>(r => r.InsurerId, params.insurer.Id));\r\n            if (params?.parent)\r\n                filter.push(ComparisonFilter.Equal<IInsurerCenter>(r => r.ParentId, params.parent.Id))\r\n\r\n            if (filter.length)\r\n                return new AndFilter(filter);\r\n        };\r\n\r\n        this.onEntityChanged = (entity, propertyName, form) => {\r\n            if (propertyName === \"ProvinceId\") {\r\n                form.resetFields([\"CityId\"]);\r\n                form.setFields([{ name: \"CityId\", value: null }]);\r\n                entity.City = undefined;\r\n                entity.CityId = 0;\r\n            }\r\n        };\r\n\r\n        this.extraHeaderNodes = () => {\r\n            let params = this.props.params && this.props.params();\r\n            let parentTitle: string | null = null;\r\n            let type = params && params.type;\r\n            if (type === enmInsurerCenterTypes.Agency) {\r\n                parentTitle = \"شعبه اصلی\";\r\n            }\r\n            if (type === enmInsurerCenterTypes.Branch) {\r\n                parentTitle = \"منطقه اصلی\";\r\n            }\r\n            return (\r\n                <Descriptions className=\"header-page\" key=\"\">\r\n                    {parentTitle ? <Descriptions.Item label={parentTitle}>{params?.parent?.Name}</Descriptions.Item> : <></>}\r\n                    <Descriptions.Item label=\"نام بیمه گر\">{params?.insurer?.Name}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n        };\r\n\r\n        this.renderingToolbar = () => {\r\n            let result: ReactNode[] = [];\r\n\r\n            let userInsurerCenterAccess = this.initialData?.AccessList[\"UserInsurerCenter\"];\r\n            if (userInsurerCenterAccess === true) {\r\n                result.push(\r\n                    <Col key=\"UserInsurerCenter\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onUsersClick}>کاربران </Button>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            let currentInsurerCenter = this.selectedEntity;\r\n            if (currentInsurerCenter) {\r\n                if (currentInsurerCenter.Type === enmInsurerCenterTypes.Zone) {\r\n                    result.push(\r\n                        <Col key=\"InsurerCenter\" style={{ marginLeft: 10 }}>\r\n                            <Button type=\"default\" onClick={this.onInsurerCenterClick}>شعب</Button>\r\n                        </Col>\r\n                    );\r\n                }\r\n                if (currentInsurerCenter.Type === enmInsurerCenterTypes.Branch) {\r\n                    result.push(\r\n                        <Col key=\"InsurerCenter\" style={{ marginLeft: 10 }}>\r\n                            <Button type=\"default\" onClick={this.onInsurerCenterClick}>نمایندگان</Button>\r\n                        </Col>\r\n                    );\r\n                    result.push(\r\n                        <Col key=\"InsurerCenterPersonnel\" style={{ marginLeft: 10 }}>\r\n                            <Button type=\"default\" onClick={this.onInsurerCenterPersonnelClick}>پرسنل اتوماسیون شعبه</Button>\r\n                        </Col>\r\n                    );\r\n                }\r\n            }\r\n\r\n            return result.length ? (<> {result} </>) : (<></>);\r\n        };\r\n    }\r\n    onInsurerCenterClick = () => {\r\n        this.addLookupForm(\"InsurerCenter\",\r\n            <InsurerCenter\r\n                key=\"InsurerCenter\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    let type = this.selectedEntity?.Type;\r\n                    if (type !== undefined) {\r\n                        if (type === enmInsurerCenterTypes.Branch)\r\n                            type = enmInsurerCenterTypes.Agency;\r\n                        if (type === enmInsurerCenterTypes.Zone)\r\n                            type = enmInsurerCenterTypes.Branch;\r\n                    }\r\n                    return {\r\n                        insurer: (this.props.params && this.props.params().insurer) ?? this.selectedEntity?.Insurer,\r\n                        parent: this.selectedEntity,\r\n                        type: type\r\n                    };\r\n                }}\r\n            />);\r\n    }\r\n    onInsurerCenterPersonnelClick = () => {\r\n        this.addLookupForm(\"InsurerCenterPersonnel\",\r\n            <InsurerCenterPersonnel\r\n                key=\"InsurerCenterPersonnel\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return {\r\n                        insurerCenter: this.selectedEntity\r\n                    };\r\n                }}\r\n            />);\r\n    }\r\n    onUsersClick = () => {\r\n        this.addLookupForm(\"UserInsurerCenter\",\r\n            <UserRelation\r\n                key=\"UserInsurerCenter\"\r\n                title=\"کاربران مرکز بیمه\"\r\n                metadataName=\"UserInsurerCenter\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { sourceId: this.selectedEntity?.Id, description: this.selectedEntity?.Name ?? \"\" }\r\n                }}\r\n            />);\r\n    }\r\n}\r\n","import { Button, Col } from \"antd\";\r\nimport { ReactNode } from \"react\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { InsurerCenter } from \"../insurerCenter\";\r\nimport { enmInsurerCenterTypes } from \"../insurerCenter/interfaces\";\r\nimport { UserRelation } from \"../userRelation\";\r\nimport { IInsurer, IInsurerProps, IInsurerStates } from \"./interfaces\";\r\n\r\nexport class Insurer extends EntityManager<IInsurer, IInsurerProps, IInsurerStates> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Insurer\",\r\n            title: \"بیمه گر\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام شرکت بیمه گر را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"نام لاتین\",\r\n                    dataIndex: \"NameEn\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام لاتین را وارد نمایید' }],\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نام مدیرعامل\",\r\n                    dataIndex: \"CeoName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"آدرس\",\r\n                    dataIndex: \"Address\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"تلفن\",\r\n                    dataIndex: \"Phone\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نمابر\",\r\n                    dataIndex: \"Fax\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نام رابط\",\r\n                    dataIndex: \"ContactName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"همراه رابط\",\r\n                    dataIndex: \"ContactMobile\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"سمت رابط\",\r\n                    dataIndex: \"ContactPosition\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n\r\n        this.renderingToolbar = () => {\r\n            let insurerCenterAccess = this.initialData?.AccessList[\"InsurerCenter\"];\r\n            let userInsurerAccess = this.initialData?.AccessList[\"UserInsurer\"];\r\n\r\n            let result: ReactNode[] = [];\r\n            if (userInsurerAccess === true) {\r\n                result.push(\r\n                    <Col key=\"Users\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onUsersClick}>کاربران</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n            if (insurerCenterAccess === true) {\r\n                result.push(\r\n                    <Col key=\"Branches\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onBranchesClick}>مناطق</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            return result.length ? (<> {result} </>) : (<></>);\r\n        };\r\n    }\r\n    onBranchesClick = () => {\r\n        this.addLookupForm(\"InsurerCenter\",\r\n            <InsurerCenter\r\n                key=\"InsurerCenter\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { insurer: this.selectedEntity, type: enmInsurerCenterTypes.Zone }\r\n                }}\r\n            />);\r\n    }\r\n    onUsersClick = () => {\r\n        this.addLookupForm(\"UserInsurer\",\r\n            <UserRelation\r\n                key=\"UserInsurer\"\r\n                title=\"کاربران بیمه گر\"\r\n                metadataName=\"UserInsurer\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { sourceId: this.selectedEntity?.Id, description: this.selectedEntity?.Name ?? \"\" }\r\n                }}\r\n            />);\r\n    }\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { IDamageType, IDamageTypeProps, IDamageTypeStates } from \"./interfaces\";\r\n\r\nexport class DamageType extends EntityManager<IDamageType, IDamageTypeProps, IDamageTypeStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"DamageType\",\r\n            title: \"نوع خسارت\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام نوع خسارت را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }],\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نیاز به انتقال مالکیت\",\r\n                    dataIndex: \"PossessionTransition\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    }\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { IProblem, IProblemProps, IProblemStates } from \"./interfaces\";\r\n\r\nexport class Problem extends EntityManager<IProblem, IProblemProps, IProblemStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Problem\",\r\n            title: \"مشکلات\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 250,\r\n                    rules: [{ required: true, message: 'لطفا نام را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }]\r\n                }\r\n            ]\r\n        };\r\n    }\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { IBrand, IBrandProps, IBrandStates } from \"./interfaces\";\r\n\r\nexport class Brand extends EntityManager<IBrand, IBrandProps, IBrandStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Brand\",\r\n            title: \"برند\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام برند را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 100,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }],\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"توضیحات\",\r\n                    dataIndex: \"Description\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 100,\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    };\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { IDocumentType, IDocumentTypeProps, IDocumentTypeStates } from \"./interfaces\";\r\n\r\nexport class DocumentType extends EntityManager<IDocumentType, IDocumentTypeProps, IDocumentTypeStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"DocumentType\",\r\n            title: \"نوع مستند\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 250,\r\n                    rules: [{ required: true, message: 'لطفا نام را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }],\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    };\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { IDamageReason, IDamageReasonProps, IDamageReasonStates } from \"./interfaces\";\r\n\r\nexport class DamageReason extends EntityManager<IDamageReason, IDamageReasonProps, IDamageReasonStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"DamageReason\",\r\n            title: \"دلایل خسارت\",\r\n            Properties: [\r\n                {\r\n                    title: \"دلیل\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا دلیل را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }]\r\n                }\r\n            ]\r\n        };\r\n    }\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { enmOrderingType } from \"../../components/infrastructure/models\";\r\nimport { IBank, IBankProps, IBankStates } from \"./interfaces\";\r\n\r\nexport class Bank extends EntityManager<IBank, IBankProps, IBankStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Bank\",\r\n            title: \"بانک\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام بانک را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 100,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }],\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    };\r\n\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.originalOrderings = () =>  [{ Property: \"Code\", OrderBy: enmOrderingType.Ascending }];\r\n    }\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ISendingItem, ISendingItemProps, ISendingItemStates } from \"./interfaces\";\r\n\r\nexport class SendingItem extends EntityManager<ISendingItem, ISendingItemProps, ISendingItemStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"SendingItem\",\r\n            title: \"موارد ارسالی\",\r\n            Properties: [\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 250,\r\n                    rules: [{ required: true, message: 'لطفا نام را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }]\r\n                }\r\n            ]\r\n        };\r\n    }\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { AndFilter, ComparisonFilter, IFilter, InFilter } from \"../../components/infrastructure/filtering\";\r\nimport { IEquipment, IEquipmentItemProps, IEquipmentItemStates } from \"./interfaces\";\r\n\r\nexport class EquipmentItem extends EntityManager<IEquipment, IEquipmentItemProps, IEquipmentItemStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Equipment\",\r\n            title: \"تجهیزات\",\r\n            Properties: [\r\n                {\r\n                    title: \"گروه اصلی\",\r\n                    dataIndex: \"ParentId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    lookup: {\r\n                        lookupComponent: EquipmentItem,\r\n                        lookupProperty: \"Parent\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"نام لاتین\",\r\n                    dataIndex: \"NameEn\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"گروه؟\",\r\n                    dataIndex: \"IsGroup\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    width: 150\r\n                }\r\n            ]\r\n        }\r\n    }\r\n\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n    }\r\n    componentWillUnmount() {\r\n        super.componentWillUnmount();\r\n    }\r\n    onInitializing() {\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n        this.preparelookupProps = (propName, lookupProps: any) => {\r\n            if (propName === \"ParentId\")\r\n                (lookupProps as IEquipmentItemProps).params = () => {\r\n                    return { parent: this.props.params && this.props.params()?.parent?.Parent, onlyGroups: true };\r\n                };\r\n            return lookupProps;\r\n        }\r\n        this.originalFilter = () => {\r\n            const filters: IFilter[] = [];\r\n\r\n            const params = this.props.params && this.props.params();\r\n\r\n            let parentId = params && (params.parent?.IsGroup ? params.parent?.Id : params.parent?.ParentId);\r\n            if (parentId)\r\n                filters.push(ComparisonFilter.Equal<IEquipment>(e => e.ParentId, parentId));\r\n            if (params?.onlySubItems)\r\n                filters.push(ComparisonFilter.Equal<IEquipment>(e => e.IsGroup, false));\r\n            if (params?.onlyGroups)\r\n                filters.push(ComparisonFilter.Equal<IEquipment>(e => e.IsGroup, true));\r\n            if (params?.codes?.length)\r\n                filters.push(new InFilter(\"Code\", params.codes));\r\n            if (filters.length)\r\n                return new AndFilter(filters);\r\n        };\r\n        this.onEntityAdded = (entity) => {\r\n            let equipment = this.props.params && this.props.params().parent;\r\n            if (equipment) {\r\n                entity.ParentId = equipment.Id;\r\n                entity.Parent = equipment;\r\n                entity.ModifiedProperties.push(\"ParentId\");\r\n            }\r\n            return true;\r\n        };\r\n    }\r\n}","import { Button, Checkbox, Form, Table } from \"antd\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { SaveOutlined } from '@ant-design/icons';\r\nimport { IEquipmentDocumentType, IEquipmentDocumentTypeProps, IEquipmentDocumentTypeResult, IEquipmentDocumentTypeStates } from \"./interfaces\";\r\nimport { Lookup } from \"../../components/lookup\";\r\nimport { enmControlType, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { useContext } from \"react\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport { enmEntityState, enmValidationLevel, ICallOptions, IResult, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { IDamageReason } from \"../damageReason/interfaces\";\r\nimport { IDocumentType } from \"../documentType/interfaces\";\r\nimport { DamageReason } from \"../damageReason\";\r\nimport './index.css';\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nconst EquipmentDocumentType = (props: IEquipmentDocumentTypeProps) => {\r\n    const context = useContext(AppContext);\r\n    const [loading, setLoading] = useState(true);\r\n    const [state, setState] = useState<IEquipmentDocumentTypeStates>({\r\n        loadData: true,\r\n        isAuthorized: true,\r\n        selectedItems: [],\r\n        documentTypes: [],\r\n        equipmentDocumentTypes: [],\r\n        saveAccess: false,\r\n        currentEquipmentId: props.params().equipment?.Id\r\n    });\r\n    const { loadData } = state;\r\n    const [form] = Form.useForm();\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n    const formItemLayout = {\r\n        labelCol: { span: 4 },\r\n        wrapperCol: { span: 18 },\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (props.params().equipment.Id !== state.currentEquipmentId) {\r\n            setState({\r\n                loadData: true,\r\n                isAuthorized: true,\r\n                selectedItems: [],\r\n                documentTypes: [],\r\n                equipmentDocumentTypes: [],\r\n                saveAccess: false,\r\n                currentDamageReasonId: state.currentDamageReasonId,\r\n                currentEquipmentId: props.params().equipment.Id\r\n            });\r\n            setLoading(true);\r\n        }\r\n    }, [props]);\r\n\r\n    if (!state.isAuthorized) {\r\n        let loginUrl = '/login';\r\n        if (context?.path)\r\n            loginUrl += '?' + encodeURIComponent(context.path);\r\n        return (<Redirect to={loginUrl} />);\r\n    }\r\n\r\n    if (loadData) {\r\n        let res: IResultSet<IEquipmentDocumentTypeResult> | null = null;\r\n\r\n        let opt: ICallOptions = {\r\n            url: \"equipmentdocumenttype/getequipments\",\r\n            data: { equipmentId: props.params().equipment.Id, damageReasonId: state.currentDamageReasonId },\r\n            onSuccess: (result) => {\r\n                res = result as any;\r\n            },\r\n            onComplete: () => {\r\n                if (res && res.Data) {\r\n                    if (!res.ValidationState.Successful) {\r\n                        let isAuthorized = true;\r\n                        if (res.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.AccessDenied || v.Level === enmValidationLevel.Unauthorized)) {\r\n                            Core.errorNotification(res.ValidationState.ValidationResults[0].Message!);\r\n                            isAuthorized = false;\r\n                        }\r\n                        setState({\r\n                            loadData: false,\r\n                            isAuthorized: isAuthorized,\r\n                            selectedItems: [],\r\n                            documentTypes: [],\r\n                            equipmentDocumentTypes: [],\r\n                            saveAccess: false\r\n                        });\r\n                        setLoading(false);\r\n                        return;\r\n                    }\r\n\r\n                    let selectedItems = res.Data.EquipmentDocumentTypes.map(e => {\r\n                        return res!.Data!.DocumentTypes.find(d => d.Id === e.DocumentTypeId)?.RowGuid!;\r\n                    });\r\n\r\n                    const equipmentDocumentTypes = res.Data.EquipmentDocumentTypes;\r\n\r\n                    setState({\r\n                        loadData: false,\r\n                        isAuthorized: true,\r\n                        documentTypes: res.Data.DocumentTypes.map(d => { return { ...d, Required: equipmentDocumentTypes.find(e => e.DocumentTypeId === d.Id)?.Required }; }),\r\n                        selectedItems: selectedItems,\r\n                        equipmentDocumentTypes: equipmentDocumentTypes,\r\n                        saveAccess: res.Data.SaveAccess,\r\n                        currentDamageReasonId: (form.getFieldValue(\"DamageReason\") as IDamageReason)?.Id,\r\n                        currentEquipmentId: props.params().equipment?.Id\r\n                    });\r\n                    setLoading(false);\r\n                    return;\r\n                }\r\n                setState({\r\n                    loadData: false,\r\n                    isAuthorized: true,\r\n                    documentTypes: [],\r\n                    selectedItems: [],\r\n                    equipmentDocumentTypes: [],\r\n                    saveAccess: false,\r\n                    currentEquipmentId: props.params().equipment?.Id\r\n                });\r\n                setLoading(false);\r\n            }\r\n        };\r\n        Core.callApi(opt);\r\n    }\r\n\r\n    const save = (changes: IEquipmentDocumentType[]) => {\r\n        if (!changes.length) {\r\n            Core.warningNotification(\"لطفا ابتدا اطلاعات را تغییر دهید\");\r\n            return;\r\n        }\r\n        setLoading(true);\r\n        let res: IResult | null = null;\r\n\r\n        let opt: ICallOptions = {\r\n            url: \"equipmentdocumenttype/save\",\r\n            data: { entities: changes },\r\n            onSuccess: (result) => {\r\n                res = result;\r\n            },\r\n            onComplete: () => {\r\n                if (res && res) {\r\n                    if (!res.ValidationState.Successful) {\r\n                        let isAuthorized = true;\r\n                        if (res.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.AccessDenied || v.Level === enmValidationLevel.Unauthorized)) {\r\n                            Core.errorNotification(res.ValidationState.ValidationResults[0].Message!);\r\n                            isAuthorized = false;\r\n                        }\r\n                        setState({\r\n                            loadData: false,\r\n                            isAuthorized: isAuthorized,\r\n                            selectedItems: [],\r\n                            documentTypes: [],\r\n                            equipmentDocumentTypes: [],\r\n                            saveAccess: false\r\n                        });\r\n                        setLoading(false);\r\n                        return;\r\n                    }\r\n                    Core.successNotification(\"اطلاعات با موفقیت ذخیره شد\");\r\n\r\n                    setState({\r\n                        loadData: true,\r\n                        isAuthorized: true,\r\n                        selectedItems: [],\r\n                        documentTypes: [],\r\n                        equipmentDocumentTypes: [],\r\n                        saveAccess: false,\r\n                        currentDamageReasonId: state.currentDamageReasonId,\r\n                        currentEquipmentId: state.currentEquipmentId\r\n                    });\r\n                    setLoading(true);\r\n                    return;\r\n                }\r\n                setState({\r\n                    loadData: false,\r\n                    isAuthorized: true,\r\n                    documentTypes: [],\r\n                    selectedItems: [],\r\n                    equipmentDocumentTypes: [],\r\n                    saveAccess: false,\r\n                    currentEquipmentId: state.currentEquipmentId\r\n                });\r\n                setLoading(false);\r\n            }\r\n        };\r\n        Core.callApi(opt);\r\n    };\r\n\r\n    return (\r\n        <Form\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            form={form}\r\n            initialValues={{ layout: formLayout }}\r\n            onFinish={() => {\r\n                let changes: IEquipmentDocumentType[] = [];\r\n                state.selectedItems.forEach(item => {\r\n                    let documentType = state.documentTypes.find(d => d.RowGuid === item);\r\n\r\n                    if (documentType) {\r\n                        let documentTypeId = documentType.Id;\r\n                        const equipmentDocumentType = state.equipmentDocumentTypes.find(r => r.DocumentTypeId === documentTypeId);\r\n                        if (!equipmentDocumentType)\r\n                            changes.push({ RowGuid: Core.newId(), DamageReasonId: state.currentDamageReasonId!, DocumentTypeId: documentTypeId, EquipmentId: state.currentEquipmentId!, State: enmEntityState.Added, Required: (documentType as any).Required } as any);\r\n                        else if ((documentType as any).Required !== equipmentDocumentType?.Required) {\r\n                            changes.push({ Id: equipmentDocumentType.Id, RowGuid: equipmentDocumentType.RowGuid, DamageReasonId: equipmentDocumentType.DamageReasonId, DocumentTypeId: equipmentDocumentType.DocumentTypeId, EquipmentId: equipmentDocumentType.EquipmentId, State: enmEntityState.Modified, Required: (documentType as any).Required, ModifiedProperties: ['Required'], RowVrsn: equipmentDocumentType.RowVrsn } as any);\r\n                        }\r\n                    }\r\n                });\r\n                state.equipmentDocumentTypes.forEach(item => {\r\n                    let documentType = state.documentTypes.find(d => d.Id === item.DocumentTypeId);\r\n                    if (documentType && !state.selectedItems.find(r => r === documentType?.RowGuid)) {\r\n                        changes.push({ Id: item.Id, RowGuid: item.RowGuid, RowVrsn: item.RowVrsn, State: enmEntityState.Deleted } as any);\r\n                    }\r\n                });\r\n\r\n                save(changes);\r\n            }}\r\n            style={{ margin: 10 }}\r\n        >\r\n            <Form.Item\r\n                label={\"دلیل خسارت\"}\r\n                name={\"DamageReason\"}\r\n                rules={[{ required: true, message: \"لطفا دلیل خسارت را انتخاب نمایید\" }]}\r\n                key={\"DamageReason\"}\r\n                style={{ margin: 10 }}\r\n            >\r\n                <Lookup\r\n                    onChange={(value?: IDamageReason) => {\r\n                        setState({\r\n                            loadData: true,\r\n                            isAuthorized: true,\r\n                            documentTypes: [],\r\n                            selectedItems: [],\r\n                            equipmentDocumentTypes: [],\r\n                            saveAccess: false,\r\n                            currentDamageReasonId: value?.Id,\r\n                            currentEquipmentId: props.params().equipment?.Id\r\n                        });\r\n                        setLoading(true);\r\n                    }}\r\n                    isLookupMode={true}\r\n                    property={{\r\n                        controlType: enmControlType.lookup,\r\n                        propertyType: enmPropertyType.number,\r\n                        dataIndex: \"DamageReason\",\r\n                        title: \"دلیل خسارت\",\r\n                        lookup: {\r\n                            lookupComponent: DamageReason,\r\n                            lookupProperty: \"DamageReason\",\r\n                            lookupDisplayFields: [\"Name\"]\r\n                        }\r\n                    }}\r\n                    parent={props.parent}\r\n                    key={\"DamageReason\"}\r\n                />\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n                label={\"نوع مستند\"}\r\n                name={\"DocumnetType\"}\r\n                key={\"DocumnetType\"}\r\n                style={{ margin: 10 }}\r\n            >\r\n                <Table\r\n                    rowKey=\"RowGuid\"\r\n                    onHeaderRow={() => {\r\n                        return {\r\n                            className: 'ant-table-thead-checkbox',\r\n                        };\r\n                    }}\r\n                    rowSelection={{\r\n                        type: 'checkbox',\r\n                        selectedRowKeys: state.selectedItems,\r\n                        columnWidth: \"50px\",\r\n                        onChange: (selectedRowKeys: React.Key[], _: IDocumentType[]) => {\r\n                            setState({\r\n                                loadData: false,\r\n                                isAuthorized: true,\r\n                                documentTypes: state.documentTypes,\r\n                                selectedItems: selectedRowKeys,\r\n                                equipmentDocumentTypes: state.equipmentDocumentTypes,\r\n                                saveAccess: state.saveAccess,\r\n                                currentDamageReasonId: state.currentDamageReasonId,\r\n                                currentEquipmentId: state.currentEquipmentId\r\n                            });\r\n                            setLoading(false);\r\n                        }\r\n                    }}\r\n                    pagination={{\r\n                        style: { marginLeft: 10 }\r\n                    }}\r\n                    dataSource={state.documentTypes}\r\n                    className=\"box\"\r\n                    columns={[\r\n                        {\r\n                            dataIndex: \"Name\",\r\n                            title: \"نوع مستند\"\r\n                        },\r\n                        {\r\n                            dataIndex: \"Required\",\r\n                            title: \"اجباری؟\",\r\n                            render: (_, record) => {\r\n                                const equipmentDocumentType = state.equipmentDocumentTypes.find(d => d.DocumentTypeId === record.Id);\r\n                                const { documentTypes } = state;\r\n                                return (\r\n                                    <Checkbox defaultChecked={equipmentDocumentType?.Required} onChange={(e) => {\r\n                                        const documentType = documentTypes.find(d => d.Id === record.Id) as any;\r\n                                        if (documentType)\r\n                                            documentType.Required = e.target.checked;\r\n                                        setState({ ...state, documentTypes });\r\n                                    }} />\r\n                                );\r\n                            }\r\n                        }\r\n                    ]}\r\n                    loading={loading}\r\n                />\r\n            </Form.Item>\r\n\r\n            <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ borderTop: '1px solid', borderColor: '#e5e5e5', marginLeft: 20 }}>\r\n                <Button disabled={!state.saveAccess} type=\"primary\" htmlType=\"submit\" icon={<SaveOutlined />} loading={loading} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 10 }}>\r\n                    ذخیره\r\n                </Button>\r\n            </Form.Item>\r\n        </Form>\r\n    );\r\n}\r\n\r\nexport default EquipmentDocumentType;","import { Button, Form, Table } from \"antd\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { SaveOutlined } from '@ant-design/icons';\r\nimport { IEquipmentSendingItem, IEquipmentSendingItemProps, IEquipmentSendingItemResult, IEquipmentSendingItemStates } from \"./interfaces\";\r\nimport { Lookup } from \"../../components/lookup\";\r\nimport { enmControlType, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport { DamageType } from \"../damageType\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { useContext } from \"react\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport { enmEntityState, enmValidationLevel, ICallOptions, IResult, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { IDamageType } from \"../damageType/interfaces\";\r\nimport { ISendingItem } from \"../sendingItem/interfaces\";\r\nimport './index.css';\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nconst EquipmentSendingItem = (props: IEquipmentSendingItemProps) => {\r\n    const context = useContext(AppContext);\r\n    const [loading, setLoading] = useState(true);\r\n    const [state, setState] = useState<IEquipmentSendingItemStates>({\r\n        loadData: true,\r\n        isAuthorized: true,\r\n        selectedItems: [],\r\n        sendingItems: [],\r\n        equipmentSendingItems: [],\r\n        saveAccess: false,\r\n        currentEquipmentId: props.params().equipment?.Id\r\n    });\r\n    const { loadData } = state;\r\n    const [form] = Form.useForm();\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n    const formItemLayout = {\r\n        labelCol: { span: 4 },\r\n        wrapperCol: { span: 18 },\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (props.params().equipment.Id !== state.currentEquipmentId) {\r\n            setState({\r\n                loadData: true,\r\n                isAuthorized: true,\r\n                selectedItems: [],\r\n                sendingItems: [],\r\n                equipmentSendingItems: [],\r\n                saveAccess: false,\r\n                currentDamageTypeId: state.currentDamageTypeId,\r\n                currentEquipmentId: props.params().equipment.Id\r\n            });\r\n            setLoading(true);\r\n        }\r\n    }, [props]);\r\n\r\n    if (!state.isAuthorized) {\r\n        let loginUrl = '/login';\r\n        if (context?.path)\r\n            loginUrl += '?' + encodeURIComponent(context.path);\r\n        return (<Redirect to={loginUrl} />);\r\n    }\r\n\r\n    if (loadData) {\r\n        let res: IResultSet<IEquipmentSendingItemResult> | null = null;\r\n\r\n        let opt: ICallOptions = {\r\n            url: \"equipmentsendingitem/getequipments\",\r\n            data: { equipmentId: props.params().equipment.Id, damageTypeId: state.currentDamageTypeId },\r\n            onSuccess: (result) => {\r\n                res = result as any;\r\n            },\r\n            onComplete: () => {\r\n                if (res && res.Data) {\r\n                    if (!res.ValidationState.Successful) {\r\n                        let isAuthorized = true;\r\n                        if (res.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.AccessDenied || v.Level === enmValidationLevel.Unauthorized)) {\r\n                            Core.errorNotification(res.ValidationState.ValidationResults[0].Message!);\r\n                            isAuthorized = false;\r\n                        }\r\n                        setState({\r\n                            loadData: false,\r\n                            isAuthorized: isAuthorized,\r\n                            selectedItems: [],\r\n                            sendingItems: [],\r\n                            equipmentSendingItems: [],\r\n                            saveAccess: false\r\n                        });\r\n                        setLoading(false);\r\n                        return;\r\n                    }\r\n\r\n                    let selectedItems = res.Data.EquipmentSendingItems.map(e => {\r\n                        return res!.Data!.SendingItems.find(d => d.Id === e.SendingItemId)?.RowGuid!;\r\n                    });\r\n\r\n                    setState({\r\n                        loadData: false,\r\n                        isAuthorized: true,\r\n                        sendingItems: res.Data.SendingItems,\r\n                        selectedItems: selectedItems,\r\n                        equipmentSendingItems: res.Data.EquipmentSendingItems,\r\n                        saveAccess: res.Data.SaveAccess,\r\n                        currentDamageTypeId: (form.getFieldValue(\"DamageType\") as IDamageType)?.Id,\r\n                        currentEquipmentId: props.params().equipment?.Id\r\n                    });\r\n                    setLoading(false);\r\n                    return;\r\n                }\r\n                setState({\r\n                    loadData: false,\r\n                    isAuthorized: true,\r\n                    sendingItems: [],\r\n                    selectedItems: [],\r\n                    equipmentSendingItems: [],\r\n                    saveAccess: false,\r\n                    currentEquipmentId: props.params().equipment?.Id\r\n                });\r\n                setLoading(false);\r\n            }\r\n        };\r\n        Core.callApi(opt);\r\n    }\r\n\r\n    const save = (changes: IEquipmentSendingItem[]) => {\r\n        if (!changes.length) {\r\n            Core.warningNotification(\"لطفا ابتدا اطلاعات را تغییر دهید\");\r\n            return;\r\n        }\r\n        setLoading(true);\r\n        let res: IResult | null = null;\r\n\r\n        let opt: ICallOptions = {\r\n            url: \"equipmentsendingitem/save\",\r\n            data: { entities: changes },\r\n            onSuccess: (result) => {\r\n                res = result;\r\n            },\r\n            onComplete: () => {\r\n                if (res) {\r\n                    if (!res.ValidationState.Successful) {\r\n                        let isAuthorized = true;\r\n                        if (res.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.AccessDenied || v.Level === enmValidationLevel.Unauthorized)) {\r\n                            Core.errorNotification(res.ValidationState.ValidationResults[0].Message!);\r\n                            isAuthorized = false;\r\n                        }\r\n                        setState({\r\n                            loadData: false,\r\n                            isAuthorized: isAuthorized,\r\n                            selectedItems: [],\r\n                            sendingItems: [],\r\n                            equipmentSendingItems: [],\r\n                            saveAccess: false\r\n                        });\r\n                        setLoading(false);\r\n                        return;\r\n                    }\r\n                    Core.successNotification(\"اطلاعات با موفقیت ذخیره شد\");\r\n                    setState({\r\n                        loadData: true,\r\n                        isAuthorized: true,\r\n                        sendingItems: [],\r\n                        selectedItems: [],\r\n                        equipmentSendingItems: [],\r\n                        saveAccess: false,\r\n                        currentDamageTypeId: state.currentDamageTypeId,\r\n                        currentEquipmentId: state.currentEquipmentId\r\n                    });\r\n                    setLoading(true);\r\n                    return;\r\n                }\r\n                setState({\r\n                    loadData: false,\r\n                    isAuthorized: true,\r\n                    sendingItems: [],\r\n                    selectedItems: [],\r\n                    equipmentSendingItems: [],\r\n                    saveAccess: false,\r\n                    currentEquipmentId: state.currentEquipmentId\r\n                });\r\n                setLoading(false);\r\n            }\r\n        };\r\n        Core.callApi(opt);\r\n    };\r\n\r\n    return (\r\n        <Form\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            form={form}\r\n            initialValues={{ layout: formLayout }}\r\n            onFinish={() => {\r\n                let changes: IEquipmentSendingItem[] = [];\r\n                state.selectedItems.forEach(item => {\r\n                    let sendingItem = state.sendingItems.find(d => d.RowGuid === item);\r\n                    if (sendingItem && !state.equipmentSendingItems.find(r => r.SendingItemId === sendingItem?.Id)) {\r\n                        changes.push({ RowGuid: Core.newId(), DamageTypeId: state.currentDamageTypeId!, SendingItemId: sendingItem.Id, EquipmentId: state.currentEquipmentId!, State: enmEntityState.Added } as any);\r\n                    }\r\n                });\r\n                state.equipmentSendingItems.forEach(item => {\r\n                    let sendingItem = state.sendingItems.find(d => d.Id === item.SendingItemId);\r\n                    if (sendingItem && !state.selectedItems.find(r => r === sendingItem?.RowGuid)) {\r\n                        changes.push({ Id: item.Id, RowGuid: item.RowGuid, RowVrsn: item.RowVrsn, State: enmEntityState.Deleted } as any);\r\n                    }\r\n                });\r\n\r\n                save(changes);\r\n            }}\r\n            style={{ margin: 10 }}\r\n        >\r\n            <Form.Item\r\n                label={\"نوع خسارت\"}\r\n                name={\"DamageType\"}\r\n                rules={[{ required: true, message: \"لطفا نوع خسارت را انتخاب نمایید\" }]}\r\n                key={\"DamageType\"}\r\n                style={{ margin: 10 }}\r\n            >\r\n                <Lookup\r\n                    onChange={(value?: IDamageType) => {\r\n                        setState({\r\n                            loadData: true,\r\n                            isAuthorized: true,\r\n                            sendingItems: [],\r\n                            selectedItems: [],\r\n                            equipmentSendingItems: [],\r\n                            saveAccess: false,\r\n                            currentDamageTypeId: value?.Id,\r\n                            currentEquipmentId: props.params().equipment?.Id\r\n                        });\r\n                        setLoading(true);\r\n                    }}\r\n                    isLookupMode={true}\r\n                    property={{\r\n                        controlType: enmControlType.lookup,\r\n                        propertyType: enmPropertyType.number,\r\n                        dataIndex: \"DamageType\",\r\n                        title: \"نوع خسارت\",\r\n                        lookup: {\r\n                            lookupComponent: DamageType,\r\n                            lookupProperty: \"DamageType\",\r\n                            lookupDisplayFields: [\"Name\"]\r\n                        }\r\n                    }}\r\n                    parent={props.parent}\r\n                    key={\"DamageType\"}\r\n                />\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n                label={\"موارد ارسالی\"}\r\n                name={\"SendingItem\"}\r\n                key={\"SendingItem\"}\r\n                style={{ margin: 10 }}\r\n            >\r\n                <Table\r\n                    rowKey=\"RowGuid\"\r\n                    onHeaderRow={() => {\r\n                        return {\r\n                            className: 'ant-table-thead-checkbox',\r\n                        };\r\n                    }}\r\n                    rowSelection={{\r\n                        type: 'checkbox',\r\n                        selectedRowKeys: state.selectedItems,\r\n                        onChange: (selectedRowKeys: React.Key[], _: ISendingItem[]) => {\r\n                            setState({\r\n                                loadData: false,\r\n                                isAuthorized: true,\r\n                                sendingItems: state.sendingItems,\r\n                                selectedItems: selectedRowKeys,\r\n                                equipmentSendingItems: state.equipmentSendingItems,\r\n                                saveAccess: state.saveAccess,\r\n                                currentDamageTypeId: state.currentDamageTypeId,\r\n                                currentEquipmentId: state.currentEquipmentId\r\n                            });\r\n                            setLoading(false);\r\n                        },\r\n                    }}\r\n                    pagination={{\r\n                        style: { marginLeft: 10 }\r\n                    }}\r\n                    dataSource={state.sendingItems}\r\n                    className=\"box\"\r\n                    columns={[\r\n                        {\r\n                            dataIndex: \"Name\",\r\n                            title: \"موارد ارسالی\"\r\n                        }\r\n                    ]}\r\n                    loading={loading}\r\n                />\r\n            </Form.Item>\r\n\r\n            <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ borderTop: '1px solid', borderColor: '#e5e5e5', marginLeft: 20 }}>\r\n                <Button disabled={!state.saveAccess} type=\"primary\" htmlType=\"submit\" icon={<SaveOutlined />} loading={loading} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 10 }}>\r\n                    ذخیره\r\n                </Button>\r\n            </Form.Item>\r\n        </Form>\r\n    );\r\n}\r\n\r\nexport default EquipmentSendingItem;","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { AndFilter, ComparisonFilter, IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { Brand } from \"../brand\";\r\nimport { EquipmentItem } from \"../equipment/equipmentItem\";\r\nimport { IEquipmentItemProps } from \"../equipment/interfaces\";\r\nimport { IEquipmentModel, IEquipmentModelProps, IEquipmentModelStates } from \"./interfaces\";\r\n\r\nexport class EquipmentModel extends EntityManager<IEquipmentModel, IEquipmentModelProps, IEquipmentModelStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"EquipmentModel\",\r\n            title: \"مدل تجهیزات\",\r\n            Properties: [\r\n                {\r\n                    title: \"نوع تجهیز\",\r\n                    dataIndex: \"EquipmentId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    disable:  (sender: EquipmentModel) =>  (sender.props.isLookupMode || sender.props.isChildComponent) === true,\r\n                    rules: [{ required: true, message: 'لطفانوع تجهیز را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: EquipmentItem,\r\n                        lookupProperty: \"Equipment\",\r\n                        lookupDisplayFields: [\"Name\"],\r\n                    }\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"BrandId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    disable: (sender: EquipmentModel) => (sender.props.isLookupMode || sender.props.isChildComponent) === true,\r\n                    rules: [{ required: true, message: 'لطفا برند را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Brand,\r\n                        lookupProperty: \"Brand\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نام را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"نام لاتین\",\r\n                    dataIndex: \"NameEn\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"قابلیت تعمیر دارد؟\",\r\n                    dataIndex: \"IsRepairable\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    width: 150\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.preparelookupProps = (propName, lookupProps) => {\r\n            if (propName === \"EquipmentId\")\r\n                (lookupProps as IEquipmentItemProps).params = () => {\r\n                    return { parent: this.props.params && this.props.params()?.equipment };\r\n                };\r\n            return lookupProps;\r\n        }\r\n        this.originalFilter = () => {\r\n            const params = this.props.params && this.props.params();\r\n            const filters: IFilter[] = [];\r\n            if (params?.equipment) {\r\n                filters.push( ComparisonFilter.Equal<IEquipmentModel>(m => m.EquipmentId, params.equipment.Id));\r\n            }\r\n            if (params?.brand) {\r\n                filters.push(ComparisonFilter.Equal<IEquipmentModel>(m => m.BrandId, params.brand.Id));\r\n            }\r\n            if (filters.length > 1)\r\n                return new AndFilter(filters);\r\n            else if (filters.length === 1)\r\n                return filters[0];\r\n        };\r\n        this.onEntityAdded = (entity) => {\r\n            let params = this.props.params && this.props.params();\r\n            if (params?.equipment) {\r\n                entity.EquipmentId = params.equipment.Id;\r\n                entity.Equipment = params.equipment;\r\n                entity.ModifiedProperties.push(\"EquipmentId\");\r\n            }\r\n            if (params?.brand) {\r\n                entity.BrandId = params.brand.Id;\r\n                entity.Brand = params.brand;\r\n                entity.ModifiedProperties.push(\"BrandId\");\r\n            }\r\n            return true;\r\n        };\r\n    }\r\n}","import { Button, Form, Table } from \"antd\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { SaveOutlined } from '@ant-design/icons';\r\nimport { IEquipmentProblem, IEquipmentProblemProps, IEquipmentProblemResult, IEquipmentProblemStates } from \"./interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { useContext } from \"react\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport { enmEntityState, enmValidationLevel, ICallOptions, IResult, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport './index.css';\r\nimport { IProblem } from \"../problem/interfaces\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nconst EquipmentProblem = (props: IEquipmentProblemProps) => {\r\n    const context = useContext(AppContext);\r\n    const [loading, setLoading] = useState(true);\r\n    const [state, setState] = useState<IEquipmentProblemStates>({\r\n        loadData: true,\r\n        isAuthorized: true,\r\n        selectedItems: [],\r\n        equipmentProblems: [],\r\n        problems: [],\r\n        saveAccess: false,\r\n        currentEquipmentId: props.params().equipment?.Id\r\n    });\r\n    const { loadData } = state;\r\n    const [form] = Form.useForm();\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n    const formItemLayout = {\r\n        labelCol: { span: 4 },\r\n        wrapperCol: { span: 18 },\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (props.params().equipment.Id !== state.currentEquipmentId) {\r\n            setState({\r\n                loadData: true,\r\n                isAuthorized: true,\r\n                selectedItems: [],\r\n                equipmentProblems: [],\r\n                problems: [],\r\n                saveAccess: false,\r\n                currentEquipmentId: props.params().equipment.Id\r\n            });\r\n            setLoading(true);\r\n        }\r\n    }, [props]);\r\n\r\n    if (!state.isAuthorized) {\r\n        let loginUrl = '/login';\r\n        if (context?.path)\r\n            loginUrl += '?' + encodeURIComponent(context.path);\r\n        return (<Redirect to={loginUrl} />);\r\n    }\r\n\r\n    if (loadData) {\r\n        let res: IResultSet<IEquipmentProblemResult> | null = null;\r\n\r\n        let opt: ICallOptions = {\r\n            url: \"EquipmentProblem/getequipments\",\r\n            data: { equipmentId: props.params().equipment.Id},\r\n            onSuccess: (result) => {\r\n                res = result as any;\r\n            },\r\n            onComplete: () => {\r\n                if (res && res.Data) {\r\n                    if (!res.ValidationState.Successful) {\r\n                        let isAuthorized = true;\r\n                        if (res.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.AccessDenied || v.Level === enmValidationLevel.Unauthorized)) {\r\n                            Core.errorNotification(res.ValidationState.ValidationResults[0].Message!);\r\n                            isAuthorized = false;\r\n                        }\r\n                        setState({\r\n                            loadData: false,\r\n                            isAuthorized: isAuthorized,\r\n                            selectedItems: [],\r\n                            equipmentProblems: [],\r\n                            problems: [],\r\n                            saveAccess: false\r\n                        });\r\n                        setLoading(false);\r\n                        return;\r\n                    }\r\n\r\n                    let selectedItems = res.Data.EquipmentProblems.map(e => {\r\n                        return res!.Data!.Problems.find(d => d.Id === e.ProblemId)?.RowGuid!;\r\n                    });\r\n\r\n                    setState({\r\n                        loadData: false,\r\n                        isAuthorized: true,\r\n                        equipmentProblems: res.Data.EquipmentProblems,\r\n                        selectedItems: selectedItems,\r\n                        problems: res.Data.Problems,\r\n                        saveAccess: res.Data.SaveAccess,\r\n                        currentEquipmentId: props.params().equipment?.Id\r\n                    });\r\n                    setLoading(false);\r\n                    return;\r\n                }\r\n                setState({\r\n                    loadData: false,\r\n                    isAuthorized: true,\r\n                    equipmentProblems: [],\r\n                    selectedItems: [],\r\n                    problems: [],\r\n                    saveAccess: false,\r\n                    currentEquipmentId: props.params().equipment?.Id\r\n                });\r\n                setLoading(false);\r\n            }\r\n        };\r\n        Core.callApi(opt);\r\n    }\r\n\r\n    const save = (changes: IEquipmentProblem[]) => {\r\n        if (!changes.length) {\r\n            Core.warningNotification(\"لطفا ابتدا اطلاعات را تغییر دهید\");\r\n            return;\r\n        }\r\n        setLoading(true);\r\n        let res: IResult | null = null;\r\n\r\n        let opt: ICallOptions = {\r\n            url: \"EquipmentProblem/save\",\r\n            data: { entities: changes },\r\n            onSuccess: (result) => {\r\n                res = result;\r\n            },\r\n            onComplete: () => {\r\n                if (res) {\r\n                    if (!res.ValidationState.Successful) {\r\n                        let isAuthorized = true;\r\n                        if (res.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.AccessDenied || v.Level === enmValidationLevel.Unauthorized)) {\r\n                            Core.errorNotification(res.ValidationState.ValidationResults[0].Message!);\r\n                            isAuthorized = false;\r\n                        }\r\n                        setState({\r\n                            loadData: false,\r\n                            isAuthorized: isAuthorized,\r\n                            selectedItems: [],\r\n                            equipmentProblems: [],\r\n                            problems: [],\r\n                            saveAccess: false\r\n                        });\r\n                        setLoading(false);\r\n                        return;\r\n                    }\r\n                    Core.successNotification(\"اطلاعات با موفقیت ذخیره شد\");\r\n                    setState({\r\n                        loadData: true,\r\n                        isAuthorized: true,\r\n                        equipmentProblems: [],\r\n                        selectedItems: [],\r\n                        problems: [],\r\n                        saveAccess: false,\r\n                        currentEquipmentId: state.currentEquipmentId\r\n                    });\r\n                    setLoading(true);\r\n                    return;\r\n                }\r\n                setState({\r\n                    loadData: false,\r\n                    isAuthorized: true,\r\n                    equipmentProblems: [],\r\n                    selectedItems: [],\r\n                    problems: [],\r\n                    saveAccess: false,\r\n                    currentEquipmentId: state.currentEquipmentId\r\n                });\r\n                setLoading(false);\r\n            }\r\n        };\r\n        Core.callApi(opt);\r\n    };\r\n\r\n    return (\r\n        <Form\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            form={form}\r\n            initialValues={{ layout: formLayout }}\r\n            onFinish={() => {\r\n                let changes: IEquipmentProblem[] = [];\r\n                state.selectedItems.forEach(item => {\r\n                    let problem = state.problems.find(d => d.RowGuid === item);\r\n                    if (problem && !state.equipmentProblems.find(r => r.ProblemId === problem?.Id)) {\r\n                        changes.push({ RowGuid: Core.newId(), ProblemId: problem.Id, EquipmentId: state.currentEquipmentId!, State: enmEntityState.Added } as any);\r\n                    }\r\n                });\r\n                state.equipmentProblems.forEach(item => {\r\n                    let problem = state.problems.find(d => d.Id === item.ProblemId);\r\n                    if (problem && !state.selectedItems.find(r => r === problem?.RowGuid)) {\r\n                        changes.push({ Id: item.Id, RowGuid: item.RowGuid, RowVrsn: item.RowVrsn, State: enmEntityState.Deleted } as any);\r\n                    }\r\n                });\r\n\r\n                save(changes);\r\n            }}\r\n            style={{ margin: 10 }}\r\n        >\r\n            \r\n            <Form.Item\r\n                label={\"مشکلات\"}\r\n                name={\"Problem\"}\r\n                key={\"Problem\"}\r\n                style={{ margin: 10 }}\r\n            >\r\n                <Table\r\n                    rowKey=\"RowGuid\"\r\n                    onHeaderRow={() => {\r\n                        return {\r\n                            className: 'ant-table-thead-checkbox',\r\n                        };\r\n                    }}\r\n                    rowSelection={{\r\n                        type: 'checkbox',\r\n                        selectedRowKeys: state.selectedItems,\r\n                        onChange: (selectedRowKeys: React.Key[], _: IProblem[]) => {\r\n                            setState({\r\n                                loadData: false,\r\n                                isAuthorized: true,\r\n                                equipmentProblems: state.equipmentProblems,\r\n                                selectedItems: selectedRowKeys,\r\n                                problems: state.problems,\r\n                                saveAccess: state.saveAccess,\r\n                                currentEquipmentId: state.currentEquipmentId\r\n                            });\r\n                            setLoading(false);\r\n                        },\r\n                    }}\r\n                    pagination={{\r\n                        style: { marginLeft: 10 }\r\n                    }}\r\n                    dataSource={state.problems}\r\n                    className=\"box\"\r\n                    columns={[\r\n                        {\r\n                            dataIndex: \"Name\",\r\n                            title: \"عنوان\"\r\n                        }\r\n                    ]}\r\n                    loading={loading}\r\n                />\r\n            </Form.Item>\r\n\r\n            <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ borderTop: '1px solid', borderColor: '#e5e5e5', marginLeft: 20 }}>\r\n                <Button disabled={!state.saveAccess} type=\"primary\" htmlType=\"submit\" icon={<SaveOutlined />} loading={loading} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 10 }}>\r\n                    ذخیره\r\n                </Button>\r\n            </Form.Item>\r\n        </Form>\r\n    );\r\n}\r\n\r\nexport default EquipmentProblem;","import { IEquipment, IEquipmentProps, IEquipmentStates } from \"./interfaces\";\r\nimport { BaseComponent } from \"../../components/infrastructure/baseComponent\";\r\nimport { Button, Col, Descriptions, Tabs, Tooltip, Tree } from \"antd\";\r\nimport { DataNode } from \"antd/lib/tree\";\r\nimport { Key } from \"react\";\r\nimport { EquipmentItem } from \"./equipmentItem\";\r\nimport { ICallOptions, IFetchingInfo } from \"../../components/infrastructure/models\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { enmEntityManagerState, IInitialData } from \"../../components/entityManager/interfaces\";\r\nimport { PlusCircleOutlined, OrderedListOutlined, LinkOutlined, StopOutlined } from '@ant-design/icons';\r\nimport EquipmentDocumentType from \"./equipmentDocumentType\";\r\nimport EquipmentSendingItem from \"./equipmentSendingItem\";\r\nimport { EquipmentModel } from \"../equipmentModel\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faReply } from \"@fortawesome/free-solid-svg-icons\";\r\nimport EquipmentProblem from \"./equipmentProblem\";\r\nconst { TabPane } = Tabs;\r\n\r\nexport class Equipment extends BaseComponent<IEquipmentProps, IEquipmentStates>{\r\n    rootNode: DataNode;\r\n    equipmentItem?: EquipmentItem | null;\r\n    equipmentModel?: EquipmentModel | null;\r\n\r\n    constructor(props: IEquipmentProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            equipments: [],\r\n            selectedItem: this.props.params && this.props.params()?.parent,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n        this.rootNode = {\r\n            key: 0,\r\n            title: \"درخت تجهیزات\",\r\n            children: []\r\n        };\r\n        this.title = \"درخت تجهیزات\";\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.loadData();\r\n    }\r\n    async loadData() {\r\n        let fetchingInfo: IFetchingInfo = {\r\n            Paging: { PageNo: 1, PageSize: 100 },\r\n            Orderings: []\r\n        };\r\n        let parentId = this.props.params && this.props.params().parent?.Id;\r\n        if (parentId)\r\n            fetchingInfo.Filter = ComparisonFilter.Equal<IEquipment>(e => e.ParentId, parentId);\r\n        let opt: ICallOptions = {\r\n            url: 'equipment/get',\r\n            data: { fetchingInfo },\r\n            onSuccess: (result) => {\r\n                if (result.ValidationState.Successful) {\r\n                    let data: IEquipment[] = (result as any).Data;\r\n                    if (this.mounted) {\r\n                        this.setState({\r\n                            loading: false,\r\n                            equipments: data\r\n                        });\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    getHeader = (initialData?: IInitialData) => {\r\n        if (initialData) {\r\n            const extra: React.ReactNode[] = [];\r\n            if (this.equipmentItem) {\r\n                //if (this.equipmentItem.state.state === enmEntityManagerState.List)\r\n                //    extra.push(<Search key=\"1\" placeholder=\"جستجو\" allowClear={true} style={{ width: 200 }} loading={this.state.loading}\r\n                //        onSearch={(value) => {\r\n                //            this.equipmentItem?.search(value);\r\n                //        }} />);\r\n                if (this.equipmentItem.state.state === enmEntityManagerState.List && initialData?.AccessList[\"Add\"])\r\n                    extra.push(<Tooltip key=\"2\" title={\"ایجاد \" + this.equipmentItem.metadata.title + \" جدید\"}><Button style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '100px' }} type=\"primary\" onClick={() => this.equipmentItem?.add()} icon={<PlusCircleOutlined />}>ایجاد</Button></Tooltip>);\r\n            }\r\n\r\n            const header = this.getPageHeader({\r\n                title: \"تجهیزات\",\r\n                onBack: () => {\r\n                    if (this.props.onClose)\r\n                        this.props.onClose(this);\r\n                    else\r\n                        window.history.back();\r\n                }, extraHeaderButtons: extra,\r\n                extraHeaderNodes: this.extraHeaderNodes()\r\n            });\r\n            return header;\r\n        }\r\n    }\r\n    renderEquipments(equipments: IEquipment[], parentId?: number): DataNode[] {\r\n        let nodes: DataNode[] = [];\r\n        equipments.filter(c => c.ParentId === (parentId ?? null))\r\n            .forEach(c => {\r\n                if (c.Name === \"Home\")\r\n                    return;\r\n                let key = c.Id;\r\n                let node: DataNode = {\r\n                    key: key,\r\n                    title: c.Name,\r\n                };\r\n                let children = this.renderEquipments(equipments, c.Id);\r\n                if (children.length)\r\n                    node.children = children;\r\n                nodes.push(node);\r\n            });\r\n        return nodes;\r\n    }\r\n    onSelect = (selectedkeys: React.Key[]) => {\r\n        if (selectedkeys.length) {\r\n            let selectedItem = this.state.equipments.find(e => e.Id === selectedkeys[0]);\r\n            this.setState({ selectedItem });\r\n        }\r\n        else\r\n            this.setState({ selectedItem: undefined });\r\n\r\n    }\r\n    componentDidUpdate(_: Readonly<IEquipmentProps>, prevState: Readonly<IEquipmentStates>) {\r\n        if (prevState.selectedItem?.Id !== this.state.selectedItem?.Id) {\r\n            this.equipmentItem?.fetchData();\r\n            this.equipmentModel?.fetchData();\r\n        }\r\n    }\r\n    extraHeaderNodes = () => {\r\n        let name = this.state.selectedItem?.Name ?? \"درخت تجهیزات\";\r\n        let label = !this.state.selectedItem || this.state.selectedItem.IsGroup ? \"نام گروه اصلی\" : \"نوع تجهیز\";\r\n        return (\r\n            <Descriptions className=\"header-page\">\r\n                <Descriptions.Item label={label}>{name}</Descriptions.Item>\r\n            </Descriptions>\r\n        );\r\n    }\r\n    virtualRender() {\r\n        this.rootNode.children?.splice(0);\r\n        const nodes: DataNode[] = this.renderEquipments(this.state.equipments);\r\n        let expandedKeys: React.Key[] = [0];\r\n        this.state.equipments.forEach(c => {\r\n            if (expandedKeys.indexOf(c.Id) === -1)\r\n                expandedKeys.push(c.Id);\r\n        });\r\n\r\n        this.rootNode.children!.push(...nodes);\r\n        const selectedKeys: Key[] = [];\r\n        if (this.state.selectedItem)\r\n            selectedKeys.push(this.state.selectedItem.Id);\r\n        else\r\n            selectedKeys.push(0);\r\n\r\n        let header = this.getHeader(this.state.equipmentItemInitialData);\r\n\r\n        return (\r\n            <>\r\n                {header}\r\n                <div key=\"equipments-container\" className=\"row\" style={{ margin: 0 }} >\r\n                    <div key=\"equipments-tree\" className=\"col-md-4\"\r\n                        style={{\r\n                            margin: 0,\r\n                            padding: 0,\r\n                            paddingBottom: this.state.windowSize === 1 ? 10 : 0\r\n                        }}>\r\n                        <div className=\"box\">\r\n                            <Tree\r\n                                selectable\r\n                                showLine={true}\r\n                                treeData={[this.rootNode]}\r\n                                selectedKeys={selectedKeys}\r\n                                expandedKeys={expandedKeys}\r\n                                onSelect={this.onSelect}\r\n                                style={{ padding: 10, overflowX: \"auto\" }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div key=\"equipments-grid\" className=\"col-md-8\"\r\n                        style={{\r\n                            margin: 0,\r\n                            padding: 0,\r\n                            paddingRight: this.state.windowSize === 1 ? 0 : 10\r\n                        }}>\r\n                        {this.state.selectedItem?.IsGroup === false ?\r\n                            <div className=\"box\">\r\n                                <Tabs defaultActiveKey=\"1\">\r\n                                    <TabPane\r\n                                        tab={\r\n                                            <span style={{ marginRight: 4 }}>\r\n                                                <LinkOutlined />\r\n                                                مستندات لازم جهت ثبت خسارت\r\n                                            </span>\r\n                                        }\r\n                                        key=\"1\"\r\n                                        style={{ margin: 10 }}\r\n                                    >\r\n                                        <EquipmentDocumentType\r\n                                            parent={this}\r\n                                            params={() => {\r\n                                                return { equipment: this.state.selectedItem! };\r\n                                            }}\r\n                                        />\r\n                                    </TabPane>\r\n                                    <TabPane\r\n                                        tab={\r\n                                            <span>\r\n                                                <OrderedListOutlined />\r\n                                                موارد ارسالی جهت پیگیری خسارت\r\n                                            </span>\r\n                                        }\r\n                                        key=\"2\"\r\n                                        style={{ margin: 10 }}\r\n                                    >\r\n                                        <EquipmentSendingItem\r\n                                            parent={this}\r\n                                            params={() => {\r\n                                                return { equipment: this.state.selectedItem! };\r\n                                            }}\r\n                                        />\r\n                                    </TabPane>\r\n                                    <TabPane\r\n                                        tab={\r\n                                            <span>\r\n                                                <OrderedListOutlined />\r\n                                                مدل ها\r\n                                            </span>\r\n                                        }\r\n                                        key=\"3\"\r\n                                    >\r\n\r\n                                        <EquipmentModel\r\n                                            key=\"EquipmentModel\"\r\n                                            preLoad={true}\r\n                                            params={() => {\r\n                                                return { equipment: this.state.selectedItem! }\r\n                                            }}\r\n                                            ref={node => this.equipmentModel = node}\r\n                                            backNode={state => {\r\n                                                if (state === enmEntityManagerState.List)\r\n                                                    return (<></>);\r\n                                                else\r\n                                                    return (\r\n                                                        <Tooltip title=\"لغو/بازگشت\" >\r\n                                                            <FontAwesomeIcon key=\"back-icon\"\r\n                                                                className=\"back-color\"\r\n                                                                icon={faReply}\r\n                                                                transform={{ flipX: true }}\r\n                                                                size={'xl'}\r\n                                                                style={{ margin: 10 }}\r\n                                                                onClick={() => this.equipmentModel?.back()}\r\n                                                            />\r\n                                                        </Tooltip>\r\n                                                    )\r\n                                            }}\r\n                                            style={{ background: \"#eeeeee\", padding: 0 }}\r\n                                            dataformBoxShadow={false}\r\n                                        />\r\n                                    </TabPane>\r\n\r\n                                    <TabPane\r\n                                        tab={\r\n                                            <span>\r\n                                                <OrderedListOutlined />\r\n                                               مشکلات \r\n                                            </span>\r\n                                        }\r\n                                        key=\"4\"\r\n                                        style={{ margin: 10 }}\r\n                                    >\r\n                                        <EquipmentProblem\r\n                                            parent={this}\r\n                                            params={() => {\r\n                                                return { equipment: this.state.selectedItem! };\r\n                                            }}\r\n                                        />\r\n                                    </TabPane>\r\n                                </Tabs>\r\n                            </div>\r\n                            :\r\n                            <EquipmentItem params={() => {\r\n                                return { parent: this.state.selectedItem }\r\n                            }}\r\n                                ref={node => this.equipmentItem = node}\r\n                                onEntitySaved={() => this.loadData()}\r\n                                onLoaded={(initialData) => this.setState({ equipmentItemInitialData: initialData })}\r\n                                onStateChanged={() => this.setState({ equipmentItemInitialData: this.equipmentItem?.initialData })}\r\n                                showHeader={false}\r\n                                extraViewNode={() =>\r\n                                    <Col className=\"box\" style={{ width: \"100%\", textAlign: \"left\" }}>\r\n                                        <Button type=\"ghost\" onClick={() => this.equipmentItem?.back()} icon={<StopOutlined />} loading={this.state.loading} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                                            لغو\r\n                                        </Button>\r\n                                    </Col>\r\n                                }\r\n                            />\r\n                        }\r\n                    </div>\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","const BASE_URL = \"https://static.neshan.org\";\r\nconst DEFAULT_URL_SCRIPT = `${BASE_URL}/sdk/leaflet/1.4.0/leaflet.js`;\r\nconst DEFAULT_URL_STYLE = `${BASE_URL}/sdk/leaflet/1.4.0/leaflet.css`;\r\nexport default (props => {\r\n  const createScriptStyle = () => {\r\n    const {\r\n      onError,\r\n      onLoad\r\n    } = props; //-----import style\r\n\r\n    if (!document.head.querySelector(`link[href=\"${DEFAULT_URL_STYLE}\"]`)) {\r\n      const style = document.createElement(\"link\");\r\n      style.href = DEFAULT_URL_STYLE;\r\n      style.rel = \"stylesheet\";\r\n      document.head.appendChild(style);\r\n    } //------import script\r\n\r\n\r\n    if (window.L) {\r\n      if (onLoad) onLoad();\r\n      return;\r\n    }\r\n\r\n    const script = document.body.querySelector(`script[src=\"${DEFAULT_URL_SCRIPT}\"]`) || document.createElement(\"script\");\r\n    script.addEventListener(\"load\", () => {\r\n      if (onLoad) onLoad();\r\n      return;\r\n    });\r\n    script.addEventListener(\"error\", () => {\r\n      if (onError) onError();\r\n      return;\r\n    });\r\n\r\n    if (!script.src) {\r\n      script.src = DEFAULT_URL_SCRIPT;\r\n      document.body.appendChild(script);\r\n    }\r\n  };\r\n\r\n  return createScriptStyle();\r\n});","import React, { useEffect, useRef } from \"react\";\r\nimport neshan_map_loader from \"./loaders/neshan_map_loader\";\r\n\r\nconst NeshanMap = props => {\r\n    const {\r\n        style,\r\n        options,\r\n        onInit\r\n    } = props;\r\n    const mapEl = useRef(null);\r\n    const defaultStyle = {\r\n        width: \"100%\",\r\n        height: \"400px\",\r\n        margin: 0,\r\n        padding: 0,\r\n        background: \"#eee\"\r\n    };\r\n    const defaultOptions = {\r\n        key: \"web.UCZ3fGequfKBuFX8MRwqQdtyCieOe08vUC4HXYqo\",\r\n        maptype: \"dreamy\",\r\n        poi: true,\r\n        traffic: false,\r\n        center: [35.7, 51.4],\r\n        zoom: 0\r\n    };\r\n    useEffect(() => {\r\n        neshan_map_loader({\r\n            onLoad: () => {\r\n                let map = new window.L.Map(mapEl.current, {\r\n                    ...defaultOptions,\r\n                    ...options\r\n                });\r\n                if (onInit) onInit(window.L, map);\r\n            },\r\n            onError: () => {\r\n                console.error(\"Neshan Maps Error: This page didn't load Neshan Maps correctly\");\r\n            }\r\n        });\r\n    }, []);\r\n    return /*#__PURE__*/React.createElement(\"div\", {\r\n        ref: mapEl,\r\n        style: {\r\n            ...defaultStyle,\r\n            ...style\r\n        }\r\n    });\r\n};\r\n\r\nexport default NeshanMap;","import React from \"react\";\r\nimport CustomSpinner from \"../infrastructure/customSpinner\";\r\nimport NeshanMap from \"./NeshanMap\";\r\n\r\nexport interface IMapProps {\r\n    cityName?: string;\r\n    lat?: number | null;\r\n    lng?: number | null;\r\n    onChangeMarker?: (lat?: number | null, lng?: number | null) => void;\r\n    disableChangeMarker?: boolean;\r\n}\r\n\r\nexport interface IMapStates {\r\n    lat?: number | null;\r\n    lng?: number | null;\r\n    loading: boolean;\r\n    currentCityName?: string;\r\n}\r\n\r\ninterface SearchResult {\r\n    items?: Item[];\r\n}\r\n\r\ninterface Item {\r\n    type?: string;\r\n    location?: { x: number; y: number; };\r\n}\r\n\r\nconst SimpleMap = (props: IMapProps) => {\r\n\r\n    const [position, setPosition] = React.useState<IMapStates>({ lat: props.lat, lng: props.lng, loading: false, currentCityName: !props.lat || !props.lng ? undefined : props.cityName });\r\n    let { lat, lng } = position;\r\n\r\n    if (props.cityName !== position.currentCityName) {\r\n        fetch(\"https://api.neshan.org/v1/search?term=\" + props.cityName + \"&lat=35.7&lng=51.4\", {\r\n            method: 'GET',\r\n            headers: {\r\n                'Api-Key': 'service.4a4UMl6QuKydVvKbPbsn0XsffuHW0Sn7RjTfeBE2'\r\n            }\r\n        }).then(async (response) => {\r\n            let result = await response.json() as SearchResult;\r\n            let city = result?.items?.find(i => i.type === \"city_landmark\" || i.type === \"town_landmark\");\r\n            setPosition({ lat: city?.location?.y, lng: city?.location?.x, currentCityName: props.cityName, loading: false });\r\n            if (props.onChangeMarker)\r\n                props.onChangeMarker(city?.location?.y, city?.location?.x);\r\n        });\r\n        lat = null;\r\n        lng = null;\r\n        position.loading = true;\r\n    }\r\n\r\n    if (!lat || !lng || !props.cityName) {\r\n        if (position.loading)\r\n            return (<CustomSpinner />);\r\n        return (< div > لطفا شهر را انتخاب نمایید</div>);\r\n    }\r\n\r\n    return (\r\n        <NeshanMap\r\n            options={{\r\n                maptype: 'dreamy',\r\n                poi: true,\r\n                traffic: false,\r\n                center: [lat, lng],\r\n                zoom: 13\r\n            }}\r\n            onInit={(L: any, myMap: any) => {\r\n                let marker = L.marker([lat, lng])\r\n                    .addTo(myMap);\r\n                if (!props.disableChangeMarker)\r\n                    myMap.on('click', function (e: any) {\r\n                        marker.setLatLng(e.latlng);\r\n                        if (props.onChangeMarker)\r\n                            props.onChangeMarker(e.latlng.lat, e.latlng.lng);\r\n                        setPosition({ lat: e.latlng.lat, lng: e.latlng.lng, currentCityName: position.currentCityName, loading: false });\r\n                    });\r\n            }}\r\n        />\r\n    );\r\n}\r\n\r\nexport default SimpleMap;","import { Descriptions } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { DamageType } from \"../damageType\";\r\nimport { Center } from \"../center\";\r\nimport { IEvaluatorDamageType, IEvaluatorDamageTypeProps, IEvaluatorDamageTypeStates } from \"./interfaces\";\r\nimport { ICenterProps } from \"../center/interfaces\";\r\n\r\nexport class EvaluatorDamageType extends EntityManager<IEvaluatorDamageType, IEvaluatorDamageTypeProps, IEvaluatorDamageTypeStates> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"نوع خسارت مجاز ارزیابی\",\r\n            name: \"EvaluatorDamageType\",\r\n            Properties: [\r\n                {\r\n                    title: \"ارزیاب\",\r\n                    dataIndex: \"EvaluatorId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا ارزیاب را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Center,\r\n                        lookupProperty: \"Evaluator\",\r\n                        lookupDisplayFields: [\"FullName\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"نوع خسارت\",\r\n                    dataIndex: \"DamageTypeId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا نوع خسارت را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: DamageType,\r\n                        lookupProperty: \"DamageType\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    onInitializing() {\r\n\r\n        this.preparelookupProps = (propName, lookupProps: any) => {\r\n            if (propName === \"EvaluatorId\")\r\n                (lookupProps as ICenterProps).isEvaluator = true;\r\n\r\n            return lookupProps;\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            if (this.props.params && this.props.params()?.evaluator) {\r\n                return ComparisonFilter.Equal<IEvaluatorDamageType>(m => m.EvaluatorId, this.props.params && this.props.params()?.evaluator?.Id);\r\n            }\r\n        };\r\n        this.extraHeaderNodes = () => {\r\n            return (\r\n                <Descriptions className=\"header-page\">\r\n                    <Descriptions.Item label=\"مرکز ارزیابی\">{this.props.params && this.props.params().evaluator?.FullName}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n        };\r\n        this.onEntityAdded = (entity) => {\r\n            let evaluator = this.props.params && this.props.params().evaluator\r\n            if (evaluator) {\r\n                entity.EvaluatorId = evaluator.Id;\r\n                entity.Evaluator = evaluator;\r\n                entity.ModifiedProperties.push(\"EvaluatorId\");\r\n            }\r\n            return true;\r\n        };\r\n    }\r\n}\r\n","import { Descriptions } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { Brand } from \"../brand\";\r\nimport { EquipmentItem } from \"../equipment/equipmentItem\";\r\nimport { IEquipmentItemProps } from \"../equipment/interfaces\";\r\nimport { Center } from \"../center\";\r\nimport { IEvaluatorEquipment, IEvaluatorEquipmentProps, IEvaluatorEquipmentStates } from \"./interfaces\";\r\nimport { ICenterProps } from \"../center/interfaces\";\r\n\r\nexport class EvaluatorEquipment extends EntityManager<IEvaluatorEquipment, IEvaluatorEquipmentProps, IEvaluatorEquipmentStates>{\r\n\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"تجهیزات مجاز ارزیابی\",\r\n            name: \"EvaluatorEquipment\",\r\n            Properties: [\r\n                {\r\n                    title: \"ارزیاب\",\r\n                    dataIndex: \"EvaluatorId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا ارزیاب را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Center,\r\n                        lookupProperty: \"Evaluator\",\r\n                        lookupDisplayFields: [\"FullName\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"تجهیز\",\r\n                    dataIndex: \"EquipmentId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا تجهیز را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: EquipmentItem,\r\n                        lookupProperty: \"Equipment\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"BrandId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا برند را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Brand,\r\n                        lookupProperty: \"Brand\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n\r\n        this.preparelookupProps = (propName, lookupProps: any) => {\r\n            if (propName === \"EvaluatorId\")\r\n                (lookupProps as ICenterProps).isEvaluator = true;\r\n\r\n            if (propName === \"EquipmentId\")\r\n                (lookupProps as IEquipmentItemProps).params = () => {\r\n                    return { onlySubItems: true }\r\n                };\r\n\r\n            return lookupProps;\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            if (this.props.params && this.props.params()?.evaluator) {\r\n                return ComparisonFilter.Equal<IEvaluatorEquipment>(m => m.EvaluatorId, this.props.params && this.props.params()?.evaluator?.Id);\r\n            }\r\n        };\r\n        this.extraHeaderNodes = () => {\r\n            return (\r\n                <Descriptions className=\"header-page\">\r\n                    <Descriptions.Item label=\"مرکز ارزیابی\">{this.props.params && this.props.params().evaluator?.FullName}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n        };\r\n        this.onEntityAdded = (entity) => {\r\n            let evaluator = this.props.params && this.props.params().evaluator\r\n            if (evaluator) {\r\n                entity.EvaluatorId = evaluator.Id;\r\n                entity.Evaluator = evaluator;\r\n                entity.ModifiedProperties.push(\"EvaluatorId\");\r\n            }\r\n            return true;\r\n        };\r\n    }\r\n}","import { Descriptions } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { Brand } from \"../brand\";\r\nimport { EquipmentItem } from \"../equipment/equipmentItem\";\r\nimport { IEquipmentItemProps } from \"../equipment/interfaces\";\r\nimport { Center } from \"../center\";\r\nimport { IRepairCenterEquipment, IRepairCenterEquipmentProps, IRepairCenterEquipmentStates } from \"./interfaces\";\r\nimport { ICenterProps } from \"../center/interfaces\";\r\n\r\nexport class RepairCenterEquipment extends EntityManager<IRepairCenterEquipment, IRepairCenterEquipmentProps, IRepairCenterEquipmentStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"تجهیزات مجاز تعمیر\",\r\n            name: \"RepairCenterEquipment\",\r\n            Properties: [\r\n                {\r\n                    title: \"مرکز تعمیرات\",\r\n                    dataIndex: \"RepairCenterId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا مرکز تعمیرات را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Center,\r\n                        lookupProperty: \"RepairCenter\",\r\n                        lookupDisplayFields: [\"FullName\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"تجهیز\",\r\n                    dataIndex: \"EquipmentId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا تجهیز را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: EquipmentItem,\r\n                        lookupProperty: \"Equipment\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"BrandId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا برند را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Brand,\r\n                        lookupProperty: \"Brand\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    onInitializing() {\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n\r\n        this.preparelookupProps = (propName, lookupProps: any) => {\r\n            if (propName === \"RepairCenterId\")\r\n                (lookupProps as ICenterProps).isRepairCenter = true;\r\n\r\n            if (propName === \"EquipmentId\")\r\n                (lookupProps as IEquipmentItemProps).params = () => {\r\n                    return { onlySubItems: true }\r\n                };\r\n            return lookupProps;\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            if (this.props.params && this.props.params()?.repairCenter) {\r\n                return ComparisonFilter.Equal<IRepairCenterEquipment>(m => m.RepairCenterId, this.props.params && this.props.params()?.repairCenter?.Id);\r\n            }\r\n        };\r\n        this.extraHeaderNodes = () => {\r\n            return (\r\n                <Descriptions className=\"header-page\">\r\n                    <Descriptions.Item label=\"مرکز تعمیرات\">{this.props.params && this.props.params().repairCenter?.FullName}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n        };\r\n        this.onEntityAdded = (entity) => {\r\n            let repairCenter = this.props.params && this.props.params().repairCenter\r\n            if (repairCenter) {\r\n                entity.RepairCenterId = repairCenter.Id;\r\n                entity.RepairCenter = repairCenter;\r\n                entity.ModifiedProperties.push(\"RepairCenterId\");\r\n            }\r\n            return true;\r\n        };\r\n    }\r\n}","import { IEntityManagerProps, IEntityManagerStates, IInitialData } from \"../../components/entityManager/interfaces\";\r\nimport { IEntity } from \"../../components/infrastructure/models\";\r\nimport { ICity } from \"../city/interfaces\";\r\nimport { IInsurer } from \"../insurer/interfaces\";\r\nimport { IProvince } from \"../province/interfaces\";\r\n\r\nexport enum enmPersonalityTypes {\r\n    Actual = 0,\r\n    Legal = 1\r\n}\r\n\r\nexport const personalityTypesOptions = [\r\n    { title: 'حقیقی', value: enmPersonalityTypes.Actual },\r\n    { title: 'حقوقی', value: enmPersonalityTypes.Legal }\r\n];\r\n\r\nexport interface ICenterInitialData extends IInitialData {\r\n    Insurers: IInsurer[];\r\n}\r\n\r\nexport interface IEvaluatorInsurer extends IEntity {\r\n    InsurerId: number;\r\n    EvaluatorId: number;\r\n}\r\n\r\nexport interface ICenter extends IEntity {\r\n    MainCenterId: number;\r\n    MainCenter: ICenter;\r\n    ParentId?: number;\r\n    Parent?: ICenter;\r\n    IsEvaluator: boolean;\r\n    IsRepairCenter: boolean;\r\n    Code: number;\r\n    Personality: enmPersonalityTypes;\r\n    Name?: string;\r\n    FirstName?: string;\r\n    LastName?: string;\r\n    FullName?: string;\r\n    NationalCode: string;\r\n    ProvinceId: number;\r\n    Province?: IProvince;\r\n    CityId: number;\r\n    City?: ICity;\r\n    Address?: string;\r\n    PostalCode?: string;\r\n    Phone?: string;\r\n    Fax?: string;\r\n    Mobile?: string;\r\n    Email?: string;\r\n    ShebaNo?: string;\r\n    Latitude?: number | null;\r\n    Longitude?: number | null;\r\n    WorkTime?: string;\r\n    IsActive: boolean;\r\n    SecondEvaluationPermission?: boolean;\r\n    EvaluatorInsurers: IEvaluatorInsurer[];\r\n    Insurers: number[];\r\n}\r\n\r\nexport interface ICenterProps extends IEntityManagerProps<ICenter> {\r\n    isEvaluator: boolean;\r\n    isRepairCenter: boolean;\r\n    params?: () => {\r\n        provinceId?: number;\r\n        cityId?: number;\r\n    };\r\n}\r\n\r\nexport interface ICenterStates extends IEntityManagerStates<ICenter> {\r\n    insurers: IInsurer[];\r\n}","import { Button, Col } from \"antd\";\r\nimport { ReactNode } from \"react\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { AndFilter, ComparisonFilter, IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { enmEntityState, IFetchingInfo, IResultSet } from \"../../components/infrastructure/models\";\r\nimport SimpleMap from \"../../components/map\";\r\nimport { City } from \"../city\";\r\nimport { ICityProps } from \"../city/interfaces\";\r\nimport { EvaluatorDamageType } from \"../evaluatorDamageType\";\r\nimport { EvaluatorEquipment } from \"../evaluatorEquipment\";\r\nimport { Province } from \"../province\";\r\nimport { RepairCenterEquipment } from \"../repairCenterEquipment\";\r\nimport { UserRelation } from \"../userRelation\";\r\nimport { enmUserTypes } from \"../userRelation/zobdehUser\";\r\nimport { enmPersonalityTypes, ICenter, ICenterInitialData, ICenterProps, ICenterStates, personalityTypesOptions } from \"./interfaces\";\r\n\r\nexport class Center extends EntityManager<ICenter, ICenterProps, ICenterStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Center\",\r\n            title: \"مراکز\",\r\n            Properties: [\r\n                {\r\n                    title: \"نوع مرکز\",\r\n                    dataIndex: \"Personality\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        options: personalityTypesOptions\r\n                    },\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نوع مرکز را تعیین نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد/شناسه ملی\",\r\n                    dataIndex: \"NationalCode\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد/شناسه ملی مرکز را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"کد مرکز\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: true,\r\n                    rules: [{ required: true, message: 'لطفا کد مرکز را تعیین نمایید' }],\r\n                    disabled: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"نام شرکت\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rulesFunc: (entity: ICenter) => {\r\n                        if (entity.Personality === enmPersonalityTypes.Legal) {\r\n                            return [{ required: true, message: 'لطفا نام مرکز را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: ICenter) => {\r\n                        return entity.Personality === enmPersonalityTypes.Legal;\r\n                    },\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"FirstName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rulesFunc: (entity: ICenter) => {\r\n                        if (entity.Personality === enmPersonalityTypes.Actual) {\r\n                            return [{ required: true, message: 'لطفا نام مرکز را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: ICenter) => {\r\n                        return entity.Personality === enmPersonalityTypes.Actual;\r\n                    },\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"نام خانوادگی\",\r\n                    dataIndex: \"LastName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rulesFunc: (entity: ICenter) => {\r\n                        if (entity.Personality === enmPersonalityTypes.Actual) {\r\n                            return [{ required: true, message: 'لطفا نام خانوادگی مرکز را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: ICenter) => {\r\n                        return entity.Personality === enmPersonalityTypes.Actual;\r\n                    },\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"نام مرکز\",\r\n                    dataIndex: \"FullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    width: 200,\r\n                    showControl: false,\r\n                    sortable: false\r\n                },\r\n                {\r\n                    title: \"مرکز اصلی\",\r\n                    dataIndex: \"ParentId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    lookup: {\r\n                        lookupComponent: Center,\r\n                        lookupProperty: \"Parent\",\r\n                        lookupDisplayFields: [\"Code\", \"FullName\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"مرکز ارزیابی؟\",\r\n                    dataIndex: \"IsEvaluator\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"مرکز تعمیرات؟\",\r\n                    dataIndex: \"IsRepairCenter\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 140\r\n                },\r\n                {\r\n                    title: \"بیمه گرهای مجاز\",\r\n                    dataIndex: \"Insurers\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: (sender: Center) => {\r\n                            return sender.state.insurers.map(i => {\r\n                                return { title: i.Name, value: i.Id };\r\n                            });\r\n                        },\r\n                        mode: \"multiple\"\r\n                    },\r\n                    visibility: (entity: ICenter) => {\r\n                        return entity.IsEvaluator;\r\n                    },\r\n                    filterable: false,\r\n                    width: 150,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"استان\",\r\n                    dataIndex: \"ProvinceId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا استان را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Province,\r\n                        lookupProperty: \"Province\",\r\n                        lookupDisplayFields: [\"Name\"],\r\n\r\n                    }\r\n                },\r\n                {\r\n                    title: \"شهر\",\r\n                    dataIndex: \"CityId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا شهر را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: City,\r\n                        lookupProperty: \"City\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"آدرس\",\r\n                    dataIndex: \"Address\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"کد پستی\",\r\n                    dataIndex: \"PostalCode\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    rules: [{\r\n                        validator: async (_, value: any) => {\r\n                            if (!!value && value.length !== 10)\r\n                                return Promise.reject(new Error('کد پستی باید 10 رقم باشد'));\r\n                            return Promise.resolve();\r\n                        }\r\n                    }]\r\n                },\r\n                {\r\n                    title: \"تلفن\",\r\n                    dataIndex: \"Phone\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: true,\r\n                    formatter: value => {\r\n                        const formated = `${value}`.length ? `0${value}`.replace(/\\D+/g, '') : \"\";\r\n                        return formated.startsWith('09') ? formated : formated.replace(/(\\d{3})(\\d+)/, '$1-$2');\r\n                    },\r\n                    parser: value => {\r\n                        const parsed = (value && value.length && value.startsWith('0') ? value.substring(1) : value)?.replace(/\\\\s?|(-*)/g, '') ?? \"\";\r\n                        return parsed;\r\n                    },\r\n                    onKeyPress: (event, value) => {\r\n                        if (!event.key.match(/\\d/g) || `${value}`.length >= 10) {\r\n                            event.preventDefault();\r\n                        }\r\n                    },\r\n                    maxLength: 12,\r\n                    width: 150,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"نمابر\",\r\n                    dataIndex: \"Fax\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"تلفن همراه\",\r\n                    dataIndex: \"Mobile\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.numberinput,\r\n                    formatter: value => {\r\n                        const formated = `${value}`.length ? `0${value}`.replace(/\\D+/g, '') : \"\";\r\n                        return formated;\r\n                    },\r\n                    parser: value => {\r\n                        const parsed = (value && value.length && value.startsWith('0') ? value.substring(1) : value) ?? \"\";\r\n                        return parsed;\r\n                    },\r\n                    onKeyPress: (event, value) => {\r\n                        if (!event.key.match(/\\d/g) || `${value}`.length >= 10) {\r\n                            event.preventDefault();\r\n                        }\r\n                    },\r\n                    maxLength: 11,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"شماره شبا\",\r\n                    dataIndex: \"ShebaNo\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"نشانی الکترونیک\",\r\n                    dataIndex: \"Email\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.email,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"ساعت کار مرکز\",\r\n                    dataIndex: \"WorkTime\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    width: 150,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"مجوز ارزیابی مجدد دارد؟\",\r\n                    dataIndex: \"SecondEvaluationPermission\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    visibility: (entity: ICenter) => {\r\n                        return entity.IsEvaluator;\r\n                    },\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"فعال؟\",\r\n                    dataIndex: \"IsActive\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 100\r\n                },\r\n                {\r\n                    title: \"موقعیت مکانی\",\r\n                    dataIndex: \"Location\",\r\n                    showColumn: false,\r\n                    controlType: enmControlType.template,\r\n                    filterable: false,\r\n                    renderControl: (entity: ICenter) => {\r\n                        return (\r\n                            <SimpleMap\r\n                                cityName={entity.City?.Name}\r\n                                lat={entity.Latitude}\r\n                                lng={entity.Longitude}\r\n                                onChangeMarker={(lat, lng) => {\r\n                                    entity.Latitude = lat;\r\n                                    entity.Longitude = lng;\r\n                                    if (entity.ModifiedProperties.indexOf(\"Latitude\") === -1)\r\n                                        entity.ModifiedProperties.push(\"Latitude\");\r\n                                    if (entity.ModifiedProperties.indexOf(\"Longitude\") === -1)\r\n                                        entity.ModifiedProperties.push(\"Longitude\");\r\n                                    if (entity.State !== enmEntityState.Added)\r\n                                        entity.State = enmEntityState.Modified;\r\n                                }} />\r\n                        );\r\n                    }\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n        this.searchable = true;\r\n\r\n        this.searchArea = {\r\n            columnsPerRow: 2,\r\n            onFilterChanged: (property, _, form) => {\r\n                if (property.dataIndex === \"ProvinceId\") {\r\n                    form?.resetFields([\"CityId\"]);\r\n                    form?.setFields([{ name: \"CityId\", value: null }]);\r\n                }\r\n            }\r\n        };\r\n\r\n        this.enableDeleteCommand = entity => entity.Id > 1;\r\n\r\n        this.preparelookupProps = (propName, lookupProps: any, form, isSearchForm) => {\r\n            if (propName === \"CityId\")\r\n                (lookupProps as ICityProps).params = () => {\r\n                    let province = isSearchForm && form ? form.getFieldValue(\"ProvinceId\") : this.state.currentEntity?.Province;\r\n                    if (isSearchForm && form)\r\n                        return { province: province?.value };\r\n                    else\r\n                        return { province };\r\n                };\r\n\r\n            return lookupProps;\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            let filter: IFilter | undefined;\r\n            if (this.props.isEvaluator)\r\n                filter = new AndFilter([\r\n                    ComparisonFilter.Equal<ICenter>(c => c.IsEvaluator, true),\r\n                    ComparisonFilter.Equal<ICenter>(c => c.IsActive, true)\r\n                ]);\r\n\r\n            if (this.props.isRepairCenter) {\r\n                let tmp = new AndFilter([\r\n                    ComparisonFilter.Equal<ICenter>(c => c.IsRepairCenter, true),\r\n                    ComparisonFilter.Equal<ICenter>(c => c.IsActive, true)\r\n                ]);\r\n                filter = filter ? filter.Or(tmp) : tmp;\r\n            }\r\n\r\n            return filter;\r\n        };\r\n\r\n        this.onDataFetching = (fetchingInfo: IFetchingInfo) => {\r\n\r\n            if (this.props.params) {\r\n                const { provinceId, cityId } = this.props.params();\r\n                if (provinceId) {\r\n                    let tmp = ComparisonFilter.Equal<ICenter>(c => c.ProvinceId, provinceId);\r\n                    fetchingInfo.Filter = fetchingInfo.Filter ? fetchingInfo.Filter.And(tmp) : tmp;\r\n                }\r\n\r\n                if (cityId) {\r\n                    let tmp = ComparisonFilter.Equal<ICenter>(c => c.CityId, cityId);\r\n                    fetchingInfo.Filter = fetchingInfo.Filter ? fetchingInfo.Filter.And(tmp) : tmp;\r\n                }\r\n            }\r\n            return fetchingInfo;\r\n        };\r\n\r\n        //this.onDataFetched = result => {\r\n        //    result && result.Data && result.Data.forEach(i => {\r\n        //        if (i && i.Mobile && !i.Mobile.startsWith('0'))\r\n        //            i.Mobile = '0' + i.Mobile;\r\n        //    });\r\n        //    return result;\r\n        //}\r\n\r\n        this.onLoaded = (initialData) => {\r\n            this.setState({ insurers: (initialData as ICenterInitialData).Insurers });\r\n        };\r\n\r\n        this.onEntityView = (entity) => {\r\n            entity.Insurers = entity.EvaluatorInsurers.map(e => e.InsurerId);\r\n            //if (entity.Phone && !entity.Phone.startsWith('0'))\r\n            //    entity.Phone = '0' + entity.Phone;\r\n            //if (entity.Mobile && !entity.Mobile.startsWith('0'))\r\n            //    entity.Mobile = '0' + entity.Mobile;\r\n            return true;\r\n        };\r\n\r\n        this.onEntityEdit = (entity) => {\r\n            entity.Insurers = entity.EvaluatorInsurers.map(e => e.InsurerId);\r\n            //if (entity.Phone && !entity.Phone.startsWith('0'))\r\n            //    entity.Phone = '0' + entity.Phone;\r\n            //if (entity.Mobile && !entity.Mobile.startsWith('0'))\r\n            //    entity.Mobile = '0' + entity.Mobile;\r\n            return true;\r\n        };\r\n\r\n        this.onEntityDelete = (entity) => {\r\n            entity.Insurers = entity.EvaluatorInsurers.map(e => e.InsurerId);\r\n            return true;\r\n        };\r\n\r\n        this.onEntityChanged = async (entity, propertyName, form) => {\r\n            if (propertyName === \"ProvinceId\") {\r\n                form.resetFields([\"CityId\"]);\r\n                form.setFields([{ name: \"CityId\", value: null }]);\r\n                entity.City = undefined;\r\n                entity.CityId = 0;\r\n            }\r\n            if (propertyName === \"CityId\") {\r\n                if (!entity.Province) {\r\n                    form.resetFields([\"ProvinceId\"]);\r\n                    form.setFields([{ name: \"ProvinceId\", value: entity.City?.Province }]);\r\n                    entity.Province = entity.City?.Province;\r\n                    entity.ProvinceId = entity.City?.ParentId ?? 0;\r\n                }\r\n            }\r\n            if (propertyName === \"ParentId\") {\r\n                await this.callApi({\r\n                    url: \"center/getnextcode\", data: { parentCode: entity.Parent?.Code }, onSuccess: (result: IResultSet<any>) => {\r\n                        if (result.ValidationState.Successful) {\r\n                            entity.Code = result.Data;\r\n                        }\r\n                        form.setFields([{ name: \"Code\", value: entity.Code }]);\r\n                    }\r\n                });\r\n            }\r\n        };\r\n\r\n        this.onEntitySaving = (entity) => {\r\n            entity.EvaluatorInsurers.forEach(e => {\r\n                if (!entity.Insurers.find(i => i === e.InsurerId))\r\n                    e.State = enmEntityState.Deleted;\r\n            });\r\n            entity.Insurers.forEach(e => {\r\n                if (!entity.EvaluatorInsurers.find(i => i.InsurerId === e))\r\n                    entity.EvaluatorInsurers.push({ RowGuid: Core.newId(), State: enmEntityState.Added, EvaluatorId: this.state.currentEntity?.Id!, InsurerId: e } as any);\r\n            });\r\n            if (entity.ModifiedProperties.find(e => e === \"Insurers\")) {\r\n                let index = entity.ModifiedProperties.indexOf(\"Insurers\");\r\n                entity.ModifiedProperties.splice(index, 1);\r\n                entity.ModifiedProperties.push(\"EvaluatorInsurers\");\r\n            }\r\n            return true;\r\n        };\r\n\r\n        this.onEntityAdded = async (entity) => {\r\n            entity.Personality = enmPersonalityTypes.Actual;\r\n            entity.EvaluatorInsurers = [];\r\n            entity.Insurers = [];\r\n            entity.MainCenterId = 1;\r\n            entity.ModifiedProperties.push('MainCenterId');\r\n            await this.callApi({\r\n                url: \"center/getnextcode\", data: { ParentCode: null }, onSuccess: (result: IResultSet<any>) => {\r\n                    entity.Code = result.Data ?? 0;\r\n                    entity.ModifiedProperties.push('Code');\r\n                }\r\n            });\r\n            return true;\r\n        };\r\n\r\n        this.renderingToolbar = () => {\r\n            let result: ReactNode[] = [];\r\n            let userEvaluatorAccess = this.initialData?.AccessList[\"UserCenter\"];\r\n            let evaluatorEquipmentAccess = this.initialData?.AccessList[\"EvaluatorEquipment\"];\r\n            let evaluatorDamageTypeAccess = this.initialData?.AccessList[\"EvaluatorDamageType\"];\r\n            let repairCenterEquipmentAccess = this.initialData?.AccessList[\"RepairCenterEquipment\"];\r\n\r\n            if (userEvaluatorAccess === true) {\r\n                result.push(\r\n                    <Col key=\"Users\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onUsersClick}>کاربران مرکز</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            if (evaluatorEquipmentAccess === true && this.selectedEntity?.IsEvaluator) {\r\n                result.push(\r\n                    <Col key=\"EvaluatorEquipments\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onEvaluatorEquipmentClick}>تجهیزات مجاز ارزیابی</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            if (evaluatorDamageTypeAccess === true && this.selectedEntity?.IsEvaluator) {\r\n                result.push(\r\n                    <Col key=\"EvaluatorDamageTypes\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onEvaluatorDamageTypeClick}>نوع خسارت مجاز ارزیابی</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            if (repairCenterEquipmentAccess === true && this.selectedEntity?.IsRepairCenter) {\r\n                result.push(\r\n                    <Col key=\"RepairCenterEquipments\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onRepairCenterEquipmentClick}>تجهیزات مجاز تعمیر</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            return result.length ? (<> {result} </>) : (<></>);\r\n        };\r\n\r\n        this.getDefaultState = () => {\r\n            return { insurers: [] };\r\n        };\r\n    }\r\n    onUsersClick = () => {\r\n        this.addLookupForm(\"UserCenter\",\r\n            <UserRelation\r\n                key=\"UserCenter\"\r\n                title=\"کاربران مرکز\"\r\n                metadataName=\"UserCenter\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                userType={enmUserTypes.Spc}\r\n                params={() => {\r\n                    return { sourceId: this.selectedEntity?.Id, description: this.selectedEntity?.FullName ?? \"\" }\r\n                }}\r\n            />);\r\n    }\r\n    onEvaluatorEquipmentClick = () => {\r\n        this.addLookupForm(\"EvaluatorEquipment\",\r\n            <EvaluatorEquipment\r\n                key=\"EvaluatorEquipment\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { evaluator: this.selectedEntity }\r\n                }}\r\n            />);\r\n    }\r\n    onEvaluatorDamageTypeClick = () => {\r\n        this.addLookupForm(\"EvaluatorDamageType\",\r\n            <EvaluatorDamageType\r\n                key=\"EvaluatorDamageType\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { evaluator: this.selectedEntity }\r\n                }}\r\n            />);\r\n    }\r\n    onRepairCenterEquipmentClick = () => {\r\n        this.addLookupForm(\"RepairCenterEquipment\",\r\n            <RepairCenterEquipment\r\n                key=\"RepairCenterEquipment\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { repairCenter: this.selectedEntity }\r\n                }}\r\n            />);\r\n    }\r\n}","import { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { City } from \"../city\";\r\nimport { ICityProps } from \"../city/interfaces\";\r\nimport { enmPersonalityTypes } from \"../center/interfaces\";\r\nimport { Insurer } from \"../insurer\";\r\nimport { Province } from \"../province\";\r\nimport { UserRelation } from \"../userRelation\";\r\nimport { IPolicyholder, IPolicyholderProps, IPolicyholderStates } from \"./interfaces\";\r\nimport { FormInstance } from \"antd\";\r\n\r\nexport class Policyholder extends EntityManager<IPolicyholder, IPolicyholderProps, IPolicyholderStates>{\r\n    userPolicyholderFormId: string;\r\n    userPolicyholder?: UserRelation | null;\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Policyholder\",\r\n            title: \"بیمه گزار/مشتری\",\r\n            Properties: [\r\n                {\r\n                    title: \"بیمه گر\",\r\n                    dataIndex: \"InsurerId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا بیمه گر را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Insurer,\r\n                        lookupProperty: \"Insurer\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    },\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"کد بیمه گزار/مشتری\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"نوع بیمه گزار/مشتری\",\r\n                    dataIndex: \"Personality\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        options: [\r\n                            { title: 'حقیقی', value: enmPersonalityTypes.Actual },\r\n                            { title: 'حقوقی', value: enmPersonalityTypes.Legal }\r\n                        ]\r\n                    },\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا نوع مرکز را تعیین نمایید' }],\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"کد/شناسه ملی\",\r\n                    dataIndex: \"NationalCode\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا کد/شناسه ملی بیمه گزار/مشتری را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"نام شرکت\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rulesFunc: (entity: IPolicyholder) => {\r\n                        if (entity.Personality === enmPersonalityTypes.Legal) {\r\n                            return [{ required: true, message: 'لطفا نام شرکت بیمه گزار/مشتری را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: IPolicyholder) => {\r\n                        return entity.Personality === enmPersonalityTypes.Legal;\r\n                    },\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نام\",\r\n                    dataIndex: \"FirstName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rulesFunc: (entity: IPolicyholder) => {\r\n                        if (entity.Personality === enmPersonalityTypes.Actual) {\r\n                            return [{ required: true, message: 'لطفا نام بیمه گزار/مشتری را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: IPolicyholder) => {\r\n                        return entity.Personality === enmPersonalityTypes.Actual;\r\n                    },\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نام خانوادگی\",\r\n                    dataIndex: \"LastName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rulesFunc: (entity: IPolicyholder) => {\r\n                        if (entity.Personality === enmPersonalityTypes.Actual) {\r\n                            return [{ required: true, message: 'لطفا نام خانوادگی بیمه گزار/مشتری را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: IPolicyholder) => {\r\n                        return entity.Personality === enmPersonalityTypes.Actual;\r\n                    },\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"تاریخ تولد\",\r\n                    dataIndex: \"BirthDate\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rulesFunc: (entity: IPolicyholder) => {\r\n                        if (entity.Personality === enmPersonalityTypes.Actual) {\r\n                            return [{ required: true, message: 'لطفا تاریخ تولد بیمه گزار/مشتری را وارد نمایید' }];\r\n                        }\r\n                    },\r\n                    visibility: (entity: IPolicyholder) => {\r\n                        return entity.Personality === enmPersonalityTypes.Actual;\r\n                    },\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نام بیمه گزار/مشتری\",\r\n                    dataIndex: \"FullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    width: 150,\r\n                    showControl: false,\r\n                    sortable: false\r\n                },\r\n                {\r\n                    title: \"استان\",\r\n                    dataIndex: \"ProvinceId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    lookup: {\r\n                        lookupComponent: Province,\r\n                        lookupProperty: \"Province\",\r\n                        lookupDisplayFields: [\"Name\"],\r\n                        dropdownDisplayFields: [\"Name\"]\r\n                    },\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"شهر\",\r\n                    dataIndex: \"CityId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    lookup: {\r\n                        lookupComponent: City,\r\n                        lookupProperty: \"City\",\r\n                        lookupDisplayFields: [\"Name\"],\r\n                        dropdownDisplayFields: [\"Name\"]\r\n                    },\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"آدرس\",\r\n                    dataIndex: \"Address\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"شماره همراه\",\r\n                    dataIndex: \"Phone\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.numberinput,\r\n                    formatter: value => {\r\n                        const formated = `${value}`.length ? `0${value}`.replace(/\\D+/g, '') : \"\";\r\n                        return formated;\r\n                    },\r\n                    parser: value => {\r\n                        const parsed = (value && value.length && value.startsWith('0') ? value.substring(1) : value) ?? \"\";\r\n                        return parsed;\r\n                    },\r\n                    onKeyPress: (event, value) => {\r\n                        if (!event.key.match(/\\d/g) || `${value}`.length >= 10) {\r\n                            event.preventDefault();\r\n                        }\r\n                    },\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                },\r\n                {\r\n                    title: \"نشانی الکترونیک\",\r\n                    dataIndex: \"Email\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.email,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    showColumn: false,\r\n                    showInLookup: false\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    constructor(props: IPolicyholderProps) {\r\n        super(props)\r\n        this.userPolicyholderFormId = Core.newId();\r\n    }\r\n    onInitializing() {\r\n        this.searchable = true;\r\n\r\n        this.searchArea = {\r\n            columnsPerRow: 2,\r\n            onFilterChanged: (property, _, form) => {\r\n                if (property.dataIndex === \"ProvinceId\") {\r\n                    form?.resetFields([\"CityId\"]);\r\n                    form?.setFields([{ name: \"CityId\", value: null }]);\r\n                }\r\n            }\r\n        };\r\n\r\n\r\n\r\n        this.preparelookupProps = (propName, lookupProps: any, form, isSearchForm) => {\r\n            if (propName === \"CityId\")\r\n                (lookupProps as ICityProps).params = () => {\r\n                    let province = isSearchForm && form ? form.getFieldValue(\"ProvinceId\") : this.state.currentEntity?.Province;\r\n                    if (isSearchForm && form)\r\n                        return { province: province?.value };\r\n                    else\r\n                        return { province };\r\n                };\r\n\r\n            return lookupProps;\r\n        };\r\n\r\n        this.onEntityAdded = (entity) => {\r\n            entity.Personality = enmPersonalityTypes.Actual;\r\n            entity.BirthDate = undefined;\r\n            entity.ModifiedProperties.push(\"Personality\");\r\n            return true;\r\n        };\r\n\r\n        this.onEntityChanged = (entity: IPolicyholder, propertyName: string, form: FormInstance<any>) => {\r\n            if (propertyName === \"Personality\") {\r\n                form.setFields([{ name: \"BirthDate\", value: undefined }]);\r\n                entity.BirthDate = undefined;\r\n            }\r\n            if (propertyName === \"ProvinceId\") {\r\n                form.resetFields([\"CityId\"]);\r\n                form.setFields([{ name: \"CityId\", value: null }]);\r\n                entity.City = undefined;\r\n                entity.CityId = 0;\r\n            }\r\n            if (propertyName === \"CityId\") {\r\n                if (!entity.Province) {\r\n                    form.resetFields([\"ProvinceId\"]);\r\n                    form.setFields([{ name: \"ProvinceId\", value: entity.City?.Province }]);\r\n                    entity.Province = entity.City?.Province;\r\n                    entity.ProvinceId = entity.City?.ParentId ?? 0;\r\n                }\r\n            }\r\n        };\r\n    }\r\n    onUsersClick = () => {\r\n        this.setState({ displayLookupForm: this.userPolicyholderFormId });\r\n        this.userPolicyholder?.fetchData();\r\n    }\r\n}","import { IEntityManagerProps, IEntityManagerStates, IInitialData } from \"../../components/entityManager/interfaces\";\r\nimport { IEntity, IFetchingInfo } from \"../../components/infrastructure/models\";\r\nimport { ICity } from \"../city/interfaces\";\r\nimport { IDamageType } from \"../damageType/interfaces\";\r\nimport { ICenter } from \"../center/interfaces\";\r\nimport { IProvince } from \"../province/interfaces\";\r\nimport { IUser } from \"../../account/user/interfaces\";\r\nimport { IPolicyholderConfirmation } from \"../../evaluation/damageCaseEvaluator/policyholderConfirmation\";\r\nimport { IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { IPolicyEquipmentModel } from \"../policyEquipmentModel/interfaces\";\r\n\r\nexport enum enmIssuerTypes {\r\n    Self = 1,\r\n    Cp = 2,\r\n    Paliz = 3\r\n}\r\n\r\nexport enum enmDamageCaseStatus {\r\n    Create = 0,\r\n    AssignEvaluator = 1,\r\n    Evaluation = 2,\r\n    AssignRepairCenter = 3,\r\n    Repairation = 4,\r\n    Financial = 5,\r\n    Closed = 6,\r\n    Rejected = 7,\r\n    ReceiveDepreciated = 8,\r\n    ReceiveEquipment = 9\r\n}\r\n\r\nexport enum enmEvaluationStatus {\r\n    DocumentCheck = 0,\r\n    DefectiveDocuments = 1,\r\n    ContactSetting = 2,\r\n    MakingContact = 3,\r\n    DamageEstimation = 4,\r\n    PolicyholderConfirmation = 5,\r\n    PolicyholderRejected = 6,\r\n    EvaluationComplete = 7,\r\n    SendEssentials = 8,\r\n    Rejected = 99\r\n}\r\n\r\nexport enum enmRepairationStatus {\r\n    Check = 0,\r\n    WaitingForPiece = 1,\r\n    Repairation = 2,\r\n    Done = 3,\r\n    Unrepairable = 4\r\n}\r\n\r\nexport enum enmFinancialStatus {\r\n    WaitingForPay = 0,\r\n    InPayProgress = 1,\r\n    Paid = 2,\r\n    WaitingForReceipt = 3,\r\n    Receipt = 4\r\n}\r\n\r\nexport enum enmDocumentCheckStates {\r\n    Reject = 0,\r\n    Complete = 1,\r\n    Defective = 2\r\n}\r\n\r\nexport enum enmPolicyholderResponseTypes {\r\n    Objection = 0,\r\n    Pay = 1,\r\n    //Repair = 2,\r\n}\r\n\r\nexport enum enmEvaluationMethods {\r\n    VideoCall = 0,\r\n    //EvaluatorInPerson = 1,\r\n    PolicyholderInPerson = 2,\r\n    PolicyholderInPersonToInsurerBranch = 3\r\n}\r\n\r\nexport const evaluationMethodsOptions = [\r\n    { disabled: false, name: \"برقراری تماس تصویری\", makingContactStatusTitle: \"منتظر برقراری تماس تصویری\", makingContactCommandTitle: \"ثبت نتیجه برقراری تماس تصویری\", makingContactTitle: \"برقراری تماس تصویری\", contactSettingStatusTitle: \"منتظر تنظیم تماس تصویری\", contactSettingCommandTitle: \"تنظیم زمان تماس تصویری\", value: enmEvaluationMethods.VideoCall },\r\n    //{ disabled : false, name: \"مراجعه حضوری ارزیاب به بیمه گزار/مشتری\", makingContactStatusTitle: \"منتظر مراجعه حضوری ارزیاب به بیمه گزار/مشتری\", makingContactCommandTitle: \"ثبت نتیجه ارزیابی حضوری\", makingContactTitle: \"مراجعه حضوری ارزیاب\", contactSettingStatusTitle: \"منتظر تنظیم زمان مراجعه حضوری ارزیاب به بیمه گزار/مشتری \", contactSettingCommandTitle: \"تنظیم زمان مراجعه حضوری ارزیاب به بیمه گزار/مشتری\", value: enmEvaluationMethods.EvaluatorInPerson },\r\n    { disabled: false, name: \"مراجعه حضوری بیمه گزار/مشتری به مراکز مجاز ارزیابی\", makingContactStatusTitle: \"منتظر مراجعه حضوری بیمه گزار/مشتری به مرکز ارزیابی\", makingContactCommandTitle: \"ثبت نتیجه ارزیابی حضوری\", makingContactTitle: \"مراجعه حضوری بیمه گزار/مشتری\", contactSettingStatusTitle: \"منتظر تنظیم زمان مراجعه حضوری بیمه گزار/مشتری به مرکز ارزیابی\", contactSettingCommandTitle: \"تنظیم زمان مراجعه حضوری بیمه گزار/مشتری به مرکز ارزیابی\", value: enmEvaluationMethods.PolicyholderInPerson },\r\n    //{ disabled : false, name: \"مراجعه حضوری بیمه گزار/مشتری به شعب بیمه سامان\", makingContactStatusTitle: \"منتظر مراجعه حضوری بیمه گزار/مشتری به شعبه بیمه سامان\", makingContactCommandTitle: \"مراجعه حضوری بیمه گزار/مشتری به شعبه بیمه سامان\", contactSettingStatusTitle: \"منتظر تنظیم زمان مراجعه حضوری بیمه گزار/مشتری به شعبه بیمه سامان\", contactSettingCommandTitle: \"تنظیم زمان مراجعه حضوری بیمه گزار/مشتری به شعبه بیمه سامان\", value: enmEvaluationMethods.PolicyholderInPersonToInsurerBranch }\r\n];\r\n\r\nexport const damageCaseIssuerTypesOptions = [\r\n    { title: 'نرم افزار زبده', value: enmIssuerTypes.Self },\r\n    { title: 'پورتال مشتریان سامان', value: enmIssuerTypes.Cp },\r\n    { title: 'پالیز', value: enmIssuerTypes.Paliz }\r\n];\r\n\r\nexport const damageCaseStatusOptions = [\r\n    { title: 'ارسال نشده', value: enmDamageCaseStatus.Create },\r\n    { title: 'تخصیص ارزیاب', value: enmDamageCaseStatus.AssignEvaluator },\r\n    { title: 'ارزیابی', value: enmDamageCaseStatus.Evaluation },\r\n    { title: 'تخصیص تعمیرکار', value: enmDamageCaseStatus.AssignRepairCenter },\r\n    { title: 'تعمیر', value: enmDamageCaseStatus.Repairation },\r\n    { title: 'مالی', value: enmDamageCaseStatus.Financial },\r\n    { title: 'خاتمه یافته', value: enmDamageCaseStatus.Closed },\r\n    { title: 'رد شده', value: enmDamageCaseStatus.Rejected },\r\n    { title: 'در انتظار دریافت داغی', value: enmDamageCaseStatus.ReceiveDepreciated },\r\n    { title: 'در انتظار دریافت دستگاه', value: enmDamageCaseStatus.ReceiveEquipment }\r\n];\r\n\r\nexport const evaluationStatusOptions = [\r\n    { title: 'منتظر بررسی مدارک', name: 'بررسی مدارک', value: enmEvaluationStatus.DocumentCheck },\r\n    { title: 'منتظر  رفع نقص مدارک', name: 'رفع نقص مدارک', value: enmEvaluationStatus.DefectiveDocuments },\r\n    { title: 'منتظر تنظیم تماس', name: 'تنظیم تماس', value: enmEvaluationStatus.ContactSetting },\r\n    { title: 'منتظر برقراری تماس', name: 'برقراری تماس', value: enmEvaluationStatus.MakingContact },\r\n    { title: 'منتظر برآورد خسارت', name: 'برآورد خسارت', value: enmEvaluationStatus.DamageEstimation },\r\n    { title: 'منتظر تاییدیه بیمه گزار/مشتری', name: 'تاییدیه بیمه گزار/مشتری', value: enmEvaluationStatus.PolicyholderConfirmation },\r\n    { title: 'رد شده بیمه گزار/مشتری', name: 'رد شده بیمه گزار/مشتری', value: enmEvaluationStatus.PolicyholderRejected },\r\n    { title: 'تأیید بیمه گزار/مشتری، پایان ارزیابی', name: 'پایان ارزیابی', value: enmEvaluationStatus.EvaluationComplete },\r\n    { title: 'در انتظار دریافت دستگاه و لوازم جانبی', name: 'دریافت دستگاه و لوازم جانبی', value: enmEvaluationStatus.SendEssentials },\r\n    { title: 'رد شده', name: 'رد شده', value: enmEvaluationStatus.Rejected },\r\n];\r\n\r\nexport const repairationStatusOptions = [\r\n    { title: 'بررسی خسارت', value: enmRepairationStatus.Check },\r\n    { title: 'منتظر قطعه', value: enmRepairationStatus.WaitingForPiece },\r\n    { title: 'درحال تعمیر', value: enmRepairationStatus.Repairation },\r\n    { title: 'پایان تعمیر', value: enmRepairationStatus.Done },\r\n    { title: 'غیرقابل تعمیر', value: enmRepairationStatus.Unrepairable }\r\n];\r\n\r\nexport interface IDamageCase extends IEntity {\r\n    IssuerType: enmIssuerTypes;\r\n    Code: number;\r\n    TicketNo: number;\r\n    DamageTypeId?: number;\r\n    DamageType?: IDamageType;\r\n    PolicyEquipmentModelId: number;\r\n    PolicyEquipmentModel: IPolicyEquipmentModel;\r\n    EmergencyCallNumber: string;\r\n    DamageDate: any;\r\n    Status: enmDamageCaseStatus;\r\n    ProvinceId?: number;\r\n    Province: IProvince;\r\n    CityId?: number;\r\n    City: ICity;\r\n    Address?: string;\r\n    DamageReasonId?: number;\r\n    DamageReason?: string;\r\n    Description?: string;\r\n    ConfirmPossessionTransition?: boolean;\r\n    EvaluationMethod: enmEvaluationMethods;\r\n    NumberOfPreviousEvaluations: number;\r\n    DamageCaseEvaluators: {\r\n        Id: number;\r\n        Substatus: enmEvaluationStatus;\r\n        EvaluationSteps: { Substatus: enmEvaluationStatus; CreateDateTime: any; }[];\r\n        EvaluatorId: number;\r\n        CreateDateTime: any;\r\n        Evaluator: ICenter;\r\n        Creator?: IUser;\r\n        Estimations: { EstimatedAmaount: number; PayableAmount: number; ExpertConfirmation?: boolean; }[];\r\n        PolicyholderConfirmations: IPolicyholderConfirmation[];\r\n        EvaluationStartTime?: Date | null;\r\n    }[],\r\n    EvaluationStatus?: enmEvaluationStatus;\r\n    DamageCaseRepairCenters: {\r\n        RepairCenterId: number;\r\n        RepairCenter: ICenter;\r\n        Substatus: enmRepairationStatus;\r\n        PayableAmount: number;\r\n    }[]\r\n    RepairationStatus?: enmRepairationStatus;\r\n    PayableAmount?: number;\r\n    PayableAmountString: string;\r\n    DefaultEvaluator?: ICenter;\r\n    DefaultEvaluatorId?: number;\r\n    FinancialStatus?: enmFinancialStatus;\r\n    PossessionTransition?: boolean;\r\n    ReceiveDepreciated?: boolean;\r\n    ReceiveDepreciatedDateTime?: Date;\r\n    SentToBranch?: boolean;\r\n}\r\n\r\nexport interface IDamageCaseProps extends IEntityManagerProps<IDamageCase> {\r\n    defaultDamageCaseId?: number;\r\n}\r\n\r\nexport interface IDamageCaseStates extends IEntityManagerStates<IDamageCase> {\r\n    evaluationSteps: any[];\r\n    attachments: any[];\r\n}\r\n\r\nexport interface IDamageCaseInitialData extends IInitialData {\r\n    Center?: ICenter;\r\n}\r\n\r\nexport interface IDamageCaseFetchingInfo extends IFetchingInfo {\r\n    EvaluatorId?: number;\r\n    RepairCenterId?: number;\r\n    PolicyholderId?: number;\r\n    LoadNavigations?: boolean;\r\n    EvaluatorFilter?: IFilter;\r\n}\r\n","import { Alert } from 'antd';\r\nimport { Viewer, Worker } from '@react-pdf-viewer/core';\r\nimport { toolbarPlugin } from '@react-pdf-viewer/toolbar';\r\nimport '@react-pdf-viewer/core/lib/styles/index.css';\r\nimport '@react-pdf-viewer/toolbar/lib/styles/index.css';\r\nimport type { ToolbarSlot, TransformToolbarSlot } from '@react-pdf-viewer/toolbar';\r\n\r\nexport const PdfViewer = (props: { url?: string; restrictMode?: boolean; onLoad?: () => void }) => {\r\n\r\n    const toolbarPluginInstance = toolbarPlugin();\r\n    const { renderDefaultToolbar, Toolbar } = toolbarPluginInstance;\r\n\r\n    const transform: TransformToolbarSlot = (slot: ToolbarSlot) => {\r\n        if (props.restrictMode === true) {\r\n            slot.Download = () => <></>;\r\n            slot.DownloadMenuItem = () => <></>;\r\n\r\n        }\r\n        slot.Print = () => <></>;\r\n        slot.PrintMenuItem = () => <></>;\r\n        slot.Open = () => <></>;\r\n        slot.OpenMenuItem = () => <></>;\r\n        return {\r\n            ...slot\r\n        };\r\n    };\r\n\r\n    return (\r\n        props.url ?\r\n            <Worker workerUrl={'pdf.worker.min.js'}>\r\n                <div\r\n                    style={{\r\n                        direction: 'ltr',\r\n                        alignItems: 'center',\r\n                        backgroundColor: '#eeeeee',\r\n                        borderBottom: '1px solid rgba(0, 0, 0, 0.1)',\r\n                        display: 'flex',\r\n                        padding: '0.25rem',\r\n                    }}\r\n                >\r\n                    <Toolbar>{renderDefaultToolbar(transform)}</Toolbar>\r\n                </div>\r\n                <Viewer\r\n                    fileUrl={props.url}\r\n                    plugins={[toolbarPluginInstance]}\r\n                    onDocumentLoad={props.onLoad}\r\n\r\n                />\r\n            </Worker>\r\n            : <Alert message={'فایل یافت نشد'} type='warning' showIcon />\r\n    );\r\n}","import { Descriptions, List, Space, Tabs, Tooltip } from \"antd\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faReply } from '@fortawesome/free-solid-svg-icons';\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IInitialData, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport { AndFilter, ComparisonFilter, enmConditionalOperators, IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { Insurer } from \"../insurer\";\r\nimport { Policyholder } from \"../policyholder\";\r\nimport { IPolicy, IPolicyFetchingInfo, IPolicyProps, IPolicyStates } from \"./interfaces\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { PdfViewer } from \"../../components/pdfViewer\";\r\n\r\nconst { TabPane } = Tabs;\r\n\r\nexport class Policy extends BaseEntityManager<IPolicy, IPolicyProps, IPolicyStates, IPolicyFetchingInfo, IInitialData>{\r\n    static contextType = AppContext;\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Policy\",\r\n            title: \"بیمه نامه\",\r\n            Properties: [\r\n                {\r\n                    title: \"بیمه گر\",\r\n                    dataIndex: \"InsurerId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا بیمه گر را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Insurer,\r\n                        lookupProperty: \"Insurer\",\r\n                        lookupDisplayFields: [\"Name\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyholderId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    rules: [{ required: true, message: 'لطفا بیمه گزار/مشتری را وارد نمایید' }],\r\n                    lookup: {\r\n                        lookupComponent: Policyholder,\r\n                        lookupProperty: \"Policyholder\",\r\n                        lookupDisplayFields: [\"NationalCode\", \"FullName\"]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"سریال بیمه نامه\",\r\n                    dataIndex: \"SerialNo\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا سریال بیمه نامه را وارد نمایید' }]\r\n                },\r\n                //{\r\n                //    title: \"شماره الحاقیه\",\r\n                //    dataIndex: \"EndorseNo\",\r\n                //    propertyType: enmPropertyType.number,\r\n                //    controlType: enmControlType.numberinput,\r\n                //    filterable: true,\r\n                //    width: 150,\r\n                //    rules: [{ required: true, message: 'لطفا شماره الحاقیه را وارد نمایید' }]\r\n                //},\r\n                {\r\n                    title: \"نام طرح\",\r\n                    dataIndex: \"PlanName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"تاریخ شروع\",\r\n                    dataIndex: \"StartDateTime\",\r\n                    propertyType: enmPropertyType.datetime,\r\n                    controlType: enmControlType.datetime,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا تاریخ شروع بیمه نامه را وارد نمایید' }]\r\n                },\r\n                {\r\n                    title: \"تاریخ پایان\",\r\n                    dataIndex: \"EndDateTime\",\r\n                    propertyType: enmPropertyType.datetime,\r\n                    controlType: enmControlType.datetime,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    rules: [{ required: true, message: 'لطفا تاریخ پایان بیمه نامه را وارد نمایید' }]\r\n                },\r\n                {\r\n                    dataIndex: \"PolicyEquipmentModels.EquipmentSerialNo\", // only for filter\r\n                    controlType: enmControlType.textbox,\r\n                    propertyType: enmPropertyType.string,\r\n                    allowNull: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    showControl: false,\r\n                    title: \"سریال تجهیز\",\r\n                }\r\n                //{\r\n                //    title: \"شماره شبا\",\r\n                //    dataIndex: \"ShebaNo\",\r\n                //    propertyType: enmPropertyType.string,\r\n                //    controlType: enmControlType.textbox,\r\n                //    filterable: true,\r\n                //    width: 150,\r\n                //    rules: [{ required: true, message: 'لطفا شماره شبا را وارد نمایید' }],\r\n                //    showColumn: false\r\n                //},\r\n            ]\r\n        };\r\n    }\r\n    tabsElement?: HTMLDivElement | null;\r\n\r\n    onInitializing() {\r\n\r\n        this.searchArea = { columnsPerRow: 2 };\r\n        this.searchable = true;\r\n\r\n        this.originalFilter = () => {\r\n            const { params } = this.context;\r\n            let filters: IFilter[] = [];\r\n            if (params.id) {\r\n                filters.push(new ComparisonFilter(\"RowGuid\", enmConditionalOperators.Equal, params.id));\r\n            }\r\n            if (filters.length > 0)\r\n                return new AndFilter(filters);\r\n        };\r\n\r\n        this.onDataFetching = (fetchingInfo: IPolicyFetchingInfo, onViewMode) => {\r\n            if (this.props.params) {\r\n                const { minValidDate, loadPolicyEquipmentModels } = this.props.params();\r\n                if (minValidDate)\r\n                    fetchingInfo.MinValidDate = minValidDate;\r\n                fetchingInfo.LoadPolicyEquipmentModels = loadPolicyEquipmentModels;\r\n            }\r\n            else\r\n                fetchingInfo.LoadPolicyEquipmentModels = onViewMode;\r\n            fetchingInfo.LoadNavigations = onViewMode;\r\n            fetchingInfo.LoadPolicyAttachments = onViewMode;\r\n            return fetchingInfo;\r\n        }\r\n\r\n        this.backNode = () => {\r\n            const { params } = this.context;\r\n            if (params.returnurl) {\r\n                const { pathname, search } = new URL(window.location.origin + params.returnurl);\r\n                return (\r\n                    <Link to={{ pathname, search }} style={{ width: \"180px\", marginTop: 10, marginBottom: 10, marginLeft: 10 }}>\r\n                        <Tooltip title=\"بازگشت\" ><Space style={{ color: \"darkblue\" }}><FontAwesomeIcon key=\"back-icon\" className=\"back-color\" icon={faReply} transform={{ flipX: true }} size={'xl'} style={{ margin: 10 }} />{params.invokepath ?? ''}</Space></Tooltip>\r\n                    </Link>\r\n                );\r\n            };\r\n        };\r\n\r\n        this.extraViewNode = () => {\r\n\r\n            const { currentEntity } = this.state;\r\n\r\n            let policyFranchiseAccess = this.initialData?.AccessList[\"PolicyFranchise\"];\r\n            let policyEquipmentModelAccess = this.initialData?.AccessList[\"PolicyEquipmentModel\"];\r\n            let policyCoverageAccess = this.initialData?.AccessList[\"PolicyCoverage\"];\r\n\r\n\r\n            if (!currentEntity || !(policyFranchiseAccess || policyEquipmentModelAccess || policyCoverageAccess))\r\n                return;\r\n\r\n            const policyCert = currentEntity?.PolicyAttachments[0];\r\n\r\n            return (\r\n                <div style={{ margin: 0, marginTop: 10 }} ref={node => this.tabsElement = node}>\r\n                    <div className=\"box\" style={{ border: \"1px solid #91b5b7\" }}>\r\n                        <Tabs defaultActiveKey={policyCoverageAccess ? \"1\" : (policyEquipmentModelAccess ? \"2\" : \"3\")} style={{ maxWidth: \"100%\" }} onChange={key => {\r\n                            if (this.tabsElement) {\r\n                                this.setState({ policyCertFrameDisplayed: key === \"4\" });\r\n                            }\r\n                        }}\r\n                        >\r\n                            {policyCoverageAccess &&\r\n                                <TabPane\r\n                                    tab={\r\n                                        <span style={{ marginRight: 4 }}>\r\n                                            پوشش ها\r\n                                        </span>\r\n                                    }\r\n                                    key=\"1\"\r\n                                    style={{ margin: 10 }}\r\n                                >\r\n                                    <List\r\n                                        itemLayout=\"horizontal\"\r\n                                        dataSource={currentEntity.PolicyCoverages.map(c => { return { title: c.CoverageTitle } })}\r\n                                        renderItem={item => (\r\n                                            <List.Item>\r\n                                                <List.Item.Meta\r\n                                                    title={\r\n                                                        <Descriptions key={\"PolicyCoverages\"} column={{ xxl: 2, xl: 2, lg: 2, md: 2, sm: 1, xs: 1 }}>\r\n                                                            <Descriptions.Item label=\"عنوان\">{item.title}</Descriptions.Item>\r\n                                                        </Descriptions>\r\n                                                    }\r\n                                                    style={{ height: 25 }}\r\n                                                />\r\n                                            </List.Item>\r\n                                        )}\r\n                                    />\r\n                                </TabPane>\r\n                            }\r\n                            {policyEquipmentModelAccess &&\r\n                                <TabPane\r\n                                    tab={\r\n                                        <span>\r\n                                            تجهیزات بیمه شده\r\n                                        </span>\r\n                                    }\r\n                                    key=\"2\"\r\n                                    style={{ margin: 10 }}\r\n                                >\r\n                                    <List\r\n                                        itemLayout=\"horizontal\"\r\n                                        dataSource={currentEntity.PolicyEquipmentModels.map(f => { return { brandTitle: f.BrandTitle, equipmentModelTitle: f.EquipmentModelTitle, equipmentSerialNo: f.EquipmentSerialNo, insuredValue: f.InsuredValue } })}\r\n                                        renderItem={item => (\r\n                                            <List.Item>\r\n                                                <List.Item.Meta\r\n                                                    title={\r\n                                                        <Descriptions key={\"PolicyFranchises\"} column={{ xxl: 4, xl: 4, lg: 4, md: 2, sm: 1, xs: 1 }}>\r\n                                                            <Descriptions.Item label=\"برند\">{item.brandTitle}</Descriptions.Item>\r\n                                                            <Descriptions.Item label=\"مدل\">{item.equipmentModelTitle}</Descriptions.Item>\r\n                                                            <Descriptions.Item label=\"سریال یا IMEI دستگاه\">{item.equipmentSerialNo}</Descriptions.Item>\r\n                                                            <Descriptions.Item label=\"سرمایه بیمه نامه\">{`${item.insuredValue ?? 0} ریال`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}</Descriptions.Item>\r\n                                                        </Descriptions>\r\n                                                    }\r\n                                                />\r\n                                            </List.Item>\r\n                                        )}\r\n                                    />\r\n                                </TabPane>\r\n                            }\r\n                            {policyFranchiseAccess &&\r\n                                <TabPane\r\n                                    tab={\r\n                                        <span style={{ marginRight: 10 }}>\r\n                                            فرانشیزها\r\n                                        </span>\r\n                                    }\r\n                                    key=\"3\"\r\n                                    style={{ margin: 10 }}\r\n                                >\r\n                                    <List\r\n                                        itemLayout=\"horizontal\"\r\n                                        dataSource={currentEntity.PolicyFranchises.map(f => { return { title: f.FranchiseTitle, percent: f.FranchisePercent, minimumValue: f.MinimumValue } })}\r\n                                        renderItem={item => (\r\n                                            <List.Item>\r\n                                                <List.Item.Meta\r\n                                                    title={\r\n                                                        <Descriptions key={\"PolicyFranchises\"} >\r\n                                                            <Descriptions.Item className=\"col-sm-6\" label=\"عنوان\"><span >{item.title}</span></Descriptions.Item>\r\n                                                            <Descriptions.Item className=\"col-sm-2\" label=\"درصد\">{item.percent}</Descriptions.Item>\r\n                                                            <Descriptions.Item className=\"col-sm-4\" label=\"حداقل مبلغ فرانشیز\">{`${item.minimumValue ?? 0} ریال`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}</Descriptions.Item>\r\n                                                        </Descriptions>\r\n                                                    }\r\n                                                />\r\n                                            </List.Item>\r\n                                        )}\r\n                                    />\r\n                                </TabPane>\r\n\r\n                            }\r\n                            {\r\n                                !!policyCert &&\r\n                                <TabPane\r\n                                    tab={\r\n                                        <span style={{ marginRight: 4 }}>\r\n                                            گواهی بیمه نامه\r\n                                        </span>\r\n                                    }\r\n                                    key=\"4\"\r\n                                    style={{ margin: 10, minHeight: 600 }}\r\n                                >\r\n                                    <div style={{ width: 'calc(100% - 20px)' }}>\r\n                                        {this.state.policyCertFrameDisplayed && <PdfViewer url={policyCert?.Path} onLoad={() => this.tabsElement?.scrollIntoView()} />}\r\n                                    </div>\r\n                                </TabPane>\r\n                            }\r\n                        </Tabs>\r\n                    </div>\r\n                </div>\r\n            );\r\n        };\r\n    }\r\n}","import { ICenter } from \"../../baseInfo/center/interfaces\";\r\nimport { enmEvaluationStatus } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { IEntity } from \"../../components/infrastructure/models\";\r\n\r\nexport enum enmContactStatus {\r\n    Unacceptable = 0,\r\n    Acceptable = 1,\r\n    Failed = 2,\r\n    EvaluationMethodToPolicyholderInPerson = 3\r\n}\r\n\r\nexport interface IDamageCaseEvaluator extends IEntity {\r\n    DamageCaseId: number;\r\n    EvaluatorId: number;\r\n    Evaluator: ICenter;\r\n    Substatus: enmEvaluationStatus;\r\n}\r\n","import { Descriptions } from \"antd\";\r\nimport { enmEvaluationStatus, IDamageCase } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { Center } from \"../../baseInfo/center\";\r\nimport DataForm from \"../../components/entityManager/dataform\";\r\nimport { enmControlType, enmPropertyType, IProperty } from \"../../components/entityManager/interfaces\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState, ICallOptions } from \"../../components/infrastructure/models\";\r\nimport { IDamageCaseEvaluator } from \"./interfaces\";\r\nimport { ICenterProps } from \"../../baseInfo/center/interfaces\";\r\n\r\nexport interface IAllocateEvaluatorProps extends IBaseProps {\r\n    damageCase: IDamageCase;\r\n}\r\n\r\ninterface IAllocateEvaluatorStates extends IBaseStates {\r\n    currentEntity: IDamageCaseEvaluator;\r\n}\r\n\r\nexport class AllocateEvaluator extends BaseComponent<IAllocateEvaluatorProps, IAllocateEvaluatorStates> {\r\n    properties: IProperty[];\r\n    constructor(props: IAllocateEvaluatorProps) {\r\n        super(props)\r\n        this.properties = [\r\n            {\r\n                dataIndex: \"EvaluatorId\",\r\n                title: \"مرکز ارزیابی\",\r\n                propertyType: enmPropertyType.number,\r\n                controlType: enmControlType.lookup,\r\n                lookup: {\r\n                    lookupComponent: Center,\r\n                    lookupProperty: \"Evaluator\",\r\n                    lookupDisplayFields: [\"NationalCode\", \"FullName\"]\r\n                }\r\n            }\r\n        ];\r\n\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            currentEntity: {\r\n                RowGuid: Core.newId(),\r\n                DamageCaseId: this.props.damageCase.Id,\r\n                Substatus: enmEvaluationStatus.DocumentCheck,\r\n                State: enmEntityState.Added,\r\n                ModifiedProperties: [\"DamageCaseId\", \"Substatus\"]\r\n            } as any,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n\r\n        if (this.props.damageCase.DefaultEvaluator) {\r\n            this.state.currentEntity.EvaluatorId = this.props.damageCase.DefaultEvaluatorId ?? 0;\r\n            this.state.currentEntity.Evaluator = this.props.damageCase.DefaultEvaluator;\r\n            this.state.currentEntity.ModifiedProperties.push(\"EvaluatorId\");\r\n        }\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.setState({ loading: false });\r\n    }\r\n    async save(entity: IDamageCaseEvaluator): Promise<boolean> {\r\n        if (!entity)\r\n            return false;\r\n\r\n        let data: any = {};\r\n        if (entity.State === enmEntityState.Modified || entity.State === enmEntityState.Added) {\r\n            for (var i = 0; i < entity.ModifiedProperties.length; i++) {\r\n                let val = entity.ModifiedProperties[i];\r\n                data[val] = (entity as any)[val];\r\n            }\r\n        }\r\n\r\n        data.State = enmEntityState.Added;\r\n        data.RowGuid = entity.RowGuid;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/allocateevaluator\",\r\n            data: { entity: data },\r\n            onSuccess: (result) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('ارزیاب با موفقیت اختصاص داده شد');\r\n                    this.props.onClose && this.props.onClose(this);\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n\r\n    virtualRender() {\r\n        const extraHeaderNodes = () => {\r\n            const damageCase = this.props.damageCase;\r\n            const policy = damageCase.PolicyEquipmentModel.Policy;\r\n            const policyholderNationalCode = policy.Policyholder?.NationalCode;\r\n            const policyholderFullName = policy.Policyholder?.FullName;\r\n\r\n            return (\r\n                <Descriptions column={{ xxl: 4, xl: 4, lg: 2, md: 2, sm: 1, xs: 1 }} className=\"header-page\">\r\n                    <Descriptions.Item label=\"شماره پرونده خسارت\">{damageCase.Code}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"شماره تیکت\">{damageCase.TicketNo}</Descriptions.Item>\r\n                    {damageCase.DamageType\r\n                        ? <Descriptions.Item label=\"نوع خسارت\">{damageCase.DamageType?.Name}</Descriptions.Item>\r\n                        : <Descriptions.Item label=\"دلیل خسارت\">{damageCase.DamageReason}</Descriptions.Item>\r\n                    }\r\n                    <Descriptions.Item label=\"بیمه گزار/مشتری\">{policyholderFullName + \" \" + policyholderNationalCode}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"سریال بیمه نامه\">{policy.SerialNo}</Descriptions.Item>\r\n                    {damageCase.Province ? <Descriptions.Item label=\"استان\">{damageCase.Province.Name}</Descriptions.Item> : <></>}\r\n                    {damageCase.City ? <Descriptions.Item label=\"شهر\">{damageCase.City.Name}</Descriptions.Item> : <></>}\r\n                    {damageCase.DefaultEvaluator && <Descriptions.Item label=\"ارزیاب انتخابی بیمه گزار/مشتری\">{damageCase.DefaultEvaluator.FullName}</Descriptions.Item>}\r\n                </Descriptions>\r\n            );\r\n        };\r\n\r\n        const header = this.getPageHeader({\r\n            title: \"تخصیص مرکز ارزیابی\",\r\n            onBack: () => { this.props.onClose && this.props.onClose(this) },\r\n            extraHeaderNodes: extraHeaderNodes()\r\n        });\r\n\r\n        return (\r\n            <>\r\n                {header}\r\n                <div>\r\n                    <DataForm<IDamageCaseEvaluator>\r\n                        parent={this}\r\n                        resetable={false}\r\n                        currentEntity={this.state.currentEntity}\r\n                        properties={this.properties}\r\n                        onSubmit={() => this.save(this.state.currentEntity)}\r\n                        onChange={(property, value) => {\r\n                            let currentEntity = this.state.currentEntity as any;\r\n                            if (currentEntity && property.dataIndex === \"EvaluatorId\") {\r\n                                currentEntity[property.dataIndex!] = value ? value[\"Id\"] : 0;\r\n                                if (currentEntity.ModifiedProperties.indexOf(\"EvaluatorId\") === -1)\r\n                                    currentEntity.ModifiedProperties.push(\"EvaluatorId\");\r\n                            }\r\n                            this.setState({ currentEntity });\r\n                        }}\r\n                        preparelookupProps={(propName, lookupProps) => {\r\n                            if (propName === \"EvaluatorId\")\r\n                                (lookupProps as ICenterProps).isEvaluator = true;\r\n\r\n                            return lookupProps;\r\n                        }}\r\n                    />\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n}","import { Button, Checkbox, Collapse, ConfigProvider, Descriptions, Form, List, Modal, Steps, Table, Tabs, Tooltip } from \"antd\";\r\nimport { DownloadOutlined, InfoCircleFilled } from '@ant-design/icons';\r\nimport React, { MouseEvent } from \"react\";\r\nimport { damageCaseStatusOptions, enmDamageCaseStatus, enmEvaluationMethods, enmEvaluationStatus, evaluationMethodsOptions, evaluationStatusOptions, IDamageCase } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { ICallOptions, IEntity, IResultSet, IUserInfo } from \"../../components/infrastructure/models\";\r\nimport \"../index.css\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { IDamageCaseEvaluator, enmContactStatus } from \"./interfaces\";\r\nimport * as EvaluationComponents from \"./components\";\r\nimport ReactDOM from \"react-dom\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport fa_IR from \"antd/lib/locale/fa_IR\";\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\nimport { IAttachment } from \"../../baseInfo/attachment/interfaces\";\r\nimport { PriceInput } from \"../../components/priceInput\";\r\nimport { Redirect } from \"react-router-dom\";\r\n\r\nconst { Step } = Steps;\r\nconst { Panel } = Collapse;\r\nconst { TabPane } = Tabs;\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\ndayjs.extend(jalaliday);\r\n\r\nexport interface IEvaluationComponentProps extends IBaseProps {\r\n    assignEvaluatorAccess?: boolean;\r\n    damageCase: IDamageCase;\r\n    nextStatus: (damageCase: IDamageCase, forceAssignEvaluator?: boolean) => void;\r\n}\r\n\r\nexport interface IDamageCaseInquiryResult {\r\n    PolicyholderNationalCode: string;\r\n    PolicyholderFullName: string;\r\n    IMEIorSerial: string;\r\n    Code: number;\r\n    DamageDate: any;\r\n    PaymentDate?: any;\r\n    PaidAmount?: number;\r\n    Status: enmDamageCaseStatus;\r\n}\r\n\r\nexport interface IEvaluationComponentStates<TStep extends IEntity> extends IBaseStates {\r\n    title?: string;\r\n    formLayout: LayoutType;\r\n    currentEntity: TStep;\r\n    damageCaseEvaluator: IDamageCaseEvaluator;\r\n    evaluationSteps: { DamageCaseEvaluatorId: number; Substatus: enmEvaluationStatus; CreateDateTime: any; HasNextStep?: boolean; }[];\r\n    policyCert?: IAttachment;\r\n    allDamageCases: IDamageCaseInquiryResult[];\r\n    damageCaseDocumentTypeAttachments: any[];\r\n    policyUpdated?: boolean;\r\n}\r\n\r\nexport interface IEvaluationInitialData {\r\n    EvaluationSteps: { DamageCaseEvaluatorId: number; Substatus: enmEvaluationStatus; CreateDateTime: any; HasNextStep?: boolean; }[];\r\n    PolicyCert?: IAttachment;\r\n    AllDamageCases: IDamageCaseInquiryResult[];\r\n    DamageCaseDocumentTypeAttachments: any[];\r\n}\r\n\r\nexport interface IEvaluationComponentFormProps<TEntity> {\r\n    loading: boolean;\r\n    disabled?: boolean;\r\n    currentEntity: TEntity;\r\n    damageCase: IDamageCase;\r\n    onClose?: (sender: any) => void;\r\n    onSubmit?: (values: any) => void;\r\n    damageCaseDocumentTypeAttachments: IAttachment[];\r\n}\r\n\r\nconst EvaluationComponentFormModal = (props: {\r\n    damageCase: IDamageCase,\r\n    entity: { Substatus: enmEvaluationStatus; },\r\n    damageCaseDocumentTypeAttachments: IAttachment[],\r\n    evaluationSteps: { DamageCaseEvaluatorId: number; Substatus: enmEvaluationStatus; CreateDateTime: any; HasNextStep?: boolean; }[],\r\n    index: number,\r\n    evaluationMethodChanged?: boolean\r\n}) => {\r\n\r\n    const handleCancel = () => {\r\n        const target = document.getElementById('modal-container');\r\n        ReactDOM.unmountComponentAtNode(target as any);\r\n    };\r\n\r\n    let formName = enmEvaluationStatus[Number(props.entity.Substatus)] + \"Form\";\r\n    let formProps: IEvaluationComponentFormProps<any> = {\r\n        currentEntity: props.entity,\r\n        loading: false,\r\n        disabled: true,\r\n        damageCase: props.damageCase,\r\n        damageCaseDocumentTypeAttachments: props.damageCaseDocumentTypeAttachments\r\n    };\r\n\r\n    const Component = (EvaluationComponents as any)[formName];\r\n    if (!Component)\r\n        return (<></>);\r\n\r\n    if (formName === \"ContactSettingForm\") {\r\n        (formProps as any).evaluationMethodChanged = props.evaluationMethodChanged;\r\n    }\r\n\r\n    return (\r\n        <ConfigProvider locale={fa_IR} direction=\"rtl\">\r\n            <Modal width={\"100%\"}\r\n                visible={true}\r\n                okButtonProps={{ hidden: true }}\r\n                onCancel={handleCancel}\r\n                closable={false}\r\n                centered\r\n            >\r\n                <Component key={formName} {...formProps} />\r\n            </Modal>\r\n        </ConfigProvider>\r\n    );\r\n}\r\n\r\nexport class EvaluationComponent<TStep extends IEntity, TProps extends IEvaluationComponentProps, TStates extends IEvaluationComponentStates<TStep>> extends BaseComponent<TProps, TStates> {\r\n    static contextType = AppContext;\r\n    userInfo?: IUserInfo;\r\n    defaultState: TStates = {} as any;\r\n    defaultEntity?: TStep;\r\n    statusName: string;\r\n    onInitialDataFetching?: (initialParams: any) => any;\r\n    onInitialDataFetched?: (result: IResultSet<any>) => any;\r\n    extraHeaderButtons?: () => React.ReactNode;\r\n    extraHeaderDescriptions?: () => React.ReactNode;\r\n    constructor(props: TProps) {\r\n        super(props)\r\n        this.onInitializing();\r\n        const status = evaluationStatusOptions.find(o => o.value === this.props.damageCase.EvaluationStatus);\r\n        const title = status?.name;\r\n        this.statusName = enmEvaluationStatus[Number(this.props.damageCase.EvaluationStatus)];\r\n        const lastIndex = this.props.damageCase.DamageCaseEvaluators.length - 1;\r\n        const damageCaseEvaluator = this.props.damageCase.DamageCaseEvaluators[lastIndex];\r\n        const entity = Object.assign({}, {\r\n            DamageCaseEvaluatorId: damageCaseEvaluator.Id,\r\n            RowGuid: Core.newId()\r\n        }, this.defaultEntity ?? {});\r\n\r\n        this.state = Object.assign({}, {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            title,\r\n            formLayout: 'horizontal',\r\n            damageCaseEvaluator,\r\n            evaluationSteps: [],\r\n            allDamageCases: [],\r\n            currentEntity: entity,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        }, this.defaultState) as any;\r\n    }\r\n    onInitializing() {\r\n\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        const { userInfo } = this.context;\r\n        this.userInfo = userInfo;\r\n        this.getInitialData();\r\n    }\r\n    async getInitialData() {\r\n        let initialParams = {\r\n            damageCaseEvaluatorId: this.state.damageCaseEvaluator.Id\r\n        };\r\n        if (this.onInitialDataFetching)\r\n            initialParams = this.onInitialDataFetching(initialParams);\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/get\" + this.statusName + \"InitialData\",\r\n            data: initialParams,\r\n            onSuccess: (result: IResultSet<IEvaluationInitialData>) => {\r\n                if (result.ValidationState.Successful && result.Data) {\r\n                    result.Data.EvaluationSteps = result.Data.EvaluationSteps.sort((a, b) => a.CreateDateTime > b.CreateDateTime ? 1 : -1) ?? [];\r\n                    this.onInitialDataFetched ? this.onInitialDataFetched(result) : this.setState({\r\n                        loading: false,\r\n                        evaluationSteps: result.Data.EvaluationSteps,\r\n                        damageCaseDocumentTypeAttachments: result.Data.DamageCaseDocumentTypeAttachments ?? [],\r\n                        policyCert: result.Data.PolicyCert,\r\n                        allDamageCases: result.Data.AllDamageCases\r\n                    });\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n    renderBody(): React.ReactNode {\r\n        return (<>{this.state.title}</>);\r\n    }\r\n    showHistory(damageCase: IDamageCase, entity: { Substatus: enmEvaluationStatus; }, index: number, evaluationMethodChanged?: boolean) {\r\n        const attachments: IAttachment[] = [];\r\n        if (entity.Substatus === enmEvaluationStatus.DocumentCheck) {\r\n            const prevCheckCount = this.state.evaluationSteps.filter((v, vIndex) => v.Substatus === entity.Substatus && index > vIndex).length;\r\n            const lst = this.state.damageCaseDocumentTypeAttachments.filter((_, k) => k <= prevCheckCount).flatMap(a => a);\r\n            attachments.push(...lst);\r\n        }\r\n        const target = document.getElementById('modal-container');\r\n        const component = (\r\n            <EvaluationComponentFormModal\r\n                index={index}\r\n                damageCase={damageCase}\r\n                entity={entity}\r\n                evaluationMethodChanged={evaluationMethodChanged}\r\n                key=\"EvaluationComponentFormModal\"\r\n                damageCaseDocumentTypeAttachments={attachments}\r\n                evaluationSteps={this.state.evaluationSteps} />\r\n        );\r\n        ReactDOM.render(component, target);\r\n    }\r\n    policyUpdate = async (event: MouseEvent<HTMLElement>) => {\r\n        event.stopPropagation();\r\n\r\n        const { damageCase } = this.props;\r\n        const policyEquipmentModel = damageCase.PolicyEquipmentModel;\r\n        const policy = policyEquipmentModel.Policy;\r\n        const policyholderNationalCode = policy.Policyholder?.NationalCode;\r\n        if (!policyholderNationalCode) {\r\n\r\n            return;\r\n        }\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/UpdateCurrentPoliciesOfNationalCode\",\r\n            data: {\r\n                nationalCode: policyholderNationalCode\r\n            },\r\n            onSuccess: (result: IResultSet<boolean>) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n\r\n                if (!result.Data) {\r\n                    Core.errorNotification(\"بروزرسانی اطلاعات بیمه نامه بدلیل ناقص بودن اطلاعات دریافتی از سرویس صدور بیمه نامه، امکانپذیز نیست\");\r\n                    return;\r\n                }\r\n\r\n                Core.successNotification(\"بروزرسانی اطلاعات بیمه نامه با موفقیت انجام شد\");\r\n                this.setState({ policyUpdated: true });\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n\r\n    }\r\n    virtualRender() {\r\n        const { damageCase } = this.props;\r\n\r\n        if (this.state.policyUpdated) {\r\n            const url = encodeURIComponent('/damagecaseevaluator?id=' + damageCase.RowGuid);\r\n            return <Redirect to={`/refresh?${url}`} />\r\n        }\r\n\r\n        const extraHeaderNodes = () => {\r\n            const { allDamageCases, policyCert, loading } = this.state;\r\n\r\n            const policyEquipmentModel = damageCase.PolicyEquipmentModel;\r\n            const policy = policyEquipmentModel.Policy;\r\n            const policyholderNationalCode = policy.Policyholder?.NationalCode;\r\n            const policyholderFullName = policy.Policyholder?.FullName;\r\n            const equipmentSerialNo = policyEquipmentModel.EquipmentSerialNo;\r\n            const equipmentName = policyEquipmentModel.Equipment.Name;\r\n            const brandName = policyEquipmentModel.BrandTitle;\r\n            const equipmentModelName = policyEquipmentModel.EquipmentModelTitle;\r\n\r\n            const policyInfoTitle = <>\r\n                <span> اطلاعات بیمه نامه\r\n                    {!loading\r\n                        ? <Tooltip title=\"جهت بروزرسانی اطلاعات بیمه نامه کلیک نمایید\">\r\n                            <Button style={{ padding: 0, height: 'auto' }} type=\"link\" onClick={this.policyUpdate}>\r\n                                <span><InfoCircleFilled className=\"blink\" style={{ marginTop: 2, marginRight: 2, marginLeft: 1, verticalAlign: 'text-top' }} />بروزرسانی</span>\r\n                            </Button>\r\n                        </Tooltip>\r\n                        : <></>\r\n                    }\r\n                </span>\r\n            </>;\r\n\r\n            const closedDamageCaseCount = allDamageCases.filter(f => [enmDamageCaseStatus.Closed, enmDamageCaseStatus.Rejected, enmDamageCaseStatus.Financial].indexOf(f.Status) > -1).length;\r\n            const currentDamageCaseCount = allDamageCases.filter(f => [enmDamageCaseStatus.Closed, enmDamageCaseStatus.Rejected, enmDamageCaseStatus.Financial].indexOf(f.Status) === -1).length;\r\n            const damageCaseHistoryTitle = `سوابق پرونده های خسارت (تمام شده ${closedDamageCaseCount}) (جاری ${currentDamageCaseCount})`;\r\n\r\n            return (\r\n                <div>\r\n                    <Descriptions key={\"Descriptions\"} className=\"header-page\" column={{ xxl: 5, xl: 4, lg: 3, md: 2, sm: 1, xs: 1 }}>\r\n                        <Descriptions.Item label=\"شماره پرونده خسارت\">{damageCase.Code}</Descriptions.Item>\r\n                        <Descriptions.Item label=\"شماره تیکت\">{damageCase.TicketNo}</Descriptions.Item>\r\n                        <Descriptions.Item label=\"دلیل خسارت\">{damageCase.DamageReason}</Descriptions.Item>\r\n                        <Descriptions.Item label=\"تاریخ خسارت\">{dayjs(damageCase.DamageDate).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")}</Descriptions.Item>\r\n                        <Descriptions.Item label=\"شماره تماس بیمه گزار/مشتری\">{(damageCase.EmergencyCallNumber.startsWith('0') ? '' : '0') + damageCase.EmergencyCallNumber}</Descriptions.Item>\r\n                        <Descriptions.Item label=\"بیمه گزار/مشتری\">{policyholderFullName + \" \" + policyholderNationalCode}</Descriptions.Item>\r\n                        {\r\n                            !!policyCert &&\r\n                            <Descriptions.Item label={<DownloadOutlined />}>\r\n                                <a href={policyCert.Path} download={policyCert.Title} title=\"دانلود\">\r\n                                    گواهی بیمه نامه\r\n                                </a>\r\n                            </Descriptions.Item>\r\n                        }\r\n                        <Descriptions.Item label=\"نوع تجهیز\">{equipmentName}</Descriptions.Item>\r\n                        {brandName && <Descriptions.Item label=\"برند\">{brandName}</Descriptions.Item>}\r\n                        {equipmentModelName && <Descriptions.Item label=\"مدل\">{equipmentModelName}</Descriptions.Item>}\r\n                        <Descriptions.Item label=\"سریال مدل تجهیز (IMEI)\">{equipmentSerialNo}</Descriptions.Item>\r\n                        {damageCase.DamageType\r\n                            ? <Descriptions.Item label=\"نوع خسارت\">{damageCase.DamageType?.Name}</Descriptions.Item>\r\n                            : <></>\r\n                        }\r\n                        <Descriptions.Item label=\"تایید انتقال مالکیت توسط بیمه گزار/مشتری\"><Checkbox disabled defaultChecked={damageCase.ConfirmPossessionTransition} /></Descriptions.Item>\r\n                        {damageCase.Description\r\n                            ? <Descriptions.Item label=\"توضیحات بیمه گزار/مشتری\">{damageCase.Description}</Descriptions.Item>\r\n                            : <></>\r\n                        }\r\n                        {this.extraHeaderDescriptions && this.extraHeaderDescriptions()}\r\n                    </Descriptions>\r\n                    <Collapse key=\"ExtraInfo\" >\r\n                        <Panel header={policyInfoTitle} key=\"1\" style={{ padding: 0, margin: 0 }}  >\r\n                            <Tabs defaultActiveKey=\"1\">\r\n                                <TabPane\r\n                                    tab={\r\n                                        <span style={{ marginRight: 4 }}>\r\n                                            جزئیات\r\n                                        </span>\r\n                                    }\r\n                                    key=\"1\"\r\n                                    style={{ margin: 10 }}\r\n\r\n                                >\r\n                                    <Descriptions key={\"PolicyDetails\"} column={{ xxl: 4, xl: 4, lg: 2, md: 2, sm: 1, xs: 1 }}>\r\n                                        <Descriptions.Item label=\"سریال بیمه نامه\">{policy.SerialNo}</Descriptions.Item>\r\n                                        <Descriptions.Item label=\"طرح\">{policy.PlanName}</Descriptions.Item>\r\n                                        <Descriptions.Item label=\"تاریخ شروع\">{dayjs(policy.StartDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")}</Descriptions.Item>\r\n                                        <Descriptions.Item label=\"تاریخ پایان\">{dayjs(policy.EndDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")}</Descriptions.Item>\r\n                                        <Descriptions.Item label=\"سرمایه بیمه نامه\"><PriceInput style={{ width: 'auto', marginTop: -4 }} value={policyEquipmentModel.InsuredValue} disabled /></Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </TabPane>\r\n                                <TabPane\r\n                                    tab={\r\n                                        <span style={{ marginRight: 4 }}>\r\n                                            پوشش ها\r\n                                        </span>\r\n                                    }\r\n                                    key=\"2\"\r\n                                    style={{ margin: 10 }}\r\n                                >\r\n                                    <List\r\n                                        itemLayout=\"horizontal\"\r\n                                        dataSource={policy.PolicyCoverages.map(c => { return { title: c.CoverageTitle } })}\r\n                                        renderItem={item => (\r\n                                            <List.Item>\r\n                                                <List.Item.Meta\r\n                                                    title={\r\n                                                        <Descriptions key={\"PolicyCoverages\"} column={{ xxl: 2, xl: 2, lg: 2, md: 2, sm: 1, xs: 1 }}>\r\n                                                            <Descriptions.Item label=\"عنوان\">{item.title}</Descriptions.Item>\r\n                                                        </Descriptions>\r\n                                                    }\r\n                                                    style={{ height: 25 }}\r\n                                                />\r\n                                            </List.Item>\r\n                                        )}\r\n                                    />\r\n                                </TabPane>\r\n                                <TabPane\r\n                                    tab={\r\n                                        <span>\r\n                                            فرانشیز ها\r\n                                        </span>\r\n                                    }\r\n                                    key=\"3\"\r\n                                    style={{ margin: 10 }}\r\n                                >\r\n                                    <List\r\n                                        itemLayout=\"horizontal\"\r\n                                        dataSource={policy.PolicyFranchises.map(f => { return { title: f.FranchiseTitle, percent: f.FranchisePercent } })}\r\n                                        renderItem={item => (\r\n                                            <List.Item>\r\n                                                <List.Item.Meta\r\n                                                    title={\r\n                                                        <Descriptions key={\"PolicyFranchises\"} column={{ xxl: 2, xl: 2, lg: 2, md: 2, sm: 1, xs: 1 }}>\r\n                                                            <Descriptions.Item label=\"عنوان\">{item.title}</Descriptions.Item>\r\n                                                            <Descriptions.Item label=\"درصد\">{item.percent}</Descriptions.Item>\r\n                                                        </Descriptions>\r\n                                                    }\r\n                                                />\r\n                                            </List.Item>\r\n                                        )}\r\n                                    />\r\n                                </TabPane>\r\n                            </Tabs>\r\n                        </Panel>\r\n                        {allDamageCases.length > 0 &&\r\n                            <Panel header={<span> {damageCaseHistoryTitle} </span>} key=\"2\" style={{ padding: 0, margin: 0 }}  >\r\n                                <Table\r\n                                    rowKey={row => row.Code}\r\n                                    scroll={{ x: 'max-content' }}\r\n                                    dataSource={allDamageCases}\r\n                                    rowClassName={(record, _) => {\r\n                                        let rowClassName = [enmDamageCaseStatus.Closed, enmDamageCaseStatus.Rejected, enmDamageCaseStatus.Financial].indexOf(record.Status) > -1 ? \"closed-record\" : \"inprocess-record\";\r\n                                        if (record.Code === damageCase.Code)\r\n                                            rowClassName = \"current-record\";\r\n                                        return rowClassName;\r\n                                    }}\r\n                                    columns={[\r\n                                        {\r\n                                            dataIndex: \"Info\",\r\n                                            render: (_, record) => {\r\n                                                if ([enmDamageCaseStatus.Closed, enmDamageCaseStatus.Rejected, enmDamageCaseStatus.Financial].indexOf(record.Status) > -1)\r\n                                                    return \"تمام شده\";\r\n                                                else if (record.Code === damageCase.Code)\r\n                                                    return \"پرونده فعلی\";\r\n                                                else\r\n                                                    return \"جاری\";\r\n                                            }\r\n                                        },\r\n                                        {\r\n                                            dataIndex: \"PolicySerialNo\",\r\n                                            title: \"سریال بیمه نامه\"\r\n                                        },\r\n                                        {\r\n                                            dataIndex: \"Code\",\r\n                                            title: \"شماره پرونده\"\r\n                                        },\r\n                                        {\r\n                                            dataIndex: \"IMEIorSerial\",\r\n                                            title: \"سریال یا IMEI\"\r\n                                        },\r\n                                        {\r\n                                            dataIndex: \"Policyholder\",\r\n                                            title: \"بیمه گزار/مشتری\",\r\n                                            render: (_, record) => {\r\n                                                return `${record.PolicyholderFullName} ${record.PolicyholderNationalCode}`;\r\n                                            }\r\n                                        },\r\n                                        {\r\n                                            dataIndex: \"DamageDate\",\r\n                                            title: \"تاریخ خسارت\",\r\n                                            render: (_, record) => {\r\n                                                return dayjs(record.DamageDate).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")\r\n                                            }\r\n                                        },\r\n                                        {\r\n                                            dataIndex: \"Status\",\r\n                                            title: \"وضعیت پرونده\",\r\n                                            render: (_, record) => {\r\n                                                const current = damageCaseStatusOptions.find(o => o.value === record.Status);\r\n                                                return current?.title;\r\n                                            }\r\n                                        },\r\n                                        {\r\n                                            dataIndex: \"PaymentDate\",\r\n                                            title: \"تاریخ پرداخت\",\r\n                                            render: (_, record) => {\r\n                                                if (record.PaymentDate)\r\n                                                    return dayjs(record.PaymentDate).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")\r\n                                            }\r\n                                        },\r\n                                        {\r\n                                            dataIndex: \"PaidAmount\",\r\n                                            title: \"مبلغ پرداخت شده\",\r\n                                            render: (_, record) => {\r\n                                                if (record.PaidAmount)\r\n                                                    return `${record.PaidAmount}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n                                            }\r\n                                        }\r\n                                    ]} />\r\n                            </Panel>\r\n                        }\r\n                    </Collapse>\r\n                </div>\r\n            );\r\n        };\r\n\r\n        const header = this.getPageHeader({\r\n            title: this.state.title!,\r\n            onBack: () => { this.props.onClose && this.props.onClose(this) },\r\n            extraHeaderButtons: this.extraHeaderButtons && this.extraHeaderButtons(),\r\n            extraHeaderNodes: extraHeaderNodes()\r\n        });\r\n\r\n        const len = this.state.evaluationSteps.length + 1;\r\n        const steps = (\r\n            <Steps current={len} direction=\"vertical\" size=\"small\" style={{ margin: 10 }}>\r\n                <Step key=\"0\" title=\"تخصیص ارزیاب\" description={<span style={{ direction: \"ltr\", float: \"right\" }}>{dayjs(this.state.damageCaseEvaluator.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span>} />\r\n                {this.state.evaluationSteps.map((s, i) => {\r\n                    let title = evaluationStatusOptions.find(o => o.value === s.Substatus)?.name;\r\n\r\n                    const evaluationMethod = damageCase.EvaluationMethod;\r\n                    const evaluationMethodChanged = !!this.state.evaluationSteps.find((v: any, vIndex) => v.ContactStatus === enmContactStatus.EvaluationMethodToPolicyholderInPerson && i <= vIndex);\r\n                    if (s.Substatus === enmEvaluationStatus.ContactSetting)\r\n                        title = evaluationMethodsOptions.find(m => (evaluationMethodChanged && m.value === enmEvaluationMethods.VideoCall) || m.value === evaluationMethod)?.contactSettingCommandTitle;\r\n                    if (s.Substatus === enmEvaluationStatus.MakingContact)\r\n                        title = evaluationMethodsOptions.find(m => (evaluationMethodChanged && m.value === enmEvaluationMethods.VideoCall) || m.value === evaluationMethod)?.makingContactCommandTitle;\r\n\r\n                    let repeatedStep = !!this.state.evaluationSteps.find((v, vIndex) => v.Substatus === s.Substatus && i > vIndex);\r\n                    if (repeatedStep)\r\n                        title += ' (مجدد) ';\r\n                    let dateTime = dayjs(s.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\");\r\n                    return (\r\n                        <Step key={i + 1} title={title} description={<span style={{ direction: \"ltr\", float: \"right\" }}>{dateTime}</span>} onClick={() => this.showHistory(this.props.damageCase, s, i, evaluationMethodChanged)} style={{ cursor: \"pointer\" }} />\r\n                    );\r\n                })}\r\n                <Step key={len} title={this.state.title + (this.state.evaluationSteps.filter(s => s.Substatus === damageCase.EvaluationStatus).length ? ' (مجدد) ' : '')} />\r\n            </Steps>\r\n        );\r\n        const paddingRight = this.state.windowSize === 1 ? 0 : 10;\r\n        const marginBottom = this.state.windowSize === 1 ? 10 : 0;\r\n        return (\r\n            <>\r\n                <div id=\"modal-container\" />\r\n                {header}\r\n                {this.state.loading ? <CustomSpinner /> :\r\n                    <div key=\"container\" className=\"row\" style={{ margin: 0 }}>\r\n                        <div key=\"steps\" className=\"col-md-3 box\" style={{ background: '#fff', marginBottom: marginBottom }} >\r\n                            {steps}\r\n                        </div>\r\n\r\n                        <div key=\"form\" className=\"col-md-9\" style={{ padding: 0, paddingRight: paddingRight }}>\r\n                            <div className=\"box\" style={{ padding: '5px 45px', marginTop: '0px 0px', background: '#fff' }}>\r\n                                {this.renderBody()}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                }\r\n            </>\r\n        );\r\n    }\r\n}","import { Avatar, Button, Image, Table } from \"antd\";\r\nimport { EyeOutlined, DownloadOutlined, FileOutlined, FilePdfOutlined } from '@ant-design/icons';\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { IAttachment } from \"./interfaces\";\r\nimport React from \"react\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\n\r\nexport interface IAttachmentViewerProps extends IBaseProps {\r\n    attachments: IAttachment[];\r\n    extraColumns?: () => any[];\r\n}\r\n\r\nexport interface IAttachmentViewerStates extends IBaseStates {\r\n\r\n}\r\n\r\nexport class AttachmentViewer extends BaseComponent<IAttachmentViewerProps, IAttachmentViewerStates>{\r\n    constructor(props: IAttachmentViewerProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.setLoading(false);\r\n    }\r\n    virtualRender() {\r\n        const columns: ColumnsType<IAttachment> = [{\r\n            title: 'مستند',\r\n            dataIndex: 'Path',\r\n            key: 'Path',\r\n            render: (_: any, record: IAttachment) => {\r\n                if (!record.Path) {\r\n                    return <></>;\r\n                }\r\n\r\n                const mask: React.ReactNode = (\r\n                    <>\r\n                        <Button style={{ backgroundColor: 'transparent', border: 'none' }} icon={<EyeOutlined />} size={\"large\"} title=\"نمایش\" />\r\n                        <a href={record.Path} download={record.Title}>\r\n                            <Button style={{ backgroundColor: 'transparent', border: 'none' }} icon={<DownloadOutlined />} size={\"large\"} title=\"دانلود\"\r\n                                onClick={(e) => {\r\n                                    e.stopPropagation();\r\n                                }}\r\n                            />\r\n                        </a>\r\n                    </>\r\n                );\r\n                const fileNameParts = record.Path.split('.');\r\n                const fileExtension = fileNameParts[fileNameParts.length - 1];\r\n                const isImage = ['png', 'jpg', 'jpeg', 'bmp'].indexOf(fileExtension) > -1;\r\n                const isPdf = ['pdf'].indexOf(fileExtension) > -1;\r\n                return (\r\n                    <div>\r\n                        {isImage\r\n                            ? <Avatar src={<Image width={100} preview={{ mask, src: record.Path }} src={record.Path + '?x-oss-process=image/blur,r_3,s_2/quality,q_1/resize,m_mfit,h_100,w_100'} style={{ height: 100 }} />} size={100} />\r\n                            :\r\n                            <a href={record.Path} download={record.Title}>\r\n                                <Avatar icon={isPdf ? <FilePdfOutlined style={{ verticalAlign: 'baseline', height: 100 }} /> : <FileOutlined style={{ verticalAlign: 'baseline', height: 100 }} />} size={100} />\r\n                            </a>\r\n                        }\r\n                    </div>\r\n                );\r\n            },\r\n        },\r\n        //{\r\n        //    title: 'نام فایل',\r\n        //    dataIndex: 'Title',\r\n        //    key: 'Title',\r\n        //}\r\n        {\r\n            title: 'توضیحات',\r\n            dataIndex: 'Description',\r\n            key: 'Description',\r\n        }];\r\n\r\n        if (this.props.extraColumns)\r\n            columns.push(...this.props.extraColumns());\r\n\r\n        return (\r\n            <div>\r\n                <Table scroll={{ x: \"max-content\" }} rowKey={\"RowGuid\"} columns={columns} dataSource={this.props.attachments} bordered />\r\n            </div>\r\n        );\r\n    }\r\n}","import { Button, Input, Table } from \"antd\";\r\nimport { DownloadOutlined } from '@ant-design/icons';\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { IAttachment } from \"./interfaces\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\n\r\nexport interface IAttachmentDownloaderProps extends IBaseProps {\r\n    attachments: IAttachment[];\r\n    extraColumns?: () => any[];\r\n}\r\n\r\nexport interface IAttachmentDownloaderStates extends IBaseStates {\r\n}\r\n\r\nexport class AttachmentDownloader extends BaseComponent<IAttachmentDownloaderProps, IAttachmentDownloaderStates>{\r\n    inputFile?: Input | null;\r\n    constructor(props: IAttachmentDownloaderProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.setLoading(false);\r\n    }\r\n    virtualRender() {\r\n        let columns: ColumnsType<any> = [\r\n            //{\r\n            //    title: 'نام فایل',\r\n            //    dataIndex: 'Title',\r\n            //    key: 'Title',\r\n            //    render: (text: any, record: IAttachment, __: number) => {\r\n            //        return <a href={record.Path} download={text}>{text}</a>;\r\n            //    }\r\n            //},\r\n            {\r\n                title: '',\r\n                dataIndex: 'Path',\r\n                key: 'Path',\r\n                onHeaderCell: () => {\r\n                    return {\r\n                        style: { width: 30 }\r\n                    }\r\n                },\r\n                onCell: () => {\r\n                    return {\r\n                        style: { padding: 2, textAlign: 'center' }\r\n                    }\r\n                },\r\n                render: (_: any, record: IAttachment, __: number) => {\r\n                    return (\r\n                        <a href={record.Path} download={record.Title}>\r\n                            <Button style={{ backgroundColor: 'transparent', border: 'none' }} icon={<DownloadOutlined />} size={\"large\"} title=\"دانلود\"\r\n                                onClick={(e) => {\r\n                                    e.stopPropagation();\r\n                                }}\r\n                            />\r\n                        </a>\r\n                    )\r\n                },\r\n            }\r\n        ];\r\n\r\n        if (!this.props.extraColumns)\r\n            columns = [{\r\n                title: 'توضیحات',\r\n                dataIndex: 'Description',\r\n                key: 'Description',\r\n            }, ...columns];\r\n        \r\n        if (this.props.extraColumns)\r\n            columns.push(...this.props.extraColumns());\r\n\r\n        let { attachments } = this.props;\r\n        return (\r\n            <>\r\n                <Table\r\n                    scroll={{ x: \"max-content\" }}\r\n                    rowKey={a => a.RowGuid}\r\n                    columns={columns}\r\n                    dataSource={attachments.map(a => a)}\r\n                    bordered\r\n                />\r\n            </>\r\n        );\r\n    }\r\n}","import { Button, Popover, Tooltip } from \"antd\";\r\nimport React from \"react\";\r\nimport { QuestionCircleFilled } from '@ant-design/icons';\r\n\r\ninterface IHelperPopoverProps {\r\n    title?: string;\r\n    descriptionPopoverContent: React.ReactNode;\r\n    placement?: 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom';\r\n    style?: React.CSSProperties;\r\n}\r\nconst HelperPopover = (props: IHelperPopoverProps) => {\r\n\r\n    const [descriptionPopoverOpen, setDescriptionPopoverOpen] = React.useState<boolean>(false);\r\n\r\n    React.useEffect(() => {\r\n        //handle MouseClick on other places to close popover\r\n        const handleClick = () => {\r\n            if (descriptionPopoverOpen)\r\n                setDescriptionPopoverOpen(false);\r\n        };\r\n\r\n        window.addEventListener('click', handleClick);\r\n\r\n        return () => {\r\n            window.removeEventListener('click', handleClick);\r\n        };\r\n    }, [descriptionPopoverOpen]);\r\n\r\n    const popoverHandleClick = (e: React.MouseEvent) => {\r\n        e.stopPropagation();\r\n        setDescriptionPopoverOpen(!descriptionPopoverOpen);\r\n    };\r\n\r\n    return (\r\n        <Tooltip title={props.title} placement={\"right\"}>\r\n            <Popover\r\n                trigger={\"click\"}\r\n                content={props.descriptionPopoverContent}\r\n                placement={props.placement}\r\n                visible={descriptionPopoverOpen}\r\n            >\r\n                <Button\r\n                    icon={<QuestionCircleFilled style={{ transform: \"scaleX(-1)\" }} />}\r\n                    style={props.style}\r\n                    onClick={popoverHandleClick}\r\n                >\r\n                </Button>\r\n            </Popover>\r\n        </Tooltip>\r\n    );\r\n}\r\nexport default HelperPopover;","import { Alert, Button, Form, Modal, Radio, Select, Table, Tooltip } from \"antd\";\r\nimport { ArrowLeftOutlined, StopOutlined, WarningFilled } from '@ant-design/icons';\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { ICallOptions, IEntity, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { EvaluationComponent, IEvaluationComponentFormProps, IEvaluationComponentProps, IEvaluationComponentStates, IEvaluationInitialData } from \"./evaluationComponent\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { IDocumentType } from \"../../baseInfo/documentType/interfaces\";\r\nimport { IAttachment } from \"../../baseInfo/attachment/interfaces\";\r\nimport { AttachmentViewer } from \"../../baseInfo/attachment/attachmentViewer\";\r\nimport { enmDocumentCheckStates, enmEvaluationMethods, IDamageCase } from \"../../baseInfo/damageCase/interfaces\";\r\nimport React from \"react\";\r\nimport { IDamageReason } from \"../../baseInfo/damageReason/interfaces\";\r\nimport { AttachmentDownloader } from \"../../baseInfo/attachment/attachmentDownloader\";\r\nimport HelperPopover from \"../../components/helperPopover\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nconst { Option } = Select;\r\n\r\nexport const documentCheckStatesOptions = [\r\n    { title: \"رد خسارت\", value: enmDocumentCheckStates.Reject },\r\n    { title: \"دارای نقص مدارک\", value: enmDocumentCheckStates.Defective },\r\n    { title: \"تایید مدارک\", value: enmDocumentCheckStates.Complete },\r\n];\r\n\r\nexport interface IDefectiveDocument extends IEntity {\r\n    DocumentCheckId: number;\r\n    DocumentTypeId: number;\r\n    DocumentType: IDocumentType;\r\n}\r\n\r\nexport interface IDocumentCheck extends IEntity {\r\n    DamageCaseEvaluatorId: number;\r\n    DocumentCheckState: enmDocumentCheckStates;\r\n    DamageReasonId?: number;\r\n    DamageReason?: IDamageReason;\r\n    Description?: string;\r\n    DefectiveDocuments: IDefectiveDocument[];\r\n    DefectiveDocumentTypes: number[];\r\n    Attachments: IAttachment[];\r\n    CheckInPersonOrOnline: boolean;\r\n}\r\n\r\nexport interface IDocumentTypeAttachment {\r\n    DocumentTypeId?: number;\r\n    AttachmentId: number;\r\n}\r\n\r\nexport interface IDocumentCheckStates extends IEvaluationComponentStates<IDocumentCheck> {\r\n    documentTypes: IDocumentType[];\r\n    damageReasons: IDamageReason[];\r\n    documentTypeAttachments: IDocumentTypeAttachment[];\r\n}\r\n\r\nexport interface IDocumentCheckProps extends IEvaluationComponentProps {\r\n\r\n}\r\n\r\ninterface IDocumentCheckInitialData extends IEvaluationInitialData {\r\n    DocumentTypes: IDocumentType[];\r\n    DamageReasons: IDamageReason[];\r\n}\r\n\r\nexport interface IDocumentCheckFormProps extends IEvaluationComponentFormProps<IDocumentCheck> {\r\n    numberOfPreviousEvaluations?: number;\r\n    documentTypes: IDocumentType[];\r\n    damageReasons: IDamageReason[];\r\n    damageCaseDocumentTypeAttachments: IAttachment[];\r\n    documentTypeAttachments: IDocumentTypeAttachment[];\r\n    onChangeDocumentCheckState?: (e: any) => void;\r\n    onChangeDescription?: (value: any) => void;\r\n    onChangeDefectiveDocumentTypes?: (selectedRowKeys: React.Key[]) => void;\r\n    onChangeDamageReason?: (value: any) => void;\r\n    onChangeDocumentTypeAttachment: (attachmentId: number, documentTypeId: number) => void;\r\n    onChangeCheckInPersonOrOnline?: (e: any) => void;\r\n}\r\n\r\nconst sampleDescriptions = [\r\n    { type: enmDocumentCheckStates.Defective, message: \"تصاویر ارسال شده فاقد وضوح کافی هستند\" },\r\n    { type: enmDocumentCheckStates.Defective, message: \"مدارک اشتباهی ارسال شده اند\" },\r\n    { type: enmDocumentCheckStates.Reject, message: \"خسارت تحت پوشش بیمه نامه نیست\" },\r\n    { type: enmDocumentCheckStates.Reject, message: \"تاریخ خسارت خارج از پوشش بیمه نامه است\" }\r\n];\r\n\r\nexport const DocumentCheckForm = (props: IDocumentCheckFormProps) => {\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 7, lg: 8, md: 9, sm: 10, xs: 10 },\r\n        wrapperCol: { xxl: 12, xl: 17, lg: 16, md: 15, sm: 14, xs: 14 },\r\n    };\r\n\r\n    const [formLayout] = React.useState<LayoutType>('horizontal');\r\n\r\n    const [form] = Form.useForm();\r\n\r\n    React.useEffect(() => {\r\n        let entity = props.currentEntity;\r\n        if (!entity.DamageReasonId)\r\n            entity.DamageReasonId = props.damageCase.DamageReasonId;\r\n        if (props.damageCase.DamageReason?.includes('سرقت') === true)\r\n            entity.CheckInPersonOrOnline = false;\r\n        if (props.currentEntity.DefectiveDocuments)\r\n            entity.DefectiveDocumentTypes = props.currentEntity.DefectiveDocuments.map(m => m.DocumentTypeId);\r\n        form.setFieldsValue(entity);\r\n\r\n    }, [props, form]);\r\n\r\n    const numberOfPreviousEvaluations = props.numberOfPreviousEvaluations === undefined ? props.damageCase.NumberOfPreviousEvaluations : props.numberOfPreviousEvaluations;\r\n\r\n    const documentTypes = props.documentTypes ??\r\n        props.damageCaseDocumentTypeAttachments?.filter((a: any) => !!a.DamageCaseDocumentType.DocumentType)?.map((o: any) => o.DamageCaseDocumentType.DocumentType)\r\n            .reduce((acc: IDocumentType[], current: IDocumentType) => {\r\n                if (acc.map(a => a.Id).indexOf(current.Id) === -1)\r\n                    acc.push(current);\r\n                return acc;\r\n            }, []);\r\n\r\n    const documentTypesOptions = [(<Option key={\"Empty\"} value={null}>...</Option>), ...documentTypes.map(o => <Option key={o.Name} value={o.Id}>{o.Name}</Option>)];\r\n\r\n    const { DefectiveDocuments } = props.currentEntity;\r\n\r\n    const { currentEntity } = props;\r\n\r\n    const { EvaluationMethod, PolicyEquipmentModel } = props.damageCase;\r\n\r\n    if (DefectiveDocuments) {\r\n        DefectiveDocuments.forEach(k => {\r\n            if (documentTypes.map(d => d.Id).indexOf(k.DocumentTypeId) === -1) {\r\n                documentTypes.push(k.DocumentType);\r\n                documentTypesOptions.push(<Option key={k.DocumentType.Name} value={k.DocumentTypeId}>{k.DocumentType.Name}</Option>);\r\n            }\r\n        });\r\n    }\r\n\r\n    const damageReasonOptions = props.damageReasons\r\n        ? props.damageReasons.map(o => <Option key={o.Name} value={o.Id}>{o.Name}</Option>)\r\n        : [<Option key={props.damageCase.DamageReason} value={props.damageCase.DamageReasonId}>{props.damageCase.DamageReason}</Option>];\r\n\r\n    const documentCheckState = form?.getFieldValue('DocumentCheckState');\r\n    const descriptionPopoverContent =\r\n        <div>\r\n            {sampleDescriptions.filter(a => a.type === documentCheckState).map(a =>\r\n                <p\r\n                    key={a.message}\r\n                    className=\"helperDescription\"\r\n                    onClick={() => {\r\n                        const desc = form.getFieldValue('Description');\r\n                        const value = (desc ? desc + '\\n' : '') + a.message;\r\n                        props.onChangeDescription && props.onChangeDescription(value);\r\n                    }} >\r\n                    {a.message}\r\n                </p>)}\r\n        </div>;\r\n\r\n\r\n    const requireDescription = [enmDocumentCheckStates.Reject, enmDocumentCheckStates.Defective].indexOf(currentEntity.DocumentCheckState) > -1;\r\n\r\n    const disableFormItems = props.disabled;// || (numberOfPreviousEvaluations === 1 && currentEntity.CheckInPersonOrOnline !== true);\r\n\r\n    const { Policy } = PolicyEquipmentModel;\r\n    const needPolicyUpdate = !Policy.CheckPolicyDate\r\n        ? \"بدلیل ناقص بودن اطلاعات بیمه نامه نمیتوانید پرونده جاری را بررسی نمایید، لطفاً اطلاعات بیمه نامه را بروزرسانی نمایید\"\r\n        : \"\";\r\n\r\n    return (\r\n        <Form\r\n            scrollToFirstError\r\n            form={form}\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={async (values) => {\r\n                props.onSubmit && await props.onSubmit(values);\r\n            }}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n        >\r\n\r\n            {!props.disabled &&\r\n                <Alert\r\n                    style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                    message={'ارزیاب گرامی، باتوجه به انتخاب شما به عنوان مرکز ارزیابی منتخب، خواهشمند است مدارک و مستندات پرونده خسارت را بررسی و نتیجه را ثبت نمایید'}\r\n                    type=\"info\"\r\n                    showIcon\r\n                />\r\n            }\r\n\r\n            {numberOfPreviousEvaluations >= 1 &&\r\n                <Form.Item\r\n                    label={'نیاز به ارزیابی مجدد؟'}\r\n                    name={'CheckInPersonOrOnline'}\r\n                    key={'CheckInPersonOrOnline'}\r\n                    rules={[{ required: true, message: 'پاسخ اجباری است' }]}\r\n                >\r\n                    <Radio.Group key={'VideoConferencing'} onChange={props.onChangeCheckInPersonOrOnline} buttonStyle={\"solid\"} disabled={props.disabled}>\r\n                        <Radio value={true}>بلی</Radio>\r\n                        <Radio value={false}>خیر</Radio>\r\n                    </Radio.Group>\r\n                </Form.Item>\r\n            }\r\n\r\n            <div>\r\n\r\n                <Form.Item\r\n                    label={<span style={{ lineHeight: \"normal\" }}>نتیجه بررسی مدارک و مستندات؟</span>}\r\n                    name={'DocumentCheckState'}\r\n                    key={'DocumentCheckState'}\r\n                    //rules={[{ required: numberOfPreviousEvaluations === 0 || (numberOfPreviousEvaluations >= 1 && currentEntity.CheckInPersonOrOnline === true), message: 'پاسخ اجباری است' }]}\r\n                    //hidden={numberOfPreviousEvaluations >= 1 && currentEntity.CheckInPersonOrOnline !== true}\r\n                >\r\n                    <Radio.Group key={'DocumentCheckState'} onChange={props.onChangeDocumentCheckState} disabled={disableFormItems}>\r\n                        {documentCheckStatesOptions.map(s =>\r\n                            <Radio key={s.value} value={s.value}>{s.title}</Radio>\r\n                        )}\r\n                    </Radio.Group>\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    label={'دلیل خسارت'}\r\n                    name={'DamageReasonId'}\r\n                    key={'DamageReasonId'}\r\n                    rules={[{ required: true, message: 'دلیل خسارت الزامی است' }]}\r\n                >\r\n                    <Select\r\n                        disabled={disableFormItems}\r\n                        onChange={props.onChangeDamageReason}\r\n                        key={'DamageReasonId'}\r\n                    >\r\n                        {damageReasonOptions}\r\n                    </Select>\r\n                </Form.Item>\r\n\r\n                {currentEntity.DocumentCheckState === enmDocumentCheckStates.Complete && numberOfPreviousEvaluations === 0 && props.damageCase.DamageReason?.includes('سرقت') !== true &&\r\n                    <Form.Item\r\n                        label={EvaluationMethod === enmEvaluationMethods.VideoCall ? 'نیاز به ارزیابی آنلاین؟' : 'نیاز به ارزیابی حضوری؟'}\r\n                        name={'CheckInPersonOrOnline'}\r\n                        key={'CheckInPersonOrOnline'}\r\n                        rules={[{ required: true, message: 'پاسخ اجباری است' }]}\r\n                    >\r\n                        <Radio.Group key={'VideoConferencing'} onChange={props.onChangeCheckInPersonOrOnline} buttonStyle={\"solid\"} disabled={disableFormItems}>\r\n                            <Radio value={true}>بلی</Radio>\r\n                            <Radio value={false}>خیر</Radio>\r\n                        </Radio.Group>\r\n                    </Form.Item>\r\n                }\r\n\r\n                <Form.Item\r\n                    label={'توضیحات'}\r\n                    name={'Description'}\r\n                    key={'Description'}\r\n                    style={{ display: requireDescription ? 'flex' : 'none' }}\r\n                    rules={[{ required: requireDescription, message: 'توصیحات الزامی است' }]}\r\n                    extra={disableFormItems ? <></> : <HelperPopover descriptionPopoverContent={descriptionPopoverContent} title=\"نمونه توضیحات\" placement=\"right\" style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0 }} />}\r\n                >\r\n                    <TextArea\r\n                        rows={8}\r\n                        onChange={e => { props.onChangeDescription && props.onChangeDescription(e.target.value); }}\r\n                        disabled={disableFormItems}\r\n                        style={{ width: disableFormItems ? \"100%\" : \"calc(100% - 34px)\" }}\r\n                    />\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    label={'مدارک دارای نقص'}\r\n                    name={'DefectiveDocumentTypes'}\r\n                    key={'DefectiveDocumentTypes'}\r\n                    style={{ display: currentEntity.DocumentCheckState === enmDocumentCheckStates.Defective ? 'flex' : 'none' }}\r\n                    rules={[{ required: (!currentEntity.DefectiveDocumentTypes || currentEntity.DefectiveDocumentTypes?.length === 0) && currentEntity.DocumentCheckState === enmDocumentCheckStates.Defective, message: 'مدارک دارای نقص را انتخاب نمایید' }]}\r\n                >\r\n                    <Table\r\n\r\n                        loading={false}\r\n                        scroll={{ x: \"max-content\" }}\r\n                        rowKey=\"Id\"\r\n                        rowSelection={{\r\n                            type: 'checkbox',\r\n                            selectedRowKeys: currentEntity.DefectiveDocumentTypes,\r\n                            onChange: props.onChangeDefectiveDocumentTypes,\r\n                            columnTitle: 'دارای نقص؟',\r\n                            selections: !props.disabled,\r\n                            columnWidth: 100\r\n                        }}\r\n                        pagination={false}\r\n\r\n                        onHeaderRow={() => {\r\n                            return {\r\n                                className: 'ant-table-thead-checkbox',\r\n                            };\r\n                        }}\r\n                        dataSource={documentTypes}\r\n                        columns={[\r\n                            {\r\n                                dataIndex: \"Name\",\r\n                                title: \"نوع مستند\",\r\n                                width: 200\r\n                            }\r\n                        ]}\r\n                    />\r\n\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    label={'مدارک و مستندات'}\r\n                    name={'Attachments'}\r\n                    key={'Attachments'}\r\n                    hidden={!props.damageCaseDocumentTypeAttachments || props.damageCaseDocumentTypeAttachments.length === 0}\r\n                >\r\n                    {disableFormItems\r\n                        ? <AttachmentDownloader key={'Attachments'} attachments={props.damageCaseDocumentTypeAttachments}\r\n                            extraColumns={() => {\r\n                                return [{\r\n                                    title: 'نوع مستند',\r\n                                    dataIndex: 'DocumentTypeId',\r\n                                    key: 'DocumentTypeId',\r\n                                    render: (_: any, record: IAttachment) => {\r\n                                        return (\r\n                                            <Select\r\n                                                disabled={disableFormItems}\r\n                                                defaultValue={(record as any)?.DamageCaseDocumentType?.DocumentTypeId ?? null}\r\n                                            >\r\n                                                {documentTypesOptions}\r\n                                            </Select>\r\n                                        );\r\n                                    }\r\n                                }];\r\n                            }} />\r\n                        : <AttachmentViewer key={'Attachments'} attachments={props.damageCaseDocumentTypeAttachments}\r\n                            extraColumns={() => {\r\n                                return [{\r\n\r\n                                },\r\n                                {\r\n                                    title: 'نوع مستند',\r\n                                    dataIndex: 'DocumentTypeId',\r\n                                    key: 'DocumentTypeId',\r\n                                    render: (_: any, record: IAttachment) => {\r\n                                        const currentDocumentTypeAttachment = props.documentTypeAttachments.find(d => d.AttachmentId === record.Id);\r\n                                        const documentTypeId = !!currentDocumentTypeAttachment ? currentDocumentTypeAttachment.DocumentTypeId : (record as any)?.DamageCaseDocumentType?.DocumentTypeId ?? null;\r\n                                        return (\r\n                                            <Select\r\n                                                disabled={disableFormItems}\r\n                                                onChange={(value) => props.onChangeDocumentTypeAttachment(record.Id, value)}\r\n                                                defaultValue={documentTypeId}\r\n                                            >\r\n                                                {documentTypesOptions}\r\n                                            </Select>\r\n                                        );\r\n                                    }\r\n                                }];\r\n                            }} />\r\n                    }\r\n                </Form.Item>\r\n\r\n            </div>\r\n\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    {needPolicyUpdate ?\r\n                        <Tooltip title={needPolicyUpdate} color=\"orange\">\r\n                            <Button type=\"default\" htmlType=\"button\" loading={props.loading} style={{ color: \"orangered\", width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                                <WarningFilled style={{ verticalAlign: \"middle\" }} />\r\n                            </Button>\r\n                        </Tooltip>\r\n                        :\r\n                        <Button type=\"primary\" htmlType=\"submit\" icon={<ArrowLeftOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                            بعدی\r\n                        </Button>\r\n                    }\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n\r\n                </Form.Item>\r\n            }\r\n\r\n        </Form>\r\n    );\r\n}\r\n\r\nexport class DocumentCheck extends EvaluationComponent<IDocumentCheck, IDocumentCheckProps, IDocumentCheckStates>{\r\n    onInitializing() {\r\n        this.defaultEntity = {\r\n            DamageTypeId: this.props.damageCase.DamageTypeId,\r\n            DamageReasonId: this.props.damageCase.DamageReasonId\r\n        } as any;\r\n\r\n        this.defaultState = {\r\n            documentTypes: [],\r\n            damageCaseDocumentTypeAttachments: [],\r\n            damageReasons: [],\r\n            defectiveDocumentTypes: [],\r\n            documentTypeAttachments: [],\r\n            allDamageCases: []\r\n        } as any;\r\n\r\n        this.onInitialDataFetching = (params: any) => {\r\n            params.equipmentId = this.props.damageCase.PolicyEquipmentModel.EquipmentId;\r\n            params.damageCaseId = this.props.damageCase.Id;\r\n            params.damageReasonId = this.props.damageCase.DamageReasonId;\r\n            return params;\r\n        };\r\n\r\n        this.onInitialDataFetched = (result: IResultSet<any>) => {\r\n            let documentCheckInitialData = result.Data as IDocumentCheckInitialData;\r\n\r\n            this.setState({\r\n                loading: false,\r\n                evaluationSteps: documentCheckInitialData.EvaluationSteps,\r\n                documentTypes: documentCheckInitialData.DocumentTypes,\r\n                damageReasons: documentCheckInitialData.DamageReasons,\r\n                damageCaseDocumentTypeAttachments: documentCheckInitialData.DamageCaseDocumentTypeAttachments,\r\n                policyCert: documentCheckInitialData.PolicyCert,\r\n                allDamageCases: documentCheckInitialData.AllDamageCases\r\n            });\r\n        };\r\n    }\r\n\r\n    onChangeDocumentCheckState = (e: any) => {\r\n        let { currentEntity } = this.state;\r\n        currentEntity.DocumentCheckState = e.target?.value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeDescription = (value: any) => {\r\n        let { currentEntity } = this.state;\r\n        currentEntity.Description = value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeDefectiveDocumentTypes = (selectedRowKeys: React.Key[]) => {\r\n        this.setState({ currentEntity: { ...this.state.currentEntity, DefectiveDocumentTypes: selectedRowKeys as number[] } });\r\n    }\r\n    onChangeDamageReason = (value: any) => {\r\n        let { currentEntity } = this.state;\r\n        currentEntity.DamageReasonId = value;\r\n        currentEntity.DamageReason = this.state.damageReasons.find(d => d.Id === currentEntity.DamageReasonId);\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/getdocumenttypes\",\r\n            data: {\r\n                equipmentId: this.props.damageCase.PolicyEquipmentModel.EquipmentId,\r\n                damageReasonId: currentEntity.DamageReasonId\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful && result.Data)\r\n                    this.setState({ currentEntity, documentTypes: result.Data });\r\n            }\r\n        };\r\n        this.callApi(fetchOpt);\r\n    }\r\n    onChangeDocumentTypeAttachment = (attachmentId: number, documentTypeId: number) => {\r\n        let documentTypeAttachments = this.state.documentTypeAttachments;\r\n        let documentTypeAttachment = documentTypeAttachments.find(d => d.AttachmentId === attachmentId);\r\n        if (documentTypeAttachment)\r\n            documentTypeAttachment.DocumentTypeId = documentTypeId;\r\n        else\r\n            documentTypeAttachments.push({ AttachmentId: attachmentId, DocumentTypeId: documentTypeId });\r\n        this.setState({ documentTypeAttachments });\r\n    }\r\n    onChangeCheckInPersonOrOnline = (e: any) => {\r\n        let { currentEntity } = this.state;\r\n        currentEntity.CheckInPersonOrOnline = e.target.value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onSubmit = async () => {\r\n        let { currentEntity } = this.state;\r\n        if (!currentEntity)\r\n            return;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/documentcheck\",\r\n            data: {\r\n                evaluation: {\r\n                    RowGuid: currentEntity.RowGuid,\r\n                    DamageCaseEvaluatorId: currentEntity.DamageCaseEvaluatorId,\r\n                    DocumentCheckState: this.props.damageCase.NumberOfPreviousEvaluations >= 1 && currentEntity.CheckInPersonOrOnline === false ? enmDocumentCheckStates.Complete : currentEntity.DocumentCheckState,\r\n                    DamageReasonId: currentEntity.DamageReasonId,\r\n                    Description: currentEntity.DocumentCheckState === enmDocumentCheckStates.Complete ? undefined : currentEntity.Description,\r\n                    CheckInPersonOrOnline: currentEntity.DocumentCheckState === enmDocumentCheckStates.Complete ? currentEntity.CheckInPersonOrOnline : undefined\r\n                },\r\n                defectiveDocumentTypes: currentEntity.DocumentCheckState === enmDocumentCheckStates.Complete ? [] : (currentEntity.DefectiveDocumentTypes ?? []),\r\n                documentTypeAttachments: this.state.documentTypeAttachments\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful && result.Data) {\r\n                    Core.successNotification('بررسی مدارک انجام شد');\r\n                    if (currentEntity.DocumentCheckState === enmDocumentCheckStates.Complete) {\r\n                        if (this.props.assignEvaluatorAccess) {\r\n                            Modal.confirm({\r\n                                title: 'تخصیص ارزیاب',\r\n                                content: 'آیا مایلید کارشناس دیگری را جهت ادامه روند ارزیابی به این پرونده خسارت اختصاص دهید؟',\r\n                                centered: true,\r\n                                autoFocusButton: 'ok',\r\n                                okText: 'بلی',\r\n                                cancelText: 'خیر',\r\n                                direction: 'rtl',\r\n                                onOk: () => {\r\n                                    this.props.nextStatus(result.Data as IDamageCase, true);\r\n                                },\r\n                                onCancel: () => {\r\n                                    this.props.nextStatus(result.Data as IDamageCase);\r\n                                }\r\n                            });\r\n                        }\r\n                        else\r\n                            this.props.nextStatus(result.Data as IDamageCase);\r\n                    }\r\n                    else\r\n                        this.props.onClose && this.props.onClose(this);\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n    renderBody() {\r\n        return (\r\n            <DocumentCheckForm\r\n                key=\"DocumentCheckForm\"\r\n                loading={this.state.loading}\r\n                currentEntity={this.state.currentEntity}\r\n                damageCase={this.props.damageCase}\r\n                onClose={this.props.onClose}\r\n                onSubmit={this.onSubmit}\r\n                damageCaseDocumentTypeAttachments={this.state.damageCaseDocumentTypeAttachments.flatMap(a => a)}\r\n                documentTypes={this.state.documentTypes}\r\n                documentTypeAttachments={this.state.documentTypeAttachments}\r\n                onChangeDocumentCheckState={this.onChangeDocumentCheckState}\r\n                onChangeCheckInPersonOrOnline={this.onChangeCheckInPersonOrOnline}\r\n                onChangeDefectiveDocumentTypes={this.onChangeDefectiveDocumentTypes}\r\n                onChangeDocumentTypeAttachment={this.onChangeDocumentTypeAttachment}\r\n                onChangeDescription={this.onChangeDescription}\r\n                onChangeDamageReason={this.onChangeDamageReason}\r\n                damageReasons={this.state.damageReasons}\r\n            />\r\n        );\r\n    }\r\n}","import { Alert, Button, Col, Form, Input, Tooltip } from \"antd\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { DatePicker as DatePickerJalali } from \"antd-jalali\";\r\nimport { ArrowLeftOutlined, StopOutlined, CopyOutlined } from '@ant-design/icons';\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState, ICallOptions, IEntity, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { EvaluationComponent, IEvaluationComponentFormProps, IEvaluationComponentProps, IEvaluationComponentStates, IEvaluationInitialData } from \"./evaluationComponent\";\r\nimport locale from 'antd/es/date-picker/locale/fa_IR';\r\nimport { IAttachment } from \"../../baseInfo/attachment/interfaces\";\r\nimport { AttachmentDownloader } from \"../../baseInfo/attachment/attachmentDownloader\";\r\nimport { IPolicyholderConfirmation } from \"./policyholderConfirmation\";\r\nimport React from \"react\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport { enmEvaluationMethods, evaluationMethodsOptions } from \"../../baseInfo/damageCase/interfaces\";\r\nimport HelperPopover from \"../../components/helperPopover\";\r\n\r\ndayjs.extend(jalaliday);\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nexport interface IContactSetting extends IEntity {\r\n    DamageCaseEvaluatorId: number;\r\n    Description?: string | null;\r\n    ConferenceUrl?: string | null;\r\n    ContactDate?: any;\r\n}\r\n\r\nexport interface IContactSettingStates extends IEvaluationComponentStates<IContactSetting> {\r\n    policyholderConfirmation?: IPolicyholderConfirmation;\r\n    previousMakingContactAttachments: IAttachment[];\r\n}\r\n\r\nexport interface IContactSettingProps extends IEvaluationComponentProps {\r\n    \r\n}\r\n\r\ninterface IContactSettingInitialData extends IEvaluationInitialData {\r\n    PolicyholderConfirmation?: IPolicyholderConfirmation;\r\n    PreviousMakingContactAttachments: IAttachment[];\r\n}\r\n\r\nexport interface IContactSettingFormProps extends IEvaluationComponentFormProps<IContactSetting> {\r\n    showPolicyholderMessage?: boolean;\r\n    onChangeDescription?: (value?: any) => void;\r\n    onChangeConferenceUrl?: (value?: any) => void;\r\n    onChangeContactDate?: (e: any) => void;\r\n    policyholderConfirmation?: IPolicyholderConfirmation;\r\n    previousMakingContactAttachments: IAttachment[];\r\n    evaluationMethodChanged?: boolean;\r\n}\r\n\r\nconst sampleDescriptions = [\r\n    { type: enmEvaluationMethods.VideoCall, message: \"لطفا در زمان مقرر در جلسه آنلاین حاضر شوید\" },\r\n    //{ type: enmEvaluationMethods.EvaluatorInPerson, message: \"در زمان مقرر ارزیاب به شما مراجعه خواهد نمود، لطفا اصل دستگاه، اقلام موجود و مدارک شناسایی را به همراه داشته باشید\" },\r\n    { type: enmEvaluationMethods.PolicyholderInPerson, message: \"در زمان مقرر با همراه داشتن دستگاه، اقلام موجود و اصل مدارک شناسایی به ارزیاب مربوطه مراجعه نمایید\" },\r\n    //{ type: enmEvaluationMethods.PolicyholderInPersonToInsurerBranch, message: \"در زمان مقرر با همراه داشتن دستگاه، اقلام موجود و اصل مدارک شناسایی به شعبه مربوطه مراجعه نمایید\" }\r\n];\r\n\r\nexport const ContactSettingForm = (props: IContactSettingFormProps) => {\r\n    const { EvaluationMethod } = props.damageCase;\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 6, lg: 8, md: 8, sm: 8, xs: 8 },\r\n        wrapperCol: { xxl: 12, xl: 12, lg: 16, md: 16, sm: 16, xs: 16 }\r\n    };\r\n\r\n    const [formLayout] = React.useState<LayoutType>('horizontal');\r\n    const [form] = Form.useForm();\r\n\r\n    React.useEffect(() => {\r\n        let currentEntity = props.currentEntity;\r\n        form.setFieldsValue(currentEntity);\r\n    }, [props, form]);\r\n\r\n    const methodTypeTitle = evaluationMethodsOptions.find(m => (props.evaluationMethodChanged && m.value === enmEvaluationMethods.VideoCall) || m.value === EvaluationMethod)?.makingContactTitle;\r\n\r\n    const descriptionPopoverContent =\r\n        <div>\r\n            {sampleDescriptions.filter(a => a.type === EvaluationMethod).map(a =>\r\n                <p\r\n                    key={a.message}\r\n                    className=\"helperDescription\"\r\n                    onClick={() => {\r\n                        const desc = form.getFieldValue('Description');\r\n                        const value = (desc ? desc + '\\n' : '') + a.message;\r\n                        props.onChangeDescription && props.onChangeDescription(value);\r\n                    }} >\r\n                    {a.message}\r\n                </p>)}\r\n        </div>;\r\n\r\n    //const evaluator = props.damageCase.DamageCaseEvaluators.find(e => e.Id === props.currentEntity.DamageCaseEvaluatorId)?.Evaluator;\r\n\r\n    return (\r\n        <Form\r\n            scrollToFirstError\r\n            form={form}\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={async (values) => {\r\n                props.onSubmit && await props.onSubmit(values);\r\n            }}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n        >\r\n            {props.policyholderConfirmation\r\n                ?\r\n                <Form.Item\r\n                    label={'نظر بیمه گزار/مشتری'}\r\n                    name={'PolicyholderConfirmation'}\r\n                    key={'PolicyholderConfirmation'}\r\n                >\r\n                    <p>{props.policyholderConfirmation.ObjectionDescription}</p>\r\n                </Form.Item>\r\n                : <></>\r\n            }\r\n\r\n            {props.previousMakingContactAttachments && props.previousMakingContactAttachments.length\r\n                ? <Form.Item\r\n                    label={'مستندات تماس توسط ارزیاب قبلی'}\r\n                    name={'PreviousMakingContactAttachments'}\r\n                    key={'PreviousMakingContactAttachments'}\r\n                >\r\n                    <AttachmentDownloader attachments={props.previousMakingContactAttachments} />\r\n                </Form.Item>\r\n                : <></>\r\n            }\r\n\r\n            <Form.Item\r\n                label={'توضیحات'}\r\n                name={'Description'}\r\n                key={'Description'}\r\n                rules={[{ required: true, message: 'توضیحات اجباری است' }]}\r\n                extra={\r\n                    props.disabled ? <></> : <HelperPopover descriptionPopoverContent={descriptionPopoverContent} title=\"نمونه توضیحات\" placement=\"right\" style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0 }} />\r\n                }\r\n            >\r\n                <TextArea\r\n                    onChange={e => props.onChangeDescription && props.onChangeDescription(e.target.value)}\r\n                    disabled={props.disabled}\r\n                    style={{ width: props.disabled ? \"100%\" : \"calc(100% - 34px)\" }} />\r\n            </Form.Item>\r\n\r\n            {EvaluationMethod === enmEvaluationMethods.VideoCall &&\r\n                <>\r\n                    <Form.Item\r\n                        label={'لینک تماس تصویری'}\r\n                        name={'ConferenceUrl'}\r\n                        key={'ConferenceUrl'}\r\n                        rules={[{ required: EvaluationMethod === enmEvaluationMethods.VideoCall, message: 'لینک تماس تصویری اجباری است' }]}\r\n                        extra={\r\n                            props.currentEntity.State === enmEntityState.Added && <Alert type=\"info\" style={{ marginTop: 5 }} message=\"ارزیاب گرامی، درصورت لزوم می توانید لینک مورد نظر خود را در کادر بالا وارد نمایید\" />\r\n                        }\r\n                    >\r\n                        <Input\r\n                            style={{ direction: \"ltr\" }}\r\n                            onChange={e => props.onChangeConferenceUrl && props.onChangeConferenceUrl(e.target.value)}\r\n                            disabled={props.disabled}\r\n                            addonBefore={\r\n                                <Tooltip title=\"کپی لینک\" >\r\n                                    <CopyOutlined onClick={async () => {\r\n                                        if (props.currentEntity.ConferenceUrl)\r\n                                            await navigator.clipboard.writeText(props.currentEntity.ConferenceUrl);\r\n                                    }} />\r\n                                </Tooltip>\r\n                            } />\r\n\r\n                    </Form.Item>\r\n                </>\r\n            }\r\n\r\n            <Col xxl={18} xl={18} lg={24} md={24} sm={24} xs={24} style={{ marginRight: 10, marginTop: 5 }}>\r\n                <Alert type=\"warning\" message={\r\n                    <Form.Item\r\n                        label={'زمان ' + methodTypeTitle}\r\n                        name={'ContactDateP'}\r\n                        labelCol={{ xxl: 12, xl: 12, lg: 12, style: { fontWeight: \"bold\" } }}\r\n                        wrapperCol={{ ...formItemLayout.wrapperCol, style: { direction: 'ltr' } }}\r\n                        key={'ContactDateP'}\r\n                        rules={[{ required: true, message: 'زمان ' + methodTypeTitle + ' اجباری است' }]}\r\n                    >\r\n                        {props.disabled !== true ? <DatePickerJalali\r\n                            onChange={props.onChangeContactDate}\r\n                            format=\"YYYY/MM/DD HH:mm\"\r\n                            locale={locale}\r\n                            showTime={true}\r\n                            inputReadOnly={true}\r\n                            style={{ width: '100%', marginBottom: 8, display: 'block' }}\r\n                        /> : <span style={{ fontWeight: 'bold' }}>{dayjs(props.currentEntity.ContactDate).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span>}\r\n                    </Form.Item>\r\n                } />\r\n            </Col>\r\n\r\n            {/*{evaluator && EvaluationMethod === enmEvaluationMethods.PolicyholderInPerson && props.showPolicyholderMessage === true &&*/}\r\n            {/*    <Col xxl={18} xl={18} lg={24} md={24} sm={24} xs={24} >*/}\r\n            {/*        <Alert type=\"info\" style={{ marginTop: 10 }} message={*/}\r\n            {/*            <p>*/}\r\n            {/*                بیمه گزار/مشتری گرامی، شماره تماس و آدرس مرکز ارزیابی <b>{evaluator.FullName}</b> به شرح ذیل است. لطفاً در هنگام مراجعه به مرکز ارزیابی، مدارک زیر را جهت سهولت در روند ارزیابی به همراه داشته باشید :*/}\r\n            {/*                1. مدارک شناسایی (کارت ملّی یا شناسنامه)*/}\r\n            {/*                2. در حالاتی غیر از حالات سرقت کلی، سرقت با شکست حرز و سیل و طوفان ارائه دستگاه آسیب دیده الزامی است.*/}\r\n            {/*                3. اصل سایر مدارک آپلود شده*/}\r\n            {/*                شماره تماس مرکز ارزیابی : <b>{evaluator.Phone}</b>*/}\r\n            {/*                آدرس مرکز ارزیابی: <b>{evaluator.Address}</b>*/}\r\n            {/*                ساعت کار : <b>{evaluator.WorkTime}</b>*/}\r\n            {/*            </p>*/}\r\n            {/*        } />*/}\r\n            {/*    </Col>*/}\r\n            {/*}*/}\r\n\r\n            {/*{evaluator && EvaluationMethod === enmEvaluationMethods.EvaluatorInPerson && props.showPolicyholderMessage === true &&*/}\r\n            {/*    <Col xxl={18} xl={18} lg={24} md={24} sm={24} xs={24} >*/}\r\n            {/*        <Alert type=\"info\" style={{ marginTop: 10 }} message={*/}\r\n            {/*            <p>*/}\r\n            {/*                بیمه گزار/مشتری گرامی، لطفاً در هنگام مراجعه حضوری ارزیاب، مدارک زیر را جهت سهولت در روند ارزیابی به همراه داشته باشید :*/}\r\n            {/*                1. مدارک شناسایی (کارت ملّی یا شناسنامه)*/}\r\n            {/*                2. در حالاتی غیر از حالات سرقت کلی، سرقت با شکست حرز و سیل و طوفان ارائه دستگاه آسیب دیده الزامی است.*/}\r\n            {/*                3. اصل سایر مدارک آپلود شده*/}\r\n            {/*                ارزیاب: <b>{evaluator.FullName}</b>*/}\r\n            {/*                شماره تماس مرکز ارزیابی : <b>{evaluator.Phone}</b>*/}\r\n            {/*            </p>*/}\r\n            {/*        } />*/}\r\n            {/*    </Col>*/}\r\n            {/*}*/}\r\n\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<ArrowLeftOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        بعدی\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n}\r\n\r\nexport class ContactSetting extends EvaluationComponent<IContactSetting, IContactSettingProps, IContactSettingStates>{\r\n    onInitializing() {\r\n        this.defaultEntity = {\r\n            State: enmEntityState.Added,\r\n            ConferenceUrl: this.props.damageCase.EvaluationMethod === enmEvaluationMethods.VideoCall\r\n                ? \"https://meet.jit.si/Zobdeh_\" + this.props.damageCase.TicketNo.toString() + \"_\" + this.props.damageCase.Code.toString()\r\n                : undefined\r\n        } as any;\r\n\r\n        const title = evaluationMethodsOptions.find(m => m.value === this.props.damageCase.EvaluationMethod)!.contactSettingCommandTitle;\r\n        this.defaultState = {\r\n            title,\r\n            previousMakingContactAttachments: [],\r\n            evaluationMethod: this.props.damageCase.EvaluationMethod,\r\n            allDamageCases: []\r\n        } as any;\r\n\r\n        this.onInitialDataFetching = (params: any) => {\r\n            params.damageCaseId = this.props.damageCase.Id;\r\n            return params;\r\n        };\r\n\r\n        this.onInitialDataFetched = (result) => {\r\n            let contactSettingInitialData = result.Data as IContactSettingInitialData;\r\n            this.setState({\r\n                loading: false,\r\n                policyholderConfirmation: contactSettingInitialData.PolicyholderConfirmation,\r\n                previousMakingContactAttachments: contactSettingInitialData.PreviousMakingContactAttachments,\r\n                evaluationSteps: contactSettingInitialData.EvaluationSteps,\r\n                damageCaseDocumentTypeAttachments: contactSettingInitialData.DamageCaseDocumentTypeAttachments,\r\n                policyCert: contactSettingInitialData.PolicyCert,\r\n                allDamageCases: contactSettingInitialData.AllDamageCases\r\n            });\r\n        };\r\n\r\n    }\r\n    onChangeDescription = (value?: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Description = value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeConferenceUrl = (value?: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.ConferenceUrl = value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeContactDate = (e: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        if (e) {\r\n            let parsedDate = e.toDate();\r\n            parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n            currentEntity.ContactDate = parsedDate;\r\n        }\r\n        else\r\n            currentEntity.ContactDate = undefined;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onSubmit = async () => {\r\n        if (!this.state.currentEntity)\r\n            return;\r\n        let currentEntity = this.state.currentEntity;\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/contactsetting\",\r\n            data: {\r\n                evaluation: {\r\n                    RowGuid: currentEntity.RowGuid,\r\n                    DamageCaseEvaluatorId: currentEntity.DamageCaseEvaluatorId,\r\n                    Description: currentEntity.Description,\r\n                    ConferenceUrl: currentEntity.ConferenceUrl,\r\n                    ContactDate: currentEntity.ContactDate\r\n                }\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('تنظیم تماس انجام شد');\r\n                    this.props.onClose && this.props.onClose(this);\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n    renderBody() {\r\n        return (\r\n            <ContactSettingForm\r\n                key=\"ContactSettingForm\"\r\n                loading={this.state.loading}\r\n                currentEntity={this.state.currentEntity}\r\n                damageCase={this.props.damageCase}\r\n                onClose={this.props.onClose}\r\n                onSubmit={this.onSubmit}\r\n                previousMakingContactAttachments={this.state.previousMakingContactAttachments}\r\n                policyholderConfirmation={this.state.policyholderConfirmation}\r\n                onChangeContactDate={this.onChangeContactDate}\r\n                onChangeDescription={this.onChangeDescription}\r\n                onChangeConferenceUrl={this.onChangeConferenceUrl}\r\n                damageCaseDocumentTypeAttachments={this.state.damageCaseDocumentTypeAttachments}\r\n            />\r\n        );\r\n    }\r\n}","import { Button, Input, message, Table } from \"antd\";\r\nimport { DeleteOutlined, UploadOutlined } from '@ant-design/icons';\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { IAttachment } from \"./interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState } from \"../../components/infrastructure/models\";\r\n\r\nexport interface IAttachmentUploaderProps extends IBaseProps {\r\n    onChange: (attachments: IAttachment[]) => void;\r\n    attachments: IAttachment[];\r\n    disabled?: boolean;\r\n    whiteList: string;\r\n}\r\n\r\nexport interface IAttachmentUploaderStates extends IBaseStates {\r\n    attachments: IAttachment[];\r\n}\r\n\r\nexport class AttachmentUploader extends BaseComponent<IAttachmentUploaderProps, IAttachmentUploaderStates>{\r\n    inputFile?: Input | null;\r\n    constructor(props: IAttachmentUploaderProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            attachments: props.attachments,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.setLoading(false);\r\n    }\r\n    browseFile = () => {\r\n        this.inputFile?.input.click();\r\n    }\r\n    changeFile = async (event: any) => {\r\n        let attachments = this.state.attachments;\r\n        let fileStream = event.target.files.length ? event.target.files[0] : undefined;\r\n        if (!fileStream || this.props.whiteList.split(',').indexOf(fileStream.type) === -1 || !fileStream.name || fileStream.name === '' || fileStream.name.split('.').length > 2 || fileStream.name.indexOf('\\0') > -1) {\r\n            message.error(`فایل انتخاب شده غیرمجاز است`);\r\n            return false;\r\n        }\r\n        if ('image/png,image/jpg,image/jpeg,application/pdf'.split(',').indexOf(fileStream.type) > -1 && fileStream.size > 20971520) {\r\n            message.error(`حداکثر حجم فایل 20 مگابایت باشد`);\r\n            return false;\r\n        }\r\n        let id = Core.newId();\r\n        attachments.push({\r\n            RowGuid: id,\r\n            State: enmEntityState.Added,\r\n            File: fileStream,\r\n            Title: fileStream.name,\r\n            Description: '',\r\n            Path: undefined\r\n        } as any);\r\n        this.props.onChange(attachments);\r\n        this.setState({ attachments });\r\n        this.inputFile?.setValue(\"\");\r\n    }\r\n    virtualRender() {\r\n        const columns = [\r\n            {\r\n                title: 'نام فایل',\r\n                dataIndex: 'Title',\r\n                key: 'Title',\r\n                render: (text: any, attachment: IAttachment, _: number) => {\r\n                    if (this.props.disabled) {\r\n                        return <a href={attachment.Path} download={text}>{text}</a>;\r\n                    }\r\n                    return text;\r\n                }\r\n            },\r\n            {\r\n                title: 'توضیحات',\r\n                dataIndex: 'Description',\r\n                key: 'Description',\r\n                render: (text: any, _: IAttachment, index: number) => {\r\n                    return <Input\r\n                        disabled={this.props.disabled}\r\n                        value={text}\r\n                        onChange={(e) => {\r\n                            let { attachments } = this.state;\r\n                            attachments[index].Description = e.target.value;\r\n                            this.props.onChange(attachments);\r\n                            this.setState({ attachments });\r\n                        }}\r\n                    />\r\n                }\r\n            },\r\n            {\r\n                title: '',\r\n                dataIndex: 'Path',\r\n                key: 'Path',\r\n                width: 50,\r\n                render: (_: any, record: IAttachment, __: number) => {\r\n                    return (\r\n                        <Button disabled={this.props.disabled} style={{ backgroundColor: 'transparent', border: 'none' }} icon={<DeleteOutlined />} size={\"large\"} title=\"حذف\"\r\n                            onClick={() => {\r\n                                let { attachments } = this.state;\r\n                                let index = attachments.indexOf(record);\r\n                                attachments.splice(index, 1);\r\n                                this.props.onChange(attachments);\r\n                                this.setState({ attachments });\r\n                            }}\r\n                        />\r\n                    );\r\n                },\r\n            }\r\n        ];\r\n\r\n        let { attachments } = this.state;\r\n        return (\r\n            <>\r\n                {this.props.disabled ? <></> :\r\n                    <div style={{ margin: \"10px 0px\" }}>\r\n                        <Button onClick={this.browseFile} icon={<UploadOutlined style={{ verticalAlign: 'middle' }} />} style={{}} >\r\n                            آپلود فایل\r\n                        </Button>\r\n                        <Input\r\n                            type=\"file\"\r\n                            hidden\r\n                            ref={node => this.inputFile = node}\r\n                            onChange={this.changeFile}\r\n                            accept={this.props.whiteList}\r\n                        />\r\n                    </div>\r\n                }\r\n                <Table rowKey={a => a.RowGuid} columns={columns} dataSource={attachments.map(a => a)} bordered />\r\n            </>\r\n        );\r\n    }\r\n}","import { JitsiMeeting } from '@jitsi/react-sdk';\r\nimport CustomSpinner from '../infrastructure/customSpinner';\r\nimport { WarningOutlined } from '@ant-design/icons';\r\nimport { useEffect, useState } from 'react';\r\nimport { IJitsiMeetExternalApi } from '@jitsi/react-sdk/lib/types';\r\nimport { Modal } from 'antd';\r\nimport { useReactMediaRecorder } from '../mediaRecorder';\r\n\r\nexport interface IMeetPropsps {\r\n    roomName: string;\r\n    userName: string;\r\n    onClosed: (mediaBlobUrl?: string | null, fileName?: string) => Promise<void>;\r\n}\r\n\r\nexport const Meet = (props: IMeetPropsps) => {\r\n    const [recordingStatus, setRecordingStatus] = useState({ on: false, mode: \"file\" as \"file\" | \"stream\", hasRecording: false });\r\n    const [api, setApi] = useState<IJitsiMeetExternalApi>({} as any);\r\n    const [hangup, setHangup] = useState<boolean>(false);\r\n\r\n    const {\r\n        status,\r\n        startRecording: startRecord,\r\n        stopRecording: stopRecord,\r\n        mediaBlobUrl,\r\n    } = useReactMediaRecorder({ screen: true, audio: true, video: false });\r\n\r\n    const onClose = async () => {\r\n        const downloadRecordingType = \"mp4\";\r\n        const currentTimeSatmp = new Date().getTime();\r\n        const pathName = `${props.roomName}_${currentTimeSatmp}.${downloadRecordingType}`;\r\n        if (mediaBlobUrl) {\r\n            try {\r\n                if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) {\r\n                    // for IE\r\n                    (window.navigator as any).msSaveOrOpenBlob(mediaBlobUrl, pathName);\r\n                } else {\r\n                    // for Chrome\r\n                    const link = document.createElement(\"a\");\r\n                    link.href = mediaBlobUrl;\r\n                    link.download = pathName;\r\n                    document.body.appendChild(link);\r\n                    link.click();\r\n                    document.body.removeChild(link);\r\n                }\r\n            } catch (err) {\r\n                console.error(err);\r\n            }\r\n        }\r\n        await props.onClosed(mediaBlobUrl, pathName);\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (!(api as any).removeAllListeners) {\r\n            return;\r\n        }\r\n\r\n        if ((hangup && status === \"recording\") || (status === 'stopped' && recordingStatus.on)) {\r\n            //api.stopRecording(recordingStatus.mode);\r\n            api.emit('recordingStatusChanged', { on: false });\r\n        }\r\n\r\n        if (hangup && (status === \"idle\" || (status === \"stopped\" && mediaBlobUrl))) {\r\n            onClose();\r\n            return;\r\n        }\r\n\r\n        if (hangup && !recordingStatus.on) {\r\n            api.executeCommand('hangup');\r\n        }\r\n\r\n        api.removeAllListeners();\r\n        api.addListener('toolbarButtonClicked', ({ key, preventExecution }) => {\r\n            if (key === \"hangup\") {\r\n                if (preventExecution) {\r\n                    Modal.confirm({\r\n                        direction: \"rtl\",\r\n                        content: \"آیا مایلید تماس خاتمه یابد؟\",\r\n                        onOk: () => {\r\n                            if (recordingStatus.on) {\r\n                                //api.stopRecording(recordingStatus.mode);\r\n                                api.emit('recordingStatusChanged', { on: false });\r\n                            }\r\n                            setHangup(true);\r\n                        },\r\n                        okText: \"بلی\",\r\n                        cancelText: \"خیر\",\r\n                        centered: true,\r\n                        icon: <WarningOutlined />\r\n                    });\r\n                }\r\n            }\r\n            else if (key === \"recording\") {\r\n                if (recordingStatus.on) {\r\n                    //api.executeCommand('stopRecording', recordingStatus.mode);\r\n                    api.emit('recordingStatusChanged', { on: false });\r\n                }\r\n                else {\r\n                    //api.executeCommand('startRecording', { mode: 'file' });\r\n                    api.emit('recordingStatusChanged', { on: true });\r\n                }\r\n            }\r\n        });\r\n\r\n        api.addListener('recordingStatusChanged', ({ on, mode }) => {\r\n            setRecordingStatus({ on, mode, hasRecording: true });\r\n            if (on) {\r\n                startRecord();\r\n            }\r\n            else {\r\n                stopRecord();\r\n            }\r\n        });\r\n\r\n    }, [api, recordingStatus, hangup, mediaBlobUrl, status]);\r\n\r\n    return (\r\n        <div style={{ height: \"calc(100vh - 160px)\" }}>\r\n            <JitsiMeeting\r\n                configOverwrite={{\r\n                    prejoinConfig: { enabled: false },\r\n                    buttonsWithNotifyClick: ['hangup', 'recording'],\r\n                    toolbarButtons: ['hangup', 'camera', 'microphone', 'fullscreen', 'videoquality', 'recording']\r\n                }}\r\n\r\n                roomName={props.roomName}\r\n                userInfo={{ displayName: props.userName, email: \"\" }}\r\n                getIFrameRef={node => {\r\n                    node.style.height = '100%';\r\n                    Modal.warning({\r\n                        direction: \"rtl\",\r\n                        title: 'هشدار',\r\n                        content: 'لطفا ضبط تماس فراموش نشه...',\r\n                        okText: \"باشه\",\r\n                        centered: true\r\n                    });\r\n                }}\r\n                onApiReady={jitsiApi => {\r\n                    setApi(jitsiApi);\r\n\r\n                }}\r\n                spinner={CustomSpinner}\r\n            />\r\n        </div>\r\n    );\r\n}\r\n","import { Button, Descriptions, Form, Input, Radio, Tooltip } from \"antd\";\r\nimport { ArrowLeftOutlined, StopOutlined, CopyOutlined } from '@ant-design/icons';\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { enmEvaluationMethods, enmEvaluationStatus, evaluationMethodsOptions, IDamageCase } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState, ICallOptions, IEntity, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { EvaluationComponent, IEvaluationComponentFormProps, IEvaluationComponentProps, IEvaluationComponentStates, IEvaluationInitialData } from \"./evaluationComponent\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport { IAttachment } from \"../../baseInfo/attachment/interfaces\";\r\nimport { AttachmentUploader } from \"../../baseInfo/attachment/attachmentUploader\";\r\nimport React from \"react\";\r\nimport { IDamageType } from \"../../baseInfo/damageType/interfaces\";\r\nimport { Meet } from \"../../components/jitsi/meet\";\r\nimport { AttachmentDownloader } from \"../../baseInfo/attachment/attachmentDownloader\";\r\nimport HelperPopover from \"../../components/helperPopover\";\r\nimport { enmContactStatus } from \"./interfaces\";\r\ndayjs.extend(jalaliday);\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nexport const contactStatusOptions = [\r\n    { title: 'رد خسارت', value: enmContactStatus.Unacceptable },\r\n    { title: 'تأیید خسارت', value: enmContactStatus.Acceptable },\r\n    { title: 'عدم برقراری تماس تصویری', value: enmContactStatus.Failed },\r\n    { title: 'تغییر روش ارزیابی به مراجعه حضوری', value: enmContactStatus.EvaluationMethodToPolicyholderInPerson }\r\n];\r\n\r\nexport interface IMakingContact extends IEntity {\r\n    DamageCaseEvaluatorId: number;\r\n    ContactStatus: enmContactStatus;\r\n    DamageTypeId: number;\r\n    DamageType: IDamageType;\r\n    Description?: string;\r\n    EvaluationMakingContactAttachments: IAttachment[];\r\n}\r\n\r\nexport interface IMakingContactStates extends IEvaluationComponentStates<IMakingContact> {\r\n\r\n}\r\n\r\nexport interface IMakingContactProps extends IEvaluationComponentProps {\r\n\r\n}\r\n\r\ninterface IMakingContactInitialData extends IEvaluationInitialData {\r\n\r\n}\r\n\r\nexport interface IMakingContactFormProps extends IEvaluationComponentFormProps<IMakingContact> {\r\n    onChangeContactStatus: (e: any) => void;\r\n    onChangeDescription: (value?: any) => void;\r\n    onChangeAttachments: (attachments: IAttachment[]) => void;\r\n}\r\n\r\nconst sampleDescriptions = [\r\n    { type: enmEvaluationMethods.VideoCall, message: \"بیمه گزار/مشتری در زمان مقرر در جلسه آنلاین حاضر نشد\" },\r\n    //{ type: enmEvaluationMethods.EvaluatorInPerson, message: \"بیمه گزار/مشتری در محل حضور نداشت\" },\r\n    { type: enmEvaluationMethods.PolicyholderInPerson, message: \"بیمه گزار/مشتری در زمان مقرر حاضر نشد\" },\r\n    //{ type: enmEvaluationMethods.PolicyholderInPersonToInsurerBranch, message: \"بیمه گزار/مشتری در زمان مقرر در شعبه حاضر شد\" }\r\n];\r\n\r\nexport const MakingContactForm = (props: IMakingContactFormProps) => {\r\n    const { EvaluationMethod } = props.damageCase;\r\n    const formItemLayout = {\r\n        labelCol: EvaluationMethod === enmEvaluationMethods.VideoCall ?\r\n            { xxl: 6, xl: 6, lg: 6, md: 6, sm: 6, xs: 6 } : { xxl: 8, xl: 10, lg: 12, md: 12, sm: 12, xs: 12 },\r\n        wrapperCol: { xxl: 10, xl: 14, lg: 12, md: 12, sm: 12, xs: 12 }\r\n    };\r\n\r\n    const [formLayout] = React.useState<LayoutType>('horizontal');\r\n    const [form] = Form.useForm();\r\n\r\n    React.useEffect(() => {\r\n        let currentEntity = props.currentEntity as any;\r\n        form.setFieldsValue(currentEntity);\r\n    }, [props, form]);\r\n\r\n    const descriptionPopoverContent =\r\n        <div>\r\n            {sampleDescriptions.filter(a => a.type === EvaluationMethod).map(a =>\r\n                <p\r\n                    key={a.message}\r\n                    className=\"helperDescription\"\r\n                    onClick={() => {\r\n                        const desc = form.getFieldValue('Description');\r\n                        const value = (desc ? desc + '\\n' : '') + a.message;\r\n                        props.onChangeDescription && props.onChangeDescription(value);\r\n                    }} >\r\n                    {a.message}\r\n                </p>)}\r\n        </div>;\r\n    const methodTypeTitle = evaluationMethodsOptions.find(m => props.currentEntity.ContactStatus === enmContactStatus.EvaluationMethodToPolicyholderInPerson || m.value === EvaluationMethod)?.name;\r\n    return (\r\n        <Form\r\n            scrollToFirstError\r\n            form={form}\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={async (values) => {\r\n                props.onSubmit && await props.onSubmit(values);\r\n            }}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n        >\r\n            <Form.Item\r\n                label={`نتیجه ${methodTypeTitle}`}\r\n                name={'ContactStatus'}\r\n                key={'ContactStatus'}\r\n                rules={[{ required: true, message: 'پاسخ اجباری است' }]}\r\n            >\r\n                <Radio.Group key={'ContactStatus'} onChange={props.onChangeContactStatus} disabled={props.disabled}>\r\n                    {contactStatusOptions.filter(s => EvaluationMethod === enmEvaluationMethods.VideoCall || props.currentEntity.ContactStatus === enmContactStatus.EvaluationMethodToPolicyholderInPerson || s.value !== enmContactStatus.EvaluationMethodToPolicyholderInPerson)\r\n                        .map(s =>\r\n                        <Radio key={s.value} value={s.value}>{s.value === enmContactStatus.Failed ? (EvaluationMethod === enmEvaluationMethods.VideoCall ? s.title : 'عدم حضور بیمه گزار/مشتری') : s.title}</Radio>\r\n                    )}\r\n                </Radio.Group>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n                label={'توضیحات'}\r\n                name={'Description'}\r\n                key={'Description'}\r\n                rules={[{\r\n                    required: props.currentEntity.ContactStatus !== enmContactStatus.Acceptable,\r\n                    message: 'توضیحات الزامی است',\r\n                }]}\r\n                extra={\r\n                    props.disabled ? <></> : <HelperPopover descriptionPopoverContent={descriptionPopoverContent} title=\"نمونه توضیحات\" placement=\"right\" style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0 }} />\r\n                }\r\n            >\r\n                <TextArea\r\n                    disabled={props.disabled}\r\n                    onChange={e => props.onChangeDescription(e.target.value)}\r\n                    style={{ width: props.disabled ? \"100%\" : \"calc(100% - 34px)\" }} />\r\n            </Form.Item>\r\n\r\n            {props.currentEntity.ContactStatus === enmContactStatus.Acceptable &&\r\n                <Form.Item\r\n                    label={'مستندات'}\r\n                    name={'Attachments'}\r\n                    key={'Attachments'}\r\n                    rules={[{\r\n                        required: true,\r\n                        validator: () => {\r\n                            if (props.currentEntity.ContactStatus !== enmContactStatus.Failed && props.currentEntity.EvaluationMakingContactAttachments.length === 0)\r\n                                return Promise.reject(new Error('آپلود مستندات الزامی است'));\r\n                            return Promise.resolve();\r\n                        }\r\n                    }]}\r\n                >\r\n                    {props.disabled === true\r\n                        ? <AttachmentDownloader attachments={props.currentEntity.EvaluationMakingContactAttachments} />\r\n                        : <AttachmentUploader\r\n                            whiteList='image/png,image/jpg,image/jpeg,application/pdf,video/mp4'\r\n                            attachments={props.currentEntity.EvaluationMakingContactAttachments}\r\n                            onChange={props.onChangeAttachments}\r\n                            disabled={props.disabled} />\r\n                    }\r\n                </Form.Item>\r\n            }\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<ArrowLeftOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        بعدی\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n}\r\n\r\nexport class MakingContact extends EvaluationComponent<IMakingContact, IMakingContactProps, IMakingContactStates>{\r\n    onInitializing() {\r\n\r\n        this.defaultEntity = {\r\n            EvaluationMakingContactAttachments: [],\r\n            ConfirmPossessionTransition: this.props.damageCase.ConfirmPossessionTransition,\r\n            DamageTypeId: this.props.damageCase.DamageTypeId,\r\n            DamageType: this.props.damageCase.DamageType,\r\n        } as any;\r\n\r\n        const title = evaluationMethodsOptions.find(m => m.value === this.props.damageCase.EvaluationMethod)!.makingContactCommandTitle;\r\n        this.defaultState = {\r\n            title,\r\n            damageTypes: [],\r\n            allDamageCases: []\r\n        } as any;\r\n\r\n        this.onInitialDataFetching = (params: any) => {\r\n            params.damageCaseId = this.props.damageCase.Id;\r\n            return params;\r\n        };\r\n\r\n        this.onInitialDataFetched = (result: IResultSet<any>) => {\r\n            let makeingContactInitialData = result.Data as IMakingContactInitialData;\r\n\r\n            this.setState({\r\n                loading: false,\r\n                evaluationSteps: makeingContactInitialData.EvaluationSteps,\r\n                damageCaseDocumentTypeAttachments: makeingContactInitialData.DamageCaseDocumentTypeAttachments,\r\n                policyCert: makeingContactInitialData.PolicyCert,\r\n                allDamageCases: makeingContactInitialData.AllDamageCases\r\n            });\r\n        };\r\n    }\r\n    extraHeaderDescriptions = () => {\r\n        let contactSettings = this.state.evaluationSteps.filter(s => s.Substatus === enmEvaluationStatus.ContactSetting);\r\n        let contactSetting = contactSettings[contactSettings.length - 1] as any;\r\n        const evaluationMethod = this.props.damageCase?.EvaluationMethod;\r\n\r\n        if (!contactSetting /*|| evaluationMethod === enmEvaluationMethods.EvaluatorInPerson*/)\r\n            return (<></>);\r\n\r\n        let title = evaluationMethodsOptions.find(m => m.value === evaluationMethod)?.name;\r\n        let contactDate = dayjs(contactSetting.ContactDate).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\");\r\n\r\n        return (\r\n            <>\r\n                <Descriptions.Item label={\"زمان \" + title}>{contactDate}</Descriptions.Item>\r\n                {evaluationMethod === enmEvaluationMethods.VideoCall &&\r\n                    <Descriptions.Item label=\"لینک تماس\" >\r\n                        <Input\r\n                            disabled\r\n                            defaultValue={contactSetting.ConferenceUrl}\r\n                            ref={node => {\r\n                                if (node) {\r\n                                    node.input.style.padding = \"2px\";\r\n                                    node.input.style.margin = \"0\";\r\n                                }\r\n                            }}\r\n                            addonBefore={\r\n                                <Tooltip title=\"کپی لینک\" >\r\n                                    <CopyOutlined onClick={async () => {\r\n                                        if (contactSetting.ConferenceUrl)\r\n                                            await navigator.clipboard.writeText(contactSetting.ConferenceUrl);\r\n                                    }} />\r\n                                </Tooltip>\r\n                            } />\r\n                    </Descriptions.Item>\r\n                }\r\n            </>\r\n        );\r\n    };\r\n    extraHeaderButtons = () => {\r\n        const evaluationMethod = this.props.damageCase?.EvaluationMethod;\r\n        if (evaluationMethod !== enmEvaluationMethods.VideoCall)\r\n            return (<></>);\r\n        let contactSettings = this.state.evaluationSteps.filter(s => s.Substatus === enmEvaluationStatus.ContactSetting);\r\n        let contactSetting = contactSettings[contactSettings.length - 1] as any;\r\n        if (!contactSetting)\r\n            return (<></>);\r\n        return (\r\n            contactSetting.ConferenceUrl.indexOf(\"https://meet.jit.si/\") > -1\r\n                ? <Button type={\"primary\"} key=\"VideoCall\" onClick={() => this.videoCall(contactSetting.ConferenceUrl)} >تماس تصویری</Button>\r\n                : <a href={contactSetting.ConferenceUrl} target=\"_blank\"><Button type={\"primary\"} key=\"VideoCall\">تماس تصویری</Button></a>\r\n        );\r\n    }\r\n    videoCall = (conferenceUrl: string) => {\r\n        this.addLookupForm(\"Meet\",\r\n            <Meet\r\n                userName={this.userInfo?.userFullName!}\r\n                roomName={conferenceUrl.replace(\"https://meet.jit.si/\", \"\")}\r\n                onClosed={async (mediaBlobUrl?: string | null, fileName?: string) => {\r\n                    let currentEntity = this.state.currentEntity;\r\n                    if (mediaBlobUrl && fileName) {\r\n                        const blob = (await fetch(mediaBlobUrl).then(r => r.blob())) as any;\r\n                        const file = new File([blob], fileName, { type: \"\" })\r\n                        currentEntity.EvaluationMakingContactAttachments.push({\r\n                            RowGuid: Core.newId(),\r\n                            State: enmEntityState.Added,\r\n                            File: file,\r\n                            Title: file.name,\r\n                            Description: 'فایل تماس تصویری',\r\n                            Path: undefined\r\n                        } as any);\r\n                        this.setState({ currentEntity });\r\n                    }\r\n                    this.destroyLookupForms(\"Meet\");\r\n                    this.setState({ displayLookupForm: undefined, currentEntity });\r\n                }}\r\n            />\r\n        );\r\n    }\r\n    onChangeContactStatus = (e: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.ContactStatus = e.target?.value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeDescription = (value?: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Description = value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeAttachments = (attachments: IAttachment[]) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.EvaluationMakingContactAttachments = attachments;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onSubmit = async () => {\r\n        if (!this.state.currentEntity)\r\n            return;\r\n\r\n        let currentEntity = this.state.currentEntity;\r\n\r\n        let formData = new FormData();\r\n\r\n        let evaluation = {\r\n            RowGuid: currentEntity.RowGuid,\r\n            DamageCaseEvaluatorId: currentEntity.DamageCaseEvaluatorId,\r\n            ContactStatus: currentEntity.ContactStatus,\r\n            Description: currentEntity.Description,\r\n            EvaluationMakingContactAttachments: currentEntity.EvaluationMakingContactAttachments.map(attachment => {\r\n                formData.append('Attachments', (attachment as any).File);\r\n                return { RowGuid: attachment.RowGuid, Title: attachment.Title, Description: attachment.Description }\r\n            })\r\n        };\r\n        formData.append('Evaluation', JSON.stringify(evaluation));\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/makingcontact\",\r\n            data: formData,\r\n            contentType: false,\r\n            headers: [{ key: \"encType\", value: \"multipart/form-data\" }],\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    if ([enmContactStatus.Acceptable, enmContactStatus.Failed].indexOf(currentEntity.ContactStatus) > -1)\r\n                        this.props.nextStatus(result.Data as IDamageCase);\r\n                    else\r\n                        this.props.onClose && this.props.onClose(this);\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n    renderBody() {\r\n\r\n        return (\r\n            <MakingContactForm\r\n                key=\"MakingContactForm\"\r\n                loading={this.state.loading}\r\n                currentEntity={this.state.currentEntity}\r\n                damageCase={this.props.damageCase}\r\n                onClose={this.props.onClose}\r\n                onSubmit={this.onSubmit}\r\n                onChangeContactStatus={this.onChangeContactStatus}\r\n                onChangeDescription={this.onChangeDescription}\r\n                onChangeAttachments={this.onChangeAttachments}\r\n                damageCaseDocumentTypeAttachments={this.state.damageCaseDocumentTypeAttachments}\r\n            />\r\n        );\r\n    }\r\n}","import { Alert, Button, Checkbox, Form, InputNumber, Radio, Select, Table, Tooltip, Row, Col } from \"antd\";\r\nimport { ArrowLeftOutlined, StopOutlined, InfoCircleFilled, PercentageOutlined } from '@ant-design/icons';\r\nimport { IPolicyCoverage } from \"../../baseInfo/policyCoverage/interfaces\";\r\nimport { IPolicyFranchise } from \"../../baseInfo/policyFranchise/interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState, ICallOptions, IEntity, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { EvaluationComponent, IEvaluationComponentFormProps, IEvaluationComponentProps, IEvaluationComponentStates, IEvaluationInitialData } from \"./evaluationComponent\";\r\nimport React from \"react\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { PriceInput } from \"../../components/priceInput\";\r\n//import { Link } from \"react-router-dom\";\r\nimport { enmEvaluationStatus } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { IDamageType } from \"../../baseInfo/damageType/interfaces\";\r\nimport '../index.css';\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nconst { Option } = Select;\r\n\r\ninterface ISendingItem {\r\n    Id: number;\r\n    Name: string;\r\n    IsAvailable: boolean;\r\n    Price?: number;\r\n}\r\n\r\nexport interface IDamageEstimation extends IEntity {\r\n    DamageCaseEvaluatorId: number;\r\n    PolicyCoverageId: number;\r\n    PolicyCoverage?: IPolicyCoverage;\r\n    DamageTypeId?: number;\r\n    DamageType?: IDamageType;\r\n    InsuredValue: number;\r\n    EquipmentPrice: number;\r\n\r\n    Franchise1Id: number;\r\n    Franchise1?: IPolicyFranchise;\r\n    Franchise1DepreciationPercent?: number;\r\n    Franchise1Amount: number;\r\n    Franchise1Percent?: number;\r\n    Franchise1Description: string;\r\n    Franchise1DepreciationAmount: number;\r\n    Franchise1EstimatedAmount: number;\r\n    Franchise1Made10?: number;\r\n    Franchise1PayableAmount?: number;\r\n\r\n    HasFranchise2?: boolean;\r\n\r\n    Franchise2Id?: number;\r\n    Franchise2?: IPolicyFranchise;\r\n    Franchise2DepreciationPercent?: number;\r\n    Franchise2Amount: number;\r\n    Franchise2Percent?: number;\r\n    Franchise2Description?: string;\r\n    Franchise2DepreciationAmount: number;\r\n    Franchise2EstimatedAmount?: number;\r\n    Franchise2Made10?: number;\r\n    Franchise2PayableAmount?: number;\r\n\r\n    PayableAmount: number;\r\n    CalculationsDescription?: string;\r\n    SendingItemList: ISendingItem[];\r\n    SendingItems: ISendingItem[];\r\n    Deductions: number;\r\n    ExpertConfirmation?: boolean;\r\n    ExpertDescription?: string;\r\n\r\n    EssentialsReceived?: boolean;\r\n}\r\n\r\nexport interface IDamageEstimationStates extends IEvaluationComponentStates<IDamageEstimation> {\r\n    policyCoverages: IPolicyCoverage[];\r\n    policyFranchises: IPolicyFranchise[];\r\n    damageTypes: IDamageType[];\r\n    sendingItems: ISendingItem[];\r\n    confirmPermission?: boolean;\r\n}\r\n\r\nexport interface IDamageEstimationProps extends IEvaluationComponentProps {\r\n\r\n}\r\n\r\ninterface IDamageEstimationInitialData extends IEvaluationInitialData {\r\n    PolicyCoverages: IPolicyCoverage[];\r\n    PolicyFranchises: IPolicyFranchise[];\r\n    DamageTypes: IDamageType[];\r\n    SendingItems: { Id: number; Name: string; IsAvailable: boolean; }[];\r\n    ConfirmPermission?: boolean;\r\n}\r\n\r\nexport interface IDamageEstimationFromProps extends IEvaluationComponentFormProps<IDamageEstimation> {\r\n    confirmPermission?: boolean;\r\n    policyCoverages: IPolicyCoverage[];\r\n    policyFranchises: IPolicyFranchise[];\r\n    sendingItems: ISendingItem[];\r\n    damageTypes: IDamageType[];\r\n    onChangeDamageType?: (value: any) => void;\r\n    onChangePolicyCoverage: (value: any) => void;\r\n    onChangeEquipmentPrice: (value: any) => void;\r\n    //onChangeInsuredValue: (value: any) => void;\r\n    onChangeSendingItemList: (items: ISendingItem[]) => void;\r\n    onChangeFranchise1: (value: any) => void;\r\n    //onChangeFranchise1Percent: (value: any) => void;\r\n    onChangeFranchise1DepreciationPercent: (value: any) => void;\r\n    onChangeFranchise1Description: (e: any) => void;\r\n    onChangeFranchise1EstimatedAmount: (value: any) => void;\r\n    onChangeHasFranchise2: (e: any) => void;\r\n    onChangeFranchise2: (value: any) => void;\r\n    //onChangeFranchise2Percent: (value: any) => void;\r\n    onChangeFranchise2DepreciationPercent: (value: any) => void;\r\n    onChangeFranchise2Description: (e: any) => void;\r\n    onChangeFranchise2EstimatedAmount: (value: any) => void;\r\n    onChangeExpertConfirmation: (e: any) => void;\r\n\r\n    onChangeExpertDescription: (e: any) => void;\r\n    onChangeEssentialsReceived: (e: any) => void;\r\n}\r\n\r\nconst SendingItemList = (props: { disabled?: boolean; items: ISendingItem[], onChange: (items: ISendingItem[]) => void; }) => {\r\n    const columns = [{\r\n        title: 'نام',\r\n        dataIndex: 'Name',\r\n        key: 'Name'\r\n    },\r\n    {\r\n        title: 'موجود است؟',\r\n        dataIndex: 'IsAvailable',\r\n        key: 'IsAvailable',\r\n        render: (_: any, item: ISendingItem) => {\r\n            return (\r\n                <Checkbox defaultChecked={item.IsAvailable} disabled={props.disabled} onChange={(e) => {\r\n                    props.items.find(i => i.Id === item.Id)!.IsAvailable = e.target.checked;\r\n                    props.onChange(props.items);\r\n                }} />\r\n            );\r\n        }\r\n    },\r\n    {\r\n        title: 'قیمت',\r\n        dataIndex: 'Price',\r\n        key: 'Price',\r\n        render: (_: any, item: ISendingItem) => {\r\n            return (\r\n                <PriceInput defaultValue={item.Price} disabled={props.disabled} style={{ width: \"100%\" }} onChange={(value) => {\r\n                    props.items.find(i => i.Id === item.Id)!.Price = value;\r\n                    props.onChange(props.items);\r\n                }} />\r\n            );\r\n        }\r\n    }];\r\n\r\n    return (\r\n        <Table rowKey={\"Id\"} columns={columns} dataSource={props.items} bordered pagination={false} />\r\n    );\r\n}\r\n\r\nconst calculateAmount = (currentEntity: IDamageEstimation) => {\r\n    if (currentEntity.EquipmentPrice && currentEntity.InsuredValue) {\r\n        let deductions = 0;\r\n\r\n        currentEntity.SendingItemList.forEach(i => {\r\n            if (i.Price && !i.IsAvailable)\r\n                deductions += i.Price;\r\n        });\r\n\r\n        if (currentEntity.DamageTypeId === 2) {// برای خسارت جزئی\r\n            let ratio = Number((currentEntity.InsuredValue / currentEntity.EquipmentPrice).toPrecision(4));\r\n            if (currentEntity.Franchise1EstimatedAmount) {\r\n                let damageAmount = Math.min(currentEntity.Franchise1EstimatedAmount ?? 0, currentEntity.EquipmentPrice);\r\n                if (currentEntity.Franchise1DepreciationPercent) {// محاسبه استهلاک در فرانشیز اول\r\n                    currentEntity.Franchise1DepreciationAmount = Math.ceil(damageAmount * currentEntity.Franchise1DepreciationPercent / 100);\r\n                    damageAmount = Math.floor(damageAmount - currentEntity.Franchise1DepreciationAmount);\r\n                }\r\n                if (currentEntity.InsuredValue < currentEntity.EquipmentPrice) {//اعمال ماده 10\r\n                    const made10 = Math.floor(damageAmount * ratio);\r\n                    currentEntity.Franchise1Made10 = Math.ceil(damageAmount -  made10);\r\n                    damageAmount =  made10;\r\n                    deductions = Math.ceil(deductions * ratio);\r\n                }\r\n                let franchiseAmount = Math.ceil(damageAmount * (currentEntity.Franchise1Percent ?? 0) / 100);\r\n                if (franchiseAmount < (currentEntity.Franchise1?.MinimumValue ?? 0))// اعمال حداقل فرانشیز\r\n                    franchiseAmount = currentEntity.Franchise1?.MinimumValue ?? 0;\r\n                let payableAmount = damageAmount - franchiseAmount;\r\n                currentEntity.Franchise1Amount = franchiseAmount + deductions;\r\n                currentEntity.Franchise1PayableAmount = payableAmount < 0 ? 0 : payableAmount;\r\n            }\r\n            if (currentEntity.HasFranchise2 === true && currentEntity.Franchise2EstimatedAmount) {\r\n                let damageAmount = Math.min(currentEntity.Franchise2EstimatedAmount, currentEntity.EquipmentPrice);\r\n                if (currentEntity.Franchise2DepreciationPercent) {// محاسبه استهلاک در فرانشیز دوم\r\n                    currentEntity.Franchise2DepreciationAmount = Math.ceil(damageAmount * currentEntity.Franchise2DepreciationPercent / 100);\r\n                    damageAmount = Math.floor(damageAmount - currentEntity.Franchise2DepreciationAmount);\r\n                }\r\n                if (currentEntity.InsuredValue < currentEntity.EquipmentPrice) {//اعمال ماده 10\r\n                    const made10 = Math.floor(damageAmount * ratio);\r\n                    currentEntity.Franchise2Made10 = Math.ceil(damageAmount - made10);\r\n                    damageAmount = made10;\r\n                    deductions = Math.ceil(deductions * ratio);\r\n                }\r\n                let franchiseAmount = Math.ceil(damageAmount * (currentEntity.Franchise2Percent ?? 0) / 100);\r\n                if (franchiseAmount < (currentEntity.Franchise2?.MinimumValue ?? 0))// اعمال حداقل فرانشیز\r\n                    franchiseAmount = currentEntity.Franchise2?.MinimumValue ?? 0;\r\n                let payableAmount = damageAmount - franchiseAmount;\r\n                currentEntity.Franchise2Amount = franchiseAmount + deductions;\r\n                currentEntity.Franchise2PayableAmount = payableAmount < 0 ? 0 : payableAmount;\r\n            }\r\n\r\n            if (deductions && currentEntity.InsuredValue < currentEntity.EquipmentPrice)// اعمال ماده 10 روی کسورات اقلام ناقص\r\n                deductions = Math.ceil(deductions * ratio);\r\n\r\n            const payableAmount = (currentEntity.Franchise1PayableAmount ?? 0) + (currentEntity.HasFranchise2 === true ? currentEntity.Franchise2PayableAmount ?? 0 : 0) - deductions;\r\n            currentEntity.PayableAmount = payableAmount > 0 ? payableAmount : 0;\r\n        }\r\n        else { // برای خسارت کلی و سرقت\r\n            let damageAmount = Math.min(currentEntity.InsuredValue ?? 0, currentEntity.EquipmentPrice);\r\n            currentEntity.Franchise1EstimatedAmount = damageAmount;\r\n            damageAmount -= deductions;\r\n\r\n            let franchiseAmount = Math.ceil(damageAmount * (currentEntity.Franchise1Percent ?? 0) / 100);\r\n            if (franchiseAmount < (currentEntity.Franchise1?.MinimumValue ?? 0))// اعمال حداقل فرانشیز\r\n                franchiseAmount = currentEntity.Franchise1?.MinimumValue ?? 0;\r\n            let payableAmount = damageAmount - franchiseAmount;\r\n            currentEntity.Deductions = deductions;\r\n            currentEntity.Franchise1Amount = franchiseAmount;\r\n            currentEntity.Franchise1PayableAmount = payableAmount;\r\n\r\n            //if (currentEntity.HasFranchise2 === true && currentEntity.Franchise2EstimatedAmount) {\r\n            //    let franchiseAmount = Math.ceil(damageAmount * (currentEntity.Franchise2Percent ?? 0) / 100);\r\n            //    if (franchiseAmount < (currentEntity.Franchise2?.MinimumValue ?? 0))// اعمال حداقل فرانشیز\r\n            //        franchiseAmount = currentEntity.Franchise2?.MinimumValue ?? 0;\r\n            //    let payableAmount = damageAmount - franchiseAmount;\r\n            //    currentEntity.Franchise2Amount = franchiseAmount;\r\n            //    currentEntity.Franchise2PayableAmount = payableAmount;\r\n\r\n            //}\r\n            //const payableAmount = (currentEntity.Franchise1PayableAmount ?? 0) + (currentEntity.HasFranchise2 === true ? currentEntity.Franchise2PayableAmount ?? 0 : 0);\r\n            currentEntity.PayableAmount = payableAmount > 0 ? payableAmount : 0;\r\n        }\r\n    }\r\n}\r\n\r\nexport const DamageEstimationForm = (props: IDamageEstimationFromProps) => {\r\n\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 6, lg: 6, md: 6, sm: 6, xs: 6 },\r\n        wrapperCol: { xxl: 12, xl: 16, lg: 18, md: 18, sm: 18, xs: 18 },\r\n    };\r\n\r\n    const [formLayout] = React.useState<LayoutType>('horizontal');\r\n    const [form] = Form.useForm();\r\n    const { getUserInfo } = React.useContext(AppContext);\r\n    const userInfo = getUserInfo();\r\n\r\n    const evaluatorId = userInfo?.extraVariables['EvaluatorId'];\r\n    const { DamageCaseEvaluators } = props.damageCase;\r\n    const currentEvaluatorId = DamageCaseEvaluators[DamageCaseEvaluators.length - 1].EvaluatorId;\r\n\r\n    React.useEffect(() => {\r\n        let currentEntity = props.currentEntity;\r\n        currentEntity.EquipmentPrice = currentEntity.EquipmentPrice ?? 0;\r\n        currentEntity.InsuredValue = currentEntity.InsuredValue ?? 0;\r\n        currentEntity.Deductions = currentEntity.Deductions ?? 0;\r\n\r\n        currentEntity.Franchise1DepreciationPercent = currentEntity.Franchise1DepreciationPercent ?? 0;\r\n        currentEntity.Franchise1Amount = currentEntity.Franchise1Amount ?? 0;\r\n        currentEntity.Franchise1EstimatedAmount = currentEntity.Franchise1EstimatedAmount ?? 0;\r\n        currentEntity.Franchise1DepreciationAmount = currentEntity.Franchise1DepreciationAmount ?? 0;\r\n        currentEntity.Franchise1Percent = currentEntity.Franchise1Percent ?? currentEntity.Franchise1?.FranchisePercent ?? 0;\r\n        currentEntity.Franchise1PayableAmount = currentEntity.Franchise1PayableAmount ?? 0;\r\n\r\n        currentEntity.HasFranchise2 = currentEntity.HasFranchise2 ?? false;\r\n\r\n        currentEntity.Franchise2DepreciationPercent = currentEntity.Franchise2DepreciationPercent ?? 0;\r\n        currentEntity.Franchise2Amount = currentEntity.Franchise2Amount ?? 0;\r\n        currentEntity.Franchise2EstimatedAmount = currentEntity.Franchise2EstimatedAmount ?? 0;\r\n        currentEntity.Franchise2DepreciationAmount = currentEntity.Franchise2DepreciationAmount ?? 0;\r\n        currentEntity.Franchise2Percent = currentEntity.Franchise2Percent ?? currentEntity.Franchise2?.FranchisePercent ?? 0;\r\n        currentEntity.Franchise2Amount = currentEntity.Franchise2PayableAmount ?? 0;\r\n\r\n        currentEntity.PayableAmount = currentEntity.PayableAmount ?? 0;\r\n\r\n        if (props.confirmPermission === true && currentEvaluatorId === evaluatorId && evaluatorId === 1) {\r\n            // اگر ارزیاب جاری زبده باشد پیشفرض برآورد تایید شود\r\n            if (currentEntity.ExpertConfirmation === undefined && (!props.damageCase.ReceiveDepreciated || currentEntity.DamageTypeId === 3))\r\n                currentEntity.ExpertConfirmation = currentEntity.DamageTypeId !== 1 || currentEntity.EssentialsReceived ? true : undefined;\r\n\r\n            // اگر ارزیاب جاری زبده باشد و خسارت کلی بشد بصورت پیشفرض دستگاه و لوازم جانبی دریافت شده در نظر گرفته میشود\r\n            if (currentEntity.EssentialsReceived !== true && currentEntity.EssentialsReceived !== false && currentEntity.DamageTypeId === 1)\r\n                currentEntity.EssentialsReceived = true;\r\n        }\r\n\r\n        if (!currentEntity.SendingItemList)\r\n            currentEntity.SendingItemList = currentEntity.SendingItems.map((s: any) => { return { Id: s.SendingItemId, IsAvailable: s.IsAvailable, Price: s.Price, Name: s.SendingItem.Name }; });\r\n\r\n        calculateAmount(currentEntity);\r\n        form.setFieldsValue(currentEntity);\r\n    }, [props, form]);\r\n\r\n    const policyCoverageOptions = props.policyCoverages\r\n        ? props.policyCoverages.map(o => <Option key={o.Id} value={o.Id}>{o.CoverageTitle}</Option>)\r\n        : [<Option key={props.currentEntity.PolicyCoverageId} value={props.currentEntity.PolicyCoverage?.Id}>{props.currentEntity.PolicyCoverage?.CoverageTitle}</Option>];\r\n\r\n    const policyFranchise1Options = props.policyFranchises\r\n        ? props.policyFranchises.filter(f => f.DamageTypeId === props.currentEntity?.DamageTypeId).map(o => <Option key={o.Id} value={o.Id}>{o.FranchiseTitle}</Option>)\r\n        : [<Option key={props.currentEntity.Franchise1Id} value={props.currentEntity.Franchise1?.Id}>{props.currentEntity.Franchise1?.FranchiseTitle}</Option>];\r\n\r\n    const policyFranchise2Options = props.policyFranchises\r\n        ? props.policyFranchises.filter(f => f.DamageTypeId === props.currentEntity?.DamageTypeId).map(o => <Option key={o.Id} value={o.Id}>{o.FranchiseTitle}</Option>)\r\n        : [<Option key={props.currentEntity.Franchise2Id} value={props.currentEntity.Franchise2?.Id}>{props.currentEntity.Franchise2?.FranchiseTitle}</Option>];\r\n\r\n    const damageTypesOptions = props.damageTypes\r\n        ? props.damageTypes.map(o => <Option key={o.Id} value={o.Id}>{o.Name}</Option>)\r\n        : [<Option key={props.currentEntity.DamageTypeId} value={props.currentEntity.DamageType?.Id}>{props.currentEntity.DamageType?.Name}</Option>];\r\n\r\n    //const sendingItemsOptions = props.sendingItems\r\n    //    ? props.sendingItems.map(o => <Option key={o.Id} value={o.Id}>{o.Name}</Option>)\r\n    //    : props.currentEntity.SendingItems.map(o => <Option key={o.Id} value={o.Id}>{o.Name}</Option>);\r\n\r\n    const sendingItems = props.sendingItems\r\n        ? props.sendingItems\r\n        : props.currentEntity.SendingItems.map((s: any) => { return { Id: s.SendingItemId, IsAvailable: s.IsAvailable, Price: s.Price, Name: s.SendingItem.Name }; });\r\n\r\n    //const returnUrl = encodeURIComponent('/damagecaseevaluator?id=' + props.damageCase.RowGuid);\r\n\r\n    //const expertConfirmation = props.currentEntity.ExpertConfirmation !== null ? (props.currentEntity.ExpertConfirmation === true ? \"confirm\" : \"reject\") : null;\r\n\r\n    const equipmentPriceValidator = () => {\r\n        const { currentEntity } = props;\r\n        if (!currentEntity.EquipmentPrice)\r\n            return Promise.reject(new Error('سرمایه بیمه نامه اجباری است'));\r\n        return Promise.resolve();\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <Form\r\n                scrollToFirstError\r\n                form={form}\r\n                {...formItemLayout}\r\n                layout={formLayout}\r\n                onFinish={async (values) => {\r\n                    props.onSubmit && await props.onSubmit(values);\r\n                }}\r\n                onReset={() => {\r\n                    props.onClose && props.onClose(this);\r\n                }}\r\n            >\r\n                <div key=\"maininfo\">\r\n                    <Form.Item\r\n                        label={'پوشش'}\r\n                        name={'PolicyCoverageId'}\r\n                        key={'PolicyCoverageId'}\r\n                        rules={[{ required: props.confirmPermission, message: 'انتخاب پوشش اجباری است' }]}\r\n                    >\r\n                        <Select disabled={props.disabled}\r\n                            onChange={props.onChangePolicyCoverage}\r\n                            key={'PolicyCoverageId'}\r\n                        >\r\n                            {policyCoverageOptions}\r\n                        </Select>\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        label={'نوع خسارت'}\r\n                        name={'DamageTypeId'}\r\n                        key={'DamageTypeId'}\r\n                        rules={[{ required: true, message: 'نوع خسارت اجباری است' }]}\r\n                    >\r\n                        <Select\r\n                            disabled={props.disabled}\r\n                            onChange={data => {\r\n                                form.resetFields(['Franchise1Id', 'Franchise2Id']);\r\n                                props.onChangeDamageType && props.onChangeDamageType(data);\r\n                            }}\r\n                            key={'DamageTypeId'}\r\n                        >\r\n                            {damageTypesOptions}\r\n                        </Select>\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        label={'سرمایه بیمه نامه'}\r\n                        name={'InsuredValue'}\r\n                        key={'InsuredValue'}\r\n                        initialValue={props.currentEntity.InsuredValue}\r\n                        rules={[{ required: props.confirmPermission, message: 'سرمایه بیمه نامه اجباری است' }]}\r\n                    >\r\n                        <PriceInput\r\n                            disabled={true}\r\n                            //onChange={props.onChangeInsuredValue}\r\n                            style={{ width: \"100%\" }}\r\n                        />\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        label={'قیمت روز دستگاه'}\r\n                        name={'EquipmentPrice'}\r\n                        key={'EquipmentPrice'}\r\n                        rules={[{ required: props.confirmPermission, validator: equipmentPriceValidator }]}\r\n                        initialValue={props.currentEntity.EquipmentPrice}\r\n                    >\r\n                        <PriceInput\r\n                            disabled={props.disabled}\r\n                            onChange={props.onChangeEquipmentPrice}\r\n                            style={{ width: \"100%\" }}\r\n                        />\r\n                    </Form.Item>\r\n\r\n\r\n                    {props.currentEntity.DamageTypeId === 2 && props.currentEntity.InsuredValue < props.currentEntity.EquipmentPrice &&\r\n                        // برای خسارت جزئی ماده ده نمایش داده شود\r\n                        <Col xxl={18} xl={22} lg={24} md={24} sm={24} xs={24} >\r\n                            <Alert type=\"warning\" showIcon style={{ marginTop: 10, marginBottom: 10 }}\r\n                                message={\r\n                                    <Row wrap style={{ margin: 0 }}>\r\n                                        <Col lg={8} md={8} sm={8} xs={8} >\r\n                                            <span>ضریب ماده 10: </span>\r\n                                        </Col>\r\n                                        <Col lg={16} md={16} sm={16} xs={16}>\r\n                                            <b>{`   ${(props.currentEntity.InsuredValue / props.currentEntity.EquipmentPrice).toPrecision(4).replace('.', '/')}  `}</b>\r\n                                        </Col>\r\n                                    </Row>\r\n                                }\r\n                                icon={\r\n                                    <Tooltip placement='left' title='درصورتی که مالی کمتر از قیمت واقعی(قیمت روز حادثه) بیمه شده باشد، بیمه‌گر فقط به تناسب مبلغ بیمه شده نسبت به قیمت واقعی مال، مسئول و متعهد به پرداخت خسارت خواهد بود'>\r\n                                        <InfoCircleFilled style={{ marginLeft: 5, marginRight: 5, verticalAlign: 'middle', color: 'lightskyblue' }} />\r\n                                    </Tooltip>\r\n                                }\r\n                            />\r\n                        </Col>\r\n                    }\r\n\r\n                    {sendingItems.length ?\r\n                        <Form.Item\r\n                            label={'اقلام لازم جهت ارسال'}\r\n                            name={'SendingItemList'}\r\n                            key={'SendingItemList'}\r\n                            initialValue={props.currentEntity.SendingItems.filter(s => s.IsAvailable).map(s => s.Id)}\r\n                        >\r\n                            <SendingItemList\r\n                                items={sendingItems}\r\n                                onChange={props.onChangeSendingItemList}\r\n                                disabled={props.disabled}\r\n                            />\r\n                        </Form.Item> :\r\n                        <></>\r\n                    }\r\n                </div>\r\n\r\n                <div key=\"franchise1\" style={{ paddingTop: 10, marginTop: 10, borderTop: '2px solid #e5e5e5' }}>\r\n                    <Form.Item\r\n                        label={\r\n                            <span>\r\n                                فرانشیز اول\r\n                                <Tooltip placement='left' title='بخشی از خسارت توسط بیمه‌گذار یا خود فردی که دچار خسارت شده پرداخت میشود مبلغ فرانشیز نام دارد'>\r\n                                    <InfoCircleFilled style={{ marginLeft: 1, marginRight: 5, verticalAlign: 'middle', color: 'lightskyblue' }} />\r\n                                </Tooltip>\r\n                            </span>\r\n                        }\r\n                        name={'Franchise1Id'}\r\n                        key={'Franchise1Id'}\r\n                        rules={[{ required: props.confirmPermission, message: 'انتخاب فرانشیز اجباری است' }]}\r\n                    >\r\n                        <Select disabled={props.disabled || !props.currentEntity?.DamageTypeId}\r\n                            onChange={props.onChangeFranchise1}\r\n                            key={'Franchise1Id'}\r\n                        >\r\n                            {policyFranchise1Options}\r\n                        </Select>\r\n                    </Form.Item>\r\n\r\n                    {props.currentEntity.DamageTypeId === 2 &&\r\n                        <Form.Item\r\n                            label={'درصد استهلاک'}\r\n                            name={'Franchise1DepreciationPercent'}\r\n                            key={'Franchise1DepreciationPercent'}\r\n                            initialValue={props.currentEntity.Franchise1DepreciationPercent}\r\n                        >\r\n                            <InputNumber\r\n                                disabled={props.disabled}\r\n                                onChange={props.onChangeFranchise1DepreciationPercent}\r\n                                style={{ width: \"100%\" }}\r\n                                //precision={2}\r\n                                prefix={<PercentageOutlined />}\r\n                            />\r\n                        </Form.Item>\r\n                    }\r\n\r\n                    <Form.Item\r\n                        label={'درصد فرانشیز'}\r\n                        name={'Franchise1Percent'}\r\n                        key={'Franchise1Percent'}\r\n                    >\r\n                        <InputNumber\r\n                            disabled={true}\r\n                            //formatter={value => {\r\n                            //    return `% ${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n                            //}}\r\n                            //onChange={props.onChangeFranchise1Percent}\r\n                            style={{ width: \"100%\" }}\r\n                            prefix={<PercentageOutlined />}\r\n                        />\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        label={'توضیحات'}\r\n                        name={'Franchise1Description'}\r\n                        key={'Franchise1Description'}\r\n                        rules={[{ required: true, message: 'توصیحات اجباری است' }]}\r\n                    >\r\n                        <TextArea rows={5} onChange={props.onChangeFranchise1Description} disabled={props.disabled} />\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        label={'مبلغ برآورد شده'}\r\n                        name={'Franchise1EstimatedAmount'}\r\n                        key={'Franchise1EstimatedAmount'}\r\n                        rules={[{ required: true, message: 'مبلغ برآورد شده اجباری است' }]}\r\n                        initialValue={props.currentEntity.Franchise1EstimatedAmount}\r\n                    >\r\n                        <PriceInput disabled={props.disabled || props.currentEntity.DamageTypeId !== 2}\r\n                            onChange={props.onChangeFranchise1EstimatedAmount}\r\n                            style={{ width: \"100%\" }}\r\n                        />\r\n                    </Form.Item>\r\n\r\n                    {props.currentEntity.DamageTypeId === 2 &&\r\n                        <Form.Item\r\n                            label={'مبلغ استهلاک'}\r\n                            name={'Franchise1DepreciationAmount'}\r\n                            key={'Franchise1DepreciationAmount'}\r\n                            initialValue={props.currentEntity.Franchise1DepreciationAmount}\r\n                        >\r\n                            <PriceInput disabled\r\n                                style={{ width: \"100%\" }}\r\n                            />\r\n                        </Form.Item>\r\n                    }\r\n\r\n                    {props.currentEntity.DamageTypeId !== 2 &&\r\n                        <Form.Item\r\n                            label={'مبلغ کسورات'}\r\n                            name={'Deductions'}\r\n                            key={'Deductions'}\r\n                            initialValue={props.currentEntity.Deductions}\r\n                        >\r\n                            <PriceInput disabled\r\n                                style={{ width: \"100%\" }}\r\n                            />\r\n                        </Form.Item>\r\n                    }\r\n\r\n                    {props.currentEntity.DamageTypeId === 2 && props.currentEntity.InsuredValue < props.currentEntity.EquipmentPrice &&\r\n                        <Form.Item\r\n                            label={'کسورات ماده 10'}\r\n                        >\r\n                            <PriceInput disabled\r\n                                style={{ width: \"100%\" }}\r\n                                //value={props.currentEntity.Franchise1EstimatedAmount - props.currentEntity.Franchise1DepreciationAmount - Math.ceil(Number((props.currentEntity.InsuredValue / props.currentEntity.EquipmentPrice).toPrecision(4)) * props.currentEntity.Franchise1EstimatedAmount)}\r\n                                value={props.currentEntity.Franchise1Made10}\r\n                            />\r\n                        </Form.Item>\r\n                    }\r\n\r\n                    <Form.Item\r\n                        label={'مبلغ فرانشیز'}\r\n                        name={'Franchise1Amount'}\r\n                        key={'Franchise1Amount'}\r\n                        initialValue={props.currentEntity.Franchise1Amount}\r\n                    >\r\n                        <PriceInput disabled\r\n                            style={{ width: \"100%\" }}\r\n                        />\r\n                    </Form.Item>\r\n\r\n                    {props.currentEntity?.DamageTypeId === 2 &&\r\n                        <Form.Item\r\n                            label={'دارای فرانشیز دوم'}\r\n                            name={'HasFranchise2'}\r\n                            key={'HasFranchise2'}\r\n                        >\r\n                            <Radio.Group key={'HasFranchise2'} onChange={props.onChangeHasFranchise2} disabled={props.disabled} value={props.currentEntity.HasFranchise2}>\r\n                                <Radio key={\"yes\"} value={true}> بله </Radio>\r\n                                <Radio key={\"no\"} value={false}> خیر </Radio>\r\n                            </Radio.Group>\r\n                        </Form.Item>\r\n                    }\r\n                </div>\r\n\r\n                {props.currentEntity.HasFranchise2 === true &&\r\n                    <div key=\"franchise2\" style={{ paddingTop: 10, marginTop: 10, borderTop: '2px solid #e5e5e5' }}>\r\n                        <Form.Item\r\n                            label={\r\n                                <span>\r\n                                    فرانشیز دوم\r\n                                    <Tooltip placement='left' title='بخشی از خسارت توسط بیمه‌گذار یا خود فردی که دچار خسارت شده پرداخت میشود مبلغ فرانشیز نام دارد'>\r\n                                        <InfoCircleFilled style={{ marginLeft: 1, marginRight: 5, verticalAlign: 'middle', color: 'lightskyblue' }} />\r\n                                    </Tooltip>\r\n                                </span>\r\n                            }\r\n                            name={'Franchise2Id'}\r\n                            key={'Franchise2Id'}\r\n                            rules={[{ required: props.confirmPermission, message: 'انتخاب فرانشیز اجباری است' }]}\r\n                        >\r\n                            <Select disabled={props.disabled || !props.currentEntity?.DamageTypeId}\r\n                                onChange={props.onChangeFranchise2}\r\n                                key={'Franchise2Id'}\r\n                            >\r\n                                {policyFranchise2Options}\r\n                            </Select>\r\n                        </Form.Item>\r\n\r\n                        {props.currentEntity.DamageTypeId === 2 &&\r\n                            <Form.Item\r\n                                label={'درصد استهلاک'}\r\n                                name={'Franchise2DepreciationPercent'}\r\n                                key={'Franchise2DepreciationPercent'}\r\n                                initialValue={props.currentEntity.Franchise2DepreciationPercent}\r\n                            >\r\n                                <InputNumber\r\n                                    disabled={props.disabled}\r\n                                    onChange={props.onChangeFranchise2DepreciationPercent}\r\n                                    style={{ width: \"100%\" }}\r\n                                    \r\n                                    //precision={2}\r\n                                    prefix={<PercentageOutlined />}\r\n                                />\r\n                            </Form.Item>\r\n                        }\r\n\r\n                        <Form.Item\r\n                            label={'درصد فرانشیز'}\r\n                            name={'Franchise2Percent'}\r\n                            key={'Franchise2Percent'}\r\n                        >\r\n                            <InputNumber disabled={true}\r\n                                //formatter={value => {\r\n                                //    return `% ${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n                                //}}\r\n                                //onChange={props.onChangeFranchise2Percent}\r\n                                \r\n                                prefix={<PercentageOutlined />}\r\n                                style={{ width: \"100%\" }}\r\n                            />\r\n                        </Form.Item>\r\n\r\n                        <Form.Item\r\n                            label={'توضیحات'}\r\n                            name={'Franchise2Description'}\r\n                            key={'Franchise2Description'}\r\n                            rules={[{ required: true, message: 'توصیحات اجباری است' }]}\r\n                        >\r\n                            <TextArea rows={5} onChange={props.onChangeFranchise2Description} disabled={props.disabled} />\r\n                        </Form.Item>\r\n\r\n                        <Form.Item\r\n                            label={'مبلغ برآورد شده'}\r\n                            name={'Franchise2EstimatedAmount'}\r\n                            key={'Franchise2EstimatedAmount'}\r\n                            rules={[{ required: true, message: 'مبلغ برآورد شده اجباری است' }]}\r\n                            initialValue={props.currentEntity.Franchise2EstimatedAmount}\r\n                        >\r\n                            <PriceInput disabled={props.disabled}\r\n                                onChange={props.onChangeFranchise2EstimatedAmount}\r\n                                style={{ width: \"100%\" }}\r\n                            />\r\n                        </Form.Item>\r\n\r\n                        {props.currentEntity.DamageTypeId === 2 &&\r\n                            <Form.Item\r\n                                label={'مبلغ استهلاک'}\r\n                                name={'Franchise2DepreciationAmount'}\r\n                                key={'Franchise2DepreciationAmount'}\r\n                                initialValue={props.currentEntity.Franchise1DepreciationAmount}\r\n                            >\r\n                                <PriceInput disabled\r\n                                    style={{ width: \"100%\" }}\r\n                                />\r\n                            </Form.Item>\r\n                        }\r\n\r\n                        {props.currentEntity.DamageTypeId === 2 && props.currentEntity.InsuredValue < props.currentEntity.EquipmentPrice &&\r\n                            <Form.Item\r\n                                label={'کسورات ماده 10'}\r\n                            >\r\n                                <PriceInput disabled\r\n                                    style={{ width: \"100%\" }}\r\n                                    //value={(props.currentEntity.Franchise2EstimatedAmount ?? 0) - props.currentEntity.Franchise2DepreciationAmount - Math.ceil(Number((props.currentEntity.InsuredValue / props.currentEntity.EquipmentPrice).toPrecision(4)) * (props.currentEntity.Franchise2EstimatedAmount ?? 0))}\r\n                                    value={props.currentEntity.Franchise2Made10}\r\n                                />\r\n                            </Form.Item>\r\n                        }\r\n\r\n                        <Form.Item\r\n                            label={'مبلغ فرانشیز'}\r\n                            name={'Franchise2Amount'}\r\n                            key={'Franchise2Amount'}\r\n                            initialValue={props.currentEntity.Franchise2Amount}\r\n                        >\r\n                            <PriceInput disabled\r\n                                style={{ width: \"100%\" }}\r\n                            />\r\n                        </Form.Item>\r\n                    </div>\r\n                }\r\n                <div key=\"payableamount\" style={{ paddingTop: 10, marginTop: 10, borderTop: '2px solid #e5e5e5' }}>\r\n                    <Form.Item\r\n                        label={<b>مبلغ پرداختی</b>}\r\n                        name={'PayableAmount'}\r\n                        key={'PayableAmount'}\r\n                        initialValue={props.currentEntity.PayableAmount}\r\n                    >\r\n                        <PriceInput disabled\r\n                            style={{ width: \"100%\" }}\r\n                        />\r\n                    </Form.Item>\r\n                    {props.currentEntity.DamageTypeId === 2 && props.currentEntity.InsuredValue < props.currentEntity.EquipmentPrice && props.currentEntity.PayableAmount > 0 &&\r\n                        <Col xxl={18} xl={22} lg={24} md={24} sm={24} xs={24} >\r\n                            <Alert type=\"warning\" showIcon style={{ marginTop: 10, marginBottom: 10 }} message={<b>ماده 10 اعمال شده است</b>} icon={\r\n                                <Tooltip placement='left' title='درصورتی که مالی کمتر از قیمت واقعی(قیمت روز حادثه) بیمه شده باشد، بیمه‌گر فقط به تناسب مبلغ بیمه شده نسبت به قیمت واقعی مال، مسئول و متعهد به پرداخت خسارت خواهد بود'>\r\n                                    <InfoCircleFilled style={{ marginLeft: 5, marginRight: 5, verticalAlign: 'middle', color: 'lightskyblue' }} />\r\n                                </Tooltip>\r\n                            } />\r\n                        </Col>\r\n                    }\r\n                </div>\r\n\r\n                {props.confirmPermission === true || props.currentEntity.ExpertConfirmation === true || props.currentEntity.ExpertConfirmation === false ?\r\n                    <div key=\"confirmation\" style={{ paddingTop: 10, marginTop: 10, borderTop: '2px solid #e5e5e5' }}>\r\n                        {((currentEvaluatorId !== evaluatorId && evaluatorId === 1) || props.disabled || props.damageCase.ReceiveDepreciated) &&\r\n                            <Form.Item\r\n                                label={'ارزیابی مورد تایید است؟'}\r\n                                name={'ExpertConfirmation'}\r\n                                key={'ExpertConfirmation'}\r\n                            >\r\n                                <Radio.Group\r\n                                    key={'ExpertConfirmation'}\r\n                                    onChange={props.onChangeExpertConfirmation}\r\n                                    disabled={props.disabled || !props.confirmPermission}\r\n                                    value={props.currentEntity.ExpertConfirmation}\r\n                                >\r\n                                    <Radio key={\"confirm\"} value={true}> تایید </Radio>\r\n                                    <Radio key={\"reject\"} value={false}> رد </Radio>\r\n                                </Radio.Group>\r\n                            </Form.Item>\r\n                        }\r\n                        {\r\n                            (currentEvaluatorId === evaluatorId && evaluatorId === 1 && props.currentEntity.DamageTypeId === 1) &&\r\n                            <Form.Item\r\n                                label={'دستگاه و لوازم جانبی دریافت شده است؟'}\r\n                                name={'EssentialsReceived'}\r\n                                key={'EssentialsReceived'}\r\n                            >\r\n                                <Radio.Group\r\n                                    key={'EssentialsReceived'}\r\n                                    onChange={props.onChangeEssentialsReceived}\r\n                                    disabled={props.disabled || !props.confirmPermission}\r\n                                    value={props.currentEntity.EssentialsReceived}\r\n                                >\r\n                                    <Radio key={\"yes\"} value={true}> بله </Radio>\r\n                                    <Radio key={\"no\"} value={false}> خیر </Radio>\r\n                                </Radio.Group>\r\n                            </Form.Item>\r\n                        }\r\n                        <Form.Item\r\n                            label={'توضیحات کارشناس'}\r\n                            name={'ExpertDescription'}\r\n                            key={'ExpertDescription'}\r\n                            rules={[{ required: props.currentEntity.ExpertConfirmation === false, message: 'توصیحات کارشناس است' }]}\r\n                        >\r\n                            <TextArea rows={5} onChange={props.onChangeExpertDescription} disabled={props.disabled || !props.confirmPermission} />\r\n                        </Form.Item>\r\n\r\n                    </div>\r\n                    : <></>\r\n                }\r\n\r\n                {props.disabled ? <></> :\r\n                    <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '2px solid #e5e5e5', marginTop: 10, marginRight: 0 }}>\r\n                        <Button type=\"primary\" htmlType=\"submit\" icon={<ArrowLeftOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                            بعدی\r\n                        </Button>\r\n\r\n                        <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                            لغو\r\n                        </Button>\r\n\r\n                        {/*{props.policyAccess === true && <Link to={{ pathname: '/policy', search: '?id=' + props.damageCase.PolicyEquipmentModel.Policy?.RowGuid + '&returnurl=' + returnUrl + '&invokePath=برآورد خسارت' }} style={{ width: \"180px\", marginTop: 10, marginBottom: 10, marginLeft: 10 }}> ویرایش اطلاعات بیمه نامه</Link>}*/}\r\n\r\n                    </Form.Item>\r\n                }\r\n            </Form>\r\n        </>\r\n    );\r\n}\r\n\r\nexport class DamageEstimation extends EvaluationComponent<IDamageEstimation, IDamageEstimationProps, IDamageEstimationStates>{\r\n\r\n    onInitializing() {\r\n        const policyEquipmentModel = this.props.damageCase.PolicyEquipmentModel;\r\n\r\n        this.defaultEntity = {\r\n            ExpertConfirmation: undefined,\r\n            SendingItems: [],\r\n            SendingItemList: [],\r\n            InsuredValue: policyEquipmentModel?.InsuredValue ?? 0,\r\n            DamageTypeId: this.props.damageCase.DamageTypeId\r\n        } as any;\r\n\r\n        this.defaultState = {\r\n            policyCoverages: [],\r\n            policyFranchises: [],\r\n            sendingItems: [],\r\n            damageTypes: [],\r\n            allDamageCases: []\r\n        } as any;\r\n\r\n        this.onInitialDataFetching = (params: any) => {\r\n            params.damageCaseId = this.props.damageCase.Id;\r\n            return params;\r\n        };\r\n\r\n        this.onInitialDataFetched = (result) => {\r\n            let damageEstimationInitialData = result.Data as IDamageEstimationInitialData;\r\n            const { DamageCaseEvaluatorId } = this.state.currentEntity;\r\n            const currentDamageEstimation: IDamageEstimation = damageEstimationInitialData.EvaluationSteps.filter(e => e.DamageCaseEvaluatorId === DamageCaseEvaluatorId && e.Substatus === enmEvaluationStatus.DamageEstimation && e.HasNextStep !== true)[0] as any;\r\n            const sendingItemsList = currentDamageEstimation\r\n                ? currentDamageEstimation.SendingItems.map((s: any) => {\r\n                    return { Id: s.SendingItemId, IsAvailable: s.IsAvailable, Price: s.Price, Name: s.SendingItem.Name };\r\n                })\r\n                : damageEstimationInitialData.SendingItems;\r\n\r\n            this.setState({\r\n                loading: false,\r\n                policyCoverages: damageEstimationInitialData.PolicyCoverages,\r\n                policyFranchises: damageEstimationInitialData.PolicyFranchises,\r\n                evaluationSteps: damageEstimationInitialData.EvaluationSteps,\r\n                sendingItems: damageEstimationInitialData.SendingItems,\r\n                damageTypes: damageEstimationInitialData.DamageTypes,\r\n                damageCaseDocumentTypeAttachments: damageEstimationInitialData.DamageCaseDocumentTypeAttachments,\r\n                confirmPermission: damageEstimationInitialData.ConfirmPermission,\r\n                currentEntity: currentDamageEstimation\r\n                    ? { ...currentDamageEstimation, SendingItemList: sendingItemsList }\r\n                    : { ...this.state.currentEntity, SendingItemList: sendingItemsList },\r\n                policyCert: damageEstimationInitialData.PolicyCert,\r\n                allDamageCases: damageEstimationInitialData.AllDamageCases\r\n            });\r\n        };\r\n    }\r\n    onChangeDamageType = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.DamageTypeId = value;\r\n        currentEntity.DamageType = this.state.damageTypes.find(d => d.Id === currentEntity.DamageTypeId)!;\r\n        //(currentEntity as any)['ExpertConfirmation'] = undefined;\r\n        (currentEntity as any)['EssentialsReceived'] = undefined;\r\n        (currentEntity as any)['Franchise1Id'] = undefined;\r\n        (currentEntity as any)['Franchise1'] = undefined;\r\n        (currentEntity as any)['Franchise2Id'] = undefined;\r\n        (currentEntity as any)['Franchise2'] = undefined;\r\n        this.setState({ currentEntity });\r\n        this.getSendingItems(value);\r\n    }\r\n    getSendingItems = (damageTypeId?: number) => {\r\n        const { DamageCaseEvaluatorId } = this.state.currentEntity;\r\n        this.callApi({\r\n            url: \"damagecaseevaluator/getsendingitems\",\r\n            data: { damageCaseEvaluatorId: DamageCaseEvaluatorId, damageTypeId },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    const sendingItems: ISendingItem[] = result.Data;\r\n\r\n                    this.setState({\r\n                        sendingItems,\r\n                        currentEntity: { ...this.state.currentEntity, SendingItemList: sendingItems },\r\n                    });\r\n                }\r\n            }\r\n        });\r\n    }\r\n    onChangePolicyCoverage = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.PolicyCoverageId = value;\r\n        currentEntity.PolicyCoverage = this.state.policyCoverages.find(c => c.Id === value);\r\n        this.setState({ currentEntity });\r\n    }\r\n    //onChangeInsuredValue = (value: any) => {\r\n    //    let currentEntity = this.state.currentEntity;\r\n    //    currentEntity.InsuredValue = value;\r\n    //    calculateAmount(currentEntity);\r\n    //    this.setState({ currentEntity });\r\n    //}\r\n    onChangeEquipmentPrice = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.EquipmentPrice = value;\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeFranchise1DepreciationPercent = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Franchise1DepreciationPercent = Math.min(100, Math.max(0, value));\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeFranchise2DepreciationPercent = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Franchise2DepreciationPercent = Math.min(100, Math.max(0, value));\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeSendingItemList = (items: ISendingItem[]) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.SendingItemList = items;\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeFranchise1 = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Franchise1Id = value;\r\n        currentEntity.Franchise1 = this.state.policyFranchises.find(f => f.Id === value);\r\n        currentEntity.Franchise1Percent = currentEntity.Franchise1?.FranchisePercent ?? 0;\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeFranchise1EstimatedAmount = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Franchise1EstimatedAmount = value;\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeFranchise1Description = (e: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Franchise1Description = e.target.value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    //onChangeFranchise1Percent = (value: any) => {\r\n    //    let currentEntity = this.state.currentEntity;\r\n    //    currentEntity.Franchise1Percent = value;\r\n    //    calculateAmount(currentEntity);\r\n    //    this.setState({ currentEntity });\r\n    //}\r\n    onChangeHasFranchise2 = (e: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.HasFranchise2 = e.target.value;\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeFranchise2 = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Franchise2Id = value;\r\n        currentEntity.Franchise2 = this.state.policyFranchises.find(f => f.Id === value);\r\n        currentEntity.Franchise2Percent = currentEntity.Franchise2?.FranchisePercent ?? 0;\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeFranchise2EstimatedAmount = (value: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Franchise2EstimatedAmount = value;\r\n        calculateAmount(currentEntity);\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeFranchise2Description = (e: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.Franchise2Description = e.target.value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    //onChangeFranchise2Percent = (value: any) => {\r\n    //    let currentEntity = this.state.currentEntity;\r\n    //    currentEntity.Franchise2Percent = value;\r\n    //    calculateAmount(currentEntity);\r\n    //    this.setState({ currentEntity });\r\n    //}\r\n    onChangeExpertConfirmation = (e: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.ExpertConfirmation = e.target.value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeExpertDescription = (e: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.ExpertDescription = e.target.value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onChangeEssentialsReceived = (e: any) => {\r\n        let currentEntity = this.state.currentEntity;\r\n        currentEntity.EssentialsReceived = e.target.value;\r\n        this.setState({ currentEntity });\r\n    }\r\n    onSubmit = async () => {\r\n        let { currentEntity } = this.state;\r\n        if (!currentEntity)\r\n            return;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/damageestimation\",\r\n            data: {\r\n                evaluation: {\r\n                    Id: currentEntity.Id,\r\n                    RowGuid: currentEntity.RowGuid,\r\n                    DamageCaseEvaluatorId: currentEntity.DamageCaseEvaluatorId,\r\n                    PolicyCoverageId: currentEntity.PolicyCoverageId,\r\n                    DamageTypeId: currentEntity.DamageTypeId,\r\n                    InsuredValue: currentEntity.InsuredValue,\r\n                    EquipmentPrice: currentEntity.EquipmentPrice,\r\n\r\n                    Franchise1Id: currentEntity.Franchise1Id,\r\n                    Franchise1DepreciationPercent: currentEntity.Franchise1DepreciationPercent,\r\n                    Franchise1EstimatedAmount: currentEntity.Franchise1EstimatedAmount,\r\n                    Franchise1Description: currentEntity.Franchise1Description,\r\n                    Franchise1Amount: currentEntity.Franchise1Amount,\r\n\r\n                    HasFranchise2: currentEntity.HasFranchise2,\r\n\r\n                    Franchise2Id: currentEntity.HasFranchise2 === true ? currentEntity.Franchise2Id : undefined,\r\n                    Franchise2DepreciationPercent: currentEntity.Franchise2DepreciationPercent,\r\n                    Franchise2EstimatedAmount: currentEntity.HasFranchise2 === true ? currentEntity.Franchise2EstimatedAmount : undefined,\r\n                    Franchise2Description: currentEntity.HasFranchise2 === true ? currentEntity.Franchise2Description : undefined,\r\n                    Franchise2Amount: currentEntity.HasFranchise2 === true ? currentEntity.Franchise2Amount : undefined,\r\n\r\n                    PayableAmount: currentEntity.PayableAmount,\r\n                    ExpertConfirmation: currentEntity.ExpertConfirmation,\r\n                    ExpertDescription: currentEntity.ExpertDescription,\r\n\r\n                    EssentialsReceived: currentEntity.EssentialsReceived,\r\n\r\n                    SendingItems: this.state.sendingItems.map(s => {\r\n                        return {\r\n                            State: (currentEntity.Id ?? 0) === 0 ? enmEntityState.Added : enmEntityState.Modified,\r\n                            SendingItemId: s.Id,\r\n                            Price: s.Price,\r\n                            IsAvailable: !!currentEntity.SendingItemList.find(i => i.Id === s.Id)?.IsAvailable\r\n                        };\r\n                    })\r\n                }\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    if (this.state.confirmPermission === true && currentEntity.ExpertConfirmation !== undefined) {\r\n                        if (currentEntity.ExpertConfirmation === true)\r\n                            Core.successNotification('برآورد خسارت انجام شد، لطفا منتظر تایید بیمه گزار/مشتری باشید');\r\n                        else if (currentEntity.ExpertConfirmation === false)\r\n                            Core.successNotification('خسارت رد شد');\r\n                    }\r\n                    else {\r\n                        if (this.state.confirmPermission === true)\r\n                            Core.warningNotification('برآورد خسارت نیازمند تایید یا رد خسارت است');\r\n                        else\r\n                            Core.successNotification('برآورد خسارت انجام شد، لطفا منتظر تایید کارشناس زبده باشید');\r\n                    }\r\n                    this.props.onClose && this.props.onClose(this);\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n    renderBody() {\r\n        return (\r\n            <DamageEstimationForm\r\n                key=\"DamageEstimationForm\"\r\n                loading={this.state.loading}\r\n                currentEntity={this.state.currentEntity}\r\n                damageCase={this.props.damageCase}\r\n                damageTypes={this.state.damageTypes}\r\n                confirmPermission={this.state.confirmPermission}\r\n                onClose={this.props.onClose}\r\n                onSubmit={this.onSubmit}\r\n                policyCoverages={this.state.policyCoverages}\r\n                policyFranchises={this.state.policyFranchises}\r\n                sendingItems={this.state.sendingItems}\r\n                damageCaseDocumentTypeAttachments={this.state.damageCaseDocumentTypeAttachments}\r\n                onChangePolicyCoverage={this.onChangePolicyCoverage}\r\n                //onChangeInsuredValue={this.onChangeInsuredValue}\r\n                onChangeEquipmentPrice={this.onChangeEquipmentPrice}\r\n                onChangeFranchise1DepreciationPercent={this.onChangeFranchise1DepreciationPercent}\r\n                onChangeFranchise2DepreciationPercent={this.onChangeFranchise2DepreciationPercent}\r\n                onChangeSendingItemList={this.onChangeSendingItemList}\r\n                onChangeFranchise1={this.onChangeFranchise1}\r\n                //onChangeFranchise1Percent={this.onChangeFranchise1Percent}\r\n                onChangeFranchise1Description={this.onChangeFranchise1Description}\r\n                onChangeFranchise1EstimatedAmount={this.onChangeFranchise1EstimatedAmount}\r\n                onChangeHasFranchise2={this.onChangeHasFranchise2}\r\n                onChangeFranchise2={this.onChangeFranchise2}\r\n                //onChangeFranchise2Percent={this.onChangeFranchise2Percent}\r\n                onChangeFranchise2Description={this.onChangeFranchise2Description}\r\n                onChangeFranchise2EstimatedAmount={this.onChangeFranchise2EstimatedAmount}\r\n                onChangeExpertConfirmation={this.onChangeExpertConfirmation}\r\n                onChangeDamageType={this.onChangeDamageType}\r\n                onChangeExpertDescription={this.onChangeExpertDescription}\r\n                onChangeEssentialsReceived={this.onChangeEssentialsReceived}\r\n            />\r\n        );\r\n    }\r\n}","import React from \"react\";\r\nimport { Alert, Button, Form, Input, Radio } from \"antd\";\r\nimport { SendOutlined, StopOutlined } from '@ant-design/icons';\r\nimport { /*enmDamageCaseStatus, enmEvaluationStatus,*/ enmPolicyholderResponseTypes } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { enmEntityState, IEntity } from \"../../components/infrastructure/models\";\r\nimport { IEvaluationComponentFormProps } from \"./evaluationComponent\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { IBank } from \"../../baseInfo/bank/interfaces\";\r\nimport { Lookup } from \"../../components/lookup\";\r\nimport { IBaseComponent } from \"../../components/infrastructure/baseComponent\";\r\nimport { enmControlType, IProperty } from \"../../components/entityManager/interfaces\";\r\nimport { Bank } from \"../../baseInfo/bank\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nexport const policyholderResponseTypesOptions = [\r\n    { title: \"پرداخت\", name: 'با متن فوق و مبلغ ارزیابی موافق هستم ', value: enmPolicyholderResponseTypes.Pay },\r\n    { title: \"عدم تایید\", name: 'با مبلغ ارزیابی موافق نیستم', value: enmPolicyholderResponseTypes.Objection },\r\n    //{ title: \"تعمیر\", value: enmPolicyholderResponseTypes.Repair }\r\n];\r\n\r\nexport interface IPolicyholderConfirmation extends IEntity {\r\n    DamageCaseEvaluatorId: number;\r\n    ResponseType: enmPolicyholderResponseTypes;\r\n    ObjectionDescription?: string;\r\n    ShebaNo?: string;\r\n    PossessionTransition?: boolean;\r\n    BankId?: number;\r\n    Bank?: IBank;\r\n    BankBranch?: string;\r\n    BankAccountNo?: string;\r\n    BankCardNo?: string;\r\n}\r\n\r\nexport interface IPolicyholderConfirmationFormProps extends IEvaluationComponentFormProps<IPolicyholderConfirmation> {\r\n    policyholderPanel?: boolean;\r\n    parent: IBaseComponent;\r\n}\r\n\r\nexport interface IPolicyholderConfirmationFormState {\r\n    responseType?: enmPolicyholderResponseTypes;\r\n}\r\n\r\nexport const PolicyholderConfirmationForm = (props: IPolicyholderConfirmationFormProps) => {\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 6, lg: 6, md: 6, sm: 6, xs: 6 },\r\n        wrapperCol: { xxl: 12, xl: 16, lg: 18, md: 18, sm: 18, xs: 20 },\r\n    };\r\n\r\n    const [state, setState] = React.useState<IPolicyholderConfirmationFormState>({ responseType: props.currentEntity.ResponseType });\r\n    const [formLayout] = React.useState<LayoutType>('horizontal');\r\n    const [form] = Form.useForm();\r\n\r\n    const bankProp = React.useRef<IProperty>({\r\n        controlType: enmControlType.lookup,\r\n        dataIndex: \"BankId\",\r\n        width: \"100%\",\r\n        lookup: {\r\n            lookupComponent: Bank,\r\n            lookupProperty: \"Code\",\r\n            lookupDisplayFields: [\"Name\"],\r\n            showButton: false\r\n        }\r\n    });\r\n\r\n    const shebaNoRef = React.useRef<Input>(null);\r\n    const cardNoRef = React.useRef<Input>(null);\r\n\r\n    React.useEffect(() => {\r\n        let currentEntity = props.currentEntity as any;\r\n        form.setFieldsValue(currentEntity);\r\n    }, [props, form]);\r\n\r\n    //const { DamageCaseEvaluators } = props.damageCase;\r\n    //const lastDamageCaseEvaluatorId = !!DamageCaseEvaluators && DamageCaseEvaluators.length ? DamageCaseEvaluators[DamageCaseEvaluators.length - 1].Id : 0;\r\n\r\n    const { PolicyEquipmentModel, PayableAmount, PayableAmountString } = props.damageCase;\r\n    const { Policyholder } = PolicyEquipmentModel.Policy;\r\n\r\n    return (\r\n        <Form\r\n            style={{ padding: '5px 45px' }}\r\n            form={form}\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={async (values) => {\r\n                props.onSubmit && await props.onSubmit(values);\r\n            }}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n        >\r\n\r\n            <>\r\n                <p> اینجانب : <b>{Policyholder.FullName}</b> به شماره ملّی : <b>{Policyholder.NationalCode}</b> بدینوسیله اقرار و اعتراف می‌نماید :</p>\r\n\r\n                <p>\r\n                    <span> در ازاء تأیدیه خسارت وارده به یک دستگاه : </span>\r\n                    <b style={{ unicodeBidi: \"plaintext\" }} >{PolicyEquipmentModel.Equipment.Name} {PolicyEquipmentModel.BrandTitle} {PolicyEquipmentModel.EquipmentModelTitle}</b>\r\n                    <span style={{ unicodeBidi: \"plaintext\" }}> به شماره سریال/IMEI : </span>\r\n                    <b style={{ unicodeBidi: \"plaintext\" }} >{PolicyEquipmentModel.EquipmentSerialNo}</b>\r\n                </p>\r\n\r\n                <p>به (مبلغ : <b>{`${PayableAmount ?? 0}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}</b> ریال) (حروف : <b>{PayableAmountString}</b> ريال)</p>\r\n\r\n                <p style={{ textAlign: \"justify\" }}>\r\n                    منبعد تحت هیچ عنوان اعتراض و ادعایی علیه شرکت بیمه سامان از بابت خسارت فوق الذکر نداشته و نخواهد داشت و بدینوسیله کلیه حقوق واقعی و منصوره ناشی از وقوع حادثه موضوع پرونده خسارت مزبور اعم از حق تعقیب قضایی و مطالبه و وصول مبلغ فوق و خسارات قانونی از مسبب یا مسببین و یا مسئول یا مسئولین حادثه را به شرکت بیمه سامان واگذار می نماید و نیز تعهّد می کند که نسبت به حادثه و خسارت واقع شده هیچگونه سازش، صلح یا توافقی با مقصر یا مقصرین و مسئول یا مسئولین وقوع حادثه نکرده و نخواهد کرد و از هر عملی که موجب تضییع حقوق و یا سقوط حق مراجعه شرکت بیمه سامان به مسئول و یا مسئولین یا مقصرین حادثه و یا مغایر فوق باشند، خودداری نماید و در صورتیکه عملی خلاف این تعهّد انجام داده یا بدهد، متعهّد و ملزم است علاوه بر مسترد نمودن مبالغ دریافتی به شرکت بیمه سامان از عهده خسارت وارده به آن شرکت نیز برآید. در صورت وقوع هرگونه خسارت (اعم از جزئی، کلی و سرقت)، پرداخت خسارت توسط شرکت بیمه سامان منوط به ارائه داغی قطعه تعویض شده توسط بیمه‌گذار به شرکت بیمه سامان می باشد، در غیر اینصورت شرکت بیمه سامان هیچگونه تعهّدی برای پرداخت خسارت نخواهد داشت. و همچنین ضروری است در صورت وقوع سرقت با شکست حرز، سرقت کُلی و خسارت کُلی، مالکیت دستگاه از طریق سایت همتا به شرکت بیمه سامان انتقال یابد و تمامی متعلقات دستگاه از قبیل : (جعبه، شارژر، سیم شارژر، هندزفری، قلم، بند ساعت هوشمند، باطری لپ تاپ و...) تحویل شرکت بیمه سامان گردد و در صورت ارائه نشدن هر کدام از موارد ذکر شده مبلغی از خسارت پرداختی کسر می گردد و اینجانب اعتراضی در خصوص آنها نخواهم داشت.\r\n                </p>\r\n\r\n            </>\r\n            <Form.Item\r\n                name={'ResponseType'}\r\n                key={'ResponseType'}\r\n                rules={[\r\n                    {\r\n                        required: true,\r\n                        message: 'پاسخ اجباری است'\r\n                    }\r\n                ]}\r\n            >\r\n                <Radio.Group key={'ResponseType'} disabled={props.disabled} onChange={e => setState({ responseType: e.target.value })}>\r\n                    {policyholderResponseTypesOptions.map(s =>\r\n                        <Radio key={s.value} value={s.value}><b>{s.name}</b></Radio>\r\n                    )}\r\n                </Radio.Group>\r\n            </Form.Item>\r\n\r\n            {state?.responseType === enmPolicyholderResponseTypes.Objection &&\r\n                <Form.Item\r\n                    label={'شرح اعتراض'}\r\n                    name={'ObjectionDescription'}\r\n                    key={'ObjectionDescription'}\r\n                    rules={[\r\n                        {\r\n                            required: state?.responseType === enmPolicyholderResponseTypes.Objection,\r\n                            message: 'شرح اعتراض اجباری است'\r\n                        }\r\n                    ]}\r\n                >\r\n                    <TextArea disabled={props.disabled} rows={10} />\r\n                </Form.Item>\r\n            }\r\n\r\n            {state?.responseType === enmPolicyholderResponseTypes.Pay &&\r\n                <>\r\n                {!props.disabled && < Alert style={{ marginTop: 10, marginBottom: 10 }} message=\"امکان انجام عملیات انتقال وجه، به حساب های بلو بانک و همچنین بانک/ موسسات اعتباری ادغام شده با بانک سپه (شامل: بانک‌های انصار، قوامین، حکمت ایرانیان، موسسه اعتباری مهر اقتصاد و کوثر) نمی باشد، خواهشمند است اطلاعات حساب بانکی به غیر از بانک‌ها و موسسات مذکور را ثبت نمایید.\" type=\"warning\" showIcon />}\r\n\r\n                    <p>مشخصات حساب بانکی بیمه‌گذار محترم :</p>\r\n\r\n                    <Form.Item\r\n                        label={'شماره شبا'}\r\n                        name={'ShebaNo'}\r\n                        key={'ShebaNo'}\r\n                        rules={[\r\n                            {\r\n                                required: true,\r\n                                message: 'شماره شبا اجباری است'\r\n                            },\r\n                            {\r\n                                len: 26,\r\n                                message: 'تعداد ارقام باید 24 باشد'\r\n                            }\r\n                        ]}\r\n                    >\r\n\r\n                        <Input\r\n                            autoComplete=\"off\"\r\n                            disabled={props.disabled}\r\n                            maxLength={26}\r\n                            ref={shebaNoRef}\r\n                            type={\"text\"}\r\n                            onKeyPress={(event: any) => {\r\n                                if (event.charCode < 48 || event.charCode > 57) {\r\n                                    event.preventDefault();\r\n                                }\r\n                                if (shebaNoRef.current) {\r\n                                    const { input } = shebaNoRef.current;\r\n                                    input.selectionStart = input.selectionEnd = (event.target as any).value.length;\r\n                                    if (input.value.indexOf('IR') === -1)\r\n                                        input.value = `IR${input.value.replace(/[^0-9.]/g, '')}`;\r\n                                }\r\n                            }}\r\n                            onPaste={e => {\r\n                                e.preventDefault();\r\n                                let text = e.clipboardData.getData('Text');\r\n                                if (shebaNoRef.current) {\r\n                                    let shebaNo: string = form.getFieldValue('ShebaNo');\r\n                                    if (shebaNo.indexOf('IR') === -1)\r\n                                        shebaNo = `IR${shebaNo}${text.replace(/[^0-9.]/g, '')}`;\r\n                                    else\r\n                                        shebaNo = `${shebaNo}${text.replace(/[^0-9.]/g, '')}`;\r\n                                    form.setFieldsValue({ ShebaNo: shebaNo.substring(0, 26) });\r\n                                }\r\n                            }}\r\n                            style={{ direction: 'ltr', maxWidth: 400 }} placeholder=\"IR....\" />\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        name=\"Bank\"\r\n                        key=\"Bank\"\r\n                        label=\"بانک\"\r\n                        rules={[\r\n                            { required: true, message: 'انتخاب بانک اجباری است' }\r\n                        ]}\r\n                    >\r\n                        <Lookup\r\n                            parent={props.parent}\r\n                            disabled={props.disabled}\r\n                            property={bankProp.current}\r\n                            style={{ maxWidth: 400 }}\r\n                        />\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        label={'شعبه بانک'}\r\n                        name={'BankBranch'}\r\n                        key={'BankBranch'}\r\n                    >\r\n                        <Input\r\n                            style={{ direction: 'ltr', maxWidth: 400 }}\r\n                            maxLength={100}\r\n                            disabled={props.disabled}\r\n                        />\r\n\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        label={'شماره حساب'}\r\n                        name={'BankAccountNo'}\r\n                        key={'BankAccountNo'}\r\n                    >\r\n                        <Input\r\n                            style={{ direction: 'ltr', maxWidth: 400 }}\r\n                            maxLength={20}\r\n                            disabled={props.disabled}\r\n                        />\r\n\r\n                    </Form.Item>\r\n\r\n                    <Form.Item\r\n                        label={'شماره کارت'}\r\n                        name={'BankCardNo'}\r\n                        key={'BankCardNo'}\r\n                        rules={[\r\n                            {\r\n                                validator: () => {\r\n                                    const bankCardNo = form.getFieldValue('BankCardNo')?.replace(/[^0-9.]/g, '');\r\n                                    if (!!bankCardNo && bankCardNo.length !== 16)\r\n                                        return Promise.reject(new Error('شماره کارت نامعتبر است'));\r\n                                    return Promise.resolve();\r\n                                }\r\n                            }\r\n                        ]}\r\n                    >\r\n                        <Input\r\n                            style={{ direction: 'ltr', maxWidth: 400 }}\r\n                            maxLength={19}\r\n                            disabled={props.disabled}\r\n                            ref={cardNoRef}\r\n                            type={\"text\"}\r\n                            onKeyPress={(event: any) => {\r\n                                if (event.charCode < 48 || event.charCode > 57)\r\n                                    event.preventDefault();\r\n                                if ((event.target as any).value.replace(/[^0-9.]/g, '').length === 16)\r\n                                    event.preventDefault();\r\n                            }}\r\n                            onKeyUp={(event) => {\r\n                                if (cardNoRef.current) {\r\n                                    const { input } = cardNoRef.current;\r\n                                    input.selectionStart = input.selectionEnd = (event.target as any).value.length;\r\n                                    input.value = `${input.value.replace(/[^0-9.]/g, '').replace(/(\\d{0,4})(\\d{0,4})(\\d{0,4})(\\d{0,4})/,// '$1-$2-$3-$4')}`;\r\n                                        (_, p1, p2, p3, p4) => {\r\n                                            let result = '';\r\n                                            if (!!p1)\r\n                                                result = p1 + (p1.length === 4 ? '-' : '');\r\n                                            if (!!p2)\r\n                                                result += p2 + (p2.length === 4 ? '-' : '');\r\n                                            if (!!p3)\r\n                                                result += p3 + (p3.length === 4 ? '-' : '');\r\n                                            if (!!p4)\r\n                                                result += p4;\r\n                                            return result;\r\n                                        })\r\n                                        }`\r\n                                }\r\n                            }}\r\n                        />\r\n\r\n                    </Form.Item>\r\n\r\n                    {\r\n                    props.currentEntity.State === enmEntityState.Added && <Alert style={{ marginTop: 10, marginBottom: 10 }} message=\"بیمه گزار/مشتری گرامی، اطلاعات حساب بانکی می‌بایست بنام دارنده بیمه نامه باشد.\" type=\"info\" showIcon />\r\n                    }\r\n                </>\r\n            }\r\n\r\n            {/*{props.policyholderPanel === true && props.damageCase.NumberOfPreviousEvaluations > 0 && props.currentEntity.DamageCaseEvaluatorId === lastDamageCaseEvaluatorId && props.damageCase.Status === enmDamageCaseStatus.Rejected && props.damageCase.EvaluationStatus === enmEvaluationStatus.PolicyholderRejected*/}\r\n            {/*    ? <Alert style={{ margin: 10 }} message=\"در صورت تمایل لطفاً با شماره 8943-021 تماس گرفته و شکایت نمایید.\" type=\"warning\" showIcon />*/}\r\n            {/*    : <></>}*/}\r\n\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<SendOutlined rotate={180} />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        ثبت\r\n                    </Button>\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={props.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n}","import { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\nimport { ICallOptions, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { PdfViewer } from \"../../components/pdfViewer\";\r\n\r\nexport interface IDamageCaseSummaryProps extends IBaseProps {\r\n    damageCaseId: number;\r\n    invoker: 'damagecasevoucherpaymentdraft' | 'damagecaseevaluator'\r\n}\r\n\r\nexport interface IDamageCaseSummaryStates extends IBaseStates {\r\n    pdfBase64String: string;\r\n}\r\n\r\nexport class DamageCaseSummary extends BaseComponent<IDamageCaseSummaryProps, IDamageCaseSummaryStates>{\r\n    constructor(props: IDamageCaseSummaryProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            pdfBase64String: ''\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.printDamageCaseSummary();\r\n    }\r\n    printDamageCaseSummary = async () => {\r\n        const { damageCaseId, invoker } = this.props;\r\n        let fetchOpt: ICallOptions = {\r\n            url: `${invoker}/printdamagecasesummary`,\r\n            data: { damageCaseId },\r\n            onSuccess: res => {\r\n                if (res.ValidationState.Successful)\r\n                    this.setState({ pdfBase64String: (res as IResultSet<string>).Data! });\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    virtualRender() {\r\n        const header = this.getPageHeader({\r\n            title: \"خلاصه پرونده خسارت\",\r\n            onBack: () => {\r\n                if (this.props.onClose && this.mounted)\r\n                    this.props.onClose(this);\r\n                else\r\n                    window.history.back();\r\n            }\r\n        });\r\n\r\n        const { pdfBase64String } = this.state;\r\n\r\n        return (\r\n            <>\r\n                {header}\r\n                {this.state.loading ?\r\n                    <CustomSpinner />\r\n                    :\r\n                    <div style={{ height: 'calc(100vh - 240px)' }}>\r\n                        <PdfViewer url={pdfBase64String ? `data:application/pdf;base64,${pdfBase64String}` : ''} />\r\n                    </div>\r\n                }\r\n            </>\r\n        );\r\n    }\r\n}","import { Button, Col, Descriptions, Form, Popconfirm, Space, Tooltip } from \"antd\";\r\nimport React, { ReactNode } from \"react\";\r\nimport { damageCaseIssuerTypesOptions, damageCaseStatusOptions, enmDamageCaseStatus, enmEvaluationMethods, enmEvaluationStatus, enmPolicyholderResponseTypes, evaluationMethodsOptions, evaluationStatusOptions, IDamageCase, IDamageCaseFetchingInfo, IDamageCaseInitialData, IDamageCaseProps, IDamageCaseStates } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmEntityManagerState, enmPropertyType, IMetadata, IProperty } from \"../../components/entityManager/interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmOrderingType, enmValidationLevel, ICallOptions, IFetchingResult, IOrdering, IPaging, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { AllocateEvaluator } from \"./allocateEvaluator\";\r\nimport * as EvaluationComponents from \"./components\";\r\nimport { IEvaluationComponentFormProps, IEvaluationComponentProps } from \"./evaluationComponent\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport '../index.css'\r\nimport { ICenterProps } from \"../../baseInfo/center/interfaces\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport { AndFilter, ComparisonFilter, enmConditionalOperators, IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { AttachmentDownloader } from \"../../baseInfo/attachment/attachmentDownloader\";\r\nimport { ColumnFilter } from \"../../components/entityManager/columnfilter\";\r\nimport { Center } from \"../../baseInfo/center\";\r\nimport { DamageCaseSummary } from \"../../financial/damageCaseVoucherPaymentDraft/damageCaseSummary\";\r\nimport ReactToPrint, { PrintContextConsumer } from 'react-to-print';\r\nimport { PrinterOutlined } from '@ant-design/icons';\r\nimport { enmContactStatus } from \"./interfaces\";\r\nimport { DamageType } from \"../../baseInfo/damageType\";\r\ndayjs.extend(jalaliday);\r\n\r\nexport const TriesNames = [\r\n    \"اول\",\r\n    \"دوم\",\r\n    \"سوم\",\r\n    \"چهارم\",\r\n    \"پنجم\",\r\n    \"ششم\",\r\n    \"هفتم\",\r\n    \"هشتم\",\r\n    \"نهم\",\r\n    \"دهم\",\r\n    \"یازدهم\",\r\n    \"دوازدهم\",\r\n    \"سیزدهم\",\r\n    \"چهاردهم\",\r\n    \"پانزدهم\",\r\n    \"شانزدهم\",\r\n    \"هفدهم\",\r\n    \"هجدهم\",\r\n    \"نوزدهم\",\r\n    \"بیستم\"\r\n];\r\n\r\nexport class DamageCaseEvaluator extends BaseEntityManager<IDamageCase, IDamageCaseProps, IDamageCaseStates, IDamageCaseFetchingInfo, IDamageCaseInitialData>{\r\n    static contextType = AppContext;\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"ارزیابی پرونده خسارت\",\r\n            name: \"DamageCaseEvaluator\",\r\n            Properties: [\r\n                {\r\n                    title: \"صادر کننده خسارت\",\r\n                    dataIndex: \"IssuerType\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: { options: damageCaseIssuerTypesOptions },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پرونده خسارت\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"دلیل خسارت\",\r\n                    dataIndex: \"DamageReason\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"نوع خسارت\",\r\n                    dataIndex: \"DamageTypeId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    lookup: {\r\n                        lookupComponent: DamageType,\r\n                        lookupDisplayFields: [\"Name\"],\r\n                        showButton: false,\r\n                        dropdownDisplayFields: [\"Name\"],\r\n                        lookupProperty: \"DamageType\"\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: (_: any, record: IDamageCase) => damageCaseStatusOptions.map(o => {\r\n                            if (!record)\r\n                                return { title: o.title, value: o.value };\r\n                            if (record.Status === enmDamageCaseStatus.ReceiveDepreciated && record.DamageTypeId !== 2)\r\n                                return { title: 'در انتظار تایید انتقال مالکیت', value: o.value };\r\n                            return { title: o.title, value: o.value };\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"وضعیت ارزیابی\",\r\n                    dataIndex: \"EvaluationStatus\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: (_: any, record: IDamageCase) => evaluationStatusOptions.map(o => {\r\n                            if (!record)\r\n                                return { title: o.title, value: o.value, name: o.name };\r\n                            if (record.EvaluationStatus === enmEvaluationStatus.DamageEstimation) {\r\n                                let damageEstiomationTitle: string | null = null;\r\n                                const damageEstimations = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1]?.Estimations;\r\n                                if (damageEstimations && damageEstimations.length > 0) {\r\n                                    const currentDamageEstiomation = damageEstimations[damageEstimations.length - 1];\r\n                                    if (currentDamageEstiomation !== null && !currentDamageEstiomation.ExpertConfirmation)\r\n                                        damageEstiomationTitle = \"منتظر اعلام نظر نهایی توسط کارشناس شرکت زبده\";\r\n                                }\r\n                                return { title: damageEstiomationTitle ?? o.title, value: o.value, name: o.name };\r\n                            }\r\n                            else if (record.EvaluationStatus === enmEvaluationStatus.PolicyholderRejected) {\r\n                                const title = o.title + (record && record.NumberOfPreviousEvaluations < 20 ? ` (بار ${TriesNames[record.NumberOfPreviousEvaluations]}) ` : ' (بیش از بیست بار) ');\r\n                                return { title, value: o.value, name: o.name };\r\n                            }\r\n                            else if (record.EvaluationStatus === enmEvaluationStatus.ContactSetting) {\r\n                                const methodOpt = evaluationMethodsOptions.find(m => m.value === record.EvaluationMethod);\r\n                                const title = methodOpt?.contactSettingStatusTitle;\r\n                                const name = methodOpt?.contactSettingCommandTitle;\r\n                                return { title, value: o.value, name };\r\n                            }\r\n                            else if (record.EvaluationStatus === enmEvaluationStatus.MakingContact) {\r\n                                const methodOpt = evaluationMethodsOptions.find(m => m.value === record.EvaluationMethod);\r\n                                const title = methodOpt?.makingContactStatusTitle;\r\n                                const name = methodOpt?.makingContactCommandTitle;\r\n                                return { title, value: o.value, name };\r\n                            }\r\n                            else if (record.EvaluationStatus === enmEvaluationStatus.SendEssentials && record.DamageTypeId === 3) { // سرقت\r\n                                return { title: 'در انتظار دریافت مدارک سرقت', value: o.value, name: 'دریافت مدارک سرقت' };\r\n                            }\r\n                            else {\r\n                                return { title: o.title, value: o.value, name: o.name };\r\n                            }\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"مرکز ارزیابی\",\r\n                    dataIndex: \"EvaluatorId\",\r\n                    controlType: enmControlType.template,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    renderColumn: (_: any, record: IDamageCase) => {\r\n                        let evaluator = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1]?.Evaluator;\r\n                        return (\r\n                            <>\r\n                                {evaluator?.FullName}\r\n                            </>\r\n                        );\r\n                    },\r\n                    renderControl: (currentEntity: IDamageCase) => {\r\n                        let evaluator = currentEntity.DamageCaseEvaluators[currentEntity.DamageCaseEvaluators.length - 1]?.Evaluator;\r\n                        return (\r\n                            <>\r\n                                {evaluator?.FullName}\r\n                            </>\r\n                        );\r\n                    },\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"سریال بیمه نامه\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.SerialNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.Policyholder.NationalCode\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.Policyholder.FullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200,\r\n                    renderColumn: (_: any, record: IDamageCase) => {\r\n                        const { FullName } = record.PolicyEquipmentModel.Policy.Policyholder;\r\n                        const policyholderFullName = `${FullName} - ${record.EmergencyCallNumber}`;\r\n                        return (\r\n                            <>\r\n                                {policyholderFullName}\r\n                            </>\r\n                        );\r\n                    }\r\n                },\r\n                {\r\n                    title: \"نوع تجهیز\",\r\n                    dataIndex: \"PolicyEquipmentModel.Equipment.Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"PolicyEquipmentModel.BrandTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"مدل\",\r\n                    dataIndex: \"PolicyEquipmentModel.EquipmentModelTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"IMEI/سریال دستگاه\",\r\n                    dataIndex: \"PolicyEquipmentModel.EquipmentSerialNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"تایید انتقال مالکیت\",\r\n                    dataIndex: \"ConfirmPossessionTransition\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 120,\r\n                    showColumn: false\r\n                },\r\n                {\r\n                    title: \"روش ارزیابی\",\r\n                    dataIndex: \"EvaluationMethod\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: { options: evaluationMethodsOptions.map(a => { return { name: a.name, title: a.name, value: a.value } }) },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    visibility: (currentEntity: IDamageCase) => {\r\n                        return !currentEntity.DamageReason?.includes('سرقت');\r\n                    }\r\n                },\r\n                {\r\n                    title: \"تاریخ خسارت\",\r\n                    dataIndex: \"DamageDate\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره تماس بیمه گزار/مشتری\",\r\n                    dataIndex: \"EmergencyCallNumber\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    private evaluatorFilterProp: IProperty = {\r\n        dataIndex: \"Evaluator\",\r\n        controlType: enmControlType.lookup,\r\n        propertyType: enmPropertyType.number,\r\n        allowNull: true,\r\n        title: \"مرکز ارزیابی\",\r\n        lookup: {\r\n            lookupComponent: Center,\r\n            lookupDisplayFields: [\"FullName\"],\r\n            dropdownDisplayFields: [\"FullName\", \"NationalCode\"],\r\n            lookupProperty: \"\"\r\n        }\r\n    }\r\n    private evaluatorFilterValue?: number;\r\n    private evaluatorFilterOperator?: enmConditionalOperators;\r\n    onInitializing() {\r\n        this.extraFormNodeMarginTop = 5;\r\n        this.viewButtonTitle = () => \"مشاهده پرونده خسارت\";\r\n\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2,\r\n            defaultValues: () => {\r\n                return {\r\n                    Status: { operator: enmConditionalOperators.GreaterOrEqual, value: enmDamageCaseStatus.AssignEvaluator }\r\n                };\r\n            },\r\n            onReset: () => {\r\n                this.evaluatorFilterValue = undefined;\r\n                this.evaluatorFilterOperator = 0;\r\n            }\r\n        };\r\n\r\n        this.originalOrderings = () => [\r\n            { OrderBy: enmOrderingType.Ascending, Property: \"Status\" },\r\n            { OrderBy: enmOrderingType.Ascending, Property: \"EvaluationStatus\" },\r\n            { OrderBy: enmOrderingType.Descending, Property: \"Id\" }\r\n        ];\r\n\r\n        this.onLoaded = (initialData: IDamageCaseInitialData) => {\r\n\r\n            if (initialData?.Center?.Id === 1 && this.searchArea) {\r\n                const { dataIndex, title } = this.evaluatorFilterProp;\r\n                this.searchArea.render = () => {\r\n                    return [\r\n                        <Form.Item name={dataIndex} key={dataIndex} label={title}>\r\n                            <ColumnFilter\r\n                                parent={this}\r\n                                property={this.evaluatorFilterProp}\r\n                                onChange={currentFilter => {\r\n                                    this.evaluatorFilterValue = !!currentFilter?.value ? currentFilter.value[\"Id\"] : undefined;\r\n                                    this.evaluatorFilterOperator = currentFilter?.operator;\r\n                                }}\r\n                                preparelookupProps={(lookupProps: ICenterProps) => {\r\n                                    lookupProps.isEvaluator = true;\r\n                                    return lookupProps;\r\n                                }}\r\n                            />\r\n                        </Form.Item>\r\n                    ];\r\n                };\r\n            }\r\n        }\r\n\r\n        this.onDataFetching = (fetchingInfo, onViewMode) => {\r\n            if (this.initialData?.Center?.Id === 1 && !!this.evaluatorFilterValue && this.evaluatorFilterOperator !== undefined) {\r\n                fetchingInfo.EvaluatorFilter = new ComparisonFilter(\"Evaluator.Id\", this.evaluatorFilterOperator, this.evaluatorFilterValue);\r\n            }\r\n            else\r\n                fetchingInfo.EvaluatorFilter = undefined;\r\n            fetchingInfo.EvaluatorId = this.initialData?.Center?.Id;\r\n            fetchingInfo.LoadNavigations = onViewMode;\r\n\r\n        };\r\n\r\n        this.onDataFetched = result => {\r\n            result && result.Data && result.Data.forEach(i => i.EmergencyCallNumber = '0' + i.EmergencyCallNumber);\r\n            return result;\r\n        };\r\n\r\n        this.extraHeaderButtons = () => {\r\n            let buttons: React.ReactNode[] = [];\r\n            let commands: React.ReactNode[] = [];\r\n\r\n            // اگر کاربر زبده باشد \r\n            if (this.state.state === enmEntityManagerState.View && this.initialData?.Center?.Id === 1 && this.initialData?.AccessList[\"AllocateEvaluator\"]) {\r\n                if (this.selectedEntity?.Status === enmDamageCaseStatus.Financial) {\r\n\r\n                    if (!this.selectedEntity?.SentToBranch)\r\n                        commands.push(\r\n                            <Tooltip key=\"sendDamageCaseToBranch\" title=\"ارسال پرونده خسارت به شعبه مربوطه از طریق اتوماسیون اداری سامان\">\r\n                                <Button key=\"sendDamageCaseToBranch\"\r\n                                    style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '140px' }}\r\n                                    type=\"primary\"\r\n                                    onClick={this.sendDamageCaseToBranch}\r\n                                >\r\n                                    ارسال به شعبه\r\n                                </Button>\r\n                            </Tooltip >\r\n                        );\r\n                }\r\n            }\r\n\r\n            // پرونده در هر وضعیتی باشد\r\n            if (this.state.state === enmEntityManagerState.View) {\r\n                commands.push(\r\n                    <ReactToPrint key=\"printDamageCase\" content={() => this.viewRef ?? null}>\r\n                        <PrintContextConsumer>\r\n                            {({ handlePrint }) => (\r\n                                <Button key=\"printDamageCase\"\r\n                                    icon={<PrinterOutlined />}\r\n                                    style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '140px' }}\r\n                                    type=\"default\"\r\n                                    onClick={handlePrint}>\r\n                                    چاپ پرونده\r\n                                </Button>\r\n                            )}\r\n                        </PrintContextConsumer>\r\n                    </ReactToPrint>\r\n                );\r\n\r\n                if (this.selectedEntity?.Status === enmDamageCaseStatus.Financial && this.initialData?.AccessList[\"PrintDamageCaseSummary\"]) {\r\n                    commands.push(\r\n                        <Button key=\"printDamageCaseSummary\"\r\n                            style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '140px' }}\r\n                            type=\"primary\"\r\n                            onClick={this.showDamageCaseSummary}\r\n                        >\r\n                            چاپ خلاصه پرونده\r\n                        </Button>\r\n                    );\r\n                }\r\n\r\n                if (this.selectedEntity?.Status === enmDamageCaseStatus.Financial && this.initialData?.AccessList[\"DownloadDamageCaseZipFile\"]) {\r\n                    commands.push(\r\n                        <Button key=\"downloadDamageCaseZipFile\"\r\n                            style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '140px' }}\r\n                            type=\"primary\"\r\n                            onClick={this.downloadDamageCaseZipFile}\r\n                        >\r\n                            دانلود مدارک خسارت\r\n                        </Button>\r\n                    );\r\n                }\r\n            }\r\n\r\n            if (commands.length)\r\n                buttons.push(\r\n                    <Space key=\"extraButtons\">\r\n                        {commands}\r\n                    </Space>\r\n                );\r\n\r\n            return buttons;\r\n        };\r\n\r\n        this.renderingToolbar = () => {\r\n            let result: ReactNode[] = [];\r\n            let entity = this.selectedEntity!;\r\n            if (!entity)\r\n                return <></>;\r\n            //var evaluatorCode = this.initialData?.Center?.Code;\r\n            //var evaluatorCodeLike = evaluatorCode ? evaluatorCode.toString().padStart(Math.ceil(evaluatorCode / 5.0) * 5, '0') : \"\";\r\n            const damageCaseEvaluator = entity.DamageCaseEvaluators[entity.DamageCaseEvaluators.length - 1];\r\n            const evaluatorId = damageCaseEvaluator?.EvaluatorId;\r\n            const allocateEvaluatorAccess = this.initialData?.AccessList[\"AllocateEvaluator\"];\r\n            const pickupAccess = this.initialData?.AccessList[\"Pickup\"];\r\n\r\n            const command = entity.EvaluationStatus !== undefined && enmEvaluationStatus[Number(entity.EvaluationStatus)];\r\n            const commandAccess = !!command && this.initialData?.AccessList[command];\r\n\r\n            if (allocateEvaluatorAccess &&\r\n                (entity.Status === enmDamageCaseStatus.AssignEvaluator || (entity.Status === enmDamageCaseStatus.Evaluation && [enmEvaluationStatus.PolicyholderConfirmation].indexOf(entity.EvaluationStatus ?? 0) === -1)) &&\r\n                entity.DamageCaseEvaluators.filter(f => f.Substatus === enmEvaluationStatus.PolicyholderConfirmation || f.Substatus === enmEvaluationStatus.PolicyholderRejected).length < 2) {\r\n                // دسترسی تخصیص داشته باشد یا ادمین باشد\r\n                // و خسارت در مرحله تخصیص ارزیاب یا ارزیابی باشد\r\n                // و درصورتی که اگر بیمه گزار/مشتری ارزیابی را برای بار اول رد کرده باشد ، هنوز برای باردوم رد نکرده باشد\r\n                // Allocate  \r\n\r\n                result.push(\r\n                    <Col key=\"Allocate\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onAllocateEvaluatorClick} >تخصیص مرکز ارزیابی</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n            if (pickupAccess && (this.initialData?.Center?.Id !== evaluatorId || entity.EvaluationStatus === enmEvaluationStatus.PolicyholderRejected) && (entity.Status === enmDamageCaseStatus.AssignEvaluator || (entity.Status === enmDamageCaseStatus.Evaluation && [enmEvaluationStatus.DamageEstimation, enmEvaluationStatus.PolicyholderConfirmation].indexOf(entity.EvaluationStatus ?? 0) === -1)) && !!this.initialData?.Center?.IsEvaluator && (entity.NumberOfPreviousEvaluations < 1 || this.initialData.Center.SecondEvaluationPermission)) {\r\n                // کاربر زبده باشد\r\n                // پرونده در دست ارزیاب دیگری باشد\r\n                //خسارت در مرحله تخصیص ارزیاب یا ارزیابی باشد\r\n                // و این کاربر مرکز ارزیابی باشد\r\n                // درصورتی که بار اول ارزیابی باشد یا مجوز ارزیابی برای بار دوم را داشته باشد\r\n                // Pickup \r\n                result.push(\r\n                    <Col key=\"Pickup\" style={{ marginLeft: 10 }}>\r\n                        <Popconfirm okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} okText=\"بلی\" cancelText=\"خیر\" title=\"آیا مایلید ارزیابی پرونده را انجام دهید؟\"\r\n                            onConfirm={this.onPickupClick}>\r\n                            <Button type=\"default\">گرفتن پرونده</Button>\r\n                        </Popconfirm>\r\n                    </Col>\r\n                );\r\n            }\r\n            else if (entity.Status === enmDamageCaseStatus.Evaluation\r\n                && commandAccess\r\n                && !!this.initialData?.Center\r\n                && (\r\n                    (this.initialData.Center.Id !== 1 && this.initialData.Center.Id === evaluatorId)\r\n                    ||\r\n                    (this.initialData.Center.Id === 1 && ((entity.EvaluationStatus === enmEvaluationStatus.DamageEstimation && damageCaseEvaluator.Estimations.length) || evaluatorId === 1))\r\n                )\r\n                && this.initialData.Center.IsEvaluator\r\n                && entity.EvaluationStatus !== enmEvaluationStatus.Rejected\r\n                && entity.EvaluationStatus !== enmEvaluationStatus.DefectiveDocuments\r\n                && entity.EvaluationStatus !== enmEvaluationStatus.PolicyholderConfirmation\r\n                && entity.EvaluationStatus !== enmEvaluationStatus.PolicyholderRejected\r\n                && entity.EvaluationStatus !== enmEvaluationStatus.EvaluationComplete) {\r\n\r\n                let commandTitle = evaluationStatusOptions.find(o => o.value === entity.EvaluationStatus)?.name;\r\n\r\n                if (entity.EvaluationStatus === enmEvaluationStatus.ContactSetting) {\r\n                    commandTitle = evaluationMethodsOptions.find(m => m.value === entity.EvaluationMethod)?.contactSettingCommandTitle;\r\n                }\r\n                if (entity.EvaluationStatus === enmEvaluationStatus.MakingContact) {\r\n                    commandTitle = evaluationMethodsOptions.find(m => m.value === entity.EvaluationMethod)?.makingContactCommandTitle;\r\n                }\r\n                if (entity.EvaluationStatus === enmEvaluationStatus.DamageEstimation) {\r\n                    const damageEstimations = entity.DamageCaseEvaluators[entity.DamageCaseEvaluators.length - 1]?.Estimations;\r\n                    if (damageEstimations && damageEstimations.length > 0) {\r\n                        const currentDamageEstiomation = damageEstimations[damageEstimations.length - 1];\r\n                        if (currentDamageEstiomation !== null && !currentDamageEstiomation.ExpertConfirmation) {\r\n                            if (this.initialData.Center.Id === 1)\r\n                                commandTitle = \"اعلام نظر نهایی\";\r\n                            else\r\n                                commandTitle = \"\";\r\n                        }\r\n                    }\r\n                }\r\n                if (!!commandTitle)\r\n                    result.push(\r\n                        <Col key=\"command\" style={{ marginLeft: 10 }}>\r\n                            <Button type=\"default\" onClick={() => this.fetchItem(entity.RowGuid)}>\r\n                                {commandTitle}\r\n                            </Button>\r\n                        </Col>\r\n                    );\r\n            }\r\n\r\n            // کاربر زبده باشد و  پرونده دروضعیت ارزیابی و دریافت دستگاه یا مدراک باشد\r\n            if (this.initialData?.Center?.Id === 1 && this.selectedEntity?.Status === enmDamageCaseStatus.Evaluation && this.selectedEntity?.EvaluationStatus === enmEvaluationStatus.SendEssentials) {\r\n                if (this.initialData.AccessList[\"ReceiveEssentials\"]) {\r\n                    let title = this.selectedEntity.DamageTypeId === 1 ? \"دریافت دستگاه و لوازم جانبی\" : \"دریافت مدارک سرقت\";\r\n                    result.push(\r\n                        <Col key=\"receiveEssentials\" style={{ marginLeft: 10 }}>\r\n                            <Popconfirm okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} okText=\"بلی\" cancelText=\"خیر\" title={`آیا ${title} مورد تایید است؟`}\r\n                                onConfirm={this.receiveEssentials}>\r\n                                <Button key=\"receiveEssentials\" type=\"primary\">{title}</Button>\r\n                            </Popconfirm>\r\n                        </Col>\r\n                    );\r\n                }\r\n            }\r\n\r\n            // پرونده در وضعیت مالی باشد\r\n            if (this.initialData && this.selectedEntity?.Status === enmDamageCaseStatus.Financial) {\r\n                // دارای دسترسی چاپ خلاصه پرونده باشد\r\n                if (this.initialData.AccessList[\"PrintDamageCaseSummary\"])\r\n                    result.push(\r\n                        <Col key=\"printDamageCaseSummary\" style={{ marginLeft: 10 }}>\r\n                            <Button key=\"printDamageCaseSummary\" type=\"primary\" onClick={this.showDamageCaseSummary}>چاپ خلاصه پرونده</Button>\r\n                        </Col>\r\n                    );\r\n\r\n                // دارای دسترسی ارسال به شعبه باشد\r\n                if (this.initialData.AccessList[\"SendDamageCaseToBranch\"] && !entity.SentToBranch)\r\n                    result.push(\r\n                        <Col key=\"sendDamageCaseToBranch\" style={{ marginLeft: 10 }}>\r\n                            <Tooltip title=\"ارسال پرونده خسارت به شعبه مربوطه از طریق اتوماسیون اداری سامان\">\r\n                                <Button key=\"sendDamageCaseToBranch\" type=\"primary\" onClick={this.sendDamageCaseToBranch}>ارسال به شعبه</Button>\r\n                            </Tooltip>\r\n                        </Col>\r\n                    );\r\n\r\n                // اگر کاربر دسترسی دانلود مدارک داشته باشد\r\n                if (this.initialData.AccessList[\"DownloadDamageCaseZipFile\"]) {\r\n                    result.push(\r\n                        <Col key=\"downloadDamageCaseZipFile\" style={{ marginLeft: 10 }}>\r\n                            <Button key=\"downloadDamageCaseZipFile\" type=\"primary\" onClick={this.downloadDamageCaseZipFile}>دانلود مدارک خسارت</Button>\r\n                        </Col>\r\n                    );\r\n                }\r\n            }\r\n\r\n            // اگر کاربر دسترسی حذف داشته باشد و پرونده نهایتا در وضعیت ارزیابی باشد\r\n            if (this.initialData?.AccessList[\"RemoveDamageCase\"] && [enmDamageCaseStatus.Create, enmDamageCaseStatus.AssignEvaluator, enmDamageCaseStatus.Evaluation].indexOf(this.selectedEntity?.Status ?? enmDamageCaseStatus.Create) > -1) {\r\n                result.push(\r\n                    <Col key=\"RemoveDamageCase\" style={{ marginLeft: 10 }}>\r\n                        <Popconfirm okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} okText=\"بلی\" cancelText=\"خیر\" title=\"آیا مایلید پرونده خسارت را حذف نمایید؟\"\r\n                            onConfirm={() => this.removeDamageCase(entity.TicketNo)}>\r\n                            <Button type=\"default\">حذف پرونده خسارت</Button>\r\n                        </Popconfirm>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            return result.length ? (<> {result} </>) : (<></>);\r\n        };\r\n\r\n        this.extraViewNode = () => {\r\n            const { currentEntity, evaluationSteps } = this.state;\r\n            if (!currentEntity)\r\n                return;\r\n\r\n            let steps: React.ReactNode[] = [];\r\n\r\n            let damageCaseEvaluatorId: number | undefined = undefined;\r\n\r\n            currentEntity.DamageCaseEvaluators.forEach(damageCaseEvaluator => {\r\n                if (damageCaseEvaluator.Id !== damageCaseEvaluatorId) {\r\n                    damageCaseEvaluatorId = damageCaseEvaluator.Id;\r\n                    let evaluator = damageCaseEvaluator.Evaluator;\r\n                    steps.push(\r\n                        <div key={(damageCaseEvaluator as any).RowGuid} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                            <div className=\"box box-blue\">\r\n                                <div className=\"box-title\">\r\n                                    <div className=\"caption\">\r\n                                        <Descriptions>\r\n                                            <Descriptions.Item><b>تخصیص ارزیاب</b></Descriptions.Item>\r\n                                            <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dayjs(damageCaseEvaluator.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span></Descriptions.Item>\r\n                                            <Descriptions.Item label=\"کاربر\">{damageCaseEvaluator.Creator?.FullName ?? 'کارشناس پرونده خسارت'}</Descriptions.Item>\r\n                                        </Descriptions>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"box-body form\">\r\n                                    <div className=\"form-body\">\r\n                                        <div style={{ padding: 20 }}>\r\n                                            <label>مرکز ارزیابی</label>\r\n                                            <p>{evaluator.NationalCode + \" \" + evaluator.FullName}</p>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n                }\r\n\r\n                evaluationSteps.filter(s => s.DamageCaseEvaluatorId === damageCaseEvaluatorId)\r\n                    .forEach((s, i) => {\r\n                        const evaluationMethod = this.state.currentEntity?.EvaluationMethod;\r\n                        let title = evaluationStatusOptions.find(o => o.value === s.Substatus)?.name;\r\n\r\n                        const evaluationMethodChanged = !!evaluationSteps.find((v, vIndex) => v.ContactStatus === enmContactStatus.EvaluationMethodToPolicyholderInPerson && i <= vIndex);\r\n                        if (s.Substatus === enmEvaluationStatus.ContactSetting) {\r\n                            title = evaluationMethodsOptions.find(m => (evaluationMethodChanged && m.value === enmEvaluationMethods.VideoCall) || m.value === evaluationMethod)?.contactSettingCommandTitle;\r\n                        }\r\n                        if (s.Substatus === enmEvaluationStatus.MakingContact) {\r\n                            title = evaluationMethodsOptions.find(m => (evaluationMethodChanged && m.value === enmEvaluationMethods.VideoCall) || m.value === evaluationMethod)?.makingContactCommandTitle;\r\n                        }\r\n\r\n                        let repeatedStep = !!evaluationSteps.find((v, vIndex) => v.Substatus === s.Substatus && i > vIndex);\r\n                        if (repeatedStep)\r\n                            title += ' (مجدد) ';\r\n                        let dateTime = dayjs(s.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\");\r\n                        let history: React.ReactNode;\r\n                        let formName = enmEvaluationStatus[Number(s.Substatus)] + \"Form\";\r\n                        let formProps: IEvaluationComponentFormProps<any> = {\r\n                            currentEntity: s,\r\n                            loading: false,\r\n                            disabled: true,\r\n                            damageCase: this.state.currentEntity!,\r\n                            damageCaseDocumentTypeAttachments: []\r\n                        };\r\n\r\n                        if (s.Substatus === enmEvaluationStatus.DocumentCheck) {\r\n                            const prevCheckCount = evaluationSteps.filter((v, vIndex) => v.Substatus === s.Substatus && i > vIndex).length;\r\n                            const attachments = this.state.attachments.filter((_, k) => k <= prevCheckCount).flatMap(a => a);\r\n                            (formProps as any)[\"damageCaseDocumentTypeAttachments\"] = attachments;\r\n                            (formProps as any)[\"numberOfPreviousEvaluations\"] = evaluationSteps.filter((v, vIndex) => v.Substatus === enmEvaluationStatus.PolicyholderConfirmation && v.ResponseType === enmPolicyholderResponseTypes.Objection && i > vIndex).length\r\n                        }\r\n\r\n                        const Component = (EvaluationComponents as any)[formName];\r\n                        if (Component) {\r\n                            const policyEquipmentModel = this.state.currentEntity?.PolicyEquipmentModel;\r\n\r\n                            if (formName === \"DamageEstimationForm\") {\r\n                                (formProps as any).insuredValue = policyEquipmentModel?.InsuredValue;\r\n                            }\r\n                            if (formName === \"PolicyholderConfirmationForm\") {\r\n                                (formProps as any).parent = this;\r\n                            }\r\n                            if (formName === \"ContactSettingForm\") {\r\n                                (formProps as any).evaluationMethodChanged = evaluationMethodChanged;\r\n                            }\r\n                            history = (\r\n                                <div style={{ padding: 20 }}>\r\n                                    <Component key={s.RowGuid} {...formProps} />\r\n                                </div>\r\n                            );\r\n\r\n                            steps.push(\r\n                                <div key={s.RowGuid} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                                    <div className=\"box box-blue\">\r\n                                        <div className=\"box-title\">\r\n                                            <div className=\"caption\">\r\n                                                <Descriptions>\r\n                                                    <Descriptions.Item><b>{title}</b></Descriptions.Item>\r\n                                                    <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dateTime}</span></Descriptions.Item>\r\n                                                    <Descriptions.Item label=\"کاربر\">{s.Creator?.FullName ?? 'کارشناس پرونده خسارت'}</Descriptions.Item>\r\n                                                </Descriptions>\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"box-body form\">\r\n                                            <div className=\"form-body\">\r\n                                                {history}\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            );\r\n                        }\r\n                        else if (s.Substatus === enmEvaluationStatus.DefectiveDocuments) {\r\n                            history = (\r\n                                <div style={{ padding: 20 }}>\r\n                                    <AttachmentDownloader key={s.RowGuid} attachments={s.DamageCaseDocumentTypes.flatMap((a: any) => a.DamageCaseDocumentTypeAttachments)} />\r\n                                </div>\r\n                            );\r\n                            steps.push(\r\n                                <div key={s.RowGuid} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                                    <div className=\"box box-blue\">\r\n                                        <div className=\"box-title\">\r\n                                            <div className=\"caption\">\r\n                                                <Descriptions>\r\n                                                    <Descriptions.Item><b>{title}</b></Descriptions.Item>\r\n                                                    <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dateTime}</span></Descriptions.Item>\r\n                                                    <Descriptions.Item label=\"کاربر\">{s.Creator?.FullName}</Descriptions.Item>\r\n                                                </Descriptions>\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"box-body form\">\r\n                                            <div className=\"form-body\">\r\n                                                {history}\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            );\r\n                        }\r\n                    });\r\n            });\r\n\r\n            return (\r\n                <>\r\n                    {steps}\r\n                </>\r\n            );\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            const { params } = this.context;\r\n            const evaluationStatusParam = params['evaluationstatus'];\r\n            const statusParam = params['status'];\r\n            let filter: IFilter | undefined;\r\n            if (!!evaluationStatusParam) {\r\n                const evaluationStatusValues = Core.enumToArray(enmEvaluationStatus);\r\n                const evaluationStatusId = evaluationStatusValues.find(v => v.name.toLowerCase() === evaluationStatusParam)?.id;\r\n                this.metadata.title = 'پرونده های ' + evaluationStatusOptions.find(e => e.value === evaluationStatusId)!.title;\r\n                filter = ComparisonFilter.Equal<IDamageCase>(d => d.EvaluationStatus, evaluationStatusId);\r\n            }\r\n            else if (!!statusParam) {\r\n                const statusValues = Core.enumToArray(enmDamageCaseStatus);\r\n                const statusId = statusValues.find(v => v.name.toLowerCase() === statusParam)?.id;\r\n                this.metadata.title = 'پرونده های جدید یا ارزیابی مجدد';\r\n                filter = ComparisonFilter.Equal<IDamageCase>(d => d.Status, statusId);\r\n            }\r\n            else\r\n                this.metadata.title = \"ارزیابی پرونده خسارت\";\r\n            if (params.id) {\r\n                if (filter)\r\n                    return new AndFilter([new ComparisonFilter(\"RowGuid\", enmConditionalOperators.Equal, params.id), filter]);\r\n                return new ComparisonFilter(\"RowGuid\", enmConditionalOperators.Equal, params.id);\r\n            }\r\n            return filter;\r\n        };\r\n\r\n        this.onFirstDataLoad = () => {\r\n            const { params } = this.context;\r\n            if (params.id && this.state.data) {\r\n                this.fetchItem(this.state.data[0].RowGuid);\r\n            }\r\n        };\r\n\r\n        this.setRecordClassName = record => {\r\n            const lastEvaluation = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1];\r\n            const damageEstimations = lastEvaluation?.Estimations;\r\n            const estimation = damageEstimations && damageEstimations.length > 0 && damageEstimations[damageEstimations.length - 1];\r\n            const waitingForExpert = estimation && estimation.ExpertConfirmation === null;\r\n\r\n            const isNewRecordOrDocumentChecking = record.Status === enmDamageCaseStatus.Evaluation &&\r\n                lastEvaluation?.EvaluatorId === this.initialData?.Center?.Id &&\r\n                (lastEvaluation?.EvaluationStartTime === null\r\n                    || (record.EvaluationStatus !== undefined && ([enmEvaluationStatus.DocumentCheck, enmEvaluationStatus.ContactSetting, enmEvaluationStatus.MakingContact, enmEvaluationStatus.SendEssentials].indexOf(record.EvaluationStatus) > -1))\r\n                    || ((this.initialData?.Center?.Id === 1 || !waitingForExpert) && record.EvaluationStatus === enmEvaluationStatus.DamageEstimation));\r\n\r\n            const waitingForZobdehExpert = this.initialData?.Center?.Id === 1 && (waitingForExpert || record.Status === enmDamageCaseStatus.AssignEvaluator);\r\n            return waitingForZobdehExpert || isNewRecordOrDocumentChecking ? 'new-record' : null;\r\n        };\r\n    }\r\n    onEntityView = (entity: IDamageCase) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/getallevaluationsteps\",\r\n            data: { damageCaseId: entity.Id },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                result.Data.steps = (result.Data.steps as { CreateDateTime: any; }[]).sort((a, b) => a.CreateDateTime > b.CreateDateTime ? 1 : -1) ?? [];\r\n                this.setState({ state: enmEntityManagerState.View, currentEntity: entity, evaluationSteps: result.Data.steps ?? [], attachments: result.Data.attachments ?? [] });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        this.callApi(fetchOpt);\r\n        return false;\r\n    }\r\n    async fetchItem(rowGuid: string, assignEvaluator: boolean = false) {\r\n        let fetchingInfo = {\r\n            Orderings: [] as IOrdering[],\r\n            Paging: { PageNo: 1, PageSize: 1 } as IPaging,\r\n            Filter: ComparisonFilter.Equal<IDamageCase>(e => e.RowGuid, rowGuid) as IFilter,\r\n            LoadNavigations: true\r\n        } as IDamageCaseFetchingInfo;\r\n\r\n        this.onDataFetching?.call(this, fetchingInfo, true);\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.getUrl,\r\n            data: { fetchingInfo },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                let res = result as IFetchingResult<IDamageCase>;\r\n                if (this.onDataFetched)\r\n                    res = this.onDataFetched(res);\r\n                if (!!res.Data)\r\n                    this.handleCommand(res.Data[0], assignEvaluator);\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    handleCommand = (entity: IDamageCase, assignEvaluator: boolean) => {\r\n        let command = enmEvaluationStatus[Number(entity.EvaluationStatus)];\r\n\r\n        this.destroyLookupForms(this.state.displayLookupForm);\r\n\r\n        if (assignEvaluator) {\r\n            this.addLookupForm(\"AllocateEvaluator\",\r\n                <AllocateEvaluator\r\n                    key=\"AllocateEvaluator\"\r\n                    invokePath={this.metadata.title}\r\n                    isChildComponent={true}\r\n                    onClose={this.onLookupClosed}\r\n                    damageCase={entity}\r\n                />);\r\n        }\r\n        else {\r\n            const props: IEvaluationComponentProps = {\r\n                damageCase: entity,\r\n                invokePath: this.metadata.title,\r\n                assignEvaluatorAccess: !!this.initialData?.AccessList['AllocateEvaluator'],\r\n                isChildComponent: true,\r\n                onClose: () => {\r\n                    this.onLookupClosed();\r\n                },\r\n                nextStatus: (damageCase: IDamageCase, forceAssignEvaluator: boolean = false) => {\r\n                    if ([enmEvaluationStatus.Rejected, enmEvaluationStatus.SendEssentials, enmEvaluationStatus.PolicyholderConfirmation].indexOf(damageCase.EvaluationStatus!) < 0)\r\n                        this.fetchItem(damageCase.RowGuid, forceAssignEvaluator);\r\n                    else\r\n                        this.onLookupClosed();\r\n                }\r\n            };\r\n\r\n            const Component = (EvaluationComponents as any)[command];\r\n            this.addLookupForm(command, <Component key={command} {...props} />);\r\n        }\r\n    }\r\n    onAllocateEvaluatorClick = () => {\r\n        if (!this.selectedEntity)\r\n            return;\r\n        this.addLookupForm(\"AllocateEvaluator\",\r\n            <AllocateEvaluator\r\n                key=\"AllocateEvaluator\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                damageCase={this.selectedEntity!}\r\n            />);\r\n    }\r\n    onPickupClick = async () => {\r\n        if (!this.selectedEntity)\r\n            return;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/pickup\",\r\n            data: {\r\n                damageCase: { Id: this.selectedEntity.Id, RowGuid: this.selectedEntity.RowGuid, RowVrsn: this.selectedEntity.RowVrsn }\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('ارزیاب با موفقیت اختصاص داده شد');\r\n                    this.fetchItem(result.Data.RowGuid);\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n    onLookupClosed = () => {\r\n        this.originalFilter = undefined;\r\n        this.metadata.title = \"ارزیابی پرونده خسارت\";\r\n        this.closeLookupForm();\r\n        this.fetchData();\r\n    }\r\n    showDamageCaseSummary = () => {\r\n        if (!this.selectedEntity)\r\n            return;\r\n        this.addLookupForm('DamageCaseSummary',\r\n            <DamageCaseSummary\r\n                damageCaseId={this.selectedEntity.Id}\r\n                onClose={() => this.closeLookupForm()}\r\n                invokePath={this.metadata.title}\r\n                invoker={'damagecaseevaluator'}\r\n            />\r\n        );\r\n    }\r\n    sendDamageCaseToBranch = async () => {\r\n        let damageCase = this.selectedEntity;\r\n        if (!damageCase || !!damageCase.SentToBranch) return;\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/senddamagecasetobranch\",\r\n            data: { damageCaseId: damageCase.Id, rowVrsn: damageCase.RowVrsn },\r\n            onSuccess: res => {\r\n                if (res.ValidationState.Successful && !res.ValidationState.ValidationResults.filter(v => v.Level === enmValidationLevel.Warning).length) {\r\n                    Core.successNotification(\"پرونده خسارت با موفقیت از طریق اتوماسیون اداری برای شعبه ارسال شد.\");\r\n                    this.fetchData();\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    removeDamageCase = async (ticketNo: number) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/RemoveDamageCase\",\r\n            data: { ticketNo },\r\n            onSuccess: async result => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('پرونده خسارت حذف شد');\r\n                    await this.fetchData();\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    receiveEssentials = async () => {\r\n        let damageCase = this.selectedEntity;\r\n        if (!damageCase) return;\r\n\r\n        let title = this.selectedEntity!.DamageTypeId === 1 ? \"دستگاه و لوازم جانبی\" : \"مدارک سرقت\";\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/receiveessentials\",\r\n            data: { damageCaseId: damageCase.Id, rowVrsn: damageCase.RowVrsn },\r\n            onSuccess: res => {\r\n                if (res.ValidationState.Successful) {\r\n                    Core.successNotification(`${title} با موفقیت دریافت شد`);\r\n                    this.fetchData();\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    downloadDamageCaseZipFile = async () => {\r\n        let damageCase = this.selectedEntity;\r\n        if (!damageCase) return;\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/downloaddamagecasezipfile\",\r\n            data: { damageCaseId: damageCase.Id },\r\n            onSuccess: res => {\r\n                if (res.ValidationState.Successful) {\r\n                    const base64Data = (res as IResultSet<string>).Data!;\r\n                    const link = document.createElement(\"a\");\r\n                    link.href = `data:application/zip;base64,${base64Data}`;\r\n                    link.download = `مدارک پرونده خسارت شماره_${damageCase?.Code}.zip`;\r\n                    link.click();\r\n                    link.remove();\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n}","import { IDamageCase } from \"../baseInfo/damageCase/interfaces\";\r\nimport { IEntityManagerProps, IEntityManagerStates } from \"../components/entityManager/interfaces\";\r\nimport { IEntity } from \"../components/infrastructure/models\";\r\n\r\nexport enum enmVoucherStatus {\r\n    Issued = 0,\r\n    Payed = 1\r\n}\r\n\r\nexport enum enmVoucherTypes {\r\n    Payment = 0,\r\n    Receipt = 1\r\n}\r\n\r\nexport interface IDamageCaseVoucher extends IEntity {\r\n    VoucherNo: number;\r\n    IssueDate?: any;\r\n    ChequeDate?: any;\r\n    ChequeNo?: string;\r\n    Status: enmVoucherStatus;\r\n    Type: enmVoucherTypes;\r\n    Items: IDamageCaseVoucherItem[];\r\n}\r\n\r\nexport interface IDamageCaseVoucherItem extends IEntity {\r\n    VoucherId: number;\r\n    Voucher: IDamageCaseVoucher[];\r\n    DamageCaseId: number;\r\n    DamageCase: IDamageCase[];\r\n    PolicyholderFullName: string;\r\n    PolicyholderNationalCode: string;\r\n    ShebaNo?: string;\r\n    Amount: number;\r\n}\r\n\r\nexport interface IDamageCaseVoucherProps extends IEntityManagerProps<IDamageCaseVoucher> {\r\n\r\n}\r\n\r\nexport interface IDamageCaseVoucherStates extends IEntityManagerStates<IDamageCaseVoucher> {\r\n\r\n}\r\n\r\nexport interface IDamageCaseVoucherItemProps extends IEntityManagerProps<IDamageCaseVoucherItem> {\r\n    params: () => { voucher: IDamageCaseVoucher; };\r\n}\r\n\r\nexport interface IDamageCaseVoucherItemStates extends IEntityManagerStates<IDamageCaseVoucherItem> {\r\n\r\n}","import { IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { IEntity, IFetchingInfo, IPaging } from \"../../components/infrastructure/models\";\r\n\r\nexport interface IReportTemplate extends IEntity  {\r\n    Name: string;\r\n    Title: string;\r\n    GroupingColumns?: string;\r\n    DisplayColumns: string;\r\n    ShowCountColumn: boolean;\r\n    DefaultFilter?: string;\r\n}\r\n\r\nexport interface IDamageCaseReportColumn {\r\n    key: string;\r\n    title: string;\r\n    name: string;\r\n    aggregateFunc?: string;\r\n    aggregateTitle?: string;\r\n}\r\n\r\nexport interface IDamageCaseReportProps extends IBaseProps {\r\n    templateId?: number;\r\n}\r\n\r\nexport interface IDamageCaseReportStates extends IBaseStates {\r\n    access: string[];\r\n    defaultGroupingColumns: string[];\r\n    defaultDisplayColumns: string[];\r\n    defaultFilter?: any;\r\n    columns: IDamageCaseReportColumn[];\r\n    groupingColumns: string[];\r\n    displayColumns: string[];\r\n    data?: any;\r\n    totalResultCount: number;\r\n    resultColumns: any[];\r\n    showCountColumn?: boolean;\r\n    currentExecuteData?: IReportExecuteData;\r\n    dblClicked?: boolean;\r\n    detailsFetchingInfo?: IFetchingInfo | null;\r\n    currentTemplate?: IReportTemplate | null;\r\n    templateTitle?: string | null;\r\n    defaultSearchParams: IReportDefaultSearchParam[];\r\n}\r\n\r\nexport const aggregateFunctions: { [key: string]: { value: string; title: string; } } = {\r\n    'Sum': { value: 'SUM({X})', title: 'جمع' },\r\n    'Min': { value: 'MIN({X})', title: 'کوچکترین' },\r\n    'Max': { value: 'MAX({X})', title: 'بزرگترین' },\r\n    'Avg': { value: 'AVG({X})', title: 'میانگین' }\r\n}\r\n\r\nexport interface IDamageCaseReportArgs {\r\n    source: 'excel' | 'search';\r\n    paging?: IPaging | null;\r\n}\r\n\r\nexport interface IReportExecuteData {\r\n    fetchingInfo: IFetchingInfo;\r\n    groupingColumns: string[];\r\n    displayColumns: string[];\r\n}\r\n\r\nexport interface IReportDefaultSearchParam {\r\n    Name: string;\r\n    Title: string;\r\n    Value?: any;\r\n    Source: string;\r\n}\r\n\r\nexport interface IReportTemplateData {\r\n    Template?: IReportTemplate;\r\n    Access: string[];\r\n    DefaultSearchParams: IReportDefaultSearchParam[];\r\n}","import { Button, Checkbox, Form, FormInstance, Input, InputNumber, Radio, RadioChangeEvent, Select, Space, Tooltip } from \"antd\";\r\nimport { PlusOutlined, PlusCircleOutlined, DeleteOutlined } from '@ant-design/icons';\r\nimport React, { ChangeEvent, Component } from \"react\";\r\nimport { Core } from \"../infrastructure/core\";\r\nimport { TrueFilter, AndFilter, ComparisonFilter, enmConditionalOperators, IFilter, IsNullFilter, NotFilter, OrFilter, FalseFilter } from \"../infrastructure/filtering\";\r\nimport { IBaseComponent } from \"../infrastructure/baseComponent\";\r\nimport { CheckboxChangeEvent } from \"antd/lib/checkbox\";\r\nimport { DatePicker as DatePickerJalali } from \"antd-jalali\";\r\nimport locale from 'antd/es/date-picker/locale/fa_IR';\r\nimport { Lookup } from \"../lookup\";\r\nimport { PriceInput } from \"../priceInput\";\r\nimport dayjs from 'dayjs';\r\nimport { enmControlType, enmPropertyType } from \"../entityManager/interfaces\";\r\nimport { IReportDefaultSearchParam } from \"../../report/damageCaseReport/interfaces\";\r\n\r\nconst { Option } = Select;\r\n\r\nconst operators: { [key: number]: { title: string; types: enmPropertyType[]; } } = {\r\n    0: {\r\n        title: \"مساوی با\",\r\n        types: [\r\n            enmPropertyType.boolean,\r\n            enmPropertyType.date,\r\n            enmPropertyType.datetime,\r\n            enmPropertyType.string,\r\n            enmPropertyType.number\r\n        ]\r\n    },\r\n    1: {\r\n        title: \"نا مساوی با\",\r\n        types: [\r\n            enmPropertyType.boolean,\r\n            enmPropertyType.date,\r\n            enmPropertyType.datetime,\r\n            enmPropertyType.string,\r\n            enmPropertyType.number\r\n        ]\r\n    },\r\n    2: {\r\n        title: \"کوچکتر از\",\r\n        types: [\r\n            enmPropertyType.date,\r\n            enmPropertyType.datetime,\r\n            enmPropertyType.string,\r\n            enmPropertyType.number\r\n        ]\r\n    },\r\n    3: {\r\n        title: \"بزرگتر از\",\r\n        types: [\r\n            enmPropertyType.date,\r\n            enmPropertyType.datetime,\r\n            enmPropertyType.string,\r\n            enmPropertyType.number\r\n        ]\r\n    },\r\n    4: {\r\n        title: \"شروع با\", types: [\r\n            enmPropertyType.string\r\n        ]\r\n    },\r\n    5: {\r\n        title: \"خاتمه با\", types: [\r\n            enmPropertyType.string\r\n        ]\r\n    },\r\n    6: {\r\n        title: \"شامل\", types: [\r\n            enmPropertyType.string\r\n        ]\r\n    },\r\n    7: {\r\n        title: \"کوچکتر یا مساوی با\",\r\n        types: [\r\n            enmPropertyType.date,\r\n            enmPropertyType.datetime,\r\n            enmPropertyType.string,\r\n            enmPropertyType.number\r\n        ]\r\n    },\r\n    8: {\r\n        title: \"بزرگتر یا مساوی با\",\r\n        types: [\r\n            enmPropertyType.date,\r\n            enmPropertyType.datetime,\r\n            enmPropertyType.string,\r\n            enmPropertyType.number\r\n        ]\r\n    },\r\n    9: {\r\n        title: \"شامل نباشد\", types: [\r\n            enmPropertyType.string\r\n        ]\r\n    },\r\n    10: {\r\n        title: \"فاقد مقدار\",\r\n        types: [\r\n            enmPropertyType.boolean,\r\n            enmPropertyType.date,\r\n            enmPropertyType.datetime,\r\n            enmPropertyType.string,\r\n            enmPropertyType.number\r\n        ]\r\n    },\r\n    11: {\r\n        title: \"دارای مقدار\",\r\n        types: [\r\n            enmPropertyType.boolean,\r\n            enmPropertyType.date,\r\n            enmPropertyType.datetime,\r\n            enmPropertyType.string,\r\n            enmPropertyType.number\r\n        ]\r\n    },\r\n};\r\n\r\nexport interface IAdvancedSearchColumn {\r\n    title: string;\r\n    name: string;\r\n    controlType?: enmControlType;\r\n    propertyType?: enmPropertyType;\r\n    displayColumn?: string;\r\n    combobox?: {\r\n        options?: { value?: any; title?: string; }[];\r\n        defaultValue?: any;\r\n        mode?: 'multiple' | 'tags';\r\n    };\r\n    lookup?: {\r\n        parent: IBaseComponent;\r\n        lookupComponent: React.ComponentType<any> | string;\r\n        lookupProperty: string;\r\n        lookupDisplayFields: string[];\r\n        preparelookupProps?: (lookupProps: any, form?: FormInstance<any>, isSearchForm?: boolean) => any;\r\n        onLookupOpen?: () => void;\r\n        onLookupClose?: (selectetEntity?: any) => void;\r\n    };\r\n    defaultSearchValue?: string;\r\n}\r\n\r\nexport interface IAdvancedSearchProps {\r\n    columns: IAdvancedSearchColumn[];\r\n    defaultFilter?: any;\r\n    onSubmit: (args: any, filter: IFilter | null | undefined) => void;\r\n    locked?: boolean;\r\n    defaultSearchParams: IReportDefaultSearchParam[];\r\n}\r\n\r\nexport interface IAdvancedSearch {\r\n    submit(args: any): void;\r\n    getFilterStructure(): IFilter | null | undefined;\r\n    setDefaultStructure(): void;\r\n}\r\n\r\ninterface IAdvancedSearchItem {\r\n    getFilter(onlyStructure: boolean, parentLogicalOperator?: 'and' | 'or'): IFilter | null | undefined;\r\n}\r\n\r\nexport class AdvancedSearch extends Component<IAdvancedSearchProps> implements IAdvancedSearch {\r\n    private batchItem?: Batch | null;\r\n    getFilterStructure(): IFilter | null | undefined {\r\n        return this.batchItem?.getFilter(true);\r\n    }\r\n    submit(args: any): void {\r\n        try {\r\n            let filter = this.batchItem?.getFilter();\r\n            this.props.onSubmit(args, filter);\r\n        }\r\n        catch (e: any) {\r\n            if (e.message === 'validation') {\r\n                Core.warningNotification('لطفا پیام های فیلتر را بررسی نمایید');\r\n            }\r\n        }\r\n    }\r\n    setDefaultStructure(): void {\r\n        this.batchItem?.setStructure();\r\n    }\r\n    render() {\r\n        return (\r\n            <Batch\r\n                itemId={Core.newId()}\r\n                isParent\r\n                columns={this.props.columns}\r\n                ref={node => this.batchItem = node}\r\n                defaultFilter={this.props.defaultFilter}\r\n                locked={this.props.locked}\r\n                defaultSearchParams={this.props.defaultSearchParams}\r\n            />\r\n        );\r\n    }\r\n}\r\n\r\ninterface IItemProps {\r\n    itemId: string;\r\n    remove?: (id: string) => void;\r\n    columns: IAdvancedSearchColumn[];\r\n    defaultFilter?: any;\r\n    locked?: boolean;\r\n    defaultSearchParams: IReportDefaultSearchParam[];\r\n}\r\n\r\ninterface IBatchProps extends IItemProps {\r\n    isParent?: boolean;\r\n}\r\n\r\ninterface IItemStates {\r\n    column?: string;\r\n    controlType?: enmControlType;\r\n    propertyType?: enmPropertyType;\r\n    operator?: enmConditionalOperators;\r\n    value?: any;\r\n    defaultValue?: string;\r\n}\r\n\r\ninterface IBatchStates {\r\n    logicalOerator: 'and' | 'or';\r\n    not: boolean;\r\n    items: {\r\n        [key: string]: { node: React.ReactNode; ref?: IAdvancedSearchItem | null; }\r\n    };\r\n}\r\n\r\nclass Batch extends Component<IBatchProps, IBatchStates> implements IAdvancedSearchItem {\r\n    constructor(props: IBatchProps) {\r\n        super(props)\r\n        this.state = {\r\n            not: false,\r\n            logicalOerator: 'and',\r\n            items: {}\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        this.setStructure();\r\n    }\r\n    setStructure() {\r\n        let logicalOpr: \"and\" | \"or\" = \"and\";\r\n        let filter = this.props.defaultFilter?.TypeName === \"NotFilter\" ? (this.props.defaultFilter as NotFilter).Filter : this.props.defaultFilter;\r\n        if (filter?.TypeName === \"OrFilter\") {\r\n            logicalOpr = \"or\";\r\n        }\r\n        this.setState({\r\n            not: this.props.defaultFilter && this.props.defaultFilter?.TypeName === \"NotFilter\" ? true : false,\r\n            logicalOerator: logicalOpr,\r\n            items: {},\r\n        });\r\n        this.forceUpdate(() => {\r\n            if (filter?.TypeName === \"OrFilter\" || filter?.TypeName === \"AndFilter\") {\r\n                this.setFilter(filter);\r\n            }\r\n        });\r\n    }\r\n    setFilter(filter: { Collection: { TypeName: \"NotFilter\" | \"AndFilter\" | \"OrFilter\" | \"ComparisonFilter\" }[], TypeName: \"NotFilter\" | \"AndFilter\" | \"OrFilter\" }) {\r\n        filter.Collection.forEach(f => {\r\n            if (f.TypeName === \"OrFilter\" || f.TypeName === \"AndFilter\" || f.TypeName === \"NotFilter\") {\r\n                this.addBatch(f as any);\r\n            }\r\n            else if (f.TypeName === \"ComparisonFilter\") {\r\n                this.addItem(f as any);\r\n            }\r\n        });\r\n    }\r\n    getFilter(onlyStructure: boolean = false): IFilter | null | undefined {\r\n        let filters: IFilter[] = [];\r\n        let filter: IFilter | null = null;\r\n        let isValid = true;\r\n        let hasItem = false;\r\n        for (let key in this.state.items) {\r\n            hasItem = true;\r\n            let search = this.state.items[key].ref;\r\n            let subFilter = search?.getFilter(onlyStructure, this.state.logicalOerator);\r\n            if (subFilter)\r\n                filters.push(subFilter);\r\n            else if (subFilter === null)\r\n                isValid = false;\r\n        }\r\n        if (filters.length) {\r\n            if (this.state.logicalOerator === \"and\")\r\n                filter = new AndFilter(filters);\r\n            else\r\n                filter = new OrFilter(filters);\r\n            if (this.state.not) {\r\n                filter = new NotFilter(filter);\r\n            }\r\n        }\r\n\r\n        if (!hasItem && !this.props.isParent) {\r\n            this.remove();\r\n            return undefined;\r\n        }\r\n\r\n        if (!onlyStructure && !isValid)\r\n            throw new Error('validation');\r\n\r\n        return filter;\r\n    }\r\n    remove = () => {\r\n        this.props.remove?.call(this, this.props.itemId);\r\n    }\r\n    addItem = (defaultFilter?: { TypeName: \"ComparisonFilter\" }) => {\r\n        const id = Core.newId();\r\n        let items = this.state.items;\r\n        items[id] = {\r\n            node: <Item\r\n                key={id}\r\n                itemId={id}\r\n                remove={this.removeItem}\r\n                columns={this.props.columns}\r\n                ref={node => {\r\n                    if (items[id])\r\n                        items[id].ref = node;\r\n                }}\r\n                defaultFilter={defaultFilter}\r\n                locked={this.props.locked}\r\n                defaultSearchParams={this.props.defaultSearchParams}\r\n            />\r\n        };\r\n        this.setState({ items });\r\n    }\r\n    addBatch = (defaultFilter?: { TypeName: \"AndFilter\" | \"OrFilter\" | \"NotFilter\" }) => {\r\n        const id = Core.newId();\r\n        let items = this.state.items;\r\n        items[id] = {\r\n            node: <Batch\r\n                key={id}\r\n                itemId={id}\r\n                remove={this.removeItem}\r\n                columns={this.props.columns}\r\n                ref={node => {\r\n                    if (items[id])\r\n                        items[id].ref = node;\r\n                }}\r\n                defaultFilter={defaultFilter}\r\n                locked={this.props.locked}\r\n                defaultSearchParams={this.props.defaultSearchParams}\r\n            />\r\n        };\r\n        this.setState({ items });\r\n    }\r\n    removeItem = (id: string) => {\r\n        let items = this.state.items;\r\n        delete items[id];\r\n        this.setState({ items });\r\n    }\r\n    getItems = () => {\r\n        let items: React.ReactNode[] = [];\r\n        for (let item in this.state.items)\r\n            items.push(this.state.items[item].node);\r\n        return items;\r\n    }\r\n    logicalOperatorChanged = (e: RadioChangeEvent) => {\r\n        this.setState({ logicalOerator: e.target.value });\r\n    }\r\n    notChanged = () => {\r\n        this.setState({ not: !this.state.not });\r\n    }\r\n    render() {\r\n        const extraStyles = this.props.locked ? { display: 'none' } : {};\r\n\r\n        return (\r\n            <div style={this.props.isParent ? { padding: 10, background: \"rgb(137 167 235 / 20%)\" } : { margin: 10, padding: 10, border: \"1px solid #dbdbdb\", background: \"rgb(137 167 235 / 20%)\" }}>\r\n                <div style={{ display: \"block\" }} >\r\n                    <Space style={{ background: \"inherit\", padding: 2 }}>\r\n                        <Radio.Group disabled={!!this.props.locked} value={this.state.not} buttonStyle=\"solid\" style={{ marginLeft: 10 }} size={\"small\"}>\r\n                            <Radio.Button style={{ borderRadius: 2 }} onClick={this.notChanged} value={true}>NOT</Radio.Button>\r\n                        </Radio.Group>\r\n                        <Radio.Group disabled={!!this.props.locked} onChange={this.logicalOperatorChanged} value={this.state.logicalOerator}>\r\n                            <Radio value={'and'}>و</Radio>\r\n                            <Radio value={'or'}>یا</Radio>\r\n                        </Radio.Group>\r\n                    </Space>\r\n                    <Space style={{ float: \"left\", direction: \"ltr\" }}>\r\n                        {!this.props.isParent && <Tooltip title=\"حذف گروه\"><Button onClick={this.remove} icon={<DeleteOutlined />} /></Tooltip>}\r\n                        <Tooltip title=\"شرط جدید\">\r\n                            <Button style={extraStyles} onClick={() => this.addItem()} icon={<PlusOutlined style={{ verticalAlign: \"middle\" }} />}>شرط</Button>\r\n                        </Tooltip>\r\n                        <Tooltip title=\"گروه شرط جدید\">\r\n                            <Button style={extraStyles} onClick={() => this.addBatch()} icon={<PlusCircleOutlined style={{ verticalAlign: \"middle\" }} />}>گروه شرط</Button>\r\n                        </Tooltip>\r\n                    </Space>\r\n\r\n                </div>\r\n                <div style={{ display: \"block\", marginTop: 10, minHeight: 50, border: \"1px dashed #dbdbdb\", background: \"azure\", width: \"100%\" }}>\r\n                    {this.getItems()}\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nclass Item extends Component<IItemProps, IItemStates> implements IAdvancedSearchItem {\r\n    _form?: FormInstance<any> | null;\r\n    constructor(props: IItemProps) {\r\n        super(props)\r\n        if (this.props.defaultFilter?.TypeName === \"ComparisonFilter\") {\r\n            const comparisonFilter = this.props.defaultFilter;\r\n            const currentColumn = this.props.columns.find(c => c.name === comparisonFilter.Property);\r\n            this.state = {\r\n                column: comparisonFilter.Property,\r\n                value: this.props.defaultSearchParams.find(p => p.Name === comparisonFilter.Value)?.Value ?? comparisonFilter.Value,\r\n                operator: comparisonFilter.Operator.toString() as any,\r\n                controlType: currentColumn?.controlType,\r\n                propertyType: currentColumn?.propertyType,\r\n                defaultValue: comparisonFilter.Value\r\n            };\r\n        }\r\n        else {\r\n            this.state = {};\r\n        }\r\n    }\r\n    getFilter(onlyStructure: boolean = false, parentLogicalOperator?: 'and' | 'or'): IFilter | null | undefined {\r\n        if (!this.state.column || !this.state.operator) {\r\n            if (this._form) {\r\n                this._form.submit();\r\n            }\r\n            return null;\r\n        }\r\n        if (!onlyStructure) {\r\n            let val = this.state.value\r\n            let originalCol = this.props.columns.find(c => c.name === this.state.column);\r\n            if (originalCol?.controlType === enmControlType.lookup) {\r\n                val = this.state.value && this.state.value[\"Id\"];\r\n            }\r\n\r\n            if (Number(this.state.operator) === enmConditionalOperators.NullOrEmpty)\r\n                return new IsNullFilter(this.state.column);\r\n            if (Number(this.state.operator) === enmConditionalOperators.NotNullOrEmpty)\r\n                return new NotFilter(new IsNullFilter(this.state.column));\r\n            if (val === undefined || val === null || val === '') {\r\n                if (parentLogicalOperator === 'and')\r\n                    return new TrueFilter();\r\n                else\r\n                    return new FalseFilter();\r\n            }\r\n            return new ComparisonFilter(this.state.column, this.state.operator, val);\r\n        }\r\n        else\r\n            return new ComparisonFilter(this.state.column, this.state.operator, this.state.defaultValue ?? this.state.value);\r\n    }\r\n    remove = () => {\r\n        this.props.remove?.call(this, this.props.itemId);\r\n    }\r\n    onColumnChanged = (colName: string) => {\r\n        const currentColumn = this.props.columns.find(c => c.name === colName);\r\n        let firstOperator = undefined;\r\n        if (currentColumn)\r\n            firstOperator = enmConditionalOperators.Equal.toString() as any;\r\n        this.setState({\r\n            column: colName,\r\n            controlType: currentColumn?.controlType,\r\n            propertyType: currentColumn?.propertyType,\r\n            value: undefined,\r\n            operator: firstOperator,\r\n            defaultValue: undefined\r\n        });\r\n    }\r\n    onOperatorChanged = (value: number) => {\r\n        this.setState({ operator: value as enmConditionalOperators });\r\n    }\r\n    onInputValueChanged = (e: ChangeEvent<HTMLInputElement>) => {\r\n        this.setState({ value: e.target.value });\r\n    }\r\n    onDefaultValueChanged = (value: string) => {\r\n        let currentParam = this.props.defaultSearchParams.find(p => p.Name === value);\r\n        let currentValue = currentParam?.Value;\r\n        if (value === \"{{CurrentDate}}\") {\r\n            if (currentValue && !dayjs.isDayjs(currentValue))\r\n                currentValue = dayjs(currentValue).calendar('jalali');\r\n        }\r\n        this.setState({ defaultValue: value, value: currentValue });\r\n        this._form?.setFields([{ name: this.state.column!, value: currentValue }]);\r\n    }\r\n    onCheckboxValueChanged = (e: CheckboxChangeEvent) => {\r\n        this.setState({ value: e.target.checked });\r\n    }\r\n    onValueChanged = (value: any) => {\r\n        this.setState({ value });\r\n    }\r\n    render() {\r\n        const currentColumn = this.props.columns.find(c => c.name === this.state.column);\r\n        const operatorsList: { name: string; title: string; }[] = [];\r\n        for (let key in operators)\r\n            if (operators[key].types.indexOf(this.state.propertyType ?? enmPropertyType.string) > -1)\r\n                operatorsList.push({ name: key, title: operators[key].title });\r\n\r\n        let inputComponent: React.ReactNode;\r\n        let extraParams = {};\r\n\r\n        if (currentColumn) {\r\n            switch (this.state.controlType) {\r\n                case enmControlType.combobox:\r\n                    inputComponent = (\r\n                        <Select\r\n                            style={{ width: 'auto', minWidth: 200 }}\r\n                            onChange={this.onValueChanged}\r\n                            key={this.state.column}\r\n                            disabled={!!this.props.locked && this.state.defaultValue !== undefined}\r\n                        >\r\n                            {currentColumn?.combobox?.options && currentColumn.combobox.options.map(o => <Option key={o.value} value={o.value}>{o.title}</Option>)}\r\n                        </Select>\r\n                    );\r\n                    extraParams = { initialValue: this.state.value };\r\n                    break;\r\n                case enmControlType.lookup:\r\n                    inputComponent = (\r\n                        <Lookup\r\n                            onChange={this.onValueChanged}\r\n                            isLookupMode={true}\r\n                            property={{\r\n                                title: currentColumn.title, dataIndex: currentColumn.name, allowNull: true, lookup: currentColumn.lookup\r\n                            }}\r\n                            parent={currentColumn.lookup!.parent}\r\n                            key={this.state.column}\r\n                            value={this.state.value}\r\n                            disabled={!!this.props.locked && this.state.defaultValue !== undefined}\r\n\r\n                        />);\r\n                    extraParams = { initialValue: this.state.value };\r\n                    break;\r\n                case enmControlType.date:\r\n                    inputComponent = (\r\n                        <DatePickerJalali\r\n                            key={this.state.column}\r\n                            onChange={(e: any) => {\r\n                                if (e) {\r\n                                    let parsedDate = e.toDate();\r\n                                    parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                    this.onValueChanged(parsedDate.toLocaleDateString());\r\n                                }\r\n                                else {\r\n                                    this.onValueChanged(undefined);\r\n                                }\r\n                            }}\r\n                            locale={locale}\r\n                            format=\"YYYY/MM/DD\"\r\n                            style={{ width: '100%', minWidth: 100, display: 'block' }}\r\n                            inputReadOnly={true}\r\n                            disabled={!!this.props.locked && this.state.defaultValue !== undefined}\r\n                        />);\r\n                    let currentDate = this.state.value;\r\n                    if (currentDate && !dayjs.isDayjs(currentDate))\r\n                        currentDate = dayjs(currentDate).calendar('jalali');\r\n                    extraParams = { initialValue: currentDate };\r\n                    break;\r\n                case enmControlType.datetime:\r\n                    inputComponent = (\r\n                        <DatePickerJalali\r\n                            key={this.state.column}\r\n                            onChange={(e: any) => {\r\n                                if (e) {\r\n                                    let parsedDate = e.toDate();\r\n                                    parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n                                    this.onValueChanged(parsedDate);\r\n                                }\r\n                                else\r\n                                    this.onValueChanged(undefined);\r\n                            }}\r\n                            locale={locale}\r\n                            format=\"YYYY/MM/DD HH:mm\"\r\n                            style={{ width: '100%', minWidth: 100, display: 'block' }}\r\n                            showTime={true}\r\n                            disabled={!!this.props.locked && this.state.defaultValue !== undefined}\r\n                            inputReadOnly={true}\r\n                        />);\r\n                    let currentDatetime = this.state.value;\r\n                    if (currentDatetime && !dayjs.isDayjs(currentDatetime))\r\n                        currentDatetime = dayjs(currentDatetime).calendar('jalali');\r\n                    extraParams = { initialValue: currentDatetime };\r\n                    break;\r\n                case enmControlType.checkbox:\r\n                    inputComponent = (\r\n                        <Checkbox\r\n                            onChange={this.onCheckboxValueChanged}\r\n                            key={this.state.column}\r\n                            disabled={!!this.props.locked && this.state.defaultValue !== undefined}\r\n                        />)\r\n                    extraParams = { checked: this.state.value, valuePropName: \"checked\" };\r\n                    break;\r\n                case enmControlType.numberinput:\r\n                    inputComponent = (\r\n                        <InputNumber\r\n                            onChange={this.onValueChanged}\r\n                            placeholder={currentColumn.title}\r\n                            style={{ width: '100%', display: 'block' }}\r\n                            type={\"number\"}\r\n                            key={this.state.column}\r\n                            disabled={!!this.props.locked && this.state.defaultValue !== undefined}\r\n                        />);\r\n                    extraParams = { initialValue: this.state.value };\r\n                    break;\r\n                case enmControlType.priceinput:\r\n                    inputComponent = (\r\n                        <PriceInput\r\n                            onChange={this.onValueChanged}\r\n                            placeholder={currentColumn.title}\r\n                            style={{ width: '100%' }}\r\n                            key={this.state.column}\r\n                            value={this.state.value}\r\n                            disabled={!!this.props.locked && this.state.defaultValue !== undefined}\r\n                        />);\r\n                    extraParams = { initialValue: this.state.value };\r\n                    break;\r\n                case enmControlType.textbox:\r\n                default:\r\n                    inputComponent = <Input\r\n                        key={this.state.column}\r\n                        onChange={this.onInputValueChanged}\r\n                        disabled={!!this.props.locked && this.state.defaultValue !== undefined}\r\n                    />;\r\n                    extraParams = { initialValue: this.state.value };\r\n                    break;\r\n            }\r\n        }\r\n        const controlType = enmControlType[this.state.controlType as number];\r\n        const lookupComponent = currentColumn?.lookup?.lookupComponent;\r\n        const componentName = lookupComponent ? (lookupComponent instanceof String ? lookupComponent : (lookupComponent as any).name) : undefined;\r\n        const defaultSearchParams = this.props.defaultSearchParams.filter(p => p.Source.split('|')[0] === controlType\r\n            &&\r\n            (\r\n                (p.Source.split('|')[0] === \"date\")\r\n                ||\r\n                (p.Source.split('|')[0] === \"lookup\" && p.Source.split('|')[1] === componentName)\r\n            )\r\n        );\r\n\r\n        const showValueComponent = enmConditionalOperators.NullOrEmpty !== Number(this.state.operator) && enmConditionalOperators.NotNullOrEmpty !== Number(this.state.operator);\r\n\r\n        return (\r\n            <div style={{ padding: 10 }}>\r\n                <Form ref={node => this._form = node}>\r\n                    <Space align=\"start\">\r\n                        {\r\n                            !!this.props.locked\r\n                                ?\r\n                                <></>\r\n                                :\r\n                                <Form.Item style={{ margin: 0, padding: 0 }}>\r\n                                    <Tooltip title=\"حذف شرط\"><Button onClick={this.remove} icon={<DeleteOutlined />} /></Tooltip>\r\n                                </Form.Item>\r\n                        }\r\n\r\n                        <Form.Item initialValue={this.state.column} name={this.state.column + \"_col\"} rules={[{ required: true, message: 'انتخاب ستون اجباری است' }]} style={{ margin: 0, padding: 0 }}>\r\n                            <Select disabled={!!this.props.locked} key={this.state.column + \"_col\"} style={{ width: 'auto', minWidth: 200 }} onChange={this.onColumnChanged} >\r\n                                {this.props.columns.map(c => <Option key={c.name} value={c.name} >{c.title}</Option>)}\r\n                            </Select>\r\n                        </Form.Item>\r\n                        <Form.Item initialValue={this.state.operator as number} name={this.state.column + \"_opr\"} rules={[{ required: true, message: 'انتخاب عملگر اجباری است' }]} style={{ margin: 0, padding: 0 }}>\r\n                            <Select disabled={!!this.props.locked} key={this.state.column + \"_opr\"} style={{ width: 'auto', minWidth: 120, verticalAlign: \"top\" }} onChange={this.onOperatorChanged}>\r\n                                {operatorsList.map(c => <Option key={c.name} value={c.name} >{c.title}</Option>)}\r\n                            </Select>\r\n                        </Form.Item>\r\n                        {\r\n                            showValueComponent &&\r\n                            <Form.Item name={this.state.column}\r\n                                //rules={[{ required: true, message: 'ورود فیلتر اجباری است' }]}\r\n                                {...extraParams}\r\n                                style={{ margin: 0, padding: 0, minWidth: 300 }}\r\n                            >\r\n                                {inputComponent}\r\n                            </Form.Item>\r\n                        }\r\n                        {\r\n                            inputComponent && !this.props.locked && defaultSearchParams.length\r\n                                ?\r\n                                <Form.Item initialValue={this.state.defaultValue} name={this.state.column + \"_defaultvalue\"} style={{ margin: 0, padding: 0 }} >\r\n                                    <Select allowClear disabled={!!this.props.locked} key={this.state.column + \"_defaultvalue\"} style={{ width: 'auto', minWidth: 120, verticalAlign: \"top\" }} placeholder=\"مقدار پیشفرض\" onChange={this.onDefaultValueChanged} >\r\n                                        {defaultSearchParams.map(c => <Option key={c.Name} value={c.Name} >{c.Title}</Option>)}\r\n                                    </Select>\r\n                                </Form.Item>\r\n                                :\r\n                                <></>\r\n                        }\r\n                    </Space>\r\n                </Form>\r\n            </div>\r\n        );\r\n    }\r\n}","import { Button, Checkbox, Input, Popconfirm, Row, Select, Space, Table, Tabs } from \"antd\";\r\nimport { SettingOutlined, FilterOutlined, SearchOutlined, FileExcelOutlined, SaveOutlined, DeleteOutlined } from '@ant-design/icons';\r\nimport { BaseComponent } from \"../../components/infrastructure/baseComponent\";\r\nimport { aggregateFunctions, IDamageCaseReportArgs, IDamageCaseReportColumn, IDamageCaseReportProps, IDamageCaseReportStates, IReportExecuteData, IReportTemplate, IReportTemplateData } from \"./interfaces\";\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\nimport { AdvancedSearch, IAdvancedSearch } from \"../../components/advancedSearch\";\r\nimport { Brand, Center, DamageType, EquipmentModel, Policyholder, Province, User } from \"../../home/components\";\r\nimport { damageCaseStatusOptions, evaluationMethodsOptions, evaluationStatusOptions } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { personalityTypesOptions } from \"../../baseInfo/center/interfaces\";\r\nimport { documentCheckStatesOptions } from \"../../evaluation/damageCaseEvaluator/documentCheck\";\r\nimport { contactStatusOptions } from \"../../evaluation/damageCaseEvaluator/makingContact\";\r\nimport { policyholderResponseTypesOptions } from \"../../evaluation/damageCaseEvaluator/policyholderConfirmation\";\r\nimport { City } from \"../../baseInfo/city\";\r\nimport { IReportColumn } from \"../interfaces\";\r\nimport { AndFilter, ComparisonFilter, enmConditionalOperators, IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState, enmOrderingType, ICallOptions, IFetchingInfo, IFetchingResult, IOrdering, IPaging, IResult, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { ResizableTitle } from \"../../components/entityManager/resizabletitle\";\r\nimport dayjs from 'dayjs';\r\nimport { CheckboxChangeEvent } from \"antd/lib/checkbox\";\r\nimport { Excel } from \"antd-table-saveas-excel\";\r\nimport { enmControlType, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport { EquipmentItem } from \"../../baseInfo/equipment/equipmentItem\";\r\nimport React from \"react\";\r\nimport { ColumnType } from \"antd/lib/table\";\r\n\r\nconst { TabPane } = Tabs;\r\nconst { Option } = Select;\r\n\r\nexport class DamageCaseReport extends BaseComponent<IDamageCaseReportProps, IDamageCaseReportStates>{\r\n    private _advancedSearch?: IAdvancedSearch | null;\r\n    private _gridContainer?: HTMLElement | null;\r\n    title: string = 'گزارش خسارت';\r\n    paging?: IPaging;\r\n    ordering?: IOrdering;\r\n    currentRecord?: any;\r\n    reportColumns: IReportColumn[];\r\n    displayColumnsData: IDamageCaseReportColumn[];\r\n    aggregateTitles: { value?: string; title: string; }[];\r\n    dragColumn?: string;\r\n    constructor(props: IDamageCaseReportProps) {\r\n        super(props)\r\n        this.paging = this.paging ?? { PageNo: 1, PageSize: 10 };\r\n        this.reportColumns = this.getReportColumns();\r\n        this.displayColumnsData = this.reportColumns.map(f => { return { key: f.displayColumn ?? f.name, name: f.name, title: f.title, orderNo: 1000 }; });\r\n        const defaultDisplayColumns = this.reportColumns.filter(c => c.isDefaultDisplay === true).map(c => c.displayColumn ?? c.name);\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: 2,\r\n            defaultGroupingColumns: [],\r\n            defaultDisplayColumns: defaultDisplayColumns,\r\n            columns: [],\r\n            groupingColumns: [],\r\n            displayColumns: defaultDisplayColumns,\r\n            resultColumns: [],\r\n            totalResultCount: 0,\r\n            access: [],\r\n            defaultSearchParams: []\r\n        };\r\n\r\n        this.aggregateTitles = [{ title: \"...\", value: undefined }];\r\n        for (let key in aggregateFunctions) {\r\n            this.aggregateTitles.push({ value: aggregateFunctions[key].value, title: aggregateFunctions[key].title });\r\n        }\r\n    }\r\n    getReportColumns(): IReportColumn[] {\r\n        return [\r\n            {\r\n                name: \"DamageCaseTicketNo\",\r\n                title: \"شماره تیکت\",\r\n                propertyType: enmPropertyType.number,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"DamageCaseCode\",\r\n                title: \"شماره پرونده خسارت\",\r\n                propertyType: enmPropertyType.number,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"DamageCaseEmergencyCallNumber\",\r\n                title: \"شماره تماس اضطراری\"\r\n            },\r\n            {\r\n                name: \"DamageCaseReason\",\r\n                title: \"دلیل خسارت\",\r\n                propertyType: enmPropertyType.string,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"DamageCaseTypeId\",\r\n                title: \"نوع خسارت\",\r\n                displayColumn: \"DamageCaseTypeName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: DamageType,\r\n                    lookupProperty: \"DamageCaseType\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"DamageCaseConfirmPossessionTransition\",\r\n                title: \"تایید انتقال مالکیت؟\",\r\n                controlType: enmControlType.checkbox,\r\n                propertyType: enmPropertyType.boolean\r\n            },\r\n            {\r\n                name: \"DamageCaseDate\",\r\n                title: \"تاریخ خسارت\",\r\n                controlType: enmControlType.date,\r\n                propertyType: enmPropertyType.date,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"DamageCaseProvinceId\",\r\n                title: \"استان محل حضور دستگاه\",\r\n                displayColumn: \"DamageCaseProvinceName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: Province,\r\n                    lookupProperty: \"DamageCaseProvince\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"DamageCaseCityId\",\r\n                title: \"شهر محل حضور دستگاه\",\r\n                displayColumn: \"DamageCaseCityName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: City,\r\n                    lookupProperty: \"DamageCaseCity\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"DamageCaseAddress\",\r\n                title: \"آدرس محل حضور دستگاه\"\r\n            },\r\n            {\r\n                name: \"DamageCaseDamageProvinceId\",\r\n                title: \"استان محل خسارت\",\r\n                displayColumn: \"DamageCaseDamageProvinceName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: Province,\r\n                    lookupProperty: \"DamageCaseDamageProvince\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"DamageCaseDamageCityId\",\r\n                title: \"شهر محل خسارت\",\r\n                displayColumn: \"DamageCaseDamageCityName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: City,\r\n                    lookupProperty: \"DamageCaseDamageCity\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"DamageCaseDamageAddress\",\r\n                title: \"آدرس محل خسارت\"\r\n            },\r\n            {\r\n                name: \"DamageCaseStatus\",\r\n                title: \"وضعیت پرونده\",\r\n                controlType: enmControlType.combobox,\r\n                propertyType: enmPropertyType.number,\r\n                combobox: {\r\n                    options: damageCaseStatusOptions\r\n                },\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"DamageCaseEvaluationStatus\",\r\n                title: \"وضعیت ارزیابی\",\r\n                controlType: enmControlType.combobox,\r\n                propertyType: enmPropertyType.number,\r\n                combobox: {\r\n                    options: evaluationStatusOptions\r\n                },\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"DamageCaseCreateDateTime\",\r\n                title: \"تاریخ و زمان ایجاد پرونده خسارت\",\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            },\r\n            {\r\n                name: \"DamageCaseCreatorId\",\r\n                title: \"کاربر ایجادکننده خسارت\",\r\n                displayColumn: \"DamageCaseCreatorFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: User,\r\n                    lookupProperty: \"DamageCaseCreator\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"EquipmentId\",\r\n                title: \"تجهیز\",\r\n                displayColumn: \"EquipmentName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: EquipmentItem,\r\n                    lookupProperty: \"EquipmentItem\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"BrandId\",\r\n                title: \"برند\",\r\n                displayColumn: \"BrandName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: Brand,\r\n                    lookupProperty: \"Brand\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"EquipmentModelId\",\r\n                title: \"مدل تجهیز\",\r\n                displayColumn: \"EquipmentModelName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: EquipmentModel,\r\n                    lookupProperty: \"EquipmentModel\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"EquipmentSerialNo\",\r\n                title: \"سریال مدل تجهیز(IMEI)\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"PlolicySerialNo\",\r\n                title: \"سریال بیمه نامه\",\r\n                propertyType: enmPropertyType.string,\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"PolicyPlanName\",\r\n                title: \"نام طرح\",\r\n                propertyType: enmPropertyType.string,\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"PolicyStartDateTime\",\r\n                title: \"تاریخ شروع بیمه نامه\",\r\n                controlType: enmControlType.date,\r\n                propertyType: enmPropertyType.date\r\n            },\r\n            {\r\n                name: \"PolicyEndDateTime\",\r\n                title: \"تاریخ شروع بیمه نامه\",\r\n                controlType: enmControlType.date,\r\n                propertyType: enmPropertyType.date\r\n            },\r\n            {\r\n                name: \"PolicyInsuredValue\",\r\n                title: \"سرمایه بیمه نامه\",\r\n                propertyType: enmPropertyType.number\r\n            },\r\n            {\r\n                name: \"PolicyholderNationalCode\",\r\n                title: \"کد ملی بیمه گزار/مشتری\",\r\n                propertyType: enmPropertyType.string,\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"PolicyholderId\",\r\n                title: \"نام بیمه گزار/مشتری\",\r\n                displayColumn: \"PolicyholderFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: Policyholder,\r\n                    lookupProperty: \"Policyholder\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"PolicyholderPersonality\",\r\n                title: \"نوع بیمه گزار/مشتری\",\r\n                controlType: enmControlType.combobox,\r\n                propertyType: enmPropertyType.number,\r\n                combobox: {\r\n                    options: personalityTypesOptions\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"PolicyholderPhone\",\r\n                title: \"شماره تماس بیمه گزار/مشتری\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"PolicyholderPostalCode\",\r\n                title: \"کد پستی بیمه گزار/مشتری\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"PolicyholderProvinceId\",\r\n                title: \"استان بیمه گزار/مشتری\",\r\n                displayColumn: \"PolicyholderProvinceName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: Province,\r\n                    lookupProperty: \"Province\",\r\n                    lookupDisplayFields: [\"Name\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"PolicyholderCityId\",\r\n                title: \"شهر بیمه گزار/مشتری\",\r\n                displayColumn: \"PolicyholderCityName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: City,\r\n                    lookupProperty: \"City\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"PolicyholderAddress\",\r\n                title: \"آدرس بیمه گزار/مشتری\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"PolicyholderBirthDate\",\r\n                title: \"تاریخ تولد بیمه گزار/مشتری\",\r\n                controlType: enmControlType.date,\r\n                propertyType: enmPropertyType.date,\r\n            },\r\n            {\r\n                name: \"PolicyholderFatherName\",\r\n                title: \"نام پدر بیمه گزار/مشتری\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"AllocationDateTime\",\r\n                title: \"تاریخ و زمان تخصیص ارزیاب\",\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            },\r\n            {\r\n                name: \"AllocatorId\",\r\n                title: \"تخصیص دهنده ارزیاب\",\r\n                displayColumn: \"AllocatorFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: User,\r\n                    lookupProperty: \"Allocator\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"EvaluatorId\",\r\n                title: \"ارزیاب\",\r\n                displayColumn: \"EvaluatorFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: Center,\r\n                    lookupProperty: \"Evaluator\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"DocumentCheckDateTime\",\r\n                title: \"تاریخ و زمان بررسی مدارک\",\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            },\r\n            {\r\n                name: \"DocumentCheckCreatorId\",\r\n                title: \"کاربر بررسی کننده مدارک\",\r\n                displayColumn: \"DocumentCheckCreatorFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: User,\r\n                    lookupProperty: \"DocumentCheckCreator\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"DocumentCheckDescription\",\r\n                title: \"توضیحات بررسی کننده مدارک\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"DocumentCheckState\",\r\n                title: \"نتیجه بررسی مدارک\",\r\n                controlType: enmControlType.combobox,\r\n                propertyType: enmPropertyType.number,\r\n                combobox: {\r\n                    options: documentCheckStatesOptions\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"ContactSettingDateTime\",\r\n                title: \"تاریخ و زمان تنظیم تماس\",\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            },\r\n            {\r\n                name: \"ContactSettingCreatorId\",\r\n                title: \"کاربر تنظیم کننده تماس\",\r\n                displayColumn: \"ContactSettingCreatorFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: User,\r\n                    lookupProperty: \"ContactSettingCreator\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"ContactSettingDescription\",\r\n                title: \"توضیحات تنظیم کننده تماس\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"ContactSettingContactDate\",\r\n                title: \"تاریخ و زمان برقراری ارزیابی\",\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            },\r\n            {\r\n                name: \"ContactSettingConferenceUrl\",\r\n                title: \"آدرس تماس تصویری\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"EvaluationMethod\",\r\n                title: \"روش تماس ارزیابی\",\r\n                controlType: enmControlType.combobox,\r\n                propertyType: enmPropertyType.number,\r\n                combobox: {\r\n                    options: evaluationMethodsOptions\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"MakingContactDateTime\",\r\n                title: \"تاریخ و زمان ثبت برقراری تماس\",\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            },\r\n            {\r\n                name: \"MakingContactCreatorId\",\r\n                title: \"کاربر برقرار کننده تماس\",\r\n                displayColumn: \"MakingContactCreatorFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: User,\r\n                    lookupProperty: \"MakingContactCreator\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"MakingContactStatus\",\r\n                title: \"نتیجه برقراری تماس\",\r\n                controlType: enmControlType.combobox,\r\n                propertyType: enmPropertyType.number,\r\n                combobox: {\r\n                    options: contactStatusOptions\r\n                }\r\n            },\r\n            {\r\n                name: \"MakingContactDescription\",\r\n                title: \"توضیحات برقرار کننده تماس\"\r\n            },\r\n            {\r\n                name: \"DamageEstimationDateTime\",\r\n                title: \"تاریخ و زمان ثبت برآورد خسارت\",\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            },\r\n            {\r\n                name: \"DamageEstimationCreatorId\",\r\n                title: \"کاربر برآورد خسارت\",\r\n                displayColumn: \"DamageEstimationCreatorFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: User,\r\n                    lookupProperty: \"DamageEstimationCreator\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"DamageEstimationEquipmentPrice\",\r\n                title: \"قیمت روز دستگاه\",\r\n                controlType: enmControlType.priceinput,\r\n                propertyType: enmPropertyType.number\r\n            },\r\n            {\r\n                name: \"DamageEstimationFranchise1Description\",\r\n                title: \"توضیحات فرانشیز اول\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"DamageEstimationFranchise1EstimatedAmount\",\r\n                title: \"مبلغ برآورد شده فرانشیز اول\",\r\n                controlType: enmControlType.priceinput,\r\n                propertyType: enmPropertyType.number\r\n            },\r\n            {\r\n                name: \"DamageEstimationFranchise1Amount\",\r\n                title: \"مبلغ فرانشیز اول\",\r\n                controlType: enmControlType.priceinput,\r\n                propertyType: enmPropertyType.number\r\n            },\r\n            {\r\n                name: \"DamageEstimationFranchise2Description\",\r\n                title: \"توضیحات فرانشیز دوم\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"DamageEstimationFranchise2EstimatedAmount\",\r\n                title: \"مبلغ برآورد شده فرانشیز دوم\",\r\n                controlType: enmControlType.priceinput,\r\n                propertyType: enmPropertyType.number\r\n            },\r\n            {\r\n                name: \"DamageEstimationFranchise2Amount\",\r\n                title: \"مبلغ فرانشیز دوم\",\r\n                controlType: enmControlType.priceinput,\r\n                propertyType: enmPropertyType.number\r\n            },\r\n            {\r\n                name: \"DamageEstimationPayableAmount\",\r\n                title: \"مبلغ قابل پرداخت\",\r\n                controlType: enmControlType.priceinput,\r\n                propertyType: enmPropertyType.number,\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"PolicyholderConfirmationDateTime\",\r\n                title: \"تاریخ و زمان ثبت پاسخ بیمه گزار/مشتری\",\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            },\r\n            {\r\n                name: \"PolicyholderConfirmationCreatorId\",\r\n                title: \"کاربر ثبت کننده پاسخ بیمه گزار/مشتری\",\r\n                displayColumn: \"PolicyholderConfirmationCreatorFullName\",\r\n                controlType: enmControlType.lookup,\r\n                propertyType: enmPropertyType.number,\r\n                lookup: {\r\n                    parent: this,\r\n                    lookupComponent: User,\r\n                    lookupProperty: \"PolicyholderConfirmationCreator\",\r\n                    lookupDisplayFields: [\"FullName\"]\r\n                },\r\n                isGroupable: true\r\n            },\r\n            {\r\n                name: \"PolicyholderConfirmationResponseType\",\r\n                title: \"پاسخ بیمه گزار/مشتری\",\r\n                controlType: enmControlType.combobox,\r\n                propertyType: enmPropertyType.number,\r\n                combobox: {\r\n                    options: policyholderResponseTypesOptions\r\n                },\r\n                isDefaultDisplay: true\r\n            },\r\n            {\r\n                name: \"PolicyholderConfirmationObjectionDescription\",\r\n                title: \"شرح اعتراض بیمه گزار/مشتری\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"PolicyholderConfirmationShebaNo\",\r\n                title: \"شماره شبای بیمه گزار/مشتری\",\r\n                propertyType: enmPropertyType.string\r\n            },\r\n            {\r\n                name: \"ReceiveDepreciatedDateTime\",\r\n                title: 'تاریخ و زمان تأیید \"دریافت داغی\" یا \"دریافت انتقال مالکیت\"',\r\n                controlType: enmControlType.datetime,\r\n                propertyType: enmPropertyType.datetime\r\n            }\r\n        ];\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.loadTemplate();\r\n    }\r\n    setDefaults = () => {\r\n        this.setState({\r\n            columns: [],\r\n            resultColumns: [],\r\n            data: undefined,\r\n            groupingColumns: this.state.defaultGroupingColumns,\r\n            displayColumns: this.state.defaultDisplayColumns,\r\n            defaultFilter: this.state.defaultFilter\r\n        });\r\n        this._advancedSearch?.setDefaultStructure();\r\n    }\r\n    loadTemplate = async () => {\r\n        const { params } = this.context;\r\n        let opt: ICallOptions = {\r\n            url: 'reporttemplate/get',\r\n            data: { templateId: params.templateid ?? null },\r\n            onSuccess: (result: IResult) => {\r\n                const response = result as IResultSet<IReportTemplateData>;\r\n                if (response.Data) {\r\n                    let { Template, Access, DefaultSearchParams } = response.Data;\r\n                    if (!Template) {\r\n                        this.setState({\r\n                            access: Access ?? [],\r\n                            defaultSearchParams: DefaultSearchParams\r\n                        });\r\n                        return;\r\n                    }\r\n\r\n                    this.title = Template.Title;\r\n\r\n                    const displayColumns = !Template.DisplayColumns || Template.DisplayColumns === \"\" ? [] : Template.DisplayColumns.split(',');\r\n                    const groupingColumns = !Template.GroupingColumns || Template.GroupingColumns === \"\" ? [] : Template.GroupingColumns.split(',');\r\n                    const defaultDisplayColumns = displayColumns.map(c => c.split('|')[0]);\r\n\r\n                    displayColumns.forEach(key => {\r\n                        const parts = key.split('|');\r\n                        let item = this.displayColumnsData.find(i => i.key === parts[0]);\r\n                        if (item && parts[1])\r\n                            item.aggregateFunc = parts[1];\r\n                    });\r\n\r\n                    const defaultFilter = Template.DefaultFilter ? JSON.parse(Template.DefaultFilter) : undefined;\r\n\r\n                    this.setState({\r\n                        defaultDisplayColumns: defaultDisplayColumns,\r\n                        defaultGroupingColumns: groupingColumns,\r\n                        defaultFilter: defaultFilter,\r\n                        showCountColumn: Template.ShowCountColumn,\r\n                        columns: [],\r\n                        resultColumns: [],\r\n                        data: undefined,\r\n                        groupingColumns: groupingColumns,\r\n                        displayColumns: defaultDisplayColumns,\r\n                        access: Access,\r\n                        currentTemplate: Template,\r\n                        templateTitle: Template.Title,\r\n                        defaultSearchParams: DefaultSearchParams\r\n                    });\r\n                    this._advancedSearch?.setDefaultStructure();\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    saveTemplate = async () => {\r\n        if (!this.state.templateTitle || this.state.templateTitle === \"\") {\r\n            Core.warningNotification(\"لطفا عنوان الگو را وارد نمایید\");\r\n            return;\r\n        }\r\n        const displayColumns = this.displayColumnsData.filter(c => this.state.displayColumns.indexOf(c.key) > -1).map(c => c.key + (!!c.aggregateFunc ? '|' + c.aggregateFunc : ''));\r\n        const groupingColumns: string[] = this.state.groupingColumns;\r\n        const defaultFilter = this._advancedSearch?.getFilterStructure();\r\n        const reportTemplate = {\r\n            RowGuid: this.state.currentTemplate?.RowGuid,\r\n            RowVrsn: this.state.currentTemplate?.RowVrsn,\r\n            Name: 'TestReportTemplate',\r\n            Title: this.state.templateTitle,\r\n            GroupingColumns: groupingColumns.join(','),\r\n            DisplayColumns: displayColumns.join(','),\r\n            ShowCountColumn: this.state.showCountColumn === true,\r\n            DefaultFilter: defaultFilter ? JSON.stringify(defaultFilter) : null,\r\n            State: this.state.currentTemplate ? enmEntityState.Modified : enmEntityState.Added,\r\n            ModifiedProperties: [\"Name\", \"Title\", \"GroupingColumns\", \"DisplayColumns\", \"DefaultFilter\", \"ShowCountColumn\"]\r\n        };\r\n        let opt: ICallOptions = {\r\n            url: 'reporttemplate/save',\r\n            data: {\r\n                reportTemplate\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                let response = result.Data as IReportTemplate;\r\n                if (response && result.ValidationState.Successful) {\r\n                    Core.successNotification('تغییرات با موفقیت ذخیره شد');\r\n                    this.setState({ currentTemplate: response });\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    deleteTemplate = async () => {\r\n        if (!this.state.currentTemplate)\r\n            return;\r\n\r\n        let opt: ICallOptions = {\r\n            url: 'reporttemplate/delete',\r\n            data: {\r\n                template: this.state.currentTemplate\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('الگو با موفقیت حذف شد');\r\n                    this.setState({ currentTemplate: null });\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    submit = (args: IDamageCaseReportArgs) => {\r\n        if (!this.state.displayColumns.length) {\r\n            Core.warningNotification('در بخش تنظیمات گزارش، حداقل یک ستون جهت نمایش انتخاب نمایید');\r\n            return;\r\n        }\r\n\r\n        this._advancedSearch?.submit(args);\r\n    }\r\n    onSubmit = async (args: IDamageCaseReportArgs, filter?: IFilter | null) => {\r\n        const displayColumns = this.displayColumnsData.filter(c => this.state.displayColumns.indexOf(c.key) > -1).map(c => c.key + (!!c.aggregateFunc ? '|' + c.aggregateFunc : ''));\r\n        const groupingColumns: string[] = this.state.groupingColumns.map(c => this.displayColumnsData.find(i => i.name === c.split('|')[0])!.key);\r\n        const fetchingInfo: IFetchingInfo = {\r\n            Filter: filter ?? undefined,\r\n            Orderings: !!this.ordering ? [this.ordering] : [],\r\n            Paging: args.paging ?? undefined\r\n        };\r\n\r\n        if (this.state.showCountColumn && !!this.state.groupingColumns.length) {\r\n            displayColumns.push('_col_count_|COUNT(1)');\r\n        }\r\n\r\n        await this.execute(args, fetchingInfo, displayColumns, groupingColumns);\r\n    }\r\n    renderColumn = (record: any, args: IDamageCaseReportArgs, originalCol: IReportColumn, key: string, width?: number | string) => {\r\n        width = this.state.resultColumns?.find((col: ColumnType<any>) => col.dataIndex?.toString() === key)?.width ?? width ?? 200;\r\n        let result = record[key];\r\n\r\n        if (originalCol.controlType === enmControlType.combobox) {\r\n            result = originalCol?.combobox?.options?.find(f => f.value === record[key])?.title;\r\n        }\r\n        if (originalCol.controlType === enmControlType.checkbox && args.source === \"search\") {\r\n            result = <Checkbox checked={record[key]} disabled />;\r\n        }\r\n        if (originalCol.controlType === enmControlType.priceinput) {\r\n            result = record[key] === null ? '' : `${record[key]}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n        }\r\n        if (originalCol.controlType === enmControlType.date) {\r\n            result = !!record[key] && dayjs(record[key]).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\");\r\n        }\r\n        if (originalCol.controlType === enmControlType.datetime) {\r\n            result = !!record[key] && dayjs(record[key]).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\");\r\n        }\r\n\r\n        if (args.source === \"excel\")\r\n            return result;\r\n\r\n        return (\r\n            <div key={record.RowGuid} style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width }}>\r\n                {result === null ? '' : result}\r\n            </div>\r\n        );\r\n    }\r\n    getColumns = (args: IDamageCaseReportArgs, displayColumns: string[], groupingColumns: string[], dblClicked: boolean = false) => {\r\n        let resultColumns: any[] = [];\r\n        this.displayColumnsData.filter(c => this.state.displayColumns.indexOf(c.key) > -1)\r\n            .sort((a, b) => this.state.displayColumns.indexOf(a.key) - this.state.displayColumns.indexOf(b.key))\r\n            .forEach(c => {\r\n                let col: ColumnType<any> = {\r\n                    key: c.key,\r\n                    dataIndex: c.key,\r\n                    title: groupingColumns.length ? c.aggregateTitle ?? c.title : c.title,\r\n                    sorter: true,\r\n                    width: 200\r\n                }\r\n                let originalCol = this.reportColumns.find(r => r.name === c.name);\r\n                if (originalCol) {\r\n                    const parts = displayColumns.find(item => item.split('|')[0] === col.dataIndex)?.split('|')!;\r\n                    if (!groupingColumns.length || (groupingColumns.length && parts.length === 2) || groupingColumns.find(item => item === parts[0])) {\r\n                        col.render = (_, record) => this.renderColumn(record, args, originalCol!, c.key, col.width);\r\n                        resultColumns.push(col);\r\n                    }\r\n                }\r\n            });\r\n\r\n        if (this.state.showCountColumn && !!groupingColumns.length && !dblClicked) {\r\n            let colCount = {\r\n                key: '_col_count_', dataIndex: '_col_count_', title: 'تعداد', width: 200, sorter: true,\r\n                render: (_: string, record: any) => {\r\n                    return `${record['_col_count_']}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n                }\r\n            };\r\n            resultColumns.push(colCount);\r\n        }\r\n        return resultColumns;\r\n    }\r\n    execute = async (args: IDamageCaseReportArgs, fetchingInfo: IFetchingInfo, displayColumns: string[], groupingColumns: string[], dblClicked: boolean = false) => {\r\n        this.setState({ data: args.source === \"search\" ? [] : null });\r\n\r\n        const currentExecuteData: IReportExecuteData = {\r\n            fetchingInfo,\r\n            groupingColumns,\r\n            displayColumns\r\n        };\r\n\r\n        await this.callApi({\r\n            url: \"damagecasereport/execute\",\r\n            data: currentExecuteData,\r\n            onSuccess: (result: IResult | IResultSet<any> | IFetchingResult<any>) => {\r\n                let response = result as IFetchingResult<any>;\r\n                if (!response.Data)\r\n                    return;\r\n\r\n                let resultColumns: any[] = this.getColumns(args, displayColumns, groupingColumns, dblClicked);\r\n                if (args.source === 'search') {\r\n                    this.setState({ data: response.Data, resultColumns, totalResultCount: response.TotalResultCount, currentExecuteData: dblClicked ? this.state.currentExecuteData : currentExecuteData, dblClicked, detailsFetchingInfo: dblClicked ? fetchingInfo : null });\r\n                }\r\n                else if (args.source === 'excel') {\r\n                    const excel = new Excel();\r\n                    excel\r\n                        .addSheet(this.title)\r\n                        .addColumns(resultColumns)\r\n                        .addDataSource(response.Data, {\r\n                            str2Percent: true\r\n                        })\r\n                        .saveAs(this.title + \".xlsx\");\r\n\r\n                    this.setState({ data: null });\r\n                }\r\n            }\r\n        });\r\n    }\r\n    search = () => {\r\n        this.ordering = undefined;\r\n        this.paging = {\r\n            PageNo: 1,\r\n            PageSize: this.paging!.PageSize\r\n        };\r\n        this.submit({ source: 'search', paging: this.paging });\r\n    }\r\n    excel = async () => {\r\n        if (!this.state.dblClicked) {\r\n            this.ordering = undefined;\r\n            this.submit({ source: 'excel' });\r\n        }\r\n        else {\r\n            if (this.state.currentExecuteData && this.state.detailsFetchingInfo) {\r\n                const { displayColumns } = this.state.currentExecuteData;\r\n                const detailsFetchingInfo: IFetchingInfo = {\r\n                    Filter: this.state.detailsFetchingInfo.Filter,\r\n                    Orderings: this.state.detailsFetchingInfo.Orderings\r\n                }\r\n                await this.execute({ source: 'excel' }, detailsFetchingInfo, displayColumns, []);\r\n            }\r\n        }\r\n    }\r\n    onSelectedDisplayColumnsChanged = (selectedRowKeys: React.Key[]) => {\r\n        this.setState({ displayColumns: selectedRowKeys.map(c => c as string) });\r\n    }\r\n    handleResize = (index: number) => (_: any, { size }: any) => {\r\n        this.setState(({ resultColumns }) => {\r\n            const nextColumns = [...resultColumns];\r\n            nextColumns[index] = {\r\n                ...nextColumns[index],\r\n                width: size.width,\r\n            };\r\n            return { resultColumns: nextColumns };\r\n        });\r\n    }\r\n    onRowDoubleClick = async (record: any) => {\r\n        if (this.state.currentExecuteData) {\r\n            this.currentRecord = record;\r\n            const { fetchingInfo, groupingColumns, displayColumns } = this.state.currentExecuteData;\r\n            if (!this.state.dblClicked && groupingColumns.length) {\r\n                const filters: ComparisonFilter[] = [];\r\n                groupingColumns.forEach(f => {\r\n                    filters.push(new ComparisonFilter(f, enmConditionalOperators.Equal, this.currentRecord[f]));\r\n                });\r\n                let currentFetchingInfo: IFetchingInfo = {\r\n                    Paging: { PageNo: 1, PageSize: this.paging!.PageSize },\r\n                    Orderings: []\r\n                };\r\n                if (fetchingInfo.Filter)\r\n                    currentFetchingInfo.Filter = new AndFilter([...filters, fetchingInfo.Filter]);\r\n                else\r\n                    currentFetchingInfo.Filter = new AndFilter(filters);\r\n                await this.execute({ source: 'search' }, currentFetchingInfo, displayColumns, [], true);\r\n            }\r\n            else if (this.state.dblClicked) {\r\n                await this.execute({ source: 'search' }, fetchingInfo, displayColumns, groupingColumns);\r\n            }\r\n        }\r\n    }\r\n    onTableChange = async (pagination: any, sorter: any) => {\r\n        if (!(sorter instanceof Array) && sorter.field) {\r\n            if (!sorter.column)\r\n                this.ordering = undefined;\r\n            else\r\n                this.ordering = {\r\n                    Property: sorter.field.toString(),\r\n                    OrderBy: sorter.order === 'ascend' ? enmOrderingType.Ascending : enmOrderingType.Descending\r\n                };\r\n        }\r\n        if (this.paging) {\r\n            this.paging.PageNo = pagination.current ?? 1;\r\n            this.paging.PageSize = pagination.pageSize ?? 10;\r\n        }\r\n        if (this.state.currentExecuteData) {\r\n            const { fetchingInfo, groupingColumns, displayColumns } = this.state.currentExecuteData;\r\n            const filters: ComparisonFilter[] = [];\r\n            let currentFetchingInfo: IFetchingInfo = {\r\n                Paging: { PageNo: this.paging!.PageNo, PageSize: this.paging!.PageSize },\r\n                Orderings: this.ordering ? [this.ordering] : []\r\n            };\r\n            groupingColumns.forEach(f => {\r\n                filters.push(new ComparisonFilter(f, enmConditionalOperators.Equal, this.currentRecord[f]));\r\n            });\r\n            if (filters.length) {\r\n                if (fetchingInfo.Filter)\r\n                    currentFetchingInfo.Filter = new AndFilter([...filters, fetchingInfo.Filter]);\r\n                else\r\n                    currentFetchingInfo.Filter = new AndFilter(filters);\r\n            }\r\n            await this.execute({ source: 'search' }, currentFetchingInfo, displayColumns, [], this.state.dblClicked);\r\n        }\r\n        else\r\n            this.submit({ source: 'search' });\r\n    }\r\n    onGroupingColumnsSelect = (value: any) => {\r\n        let displayColumns = this.state.displayColumns.map(c => c);\r\n        const col = this.displayColumnsData.find(c => c.name === (value as string).split('|')[0]);\r\n        if (col && !displayColumns.find(c => c === col?.key)) {\r\n            displayColumns.push(col.key);\r\n        }\r\n\r\n        this.setState({ groupingColumns: [...this.state.groupingColumns, value as string], displayColumns });\r\n    }\r\n    onGroupingColumnsDeselect = (value: any) => {\r\n        let values = this.state.groupingColumns;\r\n        let index = values.indexOf(value as string);\r\n        if (index > -1)\r\n            values.splice(index, 1);\r\n        this.setState({ groupingColumns: values });\r\n    }\r\n    aggregateTitleRender = (record: IDamageCaseReportColumn) => {\r\n        const disabled = !this.state.groupingColumns.length || !this.state.displayColumns.filter(c => c === record.key).length || !!this.state.groupingColumns.find(c => c.split('|')[0] === record.name);\r\n        const currentTitles: { value?: string; title: string; }[] = []\r\n        if (!disabled)\r\n            this.aggregateTitles.forEach(item => {\r\n                let newItem = { value: item.value, title: item.title };\r\n                if (newItem.value && newItem.value.indexOf('{X}') > -1) {\r\n                    newItem.value = newItem.value.replace('{X}', record.name);\r\n                    newItem.title += ' ' + record.title;\r\n                }\r\n                currentTitles.push({ value: newItem.value, title: newItem.title });\r\n            });\r\n        else {\r\n            record.aggregateFunc = undefined;\r\n            record.aggregateTitle = undefined;\r\n        }\r\n        return (\r\n            <Select disabled={disabled} style={{ width: '100%', border: (record as any).hasWarning ? '1px solid red' : '' }} value={record.aggregateFunc} onChange={value => {\r\n                let currentItem = currentTitles.find(i => i.value === value);\r\n                record.aggregateFunc = currentItem?.value;\r\n                record.aggregateTitle = currentItem?.title\r\n            }}>\r\n                {currentTitles.map(a => <Option key={a.value ?? '-1'} value={a.value}>{a.title}</Option>)}\r\n            </Select>\r\n        );\r\n\r\n    }\r\n    onDisplayColumnDragEnd = (event: any) => {\r\n        event.preventDefault();\r\n\r\n        if (!this.dragColumn)\r\n            return;\r\n\r\n        const fromIndex = this.state.displayColumns.indexOf(event.currentTarget.dataset.rowKey);\r\n        const toIndex = this.state.displayColumns.indexOf(this.dragColumn);\r\n        this.dragColumn = undefined;\r\n\r\n        if (event.dataTransfer.dropEffect === \"none\")\r\n            return;\r\n\r\n        let displayColumns: string[] = [];\r\n        if (fromIndex > -1 && toIndex > -1) {\r\n            this.state.displayColumns.forEach((c, i) => {\r\n                if (i === fromIndex)\r\n                    return;\r\n                if (fromIndex < toIndex) {\r\n                    displayColumns.push(c);\r\n                    if (i === toIndex)\r\n                        displayColumns.push(event.currentTarget.dataset.rowKey);\r\n                }\r\n                else {\r\n                    if (i === toIndex)\r\n                        displayColumns.push(event.currentTarget.dataset.rowKey);\r\n                    displayColumns.push(c);\r\n                }\r\n            });\r\n            this.setState({ displayColumns });\r\n        }\r\n    }\r\n    onDisplayColumnDragOver = (event: any) => {\r\n        this.dragColumn = event.currentTarget.dataset.rowKey;\r\n        event.preventDefault();\r\n    }\r\n    virtualRender() {\r\n        const displayColumnsData: IDamageCaseReportColumn[] = [];\r\n        this.state.displayColumns.forEach(key => {\r\n            let item = this.displayColumnsData.find(i => i.key === key);\r\n            if (item)\r\n                displayColumnsData.push(item);\r\n        });\r\n        const others = this.displayColumnsData.filter(i => !this.state.displayColumns.find(k => k === i.key));\r\n        displayColumnsData.push(...others);\r\n\r\n        const loading = this.state.loading ? { indicator: <CustomSpinner /> } : false;\r\n\r\n        const { PageNo, PageSize } = this.paging!;\r\n\r\n        const header = this.getPageHeader({\r\n            title: this.title,\r\n            onBack: () => {\r\n                if (this.props.onClose)\r\n                    this.props.onClose(this);\r\n                else\r\n                    window.history.back();\r\n            }\r\n        });\r\n\r\n        const components = {\r\n            header: {\r\n                cell: ResizableTitle,\r\n            },\r\n        };\r\n\r\n        const columns = this.state.resultColumns.map((col, index) => ({\r\n            ...col,\r\n            onHeaderCell: (column: any) => ({\r\n                width: column.width,\r\n                onResize: this.handleResize(index),\r\n            }),\r\n        }));\r\n\r\n        let extraStyles = this.state.access.length ? {} : { display: 'none' };\r\n\r\n        //const defaultFilter = new NotFilter(new OrFilter([new ComparisonFilter(\"DamageCaseTypeId\", enmConditionalOperators.NotEqual, \"1\")]));\r\n        const defaultFilter = this.state.defaultFilter;\r\n\r\n        return (\r\n            <div>\r\n                {header}\r\n\r\n                <div className=\"box\" >\r\n                    <Tabs defaultActiveKey=\"1\" style={{ background: \"rgb(137 167 235 / 20%)\", position: \"sticky\", top: 120 }}>\r\n                        <TabPane\r\n                            tab={\r\n                                <div style={{ marginRight: 4 }}>\r\n                                    <FilterOutlined style={{ verticalAlign: \"middle\" }} />\r\n                                    <span>\r\n                                        فیلتر\r\n                                    </span>\r\n                                </div>\r\n                            }\r\n                            key=\"1\"\r\n                            style={{ padding: \"0px 10px 10px 10px\" }}\r\n                        >\r\n                            <AdvancedSearch\r\n                                columns={this.reportColumns}\r\n                                onSubmit={this.onSubmit}\r\n                                ref={node => this._advancedSearch = node}\r\n                                defaultFilter={defaultFilter}\r\n                                locked={!!defaultFilter && this.state.access.indexOf('Save') === -1}\r\n                                defaultSearchParams={this.state.defaultSearchParams}\r\n                            />\r\n                        </TabPane>\r\n                        <TabPane\r\n                            tab={\r\n                                <div style={{ ...extraStyles }}>\r\n                                    <SettingOutlined style={{ verticalAlign: \"middle\" }} />\r\n                                    <span>\r\n                                        تنظیمات\r\n                                    </span>\r\n                                </div>\r\n                            }\r\n                            key=\"2\"\r\n                            style={{ padding: 10, ...extraStyles }}\r\n                        >\r\n                            <div>\r\n                                <Space style={{ width: \"100%\" }} direction=\"vertical\">\r\n                                    <Row>\r\n                                        <label style={{ margin: 5, minWidth: 200 }}>عنوان الگو</label>\r\n                                        <Input style={{ width: 300 }}\r\n                                            defaultValue={this.state.templateTitle ?? \"\"}\r\n                                            onChange={(e: React.ChangeEvent<any>) => {\r\n                                                this.setState({ templateTitle: e.target.value });\r\n                                            }}\r\n                                        />\r\n                                    </Row>\r\n                                    <Row>\r\n                                        <label style={{ margin: 5, minWidth: 200 }}>ستونهای گروهبندی</label>\r\n                                        <Select\r\n                                            mode=\"multiple\"\r\n                                            value={this.state.groupingColumns}\r\n                                            style={{ minWidth: 300 }}\r\n                                            showArrow\r\n                                            allowClear\r\n                                            onSelect={this.onGroupingColumnsSelect}\r\n                                            onDeselect={this.onGroupingColumnsDeselect}\r\n                                        >\r\n                                            {this.reportColumns.filter(c => c.isGroupable === true).map(c => <Option key={c.name} value={c.name + \"|\" + c.title}>{c.title}</Option>)}\r\n                                        </Select>\r\n                                    </Row>\r\n                                    <Row>\r\n                                        <label style={{ margin: 5, minWidth: 200 }}>نمایش ستون تعداد</label>\r\n                                        <Checkbox\r\n                                            checked={this.state.showCountColumn && !!this.state.groupingColumns.length}\r\n                                            disabled={!this.state.groupingColumns.length}\r\n                                            onChange={(e: CheckboxChangeEvent) => this.setState({ showCountColumn: e.target.checked })} />\r\n                                    </Row>\r\n                                    <Row>\r\n                                        <label style={{ margin: 10, minWidth: 200 }}>ستونهای نمایشی</label>\r\n                                        <Table\r\n                                            rowKey=\"key\"\r\n                                            dataSource={displayColumnsData}\r\n                                            rowSelection={{\r\n                                                type: \"checkbox\",\r\n                                                columnWidth: \"50px\",\r\n                                                selectedRowKeys: this.state.displayColumns,\r\n                                                onChange: this.onSelectedDisplayColumnsChanged\r\n                                            }}\r\n                                            onRow={() => {\r\n                                                return {\r\n                                                    draggable: \"true\",\r\n                                                    onDragEnd: (e) => { this.onDisplayColumnDragEnd.call(this, e); },\r\n                                                    onDragOver: (e) => { this.onDisplayColumnDragOver.call(this, e); }\r\n                                                };\r\n                                            }}\r\n                                            pagination={{ defaultPageSize: 100 }}\r\n                                            columns={[\r\n                                                {\r\n                                                    key: \"title\",\r\n                                                    title: \"عنوان ستون\",\r\n                                                    dataIndex: \"title\",\r\n                                                    width: 300\r\n                                                },\r\n                                                {\r\n                                                    key: \"aggregateTitle\",\r\n                                                    title: \"عنوان تجمیع\",\r\n                                                    dataIndex: \"aggregateTitle\",\r\n                                                    width: 300,\r\n                                                    render: (_: any, record: IDamageCaseReportColumn) => this.aggregateTitleRender(record)\r\n                                                }\r\n                                            ]}\r\n                                        />\r\n                                    </Row>\r\n                                </Space>\r\n                            </div>\r\n                            <div>\r\n                            </div>\r\n                        </TabPane>\r\n                    </Tabs>\r\n                </div>\r\n\r\n                <Space style={{ padding: 10, display: \"flex\", direction: \"ltr\", position: \"sticky\", bottom: -10, background: \"rgba(250, 250, 250, 0.85)\" }} >\r\n                    <Button onClick={this.search} type=\"primary\" icon={<SearchOutlined style={{ verticalAlign: \"middle\" }} />} loading={this.state.loading}>جستجو</Button>\r\n                    <Button onClick={this.excel} icon={<FileExcelOutlined style={{ verticalAlign: \"middle\" }} />} loading={this.state.loading}>اکسل</Button>\r\n                    <Button\r\n                        onClick={this.setDefaults}\r\n                        icon={<SettingOutlined style={{ verticalAlign: \"middle\" }} />}\r\n                        loading={this.state.loading}\r\n                    >\r\n                        تنظیمات پیشفرض\r\n                    </Button>\r\n                    <Button\r\n                        style={{ display: this.state.access.indexOf(\"Save\") > -1 ? 'block' : 'none' }}\r\n                        onClick={this.saveTemplate}\r\n                        icon={<SaveOutlined style={{ verticalAlign: \"middle\" }} />}\r\n                        loading={this.state.loading}\r\n                        type=\"primary\"\r\n\r\n                    >\r\n                        ذخیره الگو\r\n                    </Button>\r\n                    <Popconfirm title=\"آیا مایلید الگو حذف شود؟\" onConfirm={this.deleteTemplate}>\r\n                        <Button\r\n                            style={{ display: this.state.access.indexOf(\"Delete\") > -1 && !!this.state.currentTemplate ? 'block' : 'none' }}\r\n                            type=\"primary\"\r\n                            danger\r\n                            icon={<DeleteOutlined style={{ verticalAlign: \"middle\" }} />}\r\n                            loading={this.state.loading}\r\n                        >\r\n                            حذف الگو\r\n                        </Button>\r\n                    </Popconfirm>\r\n                </Space>\r\n\r\n                {\r\n                    this.state.data\r\n                        ?\r\n                        <div className=\"box\" style={{ marginTop: 10 }} ref={node => this._gridContainer = node} >\r\n                            <Table\r\n                                components={components}\r\n                                rowKey={(record: any) => {\r\n                                    record.RowKey = Core.newId();\r\n                                    return record.RowKey;\r\n                                }}\r\n                                dataSource={this.state.data}\r\n                                loading={loading}\r\n                                columns={columns}\r\n                                scroll={{ x: 'max-content' }}\r\n                                sticky={{ getContainer: () => { return this._gridContainer!; } }}\r\n                                pagination={{\r\n                                    style: { marginRight: 10 },\r\n                                    position: ['bottomRight'],\r\n                                    defaultPageSize: this.paging?.PageSize ?? 10,\r\n                                    current: Math.ceil(this.state.totalResultCount ?? 0 / PageSize) < PageNo ? 1 : PageNo,\r\n                                    total: this.state.totalResultCount,\r\n                                    showSizeChanger: true,\r\n                                    showTotal: (total, _) => {\r\n                                        return (<div>تعداد کل ردیف ها: {total} </div>);\r\n                                    }\r\n                                }}\r\n                                onRow={(record: any) => {\r\n                                    const { groupingColumns } = this.state.currentExecuteData!;\r\n                                    const cursor = this.state.dblClicked || groupingColumns.length ? 'pointer' : 'default';\r\n                                    const title = this.state.dblClicked ? \"برای برگشت دبلکلیک نمایید\" : groupingColumns.length ? \"برای مشاهده جزئیات دبلکلیک نمایید\" : undefined;\r\n                                    return {\r\n                                        title,\r\n                                        style: { cursor },\r\n                                        onDoubleClick: () => this.onRowDoubleClick(record),\r\n                                    }\r\n                                }}\r\n                                onChange={(p, _, s) => this.onTableChange(p, s)}\r\n                                ref={node => {\r\n                                    if (node && loading !== false)\r\n                                        node.scrollIntoView();\r\n                                }}\r\n                            />\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                }\r\n\r\n            </div>\r\n        );\r\n    }\r\n}","import { Button, Form, Input, InputNumber, Select, Table } from \"antd\";\r\nimport { SaveOutlined, StopOutlined } from '@ant-design/icons';\r\nimport { ColumnType } from 'antd/lib/table';\r\nimport React from \"react\";\r\nimport { DatePicker as DatePickerJalali } from \"antd-jalali\";\r\nimport { IDamageCase } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { IInsurer } from \"../../baseInfo/insurer/interfaces\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { enmEntityState, ICallOptions, IFetchingInfo, IOrdering, IResult } from \"../../components/infrastructure/models\";\r\nimport { IDamageCaseVoucher } from \"../interfaces\";\r\nimport locale from 'antd/es/date-picker/locale/fa_IR';\r\nimport CustomSpinner from \"../../components/infrastructure/customSpinner\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nconst { Option } = Select;\r\n\r\ninterface IIssueVoucherStates extends IBaseStates {\r\n    insurers: IInsurer[];\r\n    data: IDamageCase[];\r\n    totalResultCount: number;\r\n    totalAmount: number;\r\n    selectedRows: IDamageCase[];\r\n}\r\n\r\nexport interface IIssueVoucherProps extends IBaseProps {\r\n    params: () => {\r\n        filter?: IFilter;\r\n    }\r\n}\r\n\r\ninterface IIssueVoucherFormProps {\r\n    loading: boolean;\r\n    onClose?: (sender: any) => void;\r\n    onSubmit?: (values: any) => Promise<void>;\r\n    insurers: IInsurer[];\r\n    totalAmount: number;\r\n}\r\n\r\nconst IssueVoucherForm = (props: IIssueVoucherFormProps) => {\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 4, xl: 3, lg: 3, md: 3, sm: 6, xs: 6 },\r\n        wrapperCol: { xxl: 8, xl: 6, lg: 6, md: 6, sm: 10, xs: 10 },\r\n    };\r\n\r\n    const [formLayout] = React.useState<LayoutType>('horizontal');\r\n    const [form] = Form.useForm();\r\n\r\n    const insurerOptions = props.insurers.map(i => <Option key={i.Id} value={i.Id}>{i.Name}</Option>)\r\n\r\n    React.useEffect(() => {\r\n        form.setFields([{ name: \"TotalAmount\", value: props.totalAmount }]);\r\n    }, [props, form]);\r\n\r\n    return (\r\n        <>\r\n            <Form\r\n                className=\"box\"\r\n                style={{ padding: 20 }}\r\n                form={form}\r\n                {...formItemLayout}\r\n                layout={formLayout}\r\n                onFinish={async (values) => {\r\n                    props.onSubmit && await props.onSubmit(values);\r\n                }}\r\n                onReset={() => {\r\n                    props.onClose && props.onClose(this);\r\n                }}\r\n            >\r\n                <Form.Item\r\n                    label=\"بیمه گر\"\r\n                    name=\"InsurerId\"\r\n                    key={'InsurerId'}\r\n                    initialValue={1}\r\n                >\r\n                    <Select >\r\n                        {insurerOptions}\r\n                    </Select>\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    label=\"تاریخ چک\"\r\n                    name=\"ChequeDate\"\r\n                    key={'ChequeDate'}\r\n                >\r\n                    <DatePickerJalali\r\n                        format=\"YYYY/MM/DD\"\r\n                        locale={locale}\r\n                        inputReadOnly={true}\r\n                        style={{ width: '100%', display: 'block' }}\r\n                    />\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    label=\"شماره چک\"\r\n                    name=\"ChequeNo\"\r\n                    key={'ChequeNo'}\r\n                >\r\n                    <Input />\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    label=\"مبلغ کل\"\r\n                    name=\"TotalAmount\"\r\n                    key={'TotalAmount'}\r\n                >\r\n                    <InputNumber disabled\r\n                        style={{ width: \"100%\" }}\r\n                        formatter={value => {\r\n                            return `ريال ${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n                        }}\r\n                    />\r\n                </Form.Item>\r\n\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ marginTop: 20, borderTop: '1px solid', borderColor: '#e5e5e5' }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<SaveOutlined />} loading={props.loading} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 20 }}>\r\n                        صدور\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={props.loading} style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: \"100px\", marginTop: 20, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            </Form>\r\n        </>\r\n    );\r\n}\r\n\r\nexport class IssueVoucher extends BaseComponent<IIssueVoucherProps, IIssueVoucherStates> {\r\n    constructor(props: IIssueVoucherProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            insurers: [],\r\n            data: [],\r\n            totalResultCount: 0,\r\n            totalAmount: 0,\r\n            selectedRows: [],\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        }\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        Promise.all([this.fetchData(), this.fetchInsurers()]);\r\n    }\r\n    fetchInsurers = async () => {\r\n        let fetchingInfo: IFetchingInfo = {\r\n            Orderings: [] as IOrdering[]\r\n        };\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"insurer/get\",\r\n            data: { fetchingInfo },\r\n            onSuccess: (result: any) => {\r\n                this.setState({ insurers: result.Data });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    fetchData = async () => {\r\n\r\n        let fetchingInfo: IFetchingInfo = {\r\n            Orderings: [] as IOrdering[],\r\n            Filter: this.props.params()?.filter\r\n        };\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damageCaseVoucherPaymentDraft/get\",\r\n            data: { fetchingInfo },\r\n            onSuccess: (result: any) => {\r\n                this.setState({ data: result.Data, totalResultCount: result.TotalResultCount });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    onSubmit = async (values: any) => {\r\n        if (!this.state.selectedRows.length) {\r\n            Core.warningNotification(\"لطفا حداقل یک پرونده را انتخاب نمائیید\");\r\n            return;\r\n        }\r\n        let voucher: IDamageCaseVoucher = {\r\n            RowGuid: Core.newId(),\r\n            State: enmEntityState.Added,\r\n            Items: [],\r\n            ChequeNo: values[\"ChequeNo\"],\r\n            ChequeDate: values[\"ChequeDate\"]\r\n        } as any;\r\n        this.state.selectedRows.forEach(row => {\r\n            let damageCaseEvaluator = row.DamageCaseEvaluators[row.DamageCaseEvaluators.length - 1];\r\n            let estimation = damageCaseEvaluator ? damageCaseEvaluator.Estimations[damageCaseEvaluator.Estimations.length - 1] : undefined;\r\n            let policyholderConfirmation = damageCaseEvaluator ? damageCaseEvaluator.PolicyholderConfirmations[damageCaseEvaluator.PolicyholderConfirmations.length - 1] : undefined;\r\n\r\n            voucher.Items.push({\r\n                RowGuid: Core.newId(),\r\n                DamageCaseId: row.Id,\r\n                State: enmEntityState.Added,\r\n                Amount: (estimation?.PayableAmount) ?? 0,\r\n                PolicyholderFullName: (row.PolicyEquipmentModel.Policy.Policyholder?.FullName) ?? \"\",\r\n                PolicyholderNationalCode: (row.PolicyEquipmentModel.Policy.Policyholder?.NationalCode) ?? \"\",\r\n                ShebaNo: (policyholderConfirmation?.ShebaNo) ?? \"\"\r\n            } as any);\r\n        });\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damageCaseVoucherPaymentDraft/issueVoucher\",\r\n            data: { voucher },\r\n            onSuccess: (result: IResult) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification(\"حواله باموفقیت صادر شد\");\r\n                    this.props.onClose && this.props.onClose(this);\r\n                }\r\n                //else\r\n                //    Core.errorNotification(result.ValidationState.ValidationResults.find(v => v.Level === enmValidationLevel.Error)?.Message);\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    onSelectRows = (selectedRows: IDamageCase[]) => {\r\n        let sum = 0;\r\n        selectedRows.forEach(record => {\r\n            let damageCaseEvaluator = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1];\r\n            let estimation = damageCaseEvaluator ? damageCaseEvaluator.Estimations[damageCaseEvaluator.Estimations.length - 1] : undefined;\r\n            if (estimation?.PayableAmount)\r\n                sum += estimation.PayableAmount;\r\n        });\r\n        this.setState({ selectedRows, totalAmount: sum });\r\n    }\r\n    virtualRender() {\r\n\r\n        const header = this.getPageHeader({ title: \"صدور حواله\", onBack: () => { this.props.onClose && this.props.onClose(this) } });\r\n\r\n        const columns: ColumnType<any>[] = [\r\n            {\r\n                title: \"شماره پرونده\",\r\n                dataIndex: \"Code\"\r\n            },\r\n            {\r\n                title: \"کد ملی بیمه گزار/مشتری\",\r\n                dataIndex: \"Policy.Policyholder.NationalCode\",\r\n                render: (_: any, record: IDamageCase) => {\r\n                    return (\r\n                        <>\r\n                            {record.PolicyEquipmentModel.Policy.Policyholder?.NationalCode}\r\n                        </>\r\n                    );\r\n                }\r\n            },\r\n            {\r\n                title: \"بیمه گزار/مشتری\",\r\n                dataIndex: \"Policy.Policyholder.FullName\",\r\n                render: (_: any, record: IDamageCase) => {\r\n                    return (\r\n                        <>\r\n                            {record.PolicyEquipmentModel.Policy.Policyholder?.FullName}\r\n                        </>\r\n                    );\r\n                }\r\n            },\r\n            {\r\n                title: \"مبلغ قابل پرداخت\",\r\n                dataIndex: \"PayableAmount\",\r\n                render: (_: any, record: IDamageCase) => {\r\n                    let damageCaseEvaluator = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1];\r\n                    let estimation = damageCaseEvaluator ? damageCaseEvaluator.Estimations[damageCaseEvaluator.Estimations.length - 1] : undefined;\r\n                    return (\r\n                        <>\r\n                            {estimation ? `ريال ${estimation.PayableAmount}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : 0}\r\n                        </>\r\n                    );\r\n                }\r\n            },\r\n            {\r\n                title: \"شماره شبای بانکی\",\r\n                dataIndex: \"ShebaNo\",\r\n                render: (_: any, record: IDamageCase) => {\r\n                    let damageCaseEvaluator = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1];\r\n                    let policyholderConfirmation = damageCaseEvaluator ? damageCaseEvaluator.PolicyholderConfirmations[damageCaseEvaluator.PolicyholderConfirmations.length - 1] : undefined;\r\n                    return (\r\n                        <>\r\n                            {policyholderConfirmation?.ShebaNo}\r\n                        </>\r\n                    );\r\n                }\r\n            }\r\n        ];\r\n        const loading = this.state.loading ? { indicator: <CustomSpinner /> } : false;\r\n        return (\r\n            <>\r\n                {header}\r\n                <IssueVoucherForm\r\n                    key=\"IssueVoucherForm\"\r\n                    loading={this.state.loading}\r\n                    onClose={this.props.onClose}\r\n                    onSubmit={this.onSubmit}\r\n                    insurers={this.state.insurers}\r\n                    totalAmount={this.state.totalAmount}\r\n                />\r\n                <div\r\n                    key=\"datagrid\"\r\n                    className=\"box\"\r\n                    style={{ marginTop: 10 }}>\r\n\r\n                    <Table\r\n                        rowKey={r => r.RowGuid}\r\n                        dataSource={this.state.data}\r\n                        columns={columns}\r\n                        loading={loading}\r\n                        rowSelection={{\r\n                            type: \"checkbox\",\r\n                            onSelect: (_: IDamageCase, __: boolean, selectedRows: IDamageCase[]) => {\r\n                                this.onSelectRows(selectedRows);\r\n                            },\r\n                            onSelectAll: (_: boolean, selectedRows: IDamageCase[]) => {\r\n                                this.onSelectRows(selectedRows);\r\n                            }\r\n                        }}\r\n                        pagination={\r\n                            {\r\n                                total: this.state.totalResultCount,\r\n                                showTotal: (total, _) => {\r\n                                    return (<div>تعداد کل ردیف ها: {total} </div>);\r\n                                }\r\n                            }\r\n                        }\r\n                    />\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n}","import { Button, Col, Tooltip } from \"antd\";\r\nimport { damageCaseStatusOptions, IDamageCase, IDamageCaseFetchingInfo, IDamageCaseInitialData, IDamageCaseProps, IDamageCaseStates } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { DamageCaseSummary } from \"./damageCaseSummary\";\r\nimport { IssueVoucher } from \"./issueVoucher\";\r\nimport { ICallOptions, enmValidationLevel } from \"../../components/infrastructure/models\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\n\r\nexport class DamageCaseVoucherPaymentDraft extends BaseEntityManager<IDamageCase, IDamageCaseProps, IDamageCaseStates, IDamageCaseFetchingInfo, IDamageCaseInitialData>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"پرونده های منتظر پرداخت\",\r\n            name: \"DamageCaseVoucherPaymentDraft\",\r\n            Properties: [\r\n                {\r\n                    title: \"شماره پرونده\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: { options: damageCaseStatusOptions },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"سریال بیمه نامه\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.SerialNo\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.Policyholder.NationalCode\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.Policyholder.FullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"نوع تجهیز\",\r\n                    dataIndex: \"PolicyEquipmentModel.Equipment.Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"PolicyEquipmentModel.BrandTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"مدل\",\r\n                    dataIndex: \"PolicyEquipmentModel.EquipmentModelTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"مبلغ قابل پرداخت\",\r\n                    dataIndex: \"PayableAmount\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.template,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 180,\r\n                    renderColumn: (_: any, record: IDamageCase) => {\r\n                        let damageCaseEvaluator = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1];\r\n                        let estimation = damageCaseEvaluator ? damageCaseEvaluator.Estimations[damageCaseEvaluator.Estimations.length - 1] : undefined;\r\n                        return (\r\n                            <>\r\n                                {estimation ? `ريال ${estimation.PayableAmount}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : 0}\r\n                            </>\r\n                        );\r\n                    },\r\n                    renderControl: (currentEntity: IDamageCase) => {\r\n                        let damageCaseEvaluator = currentEntity.DamageCaseEvaluators[currentEntity.DamageCaseEvaluators.length - 1];\r\n                        let estimation = damageCaseEvaluator ? damageCaseEvaluator.Estimations[damageCaseEvaluator.Estimations.length - 1] : undefined;\r\n                        return (\r\n                            <b>\r\n                                {estimation ? `ريال ${estimation.PayableAmount}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : 0}\r\n                            </b>\r\n                        );\r\n                    }\r\n                },\r\n                {\r\n                    title: \"تاریخ دریافت داغی\",\r\n                    dataIndex: \"ReceiveDepreciatedDateTime\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                }\r\n\r\n            ]\r\n        };\r\n    }\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n\r\n        this.extraHeaderButtons = () => {\r\n            let buttons: React.ReactNode[] = [];\r\n            let issueVoucherAccess = this.initialData?.AccessList[\"IssueVoucher\"];\r\n            if (issueVoucherAccess)\r\n                buttons.push(<Button key=\"IssueVoucher\" style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '100px' }} type=\"primary\" onClick={this.issueVoucher}>صدور حواله</Button>);\r\n\r\n            return buttons;\r\n        };\r\n\r\n        this.renderingToolbar = () => {\r\n            if (!this.selectedEntity)\r\n                return <></>;\r\n\r\n            let commands: React.ReactNode[] = [];\r\n            if (!this.selectedEntity?.SentToBranch && this.initialData?.AccessList[\"SendDamageCaseToBranch\"])\r\n                commands.push(\r\n                    <Col key=\"sendDamageCaseToBranch\" style={{ marginLeft: 10 }}>\r\n                        <Tooltip key=\"sendDamageCaseToBranch\" title=\"ارسال پرونده خسارت به شعبه مربوطه از طریق اتوماسیون اداری سامان\">\r\n                            <Button key=\"sendDamageCaseToBranch\"\r\n                                style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '140px' }}\r\n                                type=\"primary\"\r\n                                onClick={this.sendDamageCaseToBranch}\r\n                            >\r\n                                ارسال به شعبه\r\n                            </Button>\r\n                        </Tooltip >\r\n                    </Col>\r\n                );\r\n\r\n            if (this.initialData?.AccessList[\"PrintDamageCaseSummary\"])\r\n                commands.push(\r\n                    <Col key=\"SendToEvaluation\" style={{ marginLeft: 10 }}>\r\n                        <Button key=\"printDamageCaseSummary\" style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '140px' }} type=\"primary\" onClick={this.showDamageCaseSummary} loading={this.state.loading}>چاپ خلاصه پرونده</Button>\r\n                    </Col>\r\n                );\r\n\r\n            return commands.length ? (<> {commands} </>) : (<></>);\r\n        };\r\n    }\r\n    sendDamageCaseToBranch = async () => {\r\n        let damageCase = this.selectedEntity;\r\n        if (!damageCase || !!damageCase.SentToBranch) return;\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecaseevaluator/senddamagecasetobranch\",\r\n            data: { damageCaseId: damageCase.Id, rowVrsn: damageCase.RowVrsn },\r\n            onSuccess: res => {\r\n                if (res.ValidationState.Successful && !res.ValidationState.ValidationResults.filter(v => v.Level === enmValidationLevel.Warning).length) {\r\n                    Core.successNotification(\"پرونده خسارت با موفقیت از طریق اتوماسیون اداری برای شعبه ارسال شد.\");\r\n                    this.fetchData();\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    issueVoucher = () => {\r\n        this.addLookupForm(\"IssueVoucher\",\r\n            <IssueVoucher\r\n                key=\"IssueVoucher\"\r\n                params={() => {\r\n                    return { filter: this.filter ?? this.headerFilter };\r\n                }}\r\n                onClose={this.onLookupClosed}\r\n                invokePath={this.metadata.title}\r\n            />\r\n        );\r\n    }\r\n    showDamageCaseSummary = () => {\r\n        this.addLookupForm('DamageCaseSummary',\r\n            <DamageCaseSummary\r\n                damageCaseId={this.selectedEntity!.Id}\r\n                onClose={() => this.closeLookupForm()}\r\n                invokePath={this.metadata.title}\r\n                invoker={'damagecasevoucherpaymentdraft'}\r\n            />\r\n        );\r\n    }\r\n}","import { damageCaseStatusOptions } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { AndFilter, ComparisonFilter, enmConditionalOperators } from \"../../components/infrastructure/filtering\";\r\nimport { enmVoucherStatus, enmVoucherTypes, IDamageCaseVoucherItem, IDamageCaseVoucherItemProps, IDamageCaseVoucherItemStates } from \"../interfaces\";\r\n\r\nexport class DamageCaseVoucherReceiptDraft extends EntityManager<IDamageCaseVoucherItem, IDamageCaseVoucherItemProps, IDamageCaseVoucherItemStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"پرونده های منتظر دریافت\",\r\n            name: \"DamageCaseVoucherReceiptDraft\",\r\n            Properties: [\r\n                {\r\n                    title: \"شماره پرونده\",\r\n                    dataIndex: \"DamageCase.Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"DamageCase.TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"DamageCase.Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: { options: damageCaseStatusOptions },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"سریال بیمه نامه\",\r\n                    dataIndex: \"DamageCase.PolicyEquipmentModel.Policy.SerialNo\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyholderNationalCode\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyholderFullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"مبلغ قابل دریافت\",\r\n                    dataIndex: \"Amount\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 180,\r\n                    formatter: (value) => {\r\n                        return `ريال ${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n                    }\r\n                }\r\n\r\n            ]\r\n        };\r\n    }\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            return new AndFilter([\r\n                new ComparisonFilter(\"Voucher.Status\", enmConditionalOperators.Equal, enmVoucherStatus.Issued),\r\n                new ComparisonFilter(\"Voucher.Type\", enmConditionalOperators.Equal, enmVoucherTypes.Receipt)\r\n            ]);\r\n        };\r\n    }\r\n}","import { Descriptions } from \"antd\";\r\nimport { damageCaseStatusOptions } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { IDamageCaseVoucherItem, IDamageCaseVoucherItemProps, IDamageCaseVoucherItemStates } from \"../interfaces\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\n\r\ndayjs.extend(jalaliday);\r\n\r\nexport class DamageCaseVoucherPaymentItem extends EntityManager<IDamageCaseVoucherItem, IDamageCaseVoucherItemProps, IDamageCaseVoucherItemStates>{\r\n\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"اقلام حواله\",\r\n            name: \"DamageCaseVoucherPaymentItem\",\r\n            Properties: [\r\n                {\r\n                    title: \"شماره پرونده\",\r\n                    dataIndex: \"DamageCase.Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"DamageCase.TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"DamageCase.Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: { options: damageCaseStatusOptions },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"سریال بیمه نامه\",\r\n                    dataIndex: \"DamageCase.Policy.SerialNo\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyholderNationalCode\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyholderFullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"مبلغ قابل دریافت\",\r\n                    dataIndex: \"Amount\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 180,\r\n                    formatter: (value) => {\r\n                        return `ريال ${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n                    }\r\n                }\r\n\r\n            ]\r\n        };\r\n    }\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            return ComparisonFilter.Equal<IDamageCaseVoucherItem>(i => i.VoucherId, this.props.params().voucher.Id);\r\n        };\r\n\r\n        this.extraHeaderNodes = () => {\r\n            const { voucher } = this.props.params();\r\n            const chequeDate = voucher.ChequeDate ? dayjs(voucher.ChequeDate).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\") : \"\";\r\n            const issueDate = voucher.ChequeDate ? dayjs(voucher.IssueDate).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\") : \"\";\r\n\r\n            return (\r\n                <Descriptions column={{ xxl: 4, xl: 4, lg: 2, md: 2, sm: 1, xs: 1 }} className=\"header-page\">\r\n                    <Descriptions.Item label=\"شماره حواله\">{voucher.VoucherNo}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"تاریخ صدور\">{issueDate}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"شماره چک\">{voucher.ChequeNo}</Descriptions.Item>\r\n                    <Descriptions.Item label=\"تاریخ چک\">{chequeDate}</Descriptions.Item>\r\n                </Descriptions>\r\n            );\r\n        };\r\n    }\r\n}","import { Button, Col } from \"antd\";\r\nimport { ReactNode } from \"react\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { enmVoucherTypes, IDamageCaseVoucher, IDamageCaseVoucherProps, IDamageCaseVoucherStates } from \"../interfaces\";\r\nimport { DamageCaseVoucherPaymentItem } from \"./damageCaseVoucherPaymentItem\";\r\n\r\nexport class DamageCaseVoucherPayment extends EntityManager<IDamageCaseVoucher, IDamageCaseVoucherProps, IDamageCaseVoucherStates>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"حواله\",\r\n            name: \"DamageCaseVoucherPayment\",\r\n            Properties: [\r\n                {\r\n                    title: \"شماره حواله\",\r\n                    dataIndex: \"VoucherNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: true\r\n                },\r\n                {\r\n                    title: \"وضعیت\",\r\n                    dataIndex: \"Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        options: [{ title: \"آماده پرداخت\", value: 0 }, { title: \"پرداخت شده\", value: 1 }]\r\n                    }\r\n                },\r\n                {\r\n                    title: \"تاریخ صدور\",\r\n                    dataIndex: \"IssueDate\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    filterable: true\r\n                },\r\n                {\r\n                    title: \"شماره چک\",\r\n                    dataIndex: \"ChequeNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    filterable: true\r\n                },\r\n                {\r\n                    title: \"تاریخ چک\",\r\n                    dataIndex: \"ChequeDate\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    filterable: true\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n\r\n        this.originalFilter = () => {\r\n            return ComparisonFilter.Equal<IDamageCaseVoucher>(v => v.Type, enmVoucherTypes.Payment);\r\n        };\r\n\r\n        this.renderingToolbar = () => {\r\n            let result: ReactNode[] = [];\r\n            let damageCaseVoucherPaymentItemAccess = this.initialData?.AccessList[\"DamageCaseVoucherPaymentItem\"];\r\n\r\n            if (damageCaseVoucherPaymentItemAccess === true) {\r\n                result.push(\r\n                    <Col key=\"DamageCaseVoucherPaymentItems\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={this.onVoucherItemsClick}>اقلام حواله</Button>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            return result.length ? (<> {result} </>) : (<></>);\r\n        };\r\n    }\r\n    onVoucherItemsClick = () => {\r\n        this.addLookupForm(\"DamageCaseVoucherPaymentItem\",\r\n            <DamageCaseVoucherPaymentItem\r\n                key=\"DamageCaseVoucherPaymentItem\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                onClose={this.onLookupClosed}\r\n                params={() => {\r\n                    return { voucher: this.selectedEntity! };\r\n                }}\r\n            />);\r\n    }\r\n}","import { enmPolicyholderResponseTypes, IDamageCase } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState, ICallOptions, IResult } from \"../../components/infrastructure/models\";\r\nimport { PolicyholderConfirmationForm } from \"../../evaluation/damageCaseEvaluator/components\";\r\nimport { IPolicyholderConfirmation } from \"../../evaluation/damageCaseEvaluator/policyholderConfirmation\";\r\n\r\ninterface IPolicyholderConfirmationProps extends IBaseProps {\r\n    damageCase: IDamageCase;\r\n}\r\n\r\ninterface IPolicyholderConfirmationStates extends IBaseStates {\r\n    currentEntity: IPolicyholderConfirmation;\r\n}\r\n\r\nexport class PolicyholderConfirmation extends BaseComponent<IPolicyholderConfirmationProps, IPolicyholderConfirmationStates> {\r\n    constructor(props: IPolicyholderConfirmationProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: false,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            currentEntity: {\r\n                RowGuid: Core.newId(),\r\n                State: enmEntityState.Added\r\n            } as any\r\n        };\r\n    }\r\n    submit = async (values: any) => {\r\n        const responseType = values[\"ResponseType\"];\r\n        const bank = values[\"Bank\"];\r\n        const bankBranch = values[\"BankBranch\"];\r\n        const bankAccountNo = values[\"BankAccountNo\"];\r\n        const bankCardNo = values[\"BankCardNo\"];\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"portal/confirmation\",\r\n            data: {\r\n                data: {\r\n                    TicketNo: this.props.damageCase.TicketNo,\r\n                    ResponseType: responseType,\r\n                    ObjectionDescription: responseType === enmPolicyholderResponseTypes.Objection ? values[\"ObjectionDescription\"] : null,\r\n                    ShebaNo: responseType === enmPolicyholderResponseTypes.Pay ? values[\"ShebaNo\"].replace(/[^0-9.]/g, '') : null,\r\n                    BankCode: bank?.Code,\r\n                    BankBranch: bankBranch,\r\n                    BankAccountNo: bankAccountNo,\r\n                    BankCardNo: bankCardNo\r\n                }\r\n            },\r\n            onSuccess: (result: IResult) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('پاسخ ارسال شد');\r\n                    this.props.onClose && this.props.onClose({ preventBack: true });\r\n                }\r\n            }\r\n        };\r\n        return await this.callApi(fetchOpt);\r\n    }\r\n    virtualRender() {\r\n        return (\r\n            <PolicyholderConfirmationForm\r\n                key={this.state.currentEntity.RowGuid}\r\n                parent={this}\r\n                currentEntity={this.state.currentEntity}\r\n                damageCase={this.props.damageCase}\r\n                loading={this.state.loading}\r\n                onSubmit={this.submit}\r\n                onClose={this.props.onClose}\r\n                damageCaseDocumentTypeAttachments={[]}\r\n            />\r\n        );\r\n    }\r\n}","import { Button, Input, message, Table } from \"antd\";\r\nimport { UploadOutlined } from '@ant-design/icons';\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { IAttachment } from \"../../baseInfo/attachment/interfaces\";\r\n\r\nexport interface IDocumnetsUploaderProps extends IBaseProps {\r\n    onChange: (attachments: IAttachment[]) => void;\r\n    attachments: IAttachment[];\r\n    disabled?: boolean;\r\n}\r\n\r\nexport interface IDocumnetsUploaderStates extends IBaseStates {\r\n    attachments: IAttachment[];\r\n}\r\n\r\nexport class DocumnetsUploader extends BaseComponent<IDocumnetsUploaderProps, IDocumnetsUploaderStates>{\r\n    inputFile: { [key: string]: Input | null };\r\n    whiteList: string = 'image/png,image/jpg,image/jpeg,application/pdf';\r\n    whiteListExtensions: string[] = \".png,.jpg,.jpeg,.pdf\".split(\",\");\r\n    constructor(props: IDocumnetsUploaderProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            attachments: props.attachments,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2\r\n        };\r\n        this.inputFile = {};\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.setLoading(false);\r\n    }\r\n    componentWillUnmount() {\r\n        super.componentWillUnmount();\r\n        for (let key in this.inputFile)\r\n            delete this.inputFile[key];\r\n    }\r\n    browseFile = (record: IAttachment) => {\r\n        this.inputFile[record.RowGuid]?.input.click();\r\n    }\r\n    changeFile = async (event: any, record: any) => {\r\n        let attachments = this.state.attachments;\r\n        let fileStream = event.target.files.length ? event.target.files[0] : undefined;\r\n        if (!fileStream || this.whiteList.split(',').indexOf(fileStream.type) === -1 || !fileStream.name || fileStream.name === '' || fileStream.name.split('.').length > 2 || fileStream.name.indexOf('\\0') > -1 || this.whiteListExtensions.filter(f => fileStream.name.toLowerCase().endsWith(f)).length === 0) {\r\n            message.error(`فایل انتخاب شده غیرمجاز است`);\r\n            return false;\r\n        }\r\n        if (fileStream.size > 20971520) {\r\n            message.error(`حداکثر حجم فایل 20 مگابایت باشد`);\r\n            return false;\r\n        }\r\n        let attachment = attachments.find(a => a.RowGuid === record.RowGuid) as any;\r\n        attachment['File'] = fileStream;\r\n        attachment['Title'] = fileStream.name;\r\n        this.props.onChange(attachments);\r\n        this.setState({ attachments });\r\n    }\r\n    virtualRender() {\r\n        const columns = [\r\n            {\r\n                title: 'شرح مدرک',\r\n                dataIndex: 'Description',\r\n                key: 'Description',\r\n                width: 'auto',\r\n                render: (_: any, record: IAttachment, __: number) => {\r\n                    return <label className={(record as any).Required === true ? \"label-required\" : \"label-norequired\"}> {record.Description}</label >\r\n                }\r\n            },\r\n            {\r\n                title: 'نام فایل',\r\n                dataIndex: 'Title',\r\n                key: 'Title',\r\n                width: 'auto',\r\n                render: (text: any, attachment: IAttachment, _: number) => {\r\n                    if (this.props.disabled) {\r\n                        return <a href={attachment.Path} download={text}>{text}</a>;\r\n                    }\r\n                    return text;\r\n                }\r\n            },\r\n            {\r\n                title: '',\r\n                dataIndex: 'Uploader',\r\n                key: 'Uploader',\r\n                width: 50,\r\n                render: (_: any, record: IAttachment, __: number) => {\r\n                    return (\r\n                        <div style={{ margin: \"10px 0px\" }}>\r\n                            <Button onClick={() => this.browseFile(record)} icon={<UploadOutlined style={{ verticalAlign: 'middle' }} />} style={{}} >\r\n                                انتخاب فایل\r\n                            </Button>\r\n                            <Input\r\n                                type=\"file\"\r\n                                hidden\r\n                                ref={node => this.inputFile[record.RowGuid] = node}\r\n                                onChange={e => this.changeFile(e, record)}\r\n                                accept={this.whiteList} />\r\n                        </div>\r\n                    );\r\n                }\r\n            }\r\n        ];\r\n\r\n        let { attachments } = this.state;\r\n        return (\r\n            <>\r\n                <Table\r\n                    rowKey={\"Description\"}\r\n                    showHeader={false}\r\n                    columns={columns}\r\n                    dataSource={attachments.map(a => a)}\r\n                    bordered\r\n                />\r\n            </>\r\n        );\r\n    }\r\n}","import { Alert, Button, Descriptions, Popconfirm, Row } from \"antd\";\r\nimport { StopOutlined, SendOutlined } from '@ant-design/icons';\r\nimport { IAttachment } from \"../../baseInfo/attachment/interfaces\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState, ICallOptions, IResult } from \"../../components/infrastructure/models\";\r\nimport { DocumnetsUploader } from \"./documentsUploader\";\r\nimport React from \"react\";\r\n\r\ninterface IUploadDocumentsStates extends IBaseStates {\r\n    attachments: IAttachment[];\r\n}\r\n\r\nexport interface IUploadDocumentsProps extends IBaseProps {\r\n    ticketNo: number;\r\n    removeable?: boolean;\r\n    onRemove?: (ticketNo: number) => Promise<void>;\r\n    essentialDocuments?: { Name: string; Code: string; Required?: boolean; }[];\r\n    descriptions?: string;\r\n}\r\n\r\nexport class UploadDocuments extends BaseComponent<IUploadDocumentsProps, IUploadDocumentsStates>{\r\n    constructor(props: IUploadDocumentsProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            attachments: (this.props.essentialDocuments ?? []).map(d => {\r\n                return {\r\n                    RowGuid: Core.newId(),\r\n                    CreatorId: 0,\r\n                    State: enmEntityState.Added,\r\n                    Path: undefined,\r\n                    Description: d.Name,\r\n                    DocumentTypeCode: d.Code,\r\n                    Required: d.Required || d.Required === undefined\r\n                } as any;\r\n            })\r\n        };\r\n        this.title = \"آپلود مدارک\";\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.setLoading(false);\r\n    }\r\n    onChangeAttachments = (attachments: IAttachment[]) => {\r\n        this.setState({ attachments });\r\n    }\r\n    submit = async () => {\r\n        let notSelectedAttachments: IAttachment[] = [];\r\n        let formData = new FormData();\r\n        formData.append('TicketNo', this.props.ticketNo.toString());\r\n        this.state.attachments.forEach(attachment => {\r\n            if ((attachment as any).File)\r\n                formData.append('Attachments', (attachment as any).File);\r\n            else if ((attachment as any).Required === true)\r\n                notSelectedAttachments.push(attachment);\r\n            else\r\n                return;\r\n\r\n            formData.append('Descriptions', attachment.Description!);\r\n            formData.append('DocumentTypeCodes', (attachment as any).DocumentTypeCode);\r\n        });\r\n\r\n        if (notSelectedAttachments.length > 0) {\r\n            Core.warningNotification('لطفا همه مدارک اجباری را آپلود نمائید');\r\n            return;\r\n        }\r\n\r\n        let opt: ICallOptions = {\r\n            withBlock: true,\r\n            withBlockTitle: 'در حال آپلود مستندات خسارت...',\r\n            url: \"portal/uploadessentialdocuments\",\r\n            data: formData,\r\n            contentType: false,\r\n            headers: [{ key: \"encType\", value: \"multipart/form-data\" }],\r\n            onSuccess: (result: IResult) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('مستندات با موفقیت آپلود شد و پرونده برای ارزیابی ارسال شد')\r\n                    this.props.onClose && this.props.onClose(this);\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    virtualRender() {\r\n        const extraHeaderNodes: React.ReactNode[] = [];\r\n        extraHeaderNodes.push(\r\n            <Descriptions key={\"Descriptions\"} className=\"header-page\">\r\n                <Descriptions.Item label=\"شماره پیگیری\">{this.props.ticketNo}</Descriptions.Item>\r\n            </Descriptions>\r\n        );\r\n\r\n        const header = this.getPageHeader({\r\n            title: this.title,\r\n            onBack: () => { this.props.onClose && this.props.onClose(this); },\r\n            extraHeaderNodes\r\n        });\r\n\r\n        return (\r\n            <div>\r\n                {!!this.props.invokePath && header}\r\n\r\n                <Alert\r\n                    style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                    message={\r\n                        !this.props.invokePath\r\n                            ?\r\n                            <>\r\n                                <Row>بیمه گزار/مشتری گرامی، خواهشمند است فایلهای مشخص شده زیر، جهت رفع نقص مدارک، مجدد بارگذاری گردد</Row>\r\n                                <Row>\r\n                                    <>توضیحات:</>\r\n                                    <b style={{ marginRight: 10 }}>{this.props.descriptions}</b>\r\n                                </Row>\r\n                            </>\r\n                            :\r\n                            <>\r\n\r\n                                بیمه گزار/مشتری گرامی، در صورت عدم آپلود مدارک زیر، پرونده خسارت برای کارشناسان ارزیاب ارسال نخواهد شد.\r\n                                <br />\r\n                                خواهشمند است فایل‌های مشخص شده زیر جهت ارزیابی پرونده خسارت، بارگذاری گردد.\r\n                            </>\r\n                    }\r\n                    type=\"info\"\r\n                    showIcon\r\n                />\r\n\r\n                <DocumnetsUploader attachments={this.state.attachments} onChange={this.onChangeAttachments} />\r\n\r\n                <div style={{ borderTop: '1px solid #e5e5e5', padding: '5px 45px', marginTop: 10, direction: \"ltr\" }}>\r\n                    <Button type=\"primary\" htmlType=\"button\" icon={<SendOutlined rotate={180} />} loading={this.state.loading} style={{ width: \"150px\", marginTop: 10, marginBottom: 10 }} onClick={this.submit}>\r\n                        ارسال مدارک\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"button\" loading={this.state.loading} style={{ width: \"160px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }} onClick={() => this.props.onClose && this.props.onClose(this)}>\r\n                        بعداً ارسال می نمایم\r\n                    </Button>\r\n\r\n                    {this.props.removeable &&\r\n                        <Popconfirm okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} okText=\"بلی\" cancelText=\"خیر\" title=\"آیا مایلید پرونده خسارت را حذف نمایید؟\"\r\n                            onConfirm={async () => {\r\n                                if (this.props.onRemove)\r\n                                    await this.props.onRemove(this.props.ticketNo);\r\n                                this.props.onClose && this.props.onClose(this);\r\n                            }}>\r\n                            <Button type=\"ghost\" htmlType=\"button\" icon={<StopOutlined />} loading={this.state.loading} style={{ width: \"170px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                                حذف پرونده خسارت\r\n                            </Button>\r\n                        </Popconfirm>\r\n                    }\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}","//import { message } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IEntityManagerProps, IEntityManagerStates, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ICallOptions, IEntity, IFetchingResult, IOrdering, IPaging } from \"../../components/infrastructure/models\";\r\n\r\ninterface IEvaluator extends IEntity {\r\n    Name?: string;\r\n    Code?: string;\r\n    Phone?: string;\r\n    ProvinceName?: string;\r\n    ProvinceCode?: string;\r\n    CityName?: string;\r\n    CityCode?: string;\r\n    Address?: string;\r\n    WorkTime?: string;\r\n}\r\nexport interface IEvaluatorProps extends IEntityManagerProps<IEvaluator> {\r\n    provinceCode?: string;\r\n    cityCode?: string;\r\n}\r\nexport interface IEvaluatorStates extends IEntityManagerStates<IEvaluator> {\r\n\r\n}\r\n\r\nexport interface IEvaluatorFetchingResultDto extends IFetchingResult<IEvaluator> {\r\n    EvaluatorsCount: number;\r\n}\r\n\r\nexport class Evaluator extends EntityManager<IEvaluator, IEvaluatorProps, IEvaluatorStates> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Evaluator\",\r\n            title: \"ارزیاب\",\r\n            Properties: [\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 70,\r\n                },\r\n                {\r\n                    title: \"نام مرکز\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"استان\",\r\n                    dataIndex: \"ProvinceName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"شهر\",\r\n                    dataIndex: \"CityName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"آدرس\",\r\n                    dataIndex: \"Address\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 800,\r\n                },\r\n                {\r\n                    title: \"تلفن\",\r\n                    dataIndex: \"Phone\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    renderColumn: (_, record: IEvaluator) => <>{(!!record.Phone && !record.Phone.startsWith('0') ? '0' : '') + record.Phone ?? ''}</>,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"ساعت کار مرکز\",\r\n                    dataIndex: \"WorkTime\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 150,\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    searchValue?: any;\r\n    onInitializing() {\r\n        super.onInitializing();\r\n        this.getInitialDataUrl = \"center/getinitialdata\";\r\n    }\r\n    async search(value?: any, _?: string, paging?: IPaging, ordering?: IOrdering) {\r\n        this.searchValue = value;\r\n\r\n        if (ordering)\r\n            this.ordering = ordering;\r\n\r\n        if (paging)\r\n            this.paging = paging;\r\n\r\n        await this.fetchData();\r\n    }\r\n    async fetchData() {\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: 'portal/evaluators',\r\n            data: { provinceCode: this.props.provinceCode, cityCode: this.props.cityCode, search: this.searchValue, paging: this.paging, ordering: this.ordering },\r\n            onSuccess: (result) => {\r\n\r\n                if (!this.mounted && !result.ValidationState.Successful)\r\n                    return;\r\n\r\n                //let res: any = result;\r\n\r\n                //if (this.props.isLookupMode && this.props.cityCode && !(res.Data as IEvaluator[]).filter(e => e.CityCode === this.props.cityCode).length && !this.searchValue)\r\n                //    message.warn(\"در آدرس انتخابی شما ارزیاب فعال وجود ندارد، در صورت تمایل از لیست مراکز ارزیابی، مرکز مورد نظر خود را انتخاب بفرمایید.\", 5);\r\n\r\n                if (this.props.onDataFetched) {\r\n                    this.props.onDataFetched(result as IFetchingResult<IEvaluator>);\r\n                    return;\r\n                }\r\n            },\r\n            onError: () => {\r\n                if (this.props.onDataFetched)\r\n                    this.props.onDataFetched({ Data: [], TotalResultCount: 0, ValidationState: { Successful: false, ValidationResults: [] } });\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n}","import React, { useContext } from \"react\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmValidationLevel, IResultSet } from \"../../components/infrastructure/models\";\r\n//import debounce from 'lodash/debounce';\r\nimport { Alert, Button, Form, Input, Radio, Tooltip } from \"antd\";\r\nimport { InfoCircleFilled, QuestionCircleFilled, WarningFilled } from '@ant-design/icons';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport AppContext, { AppContextProps } from \"../../components/infrastructure/appContext\";\r\nimport { IPolicyEquipmentModel } from \"../../baseInfo/policyEquipmentModel/interfaces\";\r\n\r\ninterface InquiryPolicyStates {\r\n    loading: boolean;\r\n    equipmentType: \"Mobile\" | \"Other\";\r\n    done?: boolean;\r\n    isAuthorized: boolean;\r\n    isAccessDenied?: boolean;\r\n}\r\n\r\ninterface InquiryPolicyProps {\r\n    onClose?: (policyEquipmentModel?: IPolicyEquipmentModel) => void;\r\n}\r\n\r\n//interface IEquipment {\r\n//    name: string;\r\n//    code: string;\r\n//}\r\n\r\n//interface IBrand {\r\n//    name: string;\r\n//    code: string;\r\n//}\r\n\r\n//interface IEquipmentModel {\r\n//    name: string;\r\n//    code: string;\r\n//    equipmentCode: string;\r\n//}\r\n\r\n//interface IEquipmentStates {\r\n//    loading: boolean;\r\n//    selectedEquipmentCode?: string;\r\n//    equipmentList: IEquipment[];\r\n//}\r\n\r\n//interface IBrandStates {\r\n//    loading: boolean;\r\n//    selectedBrandCode?: string;\r\n//    brandList: IBrand[];\r\n//}\r\n\r\n//interface IEquipmentModelStates {\r\n//    loading: boolean;\r\n//    selectedEquipmentModelCode?: string;\r\n//    equipmentModelList: IEquipmentModel[];\r\n//}\r\n\r\nexport const InquiryPolicy = (props: InquiryPolicyProps) => {\r\n    const { path, params, getUserInfo } = useContext<AppContextProps>(AppContext);\r\n    const [state, setState] = React.useState<InquiryPolicyStates>({ loading: false, equipmentType: \"Mobile\", isAuthorized: true });\r\n    const [form] = Form.useForm();\r\n    const componentWillUnmount = React.useRef(false);\r\n\r\n    const reset = () => {\r\n        setState({ ...state, loading: false });\r\n        if (props.onClose)\r\n            props.onClose();\r\n        else\r\n            window.history.back();\r\n    };\r\n\r\n    const inquiry = async (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n\r\n        const imei1 = values['imei1'];\r\n        const imei2 = values['imei2'];\r\n        const equipmentSerialNo = values['equipmentSerialNo'];\r\n\r\n        if (!equipmentSerialNo && !imei1 && !imei2) {\r\n            Core.errorNotification('حداقل یکی از ورودی های سریال دستگاه یا IMEI1 یا IMEI2 اجباری است');\r\n            return;\r\n        }\r\n\r\n        setState({ ...state, loading: true });\r\n\r\n        let response = await fetch(\"api/portal/inquirypolicy\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                isMobile: state.equipmentType === \"Mobile\",\r\n                imei1: state.equipmentType === \"Mobile\" ? values['imei1'] ?? null : null,\r\n                imei2: state.equipmentType === \"Mobile\" ? values['imei2'] ?? null : null,\r\n                equipmentSerialNo: state.equipmentType === \"Other\" ? values['equipmentSerialNo'] ?? null : null\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current === true)\r\n            return;\r\n\r\n        let result: IResultSet<any> = await response.json();\r\n\r\n        const { ValidationResults } = result.ValidationState;\r\n        if (!result.ValidationState.Successful) {\r\n            if (ValidationResults.find(v => v.Level === enmValidationLevel.AccessDenied)) {\r\n                Core.errorNotification(ValidationResults[0].Message!);\r\n                setState({ ...state, isAccessDenied: true });\r\n                return;\r\n            }\r\n            if (ValidationResults.find(v => v.Level === enmValidationLevel.Unauthorized)) {\r\n                Core.errorNotification(ValidationResults[0].Message!);\r\n                setState({ ...state, isAuthorized: false });\r\n                return;\r\n            }\r\n            Core.errorNotification(ValidationResults[0].Message);\r\n            setState({ ...state, loading: false, done: false });\r\n        }\r\n        else {\r\n            for (let i = 0; i < ValidationResults.length; i++) {\r\n                if (ValidationResults[i].Level === enmValidationLevel.Info)\r\n                    Core.successNotification(ValidationResults[i].Message);\r\n                else if (ValidationResults[i].Level === enmValidationLevel.Warning)\r\n                    Core.warningNotification(ValidationResults[i].Message);\r\n            }\r\n\r\n            if (!ValidationResults.length) {\r\n                Core.successNotification(\"استعلام بیمه نامه با موفقیت انجام شد\");\r\n                const userInfo = getUserInfo();\r\n                if (userInfo) {\r\n                    const { extraVariables } = userInfo;\r\n                    if (!extraVariables[\"IsPolicyholder\"]) {\r\n                        setTimeout(() => {\r\n                            document.location.replace('/');\r\n                        }, 0)\r\n                        return;\r\n                    }\r\n                }\r\n            }\r\n            if (props.onClose)\r\n                props.onClose(result.Data);\r\n            else\r\n                setState({ ...state, loading: false, done: true });\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n        };\r\n    }, []);\r\n\r\n    const mobileFieldsStyle = state.equipmentType === \"Mobile\" ? {} : { display: \"none\" };\r\n    const otherFieldsStyle = state.equipmentType === \"Mobile\" ? { display: \"none\" } : {};\r\n\r\n    if (!state.isAuthorized) {\r\n        let returnUrl = '';\r\n        const url = Core.getUrl(path, params);\r\n        if (url !== '')\r\n            returnUrl = '?returnUrl=' + url;\r\n        return (<Redirect to={{ pathname: '/login', search: returnUrl }} />);\r\n    }\r\n\r\n    if (state.isAccessDenied === true)\r\n        return (<Redirect to={'/'} />);\r\n\r\n    if (state.done)\r\n        return <Redirect to={\"/policylist\"} />;\r\n\r\n    return (\r\n        <div className=\"login-scroll\" style={{ width: \"100%\", display: 'flex', textAlign: \"center\", justifyContent: \"center\", marginTop: 20 }}>\r\n            <div className=\"col-xl-5 col-lg-6 col-md-8 col-sm-10 col-xs-10\" style={{ margin: 10 }}>\r\n\r\n                <Form\r\n                    form={form}\r\n                    labelCol={{ span: 6 }}\r\n                    wrapperCol={{ span: 18 }}\r\n                    name=\"normal_login\"\r\n                    className=\" login-form col-sm-8 col-md-6 col-lg-6 col-xl-4 col-xs-8 \"\r\n                    initialValues={{ remember: true }}\r\n                    onFinish={inquiry}\r\n                    onReset={reset}\r\n                    style={{ width: \"calc(100% - 20px)\", height: \"100%\", textAlign: 'right', margin: 10 }}\r\n                >\r\n                    <div className=\"box box-blue\" style={{ backgroundColor: \"#fefefe90\", border: \"1px solid white\", borderRadius: 15 }}>\r\n                        <div className=\"box-title\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                            <div className=\"caption\">استعلام بیمه نامه</div>\r\n                        </div>\r\n\r\n                        <div className=\"box-body form\" style={{ border: \"1px solid white\", borderRadius: 15 }}>\r\n                            <div className=\"form-body\">\r\n\r\n                                <Alert\r\n                                    style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                                    message={\"بیمه گزار/مشتری گرامی، جهت استعلام بیمه نامه، لطفا سریال دستگاه یا IMEI را وارد نمایید.\"}\r\n                                    type=\"info\"\r\n                                    icon={<InfoCircleFilled className=\"blink\" />}\r\n                                    showIcon\r\n                                />\r\n\r\n                                <Radio.Group key={'equipmentType'} style={{ marginBottom: 10 }} onChange={e => setState({ ...state, equipmentType: e.target.value })} value={state.equipmentType}>\r\n                                    <Radio key={'mobile'} value={\"Mobile\"}>\r\n                                        <div>\r\n                                            <span>استعلام بیمه نامه دستگاه موبایل</span>\r\n\r\n                                        </div>\r\n                                    </Radio>\r\n                                    <Radio key={'other'} value={\"Other\"}>\r\n                                        <div>\r\n                                            <span>استعلام بیمه نامه دستگاه غیر موبایل</span>\r\n\r\n                                        </div>\r\n                                    </Radio>\r\n                                </Radio.Group>\r\n\r\n                                <Form.Item\r\n                                    name=\"imei1\"\r\n                                    label=\"سریال IMEI1\"\r\n                                    style={mobileFieldsStyle}\r\n                                    extra={\r\n                                        <Tooltip title=\"سریال IMEI1 دستگاه موبایل\" placement={\"right\"}>\r\n                                            <Button icon={<QuestionCircleFilled style={{ transform: \"scaleX(-1)\" }} />} style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0, minHeight: 0 }} />\r\n                                        </Tooltip>\r\n                                    }\r\n                                >\r\n                                    <Input\r\n                                        autoComplete=\"off\"\r\n                                        placeholder=\"سریال IMEI1 دستگاه موبایل\"\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"imei2\"\r\n                                    label=\"سریال IMEI2\"\r\n                                    style={mobileFieldsStyle}\r\n                                    extra={\r\n                                        <Tooltip title=\"سریال IMEI2 دستگاه موبایل\" placement={\"right\"}>\r\n                                            <Button icon={<QuestionCircleFilled style={{ transform: \"scaleX(-1)\" }} />} style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0, minHeight: 0 }} />\r\n                                        </Tooltip>\r\n                                    }\r\n                                >\r\n                                    <Input\r\n                                        autoComplete=\"off\"\r\n                                        placeholder=\"سریال IMEI2 دستگاه موبایل\"\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"equipmentSerialNo\"\r\n                                    label=\"سریال دستگاه\"\r\n                                    extra={\r\n                                        <Tooltip title=\"سریال دستگاه غیر موبایل\" placement={\"right\"}>\r\n                                            <Button icon={<QuestionCircleFilled style={{ transform: \"scaleX(-1)\" }} />} style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0, minHeight: 0 }} />\r\n                                        </Tooltip>\r\n                                    }\r\n                                    style={otherFieldsStyle}\r\n                                >\r\n                                    <Input\r\n                                        autoComplete=\"off\"\r\n                                        placeholder=\"سریال دستگاه غیر موبایل\"\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    style={{ direction: 'ltr', textAlign: 'justify', marginTop: 10 }}\r\n                                >\r\n                                    <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={state.loading}>\r\n                                        بررسی\r\n                                    </Button>\r\n                                    {\r\n                                        props.onClose &&\r\n                                        <Button type=\"default\" htmlType=\"reset\" className=\"login-form-button\" loading={state.loading}>\r\n                                            لغو\r\n                                        </Button>\r\n                                    }\r\n                                    {\r\n                                        !props.onClose &&\r\n                                        <Button type=\"default\" htmlType=\"reset\" className=\"login-form-button\" loading={state.loading}>\r\n                                            برگشت\r\n                                        </Button>\r\n                                    }\r\n                                </Form.Item>\r\n\r\n                                {state.done === false && < Alert\r\n                                    style={{ marginTop: 20, marginBottom: 10, textAlign: 'justify' }}\r\n                                    message={\r\n                                        <>\r\n                                            بیمه گزار/مشتری گرامی، در صورت عدم دریافت و رؤیت بیمه نامه جهت ثبت خسارت، از طریق لینک  <b><a href=\"https://www.si24.ir/fa/services/form_Mobiledamage/add/template/defaultTemplate/swd_id/54504/\" target=\"_blank\" rel=\"noreferrer\">\"ثبت خسارت تجهیزات الکترونیک\"</a></b> نسبت به ثبت خسارت اقدام نمایید. کارشناسان مربوطه ظرف مدت 72 ساعت کاری با شما تماس خواهند گرفت.\r\n                                        </>\r\n                                    }\r\n                                    type=\"warning\"\r\n                                    icon={<WarningFilled className=\"blink\" />}\r\n                                    showIcon\r\n                                />}\r\n\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                </Form>\r\n            </div>\r\n        </div>\r\n    );\r\n}","import { Alert, Button, Col, Descriptions, List, Tabs } from \"antd\";\r\nimport { IPolicyEquipmentModel, IPolicyEquipmentModelFetchingInfo } from \"../../baseInfo/policyEquipmentModel/interfaces\";\r\nimport { BaseEntityManager, } from \"../../components/entityManager\";\r\nimport { enmControlType, enmEntityManagerState, enmPropertyType, IEntityManagerProps, IEntityManagerStates, IInitialData, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter, IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { enmOrderingType, ICallOptions, IOrdering, IPaging } from \"../../components/infrastructure/models\";\r\nimport { PdfViewer } from \"../../components/pdfViewer\";\r\nimport { DamageCaseCreate } from \"../damageCasePolicyholder/damageCaseCreate\";\r\nimport { InquiryPolicy } from \"./inquiry\";\r\nimport { InfoCircleFilled } from \"@ant-design/icons\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\n\r\nconst { TabPane } = Tabs;\r\n\r\nexport interface IPolicyListProps extends IEntityManagerProps<IPolicyEquipmentModel> {\r\n    params?: () => { loadPolicyDamageCases: boolean; };\r\n}\r\n\r\ninterface IPolicyListStates extends IEntityManagerStates<IPolicyEquipmentModel> {\r\n    policyCertFrameDisplayed?: boolean;\r\n}\r\n\r\nexport class PolicyList extends BaseEntityManager<IPolicyEquipmentModel, IPolicyListProps, IPolicyListStates, IPolicyEquipmentModelFetchingInfo, IInitialData> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"Policy\",\r\n            title: \"بیمه های من\",\r\n            Properties: [\r\n                {\r\n                    title: \"سریال تجهیز\",\r\n                    dataIndex: \"EquipmentSerialNo\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: false,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"سریال بیمه نامه\",\r\n                    dataIndex: \"Policy.SerialNo\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: false,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شروع بیمه نامه\",\r\n                    dataIndex: \"Policy.StartDateTime\",\r\n                    propertyType: enmPropertyType.datetime,\r\n                    controlType: enmControlType.datetime,\r\n                    disabled: false,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"پایان بیمه نامه\",\r\n                    dataIndex: \"Policy.EndDateTime\",\r\n                    propertyType: enmPropertyType.datetime,\r\n                    controlType: enmControlType.datetime,\r\n                    disabled: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"تجهیز\",\r\n                    dataIndex: \"Equipment.Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"BrandTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    disabled: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"مدل تجهیز\",\r\n                    dataIndex: \"EquipmentModelTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"Policy.Policyholder.FullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    disabled: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی بیمه گزار/مشتری\",\r\n                    dataIndex: \"Policy.Policyholder.NationalCode\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"سرمایه بیمه نامه\",\r\n                    dataIndex: \"InsuredValue\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.priceinput,\r\n                    filterable: false,\r\n                    disabled: false,\r\n                    width: 150\r\n                },\r\n            ]\r\n        };\r\n    }\r\n    tabsElement?: HTMLDivElement | null;\r\n   \r\n    onInitializing() {\r\n        this.baseUrl = \"portal\";\r\n        this.getUrl = \"portal/PolicyList\";\r\n        this.getInitialDataUrl = \"portal/GetPolicyListInitialData\";\r\n\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n\r\n        this.originalOrderings = () => [{ OrderBy: enmOrderingType.Descending, Property: 'Policy.StartDateTime' }];\r\n\r\n        this.onDataFetching = (fetchingInfo, onViewMode) => {\r\n            fetchingInfo.LoadPolicyDamageCases = onViewMode || (this.props.params && this.props.params()?.loadPolicyDamageCases);\r\n            fetchingInfo.LoadPolicyNavigations = onViewMode;\r\n            fetchingInfo.LoadPolicyAttachments = onViewMode;\r\n        };\r\n\r\n        this.extraHeaderButtons = () => {\r\n            return (\r\n                [<Button key=\"inquiryPolicies\" style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '100px' }} type=\"primary\" onClick={this.inquiryPolicies} loading={this.state.loading}>بروزرسانی</Button>]\r\n            );\r\n        };\r\n\r\n        this.renderingToolbar = () => {\r\n            if (!this.selectedEntity)\r\n                return <></>;\r\n\r\n            const policy = this.selectedEntity?.Policy;\r\n\r\n            let endDateTime = new Date(policy.EndDateTime);\r\n            let minValidDate = new Date();\r\n            minValidDate.setMonth(minValidDate.getMonth() - 1);\r\n            if (minValidDate.getTime() > endDateTime.getTime()) { // بیش از یک ماه از انقضای بیمه نامه گذشته است\r\n                return <></>;\r\n            }\r\n            return (\r\n                <Col key=\"SendToEvaluation\" style={{ marginLeft: 10 }}>\r\n                    <Button key=\"createDamageCaseButton\" type=\"primary\" onClick={() => this.fetchItem()}>ثبت خسارت جدید </Button>\r\n                </Col>\r\n            );\r\n        };\r\n\r\n        this.extraHeaderNodes = () => {\r\n            return (\r\n                this.state.state === enmEntityManagerState.List && <Alert\r\n                    style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                    message={\r\n                        <>\r\n                            <span>بیمه گزار/مشتری گرامی، چنانچه بیمه نامه مد نظر در لیست زیر موجود نیست، از طریق</span>\r\n                            <Button key=\"inquiryPolicyButton\" type=\"link\" onClick={() => this.inquiryPolicy()}><b>استعلام بیمه نامه</b></Button>\r\n                            <span>نسبت به ثبت دستگاه خود اقدام نمایید.</span>\r\n                            <br />\r\n                            <span>همچنین جهت مشاهده جزئیات و ثبت خسارت، می توانید روی ردیف مورد نظر کلیک نمایید</span>\r\n                        </>\r\n                    }\r\n                    type=\"info\"\r\n                    icon={<InfoCircleFilled className=\"blink\" />}\r\n                    showIcon\r\n                />\r\n            );\r\n        };\r\n        this.extraViewNode = () => {\r\n\r\n            const { currentEntity } = this.state;\r\n            if (!currentEntity || !currentEntity.Policy)\r\n                return;\r\n\r\n            const policyEquipmentModel = currentEntity;\r\n            const equipmentName = policyEquipmentModel.Equipment.Name;\r\n            const equipmentModelName = policyEquipmentModel.EquipmentModelTitle;\r\n            const brandName = policyEquipmentModel.BrandTitle;\r\n\r\n            const policyCert = currentEntity.Policy.PolicyAttachments[0];\r\n\r\n            return (\r\n                <div style={{ margin: 0, marginTop: 10 }} ref={node => this.tabsElement = node}>\r\n                    <div className=\"box\" style={{ border: \"1px solid #91b5b7\" }}>\r\n                        <Tabs defaultActiveKey=\"1\" onChange={key => {\r\n                            if (this.tabsElement) {\r\n                                this.setState({ policyCertFrameDisplayed: key === \"4\" });\r\n                            }\r\n                        }}>\r\n                            <TabPane\r\n                                tab={\r\n                                    <span style={{ marginRight: 10 }}>\r\n                                        جزئیات\r\n                                    </span>\r\n                                }\r\n                                key=\"1\"\r\n                                style={{ margin: 10 }}\r\n                            >\r\n                                <Descriptions key={\"PolicyDetails\"} column={{ xxl: 4, xl: 4, lg: 2, md: 2, sm: 1, xs: 1 }}>\r\n                                    {/*{*/}\r\n                                    {/*    !!policyCert &&*/}\r\n                                    {/*    <Descriptions.Item key=\"PolicyCert\" label={<DownloadOutlined />}>*/}\r\n                                    {/*        <a href={policyCert.Path} download={policyCert.Title} title=\"دانلود\">*/}\r\n                                    {/*            گواهی بیمه نامه*/}\r\n                                    {/*        </a>*/}\r\n                                    {/*    </Descriptions.Item>*/}\r\n                                    {/*}*/}\r\n                                    <Descriptions.Item label=\"سریال یا IMEI دستگاه\">{policyEquipmentModel.EquipmentSerialNo}</Descriptions.Item>\r\n                                    <Descriptions.Item label=\"دستگاه\">{equipmentName + \" - \" + brandName}</Descriptions.Item>\r\n                                    {equipmentModelName && <Descriptions.Item label=\"مدل\">{equipmentModelName}</Descriptions.Item>}\r\n                                    <Descriptions.Item label=\"سرمایه بیمه نامه\">{`${policyEquipmentModel.InsuredValue ?? 0} ریال`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}</Descriptions.Item>\r\n                                </Descriptions>\r\n                            </TabPane>\r\n                            <TabPane\r\n                                tab={\r\n                                    <span>\r\n                                        فرانشیز ها\r\n                                    </span>\r\n                                }\r\n                                key=\"2\"\r\n                                style={{ margin: 10 }}\r\n                            >\r\n                                <List\r\n                                    itemLayout=\"horizontal\"\r\n                                    dataSource={currentEntity.Policy.PolicyFranchises.map(f => { return { title: f.FranchiseTitle, percent: f.FranchisePercent, minimumValue: f.MinimumValue } })}\r\n                                    renderItem={item => (\r\n                                        <List.Item>\r\n                                            <List.Item.Meta\r\n                                                title={\r\n                                                    <Descriptions key={\"PolicyFranchises\"}>\r\n                                                        <Descriptions.Item className=\"col-sm-6\" label=\"عنوان\">{item.title}</Descriptions.Item>\r\n                                                        <Descriptions.Item className=\"col-sm-2\" label=\"درصد\">{item.percent}</Descriptions.Item>\r\n                                                        <Descriptions.Item className=\"col-sm-4\" label=\"حداقل مبلغ فرانشیز\">{`${item.minimumValue ?? 0} ریال`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}</Descriptions.Item>\r\n                                                    </Descriptions>\r\n                                                }\r\n                                            />\r\n                                        </List.Item>\r\n                                    )}\r\n                                />\r\n                            </TabPane>\r\n                            <TabPane\r\n                                tab={\r\n                                    <span style={{ marginRight: 4 }}>\r\n                                        پوشش ها\r\n                                    </span>\r\n                                }\r\n                                key=\"3\"\r\n                                style={{ margin: 10 }}\r\n                            >\r\n                                <List\r\n                                    itemLayout=\"horizontal\"\r\n                                    dataSource={currentEntity.Policy.PolicyCoverages.map(c => { return { title: c.CoverageTitle } })}\r\n                                    renderItem={item => (\r\n                                        <List.Item>\r\n                                            <List.Item.Meta\r\n                                                title={\r\n                                                    <Descriptions key={\"PolicyCoverages\"} column={{ xxl: 2, xl: 2, lg: 2, md: 2, sm: 1, xs: 1 }}>\r\n                                                        <Descriptions.Item label=\"عنوان\">{item.title}</Descriptions.Item>\r\n                                                    </Descriptions>\r\n                                                }\r\n                                                style={{ height: 25 }}\r\n                                            />\r\n                                        </List.Item>\r\n                                    )}\r\n                                />\r\n                            </TabPane>\r\n                            {\r\n                                !!policyCert &&\r\n                                <TabPane\r\n                                    tab={\r\n                                        <span style={{ marginRight: 4 }}>\r\n                                            گواهی بیمه نامه\r\n                                        </span>\r\n                                    }\r\n                                    key=\"4\"\r\n                                    style={{ margin: 10, minHeight: 600 }}\r\n                                >\r\n                                    <div style={{ width: 'calc(100% - 20px)' }}>\r\n                                        {this.state.policyCertFrameDisplayed && <PdfViewer url={policyCert?.Path} onLoad={() => this.tabsElement?.scrollIntoView()} />}\r\n                                    </div>\r\n                                </TabPane>\r\n                            }\r\n                        </Tabs>\r\n                    </div>\r\n                </div>\r\n            );\r\n        };\r\n    }\r\n    inquiryPolicy = () => {\r\n        this.addLookupForm(\"InquiryPolicy\",\r\n            <InquiryPolicy key=\"InquiryPolicy\"\r\n                onClose={data => {\r\n                    this.onLookupClosed();\r\n                    if (data)\r\n                        this.view(data.RowGuid);\r\n                }}\r\n            />\r\n        );\r\n    }\r\n    async fetchItem() {\r\n        if (!this.selectedEntity)\r\n            return;\r\n\r\n        const { RowGuid } = this.selectedEntity;\r\n\r\n        let fetchingInfo = {\r\n            Orderings: [] as IOrdering[],\r\n            Paging: { PageNo: 1, PageSize: 1 } as IPaging,\r\n            Filter: ComparisonFilter.Equal<IPolicyEquipmentModel>(e => e.RowGuid, RowGuid) as IFilter,\r\n            LoadPolicyNavigations: true\r\n        } as IPolicyEquipmentModelFetchingInfo;\r\n\r\n        this.onDataFetching?.call(this, fetchingInfo, true);\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.getUrl,\r\n            data: { fetchingInfo },\r\n            onSuccess: (result) => {\r\n                let res: any = result;\r\n                this.createDamage(res.Data[0]);\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    createDamage = (policyEquipmentModel?: IPolicyEquipmentModel) => {\r\n        this.addLookupForm(\"DamageCaseCreate\",\r\n            <DamageCaseCreate\r\n                key=\"DamageCaseCreate\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                defaultPolicyEquipmentModel={policyEquipmentModel}\r\n                onClose={this.onLookupClosed}\r\n            />);\r\n    }\r\n    inquiryPolicies = async () => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: this.baseUrl + \"/inquirypolicies\",\r\n            data: {},\r\n            onSuccess: result => {\r\n                if (result.ValidationState.Successful)\r\n                    Core.successNotification(\"استعلام بیمه نامه ها با موفقیت انجام شد\");\r\n                this.fetchData();\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n}","\r\nimport { FileProtectOutlined, ArrowLeftOutlined, StopOutlined, IssuesCloseOutlined, BarsOutlined, EnvironmentOutlined, InfoCircleFilled } from '@ant-design/icons';\r\nimport { Alert, Button, Checkbox, Col, Descriptions, Form, FormInstance, Input, Radio, Space, Tooltip } from 'antd';\r\nimport { Brand } from '../../baseInfo/brand';\r\nimport { City } from '../../baseInfo/city';\r\nimport { ICity, ICityProps } from '../../baseInfo/city/interfaces';\r\nimport { DamageReason } from '../../baseInfo/damageReason';\r\nimport { IDamageReason } from '../../baseInfo/damageReason/interfaces';\r\nimport { EquipmentItem } from '../../baseInfo/equipment/equipmentItem';\r\nimport { Province } from '../../baseInfo/province';\r\nimport { IProvince } from '../../baseInfo/province/interfaces';\r\nimport { enmControlType, IProperty } from '../../components/entityManager/interfaces';\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { ICallOptions, IResultSet } from '../../components/infrastructure/models';\r\nimport { Lookup } from '../../components/lookup';\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport { DatePicker as DatePickerJalali } from \"antd-jalali\";\r\nimport locale from 'antd/es/date-picker/locale/fa_IR';\r\nimport TextArea from 'antd/lib/input/TextArea';\r\nimport { ICenter } from '../../baseInfo/center/interfaces';\r\nimport { IPolicyEquipmentModel } from '../../baseInfo/policyEquipmentModel/interfaces';\r\nimport { enmEvaluationMethods, evaluationMethodsOptions, IDamageCase } from '../../baseInfo/damageCase/interfaces';\r\nimport AppContext, { AppContextProps } from '../../components/infrastructure/appContext';\r\nimport { UploadDocuments } from './uploadDocuments';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { DamageCasePolicyholder } from '.';\r\nimport { Evaluator, IEvaluatorFetchingResultDto, IEvaluatorProps } from './evaluator';\r\nimport { InquiryPolicy } from '../policy/inquiry';\r\nimport { EquipmentModel } from '../../baseInfo/equipmentModel';\r\nimport { IPolicyListProps, PolicyList } from '../policy';\r\nimport SimpleMap from '../../components/map';\r\nimport { Core } from '../../components/infrastructure/core';\r\n\r\ndayjs.extend(jalaliday);\r\n\r\ninterface IDamageCaseCreateProps extends IBaseProps {\r\n    close?: () => void;\r\n    defaultPolicyEquipmentModel?: IPolicyEquipmentModel;\r\n}\r\n\r\ninterface IEvaluatorDto {\r\n    FullName?: string;\r\n    Code: number;\r\n    Phone?: string;\r\n    ProvinceName?: string;\r\n    CityName?: string;\r\n    Address?: string;\r\n    WorkTime?: string;\r\n    Latitude?: number | null;\r\n    Longitude?: number | null;\r\n}\r\n\r\ninterface IDamageCaseCreateStates extends IBaseStates {\r\n    damageReason?: IDamageReason;\r\n    emergencyCallNumber: string;\r\n    sendingItems: ISendingItem[];\r\n    selectedEvaluator?: IEvaluatorDto;\r\n    damageProvince?: IProvince;\r\n    damageCity?: ICity;\r\n    damageAddress?: string;\r\n    province?: IProvince;\r\n    city?: ICity;\r\n    address?: string;\r\n    damageDate?: any;\r\n    description?: string;\r\n    confirmPossessionTransition?: boolean;\r\n    policyEquipmentModel?: IPolicyEquipmentModel;\r\n    evaluationMethod?: enmEvaluationMethods;\r\n    saved?: boolean;\r\n    evaluatorsCount: number;\r\n}\r\n\r\ninterface ISendingItem {\r\n    Id: number;\r\n    Name: string;\r\n    IsAvailable: boolean;\r\n    Code: string;\r\n}\r\n\r\nconst SendingItemList = (props: { items: ISendingItem[], onChange: (items: ISendingItem[]) => void; }) => {\r\n    const list = props.items.map(item =>\r\n        <Descriptions.Item key={item.Id} >\r\n            <Checkbox defaultChecked={item.IsAvailable} onChange={(e) => {\r\n                props.items.find(i => i.Id === item.Id)!.IsAvailable = e.target.checked;\r\n                props.onChange(props.items);\r\n            }}>\r\n                {item.Name}\r\n            </Checkbox>\r\n        </Descriptions.Item>);\r\n    return (\r\n        <Descriptions key=\"SendingItemList\" layout='horizontal' column={{ xxl: 8, xl: 6, lg: 4, md: 3, sm: 2, xs: 1 }}>\r\n            {list}\r\n        </Descriptions>\r\n    );\r\n}\r\n\r\nexport class DamageCaseCreate extends BaseComponent<IDamageCaseCreateProps, IDamageCaseCreateStates>{\r\n    static contextType = AppContext;\r\n    _form?: FormInstance;\r\n\r\n    policyEquipmentModelProp: IProperty;\r\n    equipmentProp: IProperty;\r\n    brandProp: IProperty;\r\n    equipmentModelProp: IProperty;\r\n    damageReasonProp: IProperty;\r\n    damageProvinceProp: IProperty;\r\n    damageCityProp: IProperty;\r\n    provinceProp: IProperty;\r\n    cityProp: IProperty;\r\n    evaluatorProp: IProperty;\r\n    container?: HTMLDivElement | null;\r\n    constructor(props: IDamageCaseCreateProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            emergencyCallNumber: '',\r\n            sendingItems: [],\r\n            evaluatorsCount: 0\r\n        };\r\n\r\n        this.title = \"ثبت خسارت بیمه نامه\";\r\n\r\n        this.policyEquipmentModelProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"PolicyEquipmentModelId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: PolicyList,\r\n                lookupProperty: \"Policy.Code\",\r\n                lookupDisplayFields: [\"Policy.SerialNo\"],\r\n                dropdownDisplayFields: [\"Policy.SerialNo\", \"EquipmentSerialNo\", \"BrandTitle\", \"EquipmentModelTitle\", \"Policy.StartDateTime\", \"Policy.EndDateTime\"],\r\n                showButton: false,\r\n\r\n            }\r\n        };\r\n        this.equipmentProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"EquipmentId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: EquipmentItem,\r\n                lookupProperty: \"Code\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false\r\n            }\r\n        };\r\n        this.brandProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"BrandId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: Brand,\r\n                lookupProperty: \"Code\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false\r\n            }\r\n        };\r\n        this.equipmentModelProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"EquipmentModelId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: EquipmentModel,\r\n                lookupProperty: \"Code\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false\r\n\r\n            }\r\n        };\r\n        this.damageReasonProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"DamageReasonId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: DamageReason,\r\n                lookupProperty: \"Id\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                dropdownDisplayFields: [\"Name\"],\r\n                showButton: false\r\n            }\r\n        };\r\n        this.damageProvinceProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"DamageProvinceId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: Province,\r\n                lookupProperty: \"Id\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false,\r\n                dropdownDisplayFields: [\"Name\"]\r\n            }\r\n        };\r\n        this.damageCityProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"DamageCityId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: City,\r\n                lookupProperty: \"Id\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false,\r\n                dropdownDisplayFields: [\"Name\"]\r\n            }\r\n        };\r\n        this.provinceProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"ProvinceId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: Province,\r\n                lookupProperty: \"Id\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false,\r\n                dropdownDisplayFields: [\"Name\"]\r\n            }\r\n        };\r\n        this.cityProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"CityId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: City,\r\n                lookupProperty: \"Id\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false,\r\n                dropdownDisplayFields: [\"Name\"]\r\n            }\r\n        };\r\n        this.evaluatorProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"EvaluatorId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: Evaluator,\r\n                lookupProperty: \"Id\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false,\r\n                dropdownDisplayFields: [\"Name\", \"ProvinceName\", \"CityName\", \"Phone\", \"Address\", \"WorkTime\"]\r\n            }\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.initializing();\r\n    }\r\n    initializing = () => {\r\n        let fetchingInfo = {\r\n            Orderings: [],\r\n        };\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"sendingitem/get\",\r\n            data: {\r\n                fetchingInfo\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                const { getUserInfo } = this.context as AppContextProps;\r\n                const userInfo = getUserInfo();\r\n\r\n                if (result.ValidationState.Successful) {\r\n                    const policyEquipmentModel = this.props.defaultPolicyEquipmentModel;\r\n                    this._form?.setFields([\r\n                        { name: 'emergencyCallNumber', value: userInfo?.phone ? '0' + userInfo.phone : '' },\r\n                        { name: 'policyEquipmentModel', value: policyEquipmentModel }\r\n                    ]);\r\n                    this.setState({ sendingItems: result.Data ?? [], emergencyCallNumber: userInfo?.phone ? '0' + userInfo.phone : '', policyEquipmentModel });\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        this.callApi(fetchOpt);\r\n    }\r\n    onChangeDamageDate = (e: any) => {\r\n        if (e) {\r\n            let parsedDate = e.toDate();\r\n            parsedDate = new Date(parsedDate.toDateString());\r\n            this.setState({ damageDate: parsedDate.toDateString() });\r\n        }\r\n        else\r\n            this.setState({ damageDate: undefined });\r\n\r\n    }\r\n    submitDamage = async () => {\r\n        let opt: ICallOptions = {\r\n            withBlock: true,\r\n            withBlockTitle:'در حال ثبت خسارت...',\r\n            url: \"portal/createcase\",\r\n            data: {\r\n                damageCase: {\r\n                    IssuerType: 1, // Self\r\n                    InsurerId: 1,\r\n                    TicketNo: 0,\r\n                    EmergencyCallNumber: this.state.emergencyCallNumber,\r\n                    DamageDate: this.state.damageDate,\r\n                    DamageProvinceCode: this.state.damageProvince?.Code,\r\n                    DamageCityCode: this.state.damageCity?.Code,\r\n                    DamageAddress: this.state.damageAddress,\r\n                    ProvinceCode: this.state.province?.Code,\r\n                    CityCode: this.state.city?.Code,\r\n                    Address: this.state.address,\r\n                    DamageReasonCode: this.state.damageReason?.Code,\r\n                    Description: this.state.description,\r\n                    ConfirmPossessionTransition: this.state.confirmPossessionTransition,\r\n                    EvaluationMethod: this.state.damageReason?.Name?.includes('سرقت') === true ? enmEvaluationMethods.PolicyholderInPerson : this.state.evaluationMethod,\r\n                    Policy: {\r\n                        SerialNo: this.state.policyEquipmentModel?.Policy?.SerialNo === 'فاقد سریال' ? undefined : this.state.policyEquipmentModel?.Policy?.SerialNo,\r\n                        EquipmentSerialNo: this.state.policyEquipmentModel?.EquipmentSerialNo\r\n                    },\r\n                    Policyholder: {\r\n                        NationalCode: this.state.policyEquipmentModel?.Policy?.Policyholder?.NationalCode\r\n                    },\r\n                    AvailableItems: this.state.sendingItems.filter(s => s.IsAvailable).map(s => s.Code),\r\n                    EvaluatorCode: this.state.policyEquipmentModel?.Policy?.CheckPolicyDate && this.state.damageReason?.Name?.includes('سرقت') !== true ? this.state.selectedEvaluator?.Code : 1\r\n                }\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                const createdItem = result.Data as { ticketNo: number; essentialDocuments: { Name: string; Code: string; }[]; };\r\n                if (result.ValidationState.Successful && !!createdItem) {\r\n                    setTimeout(() => {\r\n                        this.damageCreated(createdItem.ticketNo, createdItem.essentialDocuments);\r\n                    }, 100);\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    damageCreated = (ticketNo?: number, essentialDocuments?: { Name: string; Code: string; }[]) => {\r\n        if (!ticketNo || !essentialDocuments) {\r\n            return;\r\n        }\r\n        this.uploadDocuments(ticketNo, essentialDocuments);\r\n    }\r\n    uploadDocuments = (ticketNo: number, essentialDocuments?: { Name: string; Code: string; }[]) => {\r\n        this.addLookupForm(\"UploadDocuments\",\r\n            <UploadDocuments\r\n                key=\"UploadDocuments\"\r\n                invokePath={\"ثبت خسارت\"}\r\n                isChildComponent={true}\r\n                ticketNo={ticketNo}\r\n                essentialDocuments={essentialDocuments}\r\n                removeable={true}\r\n                onRemove={this.removeDamageCase}\r\n                onClose={() => {\r\n                    if (this.props.close)\r\n                        this.props.close();\r\n                    else\r\n                        this.setState({ saved: true });\r\n                }}\r\n            />);\r\n    }\r\n    removeDamageCase = async (ticketNo: number) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"portal/RemoveDamageCase\",\r\n            data: { ticketNo },\r\n            onSuccess: result => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('پرونده خسارت شما حذف شد');\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    showCurrentPolicyDamageCase = (damageCase: IDamageCase) => {\r\n        this.addLookupForm(\"CurrentPolicyDamageCase\",\r\n            <DamageCasePolicyholder\r\n                invokePath=\"ثبت خسارت\"\r\n                defaultDamageCaseId={damageCase.Id}\r\n                onClose={() => this.setState({ displayLookupForm: undefined })}\r\n            />\r\n        );\r\n    }\r\n    policyEquipmentModelValidator = () => {\r\n        const { policyEquipmentModel } = this.state;\r\n        if (policyEquipmentModel) {\r\n            const policy = policyEquipmentModel.Policy;\r\n            let endDateTime = new Date(policy.EndDateTime);\r\n            let startDateTime = new Date(policy.StartDateTime);\r\n            if (policy.CheckPolicyDate) {\r\n                let currentDate = new Date();\r\n                endDateTime.setMonth(endDateTime.getMonth());\r\n                startDateTime.setMonth(startDateTime.getMonth());\r\n                if (currentDate.getTime() > endDateTime.getTime() || currentDate.getTime() < startDateTime.getTime()) {\r\n                    return Promise.reject(new Error('امکان ثبت خسارت در زمانی غیر از بازه تاریخ اعتبار بیمه نامه وجود ندارد.'));\r\n                }\r\n                if (!!this.state.damageDate) {\r\n                    let damageDate = new Date(this.state.damageDate);\r\n                    if (damageDate.getTime() > endDateTime.getTime() || damageDate.getTime() < startDateTime.getTime()) {\r\n                        return Promise.reject(new Error('امکان ثبت خسارت با تاریخ وقوع خسارت غیر از بازه تاریخ اعتبار بیمه نامه وجود ندارد.'));\r\n                    }\r\n                }\r\n            }\r\n\r\n            const damageCase = policyEquipmentModel.DamageCases[0];\r\n            if (!!damageCase) {\r\n                if (!!damageCase.PayableAmount) {\r\n                    const payableAmount = `${damageCase.PayableAmount}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n                    return Promise.reject(new Error(`شما در خصوص بیمه نامه انتخاب شده مبلغ ${payableAmount} خسارت دریافت کرده اید و امکان ثبت خسارت وجود نخواهد داشت.`));\r\n                }\r\n                else {\r\n                    return Promise.reject(\r\n                        <>\r\n                            <span>در خصوص بیمه نامه انتخاب شده، دارای</span>\r\n                            <Tooltip title=\"مشاهده پرونده\">\r\n                                <Button type=\"link\" style={{ margin: 0, width: 80, padding: 0 }} onClick={() => this.showCurrentPolicyDamageCase(damageCase)}><b>پرونده</b></Button>\r\n                            </Tooltip>\r\n                            <span>می‌باشید</span>\r\n                        </>\r\n                    );\r\n                }\r\n            }\r\n        }\r\n        return Promise.resolve();\r\n    }\r\n    damageDateValidator = () => {\r\n        const damageDate = this.state.damageDate;\r\n        const currentDate = new Date(new Date().toDateString());\r\n        if (new Date(damageDate).getTime() > currentDate.getTime())\r\n            return Promise.reject(new Error('تاریخ آینده برای وقوع حادثه قابل قبول نیست'));\r\n        return Promise.resolve();\r\n    }\r\n    inquiryPolicy = () => {\r\n        this.addLookupForm(\"InquiryPolicy\",\r\n            <InquiryPolicy key=\"InquiryPolicy\"\r\n                onClose={data => {\r\n                    this._form?.setFields([\r\n                        { name: 'policyEquipmentModel', value: data }\r\n                    ]);\r\n                    this.setState({ policyEquipmentModel: data })\r\n                    this.onLookupClosed();\r\n                }}\r\n            />);\r\n    }\r\n    virtualRender() {\r\n\r\n        const header = this.getPageHeader({\r\n            title: this.title,\r\n            onBack: () => {\r\n                if (this.props.close)\r\n                    this.props.close();\r\n                else\r\n                    window.history.back();\r\n            }\r\n        });\r\n\r\n        if (this.state.saved)\r\n            return <Redirect to={\"/damagecasepolicyholder\"} />\r\n\r\n        const span = window.matchMedia(\"(min-width: 992px)\").matches ? 2 : 1;\r\n\r\n        let messageNode: JSX.Element | undefined = undefined;\r\n        if (this.state.evaluationMethod === enmEvaluationMethods.PolicyholderInPerson)\r\n            messageNode = (\r\n                <div style={{ lineHeight: 2.2 }}>\r\n                    <div>\r\n                        بیمه گزار/مشتری گرامی، درصورت نیاز، زمان، تاریخ و نحوه ارزیابی مراجعه حضوری به ارزیاب از طریق پیام کوتاه و ایمیل حضورتان اطلاع رسانی خواهد شد. لطفاً در هنگام مراجعه به ارزیاب، مدارک زیر جهت سهولت در روند ارزیابی را به همراه داشته باشید :\r\n                    </div>\r\n                    <ul style={{ listStyleType: 'none' }}>\r\n                        <li>1. مدارک شناسایی (کارت ملّی یا شناسنامه)</li>\r\n                        <li>2. در حالاتی غیر از حالات سرقت کلی، سرقت با شکست حرز و سیل و طوفان ارائه دستگاه آسیب دیده به همراه جعبه دستگاه و متعلقات الزامی است.</li>\r\n                        <li>3. اصل سایر مدارک آپلود شده</li>\r\n                    </ul>\r\n                </div>\r\n            );\r\n        //else if (this.state.evaluationMethod === enmEvaluationMethods.EvaluatorInPerson)\r\n        //    messageNode = (\r\n        //        <div style={{ lineHeight: 2.2 }}>\r\n        //            <div>\r\n        //                بیمه گزار/مشتری گرامی، درصورت نیاز، زمان، تاریخ و نحوه ارزیابی مراجعه حضوری ارزیاب از طریق پیام کوتاه و ایمیل حضورتان اطلاع رسانی خواهد شد. لطفاً در هنگام مراجعه ارزیاب، مدارک زیر جهت سهولت در روند ارزیابی آماده گردد:\r\n        //            </div>\r\n        //            <ul style={{ listStyleType: 'none' }}>\r\n        //                <li>1. مدارک شناسایی (کارت ملّی یا شناسنامه)</li>\r\n        //                <li>2. در حالاتی غیر از حالات سرقت کلی، سرقت با شکست حرز و سیل و طوفان ارائه دستگاه آسیب دیده الزامی است.</li>\r\n        //                <li>3. اصل سایر مدارک آپلود شده</li>\r\n        //            </ul>\r\n        //        </div>\r\n        //    );\r\n        else if (this.state.evaluationMethod === enmEvaluationMethods.VideoCall)\r\n            messageNode = (\r\n                <div style={{ lineHeight: 2.2 }}>\r\n                    بیمه گزار/مشتری گرامی، درصورت نیاز، زمان، تاریخ و نحوه ارزیابی تماس تصویری از طریق پیام کوتاه، حضورتان اطلاع رسانی خواهد شد\r\n                </div>\r\n            );\r\n\r\n        evaluationMethodsOptions.forEach(e => {\r\n            e.disabled =\r\n                (!this.state.evaluatorsCount && e.value !== enmEvaluationMethods.VideoCall && !this.state.damageReason?.Name.includes('سرقت'))\r\n                ||\r\n                (!!this.state.evaluatorsCount && e.value !== enmEvaluationMethods.PolicyholderInPerson)\r\n                ;\r\n        });\r\n\r\n        const disableEvaluator = this.state.policyEquipmentModel?.Policy && !this.state.policyEquipmentModel.Policy.CheckPolicyDate; //(this.state.damageReason && this.state.damageReason.Name.includes('سرقت')) || (this.state.policyEquipmentModel?.Policy && !this.state.policyEquipmentModel.Policy.CheckPolicyDate);\r\n\r\n        return (\r\n            <div ref={node => this.container = node}>\r\n                {header}\r\n                <Form\r\n\r\n                    labelCol={{ span: 8 }}\r\n                    wrapperCol={{ span: 14 }}\r\n                    layout={'horizontal'}\r\n                    ref={node => { if (node) this._form = node }}\r\n                    onFinish={async () => {\r\n                        await this.submitDamage();\r\n                    }}\r\n                    onReset={() => {\r\n                        if (this.props.close)\r\n                            this.props.close();\r\n                        else\r\n                            window.history.back();\r\n                    }}\r\n                    onFinishFailed={errorInfo => {\r\n                        if (this.container && errorInfo.errorFields.length) {\r\n                            const { name } = errorInfo.errorFields[0];\r\n                            const label = this.container.querySelector(`[for=\"${name[0]}\"]`);\r\n                            label?.scrollIntoView();\r\n                            const field = this._form?.getFieldInstance(name[0]);\r\n                            if (field?.focus)\r\n                                field.focus();\r\n                        }\r\n                    }}\r\n                >\r\n                    <div key=\"policyinfo\" className=\"box box-blue\">\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <FileProtectOutlined style={{ margin: 2, verticalAlign: 'text-top' }} />\r\n                                انتخاب بیمه نامه\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n\r\n                                <Alert\r\n                                    style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                                    message={\r\n                                        <>\r\n                                            بیمه گزار/مشتری گرامی، چنانچه بیمه نامه مد نظر در لیست زیر موجود نیست، از طریق\r\n                                            <Button key=\"inquiryPolicyButton\" type=\"link\" style={{ padding: 4 }} onClick={() => this.inquiryPolicy()}><b>استعلام بیمه نامه</b></Button>\r\n                                            نسبت به ثبت دستگاه خود اقدام نمایید.\r\n                                        </>\r\n                                    }\r\n                                    type=\"info\"\r\n                                    icon={<InfoCircleFilled className=\"blink\" />}\r\n                                    showIcon\r\n                                />\r\n                                <Descriptions layout='horizontal' column={{ xl: 2, lg: 2, md: 1, sm: 1, xs: 1 }} >\r\n                                    <Descriptions.Item key=\"policyEquipmentModel\">\r\n                                        <Form.Item\r\n                                            name=\"policyEquipmentModel\"\r\n                                            key=\"policyEquipmentModel\"\r\n                                            label=\"بیمه نامه\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'بیمه نامه اجباری است' },\r\n                                                { validator: this.policyEquipmentModelValidator }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                parent={this}\r\n                                                key=\"PolicyEquipmentModelId\"\r\n                                                onChange={(policyEquipmentModel?: IPolicyEquipmentModel) => {\r\n                                                    this._form?.resetFields([\"selectedEvaluator\"]);\r\n                                                    this.setState({ policyEquipmentModel, selectedEvaluator: undefined });\r\n                                                }}\r\n                                                onDataFetched={result => {\r\n                                                    result && result.Data && result.Data.forEach(item => {\r\n                                                        if (!item[\"Policy\"][\"SerialNo\"] || item[\"Policy\"][\"SerialNo\"] === \"\")\r\n                                                            item[\"Policy\"][\"SerialNo\"] = 'فاقد سریال';\r\n                                                    });\r\n                                                }}\r\n                                                property={this.policyEquipmentModelProp}\r\n                                                preparelookupProps={(props: IPolicyListProps) => {\r\n                                                    props.params = () => {\r\n                                                        return {\r\n                                                            loadPolicyDamageCases: true\r\n                                                        };\r\n                                                    };\r\n                                                    return props;\r\n                                                }}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"EquipmentId\">\r\n                                        <Form.Item\r\n                                            key=\"EquipmentId\"\r\n                                            label=\"دستگاه/تجهیز\"\r\n                                            style={{ width: \"100%\" }}\r\n                                        >\r\n                                            <Lookup\r\n                                                key=\"EquipmentId\"\r\n                                                parent={this}\r\n                                                disabled\r\n                                                property={this.equipmentProp}\r\n                                                value={this.state.policyEquipmentModel?.Equipment}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"BrandId\">\r\n                                        <Form.Item\r\n                                            key=\"BrandId\"\r\n                                            label=\"برند\"\r\n                                            style={{ width: \"100%\" }}\r\n                                        >\r\n                                            <Lookup\r\n                                                parent={this}\r\n                                                disabled\r\n                                                key=\"BrandId\"\r\n                                                property={this.brandProp}\r\n                                                defaultText={this.state.policyEquipmentModel?.BrandTitle}\r\n                                                value={this.state.policyEquipmentModel?.Brand}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"EquipmentModelId\">\r\n                                        <Form.Item\r\n                                            key=\"EquipmentModelId\"\r\n                                            label=\"مدل\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[{ required: true, message: 'مدل اجباری است' }]}\r\n                                        >\r\n                                            <Lookup\r\n                                                parent={this}\r\n                                                disabled\r\n                                                key=\"EquipmentModelId\"\r\n                                                property={this.equipmentModelProp}\r\n                                                value={this.state.policyEquipmentModel?.EquipmentModel}\r\n                                                defaultText={this.state.policyEquipmentModel?.EquipmentModelTitle}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"EquipmentSerialNo\">\r\n                                        <Form.Item\r\n                                            label=\"سریال دستگاه (IMEI)\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            key=\"EquipmentSerialNo\"\r\n                                        >\r\n                                            <Input\r\n                                                disabled\r\n                                                key=\"EquipmentSerialNo\"\r\n                                                value={this.state.policyEquipmentModel?.EquipmentSerialNo}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"emergencyCallNumber\">\r\n                                        <Form.Item\r\n                                            name=\"emergencyCallNumber\"\r\n                                            key=\"emergencyCallNumber\"\r\n                                            label=\"شماره موبایل در دسترس\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'شماره موبایل اجباری است' },\r\n                                                { len: 11, message: 'شماره موبایل باید 11 رقم باشد' },\r\n                                                {\r\n                                                    validator: () => {\r\n                                                        if (!this.state.emergencyCallNumber?.startsWith('0'))\r\n                                                            return Promise.reject(new Error('شماره موبایل با 0 آغاز شود'));\r\n                                                        return Promise.resolve();\r\n                                                    }\r\n                                                }\r\n                                            ]}\r\n                                            initialValue={this.state.emergencyCallNumber}\r\n                                        >\r\n                                            <Input\r\n                                                style={{ width: \"100%\" }}\r\n                                                type={\"text\"}\r\n                                                onKeyPress={(event) => {\r\n                                                    if (event.charCode < 48 || event.charCode > 57) {\r\n                                                        event.preventDefault();\r\n                                                    }\r\n                                                }}\r\n                                                onChange={e => {\r\n                                                    this.setState({ emergencyCallNumber: e.target.value });\r\n                                                }}\r\n                                                value={this.state.emergencyCallNumber}\r\n                                                maxLength={11}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                </Descriptions>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div key=\"damageinfo\" className=\"box box-blue\" style={{ marginTop: 10 }}>\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <IssuesCloseOutlined style={{ margin: 2, verticalAlign: 'text-top' }} />\r\n                                اطلاعات خسارت\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n                                <Descriptions layout='horizontal' column={{ xl: 2, lg: 2, md: 1, sm: 1, xs: 1 }}>\r\n                                    <Descriptions.Item key=\"damageDate\">\r\n                                        <Form.Item\r\n                                            name=\"damageDate\"\r\n                                            key=\"damageDate\"\r\n                                            label=\"تاریخ وقوع\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'تاریخ وقوع خسارت اجباری است' },\r\n                                                { validator: this.damageDateValidator }\r\n                                            ]}\r\n                                        >\r\n                                            <DatePickerJalali\r\n                                                onChange={this.onChangeDamageDate}\r\n                                                format=\"YYYY/MM/DD\"\r\n                                                locale={locale}\r\n                                                inputReadOnly={true}\r\n                                                style={{ width: '100%', display: 'block' }}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"damageReason\">\r\n                                        <Form.Item\r\n                                            name=\"damageReason\"\r\n                                            key=\"damageReason\"\r\n                                            label=\"خسارت بر اثر\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'دلیل خسارت اجباری است' }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                key=\"damageReason\"\r\n                                                parent={this}\r\n                                                onChange={(damageReason?: IDamageReason) => {\r\n                                                    this._form?.resetFields([\"EvaluationMethod\", \"selectedEvaluator\"]);\r\n                                                    this.setState({ damageReason, evaluationMethod: undefined, selectedEvaluator: undefined });\r\n                                                }}\r\n                                                property={this.damageReasonProp}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"damageProvince\">\r\n                                        <Form.Item\r\n                                            name=\"damageProvince\"\r\n                                            key=\"damageProvince\"\r\n                                            label=\"استان وقوع حادثه\"\r\n                                            style={{ width: \"100%\" }}\r\n                                        >\r\n                                            <Lookup\r\n                                                key=\"damageProvince\"\r\n                                                parent={this}\r\n                                                onChange={(province?: IProvince) => {\r\n                                                    this.setState({ damageProvince: province, damageCity: undefined });\r\n                                                    this._form?.resetFields([\"damageCity\"]);\r\n                                                    this._form?.setFields([{ name: \"damageCity\", value: null }]);\r\n                                                }}\r\n                                                property={this.damageProvinceProp}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"damageCity\">\r\n                                        <Form.Item\r\n                                            name=\"damageCity\"\r\n                                            key=\"damageCity\"\r\n                                            label=\"شهر وقوع حادثه\"\r\n                                            style={{ width: \"100%\" }}\r\n                                        >\r\n                                            <Lookup\r\n                                                key=\"damageCity\"\r\n                                                parent={this}\r\n                                                onChange={(city?: ICity) => {\r\n                                                    const province = city?.Province;\r\n                                                    if (!this.state.damageProvince) {\r\n                                                        this._form?.resetFields([\"damageProvince\"]);\r\n                                                        this._form?.setFields([{ name: \"damageProvince\", value: province }]);\r\n                                                        this.setState({ damageCity: city, damageProvince: province });\r\n                                                    }\r\n                                                    else\r\n                                                        this.setState({ damageCity: city });\r\n                                                }}\r\n                                                property={this.damageCityProp}\r\n                                                preparelookupProps={(lookupProps: ICityProps) => {\r\n                                                    lookupProps.params = () => {\r\n                                                        let province = this.state.damageProvince;\r\n                                                        return { province };\r\n                                                    };\r\n                                                    return lookupProps;\r\n                                                }}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"damageAddress\">\r\n                                        <Form.Item\r\n                                            key=\"damageAddress\"\r\n                                            name=\"damageAddress\"\r\n                                            label=\"آدرس وقوع حادثه\"\r\n                                            style={{ width: \"100%\" }}\r\n                                        >\r\n                                            <TextArea\r\n                                                value={this.state.damageAddress}\r\n                                                onChange={e => this.setState({ damageAddress: e.target.value })}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"description\">\r\n                                        <Form.Item\r\n                                            key=\"description\"\r\n                                            name=\"description\"\r\n                                            label=\"توضیحات\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[{ required: true, message: 'توضیحات اجباری است' }]}\r\n                                        >\r\n                                            <TextArea\r\n                                                value={this.state.description}\r\n                                                onChange={e => this.setState({ description: e.target.value })}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"confirmPossessionTransition\" span={1}>\r\n                                        <Form.Item\r\n                                            key=\"confirmPossessionTransition\"\r\n                                            name=\"confirmPossessionTransition\"\r\n                                            label=\"تایید انتقال مالکیت\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            valuePropName=\"checked\"\r\n                                        >\r\n                                            <Checkbox onChange={e => this.setState({ confirmPossessionTransition: e.target.checked })}>\r\n                                                در صورت وقوع خسارت سرقت و یا خسارت کلی، مالکیت دستگاه شما با انتقال رجیستری به مالکیت بیمه سامان در خواهد آمد و در صورت پیدا شدن دستگاه، مالکیت دستگاه متعلق به بیمه سامان خواهد بود.\r\n                                            </Checkbox>\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                </Descriptions >\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div key=\"existparts\" className=\"box box-blue\" style={{ marginTop: 10 }}>\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <BarsOutlined style={{ margin: 2, verticalAlign: 'text-top' }} rotate={180} />\r\n                                اقلام موجود\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n                                <Form.Item wrapperCol={{ span: 24 }} key=\"sendingItems\">\r\n                                    <SendingItemList items={this.state.sendingItems} onChange={items => this.setState({ sendingItems: items })} />\r\n                                </Form.Item>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div key=\"location\" className=\"box box-blue\" style={{ marginTop: 10 }}>\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <EnvironmentOutlined style={{ margin: 2, verticalAlign: 'text-top' }} />\r\n                                اطلاعات محل حضور دستگاه\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n                                <Descriptions layout='horizontal' column={{ xl: 2, lg: 2, md: 1, sm: 1, xs: 1 }}>\r\n                                    <Descriptions.Item key=\"province\">\r\n                                        <Form.Item\r\n                                            name=\"province\"\r\n                                            key=\"province\"\r\n                                            label=\"استان محل حضور دستگاه\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'استان محل حضور دستگاه اجباری است' }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                parent={this}\r\n                                                onChange={(province?: IProvince) => {\r\n                                                    this.setState({ province: province, city: undefined });\r\n                                                    this._form?.resetFields([\"city\", \"selectedEvaluator\"]);\r\n                                                    //this._form?.setFields([{ name: \"city\", value: null }]);\r\n                                                }}\r\n                                                property={this.provinceProp}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"city\">\r\n                                        <Form.Item\r\n                                            name=\"city\"\r\n                                            key=\"city\"\r\n                                            label=\"شهر محل حضور دستگاه\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'شهر محل حضور دستگاه اجباری است' }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                parent={this}\r\n                                                onChange={(city?: ICity) => {\r\n                                                    const province = city?.Province;\r\n                                                    this._form?.resetFields([\"selectedEvaluator\"]);\r\n                                                    if (!this.state.province) {\r\n                                                        this._form?.resetFields([\"province\"]);\r\n                                                        this._form?.setFields([{ name: \"province\", value: province }]);\r\n                                                        this.setState({ city, province, selectedEvaluator: undefined });\r\n                                                    }\r\n                                                    else\r\n                                                        this.setState({ city, selectedEvaluator: undefined });\r\n                                                }}\r\n                                                property={this.cityProp}\r\n                                                preparelookupProps={(lookupProps: ICityProps) => {\r\n                                                    lookupProps.params = () => {\r\n                                                        let province = this.state.province;\r\n                                                        return { province };\r\n                                                    };\r\n                                                    return lookupProps;\r\n                                                }}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"address\" span={1}>\r\n                                        <Form.Item\r\n                                            key=\"address\"\r\n                                            name=\"address\"\r\n                                            label=\"آدرس محل حضور دستگاه\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[{ required: true, message: 'آدرس محل حضور دستگاه اجباری است' }]}\r\n                                        >\r\n                                            <TextArea\r\n                                                value={this.state.address}\r\n                                                onChange={e => this.setState({ address: e.target.value })}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                </Descriptions >\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    {!!this.state.damageReason && this.state.damageReason?.Name?.includes('سرقت') !== true &&\r\n                        <div key=\"evaluation\" className=\"box box-blue\" style={{ marginTop: 10 }}>\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <BarsOutlined style={{ margin: 2, verticalAlign: 'text-top' }} rotate={180} />\r\n                                    روش ارزیابی\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n                                    <Descriptions>\r\n                                        <Descriptions.Item key={'EvaluationMethod'} className=\"ant-col-24\">\r\n                                            <Form.Item\r\n                                                label={'لطفاً روش دلخواه ارزیابی دستگاه آسیب دیده خود را در صورت نیاز، انتخاب فرمایید'}\r\n                                                name={'EvaluationMethod'}\r\n                                                key={'EvaluationMethod'}\r\n                                                labelCol={{ style: { lineHeight: 'normal', width: '100%' } }}\r\n                                                wrapperCol={{ span: 16 }}\r\n                                                rules={[\r\n                                                    {\r\n                                                        required: true,\r\n                                                        message: 'پاسخ اجباری است'\r\n                                                    }\r\n                                                ]}\r\n                                                style={{ width: '100%' }}\r\n                                            >\r\n                                                <Radio.Group key={'EvaluationMethod'} onChange={e => this.setState({ evaluationMethod: e.target.value })}>\r\n                                                    {evaluationMethodsOptions.filter(s => s.disabled === false).map(s =>\r\n                                                        <Col key={s.value} style={{ marginTop: 10, lineHeight: \"normal\" }}>\r\n                                                            <Radio key={s.value} value={s.value}>{s.makingContactTitle}</Radio>\r\n                                                        </Col>\r\n                                                    )}\r\n\r\n                                                    {/*{this.state.evaluationMethod === enmEvaluationMethods.PolicyholderInPerson && <Alert style={{ marginTop: 10 }} message=\"تاریخ و آدرس مراجعه به مرکز ارزیابی، متعاقبا از طریق پیام کوتاه به اطلاعتان خواهد رسید\" type=\"info\" showIcon />}*/}\r\n                                                    {/*{this.state.evaluationMethod === enmEvaluationMethods.VideoCall && <Alert style={{ marginTop: 10 }} message=\"تاریخ و زمان و نحوه ارزیابی تماس تصویری، متعاقبا از طریق پیام کوتاه به اطلاعتان خواهد رسید\" type=\"info\" showIcon />}*/}\r\n                                                    {/*{this.state.evaluationMethod === enmEvaluationMethods.EvaluatorInPerson && <Alert style={{ marginTop: 10 }} message=\"تاریخ و زمان مراجعه ارزیاب به آدرس محل حضور دستگاه آسیب دیده، متعاقبا از طریق پیام کوتاه به اطلاعتان خواهد رسید\" type=\"info\" showIcon />}*/}\r\n                                                    {/*{this.state.evaluationMethod === enmEvaluationMethods.VideoCall ? <Alert style={{ marginRight: 10 }} message=\"لطفا مطمئن شوید که امکان برقراری تماس تصویری دارید\" type=\"warning\" showIcon /> : <></>}*/}\r\n\r\n                                                </Radio.Group>\r\n                                            </Form.Item>\r\n\r\n                                        </Descriptions.Item>\r\n\r\n                                        <Descriptions.Item key=\"selectedEvaluator\" className={span === 1 ? \"ant-col-24\" : \"ant-col-12\"}>\r\n                                            <Form.Item\r\n                                                name=\"selectedEvaluator\"\r\n                                                key=\"selectedEvaluator\"\r\n                                                label=\"ارزیاب\"\r\n                                                labelCol={{ span: 8 }}\r\n                                                wrapperCol={{ span: 16 }}\r\n                                                style={{ width: '100%' }}\r\n                                                extra={\r\n                                                    this.state.selectedEvaluator &&\r\n                                                    <Alert type=\"info\" style={{ marginTop: 10 }} message={\r\n                                                        <Space direction=\"vertical\">\r\n                                                            <Descriptions >\r\n                                                                <Descriptions.Item label={\"آدرس\"}> {this.state.selectedEvaluator?.Address}</Descriptions.Item>\r\n                                                            </Descriptions>\r\n                                                            {this.state.selectedEvaluator.Phone &&\r\n                                                                <Descriptions>\r\n                                                                    <Descriptions.Item label={\"تلفن\"}>\r\n                                                                        <b style={{ unicodeBidi: \"plaintext\" }}>{this.state.selectedEvaluator.Phone.startsWith('9') ? `0${this.state.selectedEvaluator.Phone}` : `0${this.state.selectedEvaluator.Phone}`.replace(/\\D+/g, '').replace(/(\\d{3})(\\d+)/, '$1 - $2')}</b>\r\n                                                                    </Descriptions.Item>\r\n                                                                </Descriptions>\r\n                                                            }\r\n                                                            {this.state.selectedEvaluator.WorkTime &&\r\n                                                                <Descriptions key=\"workTime\">\r\n                                                                    <Descriptions.Item label={\"ساعت کار\"} > {this.state.selectedEvaluator.WorkTime}</Descriptions.Item>\r\n                                                                </Descriptions>\r\n                                                            }\r\n                                                            {!!this.state.selectedEvaluator.Longitude && !!this.state.selectedEvaluator.Latitude &&\r\n                                                                <Descriptions key=\"map\">\r\n                                                                    <Descriptions.Item>\r\n                                                                        <SimpleMap\r\n                                                                            disableChangeMarker={true}\r\n                                                                            cityName={this.state.selectedEvaluator.CityName}\r\n                                                                            lat={this.state.selectedEvaluator.Latitude}\r\n                                                                            lng={this.state.selectedEvaluator.Longitude}\r\n                                                                        />\r\n                                                                    </Descriptions.Item>\r\n                                                                </Descriptions>\r\n                                                            }\r\n                                                        </Space>\r\n                                                    } />\r\n                                                }\r\n                                            >\r\n                                                <Lookup\r\n                                                    preLoad={true}\r\n                                                    parent={this}\r\n                                                    onChange={(evaluator?: ICenter) => {\r\n                                                        this.setState({ selectedEvaluator: evaluator });\r\n                                                    }}\r\n                                                    disabled={disableEvaluator}\r\n                                                    property={this.evaluatorProp}\r\n                                                    onDataFetched={result => {\r\n                                                        this._form?.resetFields([\"EvaluationMethod\"]);\r\n                                                        this.setState({ evaluatorsCount: (result as IEvaluatorFetchingResultDto).EvaluatorsCount, evaluationMethod: undefined });\r\n                                                    }}\r\n                                                    preparelookupProps={(lookupProps: IEvaluatorProps) => {\r\n                                                        lookupProps.provinceCode = this.state.province?.Code;\r\n                                                        lookupProps.cityCode = this.state.city?.Code;\r\n                                                        return lookupProps;\r\n                                                    }}\r\n                                                />\r\n                                            </Form.Item>\r\n                                        </Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    }\r\n\r\n                    {!!messageNode &&\r\n                        <div key={\"ContactSettingMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                            <div style={{ direction: \"rtl\" }}>\r\n                                <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                            </div>\r\n                        </div>\r\n                    }\r\n\r\n                    <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10, padding: '10px 45px' }}>\r\n                        <Button type=\"primary\" htmlType=\"submit\" icon={<ArrowLeftOutlined />} loading={this.state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                            ادامه\r\n                        </Button>\r\n                        <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={this.state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                            لغو\r\n                        </Button>\r\n                    </Form.Item>\r\n                </Form>\r\n            </div>\r\n        );\r\n    }\r\n}","import { Alert, Button, Col, Descriptions, Popconfirm } from \"antd\";\r\nimport { damageCaseIssuerTypesOptions, damageCaseStatusOptions, enmDamageCaseStatus, enmEvaluationMethods, enmEvaluationStatus, enmFinancialStatus, enmPolicyholderResponseTypes, evaluationMethodsOptions, evaluationStatusOptions, IDamageCase, IDamageCaseFetchingInfo, IDamageCaseInitialData, IDamageCaseProps, IDamageCaseStates } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmEntityManagerState, enmPropertyType, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { IEvaluationComponentFormProps } from \"../../evaluation/damageCaseEvaluator/evaluationComponent\";\r\nimport * as EvaluationComponents from \"../../evaluation/damageCaseEvaluator/components\";\r\nimport jalaliday from 'jalaliday';\r\nimport dayjs from 'dayjs';\r\nimport { enmOrderingType, ICallOptions, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { PolicyholderConfirmation } from \"./policyholderConfirmation\";\r\nimport { DamageCaseCreate } from \"./damageCaseCreate\";\r\nimport { UploadDocuments } from \"./uploadDocuments\";\r\nimport { ReactNode } from \"react\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { IDocumentCheck, IDocumentCheckFormProps } from \"../../evaluation/damageCaseEvaluator/documentCheck\";\r\nimport { AttachmentDownloader } from \"../../baseInfo/attachment/attachmentDownloader\";\r\nimport AppContext, { AppContextProps } from \"../../components/infrastructure/appContext\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport SimpleMap from \"../../components/map\";\r\nimport { IDamageEstimation } from \"../../evaluation/damageCaseEvaluator/damageEstimation\";\r\nimport { IPolicyholderConfirmationFormProps } from \"../../evaluation/damageCaseEvaluator/policyholderConfirmation\";\r\nimport { enmContactStatus } from \"../../evaluation/damageCaseEvaluator/interfaces\";\r\nimport { InfoCircleFilled } from \"@ant-design/icons\";\r\nimport { TriesNames } from \"../../evaluation/damageCaseEvaluator\";\r\nimport { DamageType } from \"../../baseInfo/damageType\";\r\ndayjs.extend(jalaliday);\r\n\r\nexport class DamageCasePolicyholder extends BaseEntityManager<IDamageCase, IDamageCaseProps, IDamageCaseStates, IDamageCaseFetchingInfo, IDamageCaseInitialData>{\r\n    scrolled: boolean = false;\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"لیست پرونده های خسارت بیمه\",\r\n            name: \"DamageCasePolicyholder\",\r\n            Properties: [\r\n                {\r\n                    title: \"صادر کننده خسارت\",\r\n                    dataIndex: \"IssuerType\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: { options: damageCaseIssuerTypesOptions },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پرونده\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"دلیل خسارت\",\r\n                    dataIndex: \"DamageReason\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"نوع خسارت\",\r\n                    dataIndex: \"DamageTypeId\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.lookup,\r\n                    lookup: {\r\n                        lookupComponent: DamageType,\r\n                        lookupDisplayFields: [\"Name\"],\r\n                        showButton: false,\r\n                        dropdownDisplayFields: [\"Name\"],\r\n                        lookupProperty: \"DamageType\"\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: (_, record: IDamageCase) => damageCaseStatusOptions.map(o => {\r\n                            if (!record)\r\n                                return { title: o.title, value: o.value };\r\n                            if (record.Status === enmDamageCaseStatus.ReceiveDepreciated && record.DamageTypeId !== 2)\r\n                                return { title: 'در انتظار تایید انتقال مالکیت', value: o.value };\r\n                            else if (record.Status === enmDamageCaseStatus.ReceiveDepreciated && record.DamageTypeId === 2)\r\n                                return { title: 'در انتظار ارسال داغی توسط مشتری', value: o.value };\r\n                            return { title: o.title, value: o.value };\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"وضعیت ارزیابی\",\r\n                    dataIndex: \"EvaluationStatus\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: (_: any, record: IDamageCase) => evaluationStatusOptions.map(o => {\r\n                            if (record.EvaluationStatus === enmEvaluationStatus.DamageEstimation) {\r\n                                let damageEstiomationTitle: string | null = null;\r\n                                const damageEstimations = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1].Estimations;\r\n                                if (damageEstimations.length > 0) {\r\n                                    const currentDamageEstiomation = damageEstimations[damageEstimations.length - 1];\r\n                                    if (currentDamageEstiomation !== null && !currentDamageEstiomation.ExpertConfirmation)\r\n                                        damageEstiomationTitle = \"منتظر تایید کارشناس زبده\";\r\n                                }\r\n                                return { title: damageEstiomationTitle ?? o.title, value: o.value, name: o.name };\r\n                            }\r\n                            else if (record.EvaluationStatus === enmEvaluationStatus.PolicyholderRejected) {\r\n                                const title = o.title + (record && record.NumberOfPreviousEvaluations < 20 ? ` (بار ${TriesNames[record.NumberOfPreviousEvaluations]}) ` : ' (بیش از بیست بار) ');\r\n                                return { title, value: o.value, name: o.name };\r\n                            }\r\n                            else if (record.EvaluationStatus === enmEvaluationStatus.ContactSetting) {\r\n                                const methodOpt = evaluationMethodsOptions.find(m => m.value === record.EvaluationMethod);\r\n                                const title = methodOpt?.contactSettingStatusTitle;\r\n                                const name = methodOpt?.contactSettingCommandTitle;\r\n                                return { title, value: o.value, name };\r\n                            }\r\n                            else if (record.EvaluationStatus === enmEvaluationStatus.MakingContact) {\r\n                                const methodOpt = evaluationMethodsOptions.find(m => m.value === record.EvaluationMethod);\r\n                                const title = methodOpt?.makingContactStatusTitle;\r\n                                const name = methodOpt?.makingContactCommandTitle;\r\n                                return { title, value: o.value, name };\r\n                            }\r\n                            else if (record.EvaluationStatus === enmEvaluationStatus.SendEssentials && record.DamageTypeId === 3) { // سرقت\r\n                                return { title: 'در انتظار دریافت مدارک سرقت', value: o.value, name: 'دریافت مدارک سرقت' };\r\n                            }\r\n                            else {\r\n                                return { title: o.title, value: o.value, name: o.name };\r\n                            }\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200,\r\n                    visibility: (currentEntity: IDamageCase) => {\r\n                        return currentEntity.Status !== enmDamageCaseStatus.Create;\r\n                    }\r\n                },\r\n                {\r\n                    title: \"مرکز ارزیابی\",\r\n                    dataIndex: \"EvaluatorId\",\r\n                    controlType: enmControlType.template,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    renderColumn: (_: any, record: IDamageCase) => {\r\n                        let evaluator = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1]?.Evaluator;\r\n                        return (\r\n                            <>\r\n                                {evaluator?.FullName}\r\n                            </>\r\n                        );\r\n                    },\r\n                    renderControl: (currentEntity: IDamageCase) => {\r\n                        let evaluator = currentEntity.DamageCaseEvaluators[currentEntity.DamageCaseEvaluators.length - 1]?.Evaluator;\r\n                        return (\r\n                            <>\r\n                                {evaluator?.FullName}\r\n                            </>\r\n                        );\r\n                    },\r\n                    width: 200,\r\n                    visibility: (currentEntity: IDamageCase) => {\r\n                        return currentEntity.Status !== enmDamageCaseStatus.Create;\r\n                    }\r\n                },\r\n                {\r\n                    title: \"سریال بیمه نامه\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.SerialNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.Policyholder.NationalCode\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.Policyholder.FullName\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"نوع تجهیز\",\r\n                    dataIndex: \"PolicyEquipmentModel.Equipment.Name\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"PolicyEquipmentModel.BrandTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"مدل\",\r\n                    dataIndex: \"PolicyEquipmentModel.EquipmentModelTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"IMEI/سریال دستگاه\",\r\n                    dataIndex: \"PolicyEquipmentModel.EquipmentSerialNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"روش ارزیابی\",\r\n                    dataIndex: \"EvaluationMethod\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: { options: evaluationMethodsOptions.map(a => { return { name: a.name, title: a.name, value: a.value } }) },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    visibility: (currentEntity: IDamageCase) => {\r\n                        return !currentEntity.DamageReason?.includes('سرقت');\r\n                    }\r\n                },\r\n                {\r\n                    title: \"تاریخ خسارت\",\r\n                    dataIndex: \"DamageDate\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    static contextType = AppContext;\r\n\r\n    onInitializing() {\r\n\r\n        this.originalOrderings = () => [\r\n            { OrderBy: enmOrderingType.Ascending, Property: \"Status\" },\r\n            { OrderBy: enmOrderingType.Ascending, Property: \"EvaluationStatus\" },\r\n            { OrderBy: enmOrderingType.Descending, Property: \"Id\" }\r\n        ];\r\n\r\n        this.onDataFetching = (fetchingInfo, onViewMode) => {\r\n            const { getUserInfo } = this.context as AppContextProps;\r\n            const userInfo = getUserInfo();\r\n\r\n            fetchingInfo.PolicyholderId = userInfo?.extraVariables['PolicyholderId'];\r\n            fetchingInfo.LoadNavigations = onViewMode;\r\n        };\r\n\r\n        if (this.props.defaultDamageCaseId) {\r\n            this.metadata.title = \"پرونده جاری\";\r\n            this.originalFilter = () => ComparisonFilter.Equal<IDamageCase>(d => d.Id, this.props.defaultDamageCaseId);\r\n        }\r\n        else {\r\n\r\n            this.searchable = true;\r\n            this.searchArea = {\r\n                columnsPerRow: 2\r\n            };\r\n\r\n            const createDamageCaseButton = (<Button key=\"createDamageCaseButton\" type=\"primary\" onClick={() => this.createDamage()}>ثبت خسارت جدید </Button>);\r\n            this.extraHeaderButtons = () => [createDamageCaseButton];\r\n        }\r\n\r\n        this.extraHeaderNodes = () => {\r\n            return (\r\n                this.state.state === enmEntityManagerState.List && <Alert\r\n                    style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                    message={\r\n                        <>\r\n                            <span>بیمه گزار/مشتری گرامی، لطفا جهت مشاهده جزئیات و پیگیری خسارت، روی ردیف مورد نظر کلیک نمایید</span>\r\n                        </>\r\n                    }\r\n                    type=\"info\"\r\n                    icon={<InfoCircleFilled className=\"blink\" />}\r\n                    showIcon\r\n                />\r\n            );\r\n        };\r\n\r\n        this.extraViewNode = () => {\r\n            let damageCaseEvaluatorId: number | undefined = undefined;\r\n            let steps: React.ReactNode[] = [];\r\n\r\n            const { currentEntity, evaluationSteps } = this.state;\r\n            if (!currentEntity)\r\n                return steps;\r\n\r\n            const needUserAction = currentEntity.EvaluationStatus === enmEvaluationStatus.DefectiveDocuments\r\n                || currentEntity.EvaluationStatus === enmEvaluationStatus.PolicyholderConfirmation;\r\n\r\n            currentEntity.DamageCaseEvaluators.forEach(damageCaseEvaluator => {\r\n                if (damageCaseEvaluator.Id !== damageCaseEvaluatorId) {\r\n                    damageCaseEvaluatorId = damageCaseEvaluator.Id;\r\n                    let evaluator = damageCaseEvaluator.Evaluator;\r\n                    steps.push(\r\n                        <div key={(damageCaseEvaluator as any).RowGuid} className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <Descriptions>\r\n                                        <Descriptions.Item><b>تخصیص ارزیاب</b></Descriptions.Item>\r\n                                        <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dayjs(damageCaseEvaluator.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span></Descriptions.Item>\r\n                                        <Descriptions.Item label=\"کاربر\">{damageCaseEvaluator.Creator?.FullName ?? 'کارشناس پرونده خسارت'}</Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n                                    <div style={{ padding: 20 }}>\r\n                                        <label>مرکز ارزیابی</label>\r\n                                        <p>{evaluator.NationalCode + \" \" + evaluator.FullName}</p>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n                }\r\n\r\n                evaluationSteps.filter(s => s.DamageCaseEvaluatorId === damageCaseEvaluatorId)\r\n                    .forEach((s, i) => {\r\n                        const evaluationMethod = this.state.currentEntity?.EvaluationMethod;\r\n\r\n                        if (s.Substatus === enmEvaluationStatus.DamageEstimation && (s as IDamageEstimation).ExpertConfirmation !== true && (s as IDamageEstimation).ExpertConfirmation !== false)\r\n                            return;\r\n\r\n                        let title = evaluationStatusOptions.find(o => o.value === s.Substatus)?.name;\r\n\r\n                        const evaluationMethodChanged = !!evaluationSteps.find((v, vIndex) => v.ContactStatus === enmContactStatus.EvaluationMethodToPolicyholderInPerson && i <= vIndex);\r\n                        if (s.Substatus === enmEvaluationStatus.ContactSetting) {\r\n                            title = evaluationMethodsOptions.find(m => (evaluationMethodChanged && m.value === enmEvaluationMethods.VideoCall) || m.value === evaluationMethod)?.contactSettingCommandTitle;\r\n                        }\r\n                        if (s.Substatus === enmEvaluationStatus.MakingContact) {\r\n                            title = evaluationMethodsOptions.find(m => (evaluationMethodChanged && m.value === enmEvaluationMethods.VideoCall) || m.value === evaluationMethod)?.makingContactCommandTitle;\r\n                        }\r\n\r\n                        let repeatedStep = !!evaluationSteps.find((v, vIndex) => v.Substatus === s.Substatus && i > vIndex);\r\n                        if (repeatedStep)\r\n                            title += ' (مجدد) ';\r\n                        let dateTime = dayjs(s.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\");\r\n                        let history: React.ReactNode;\r\n                        let formName = enmEvaluationStatus[Number(s.Substatus)] + \"Form\";\r\n                        let formProps: IEvaluationComponentFormProps<any> = {\r\n                            currentEntity: s,\r\n                            loading: false,\r\n                            disabled: true,\r\n                            damageCase: currentEntity!,\r\n                            damageCaseDocumentTypeAttachments: []\r\n                        };\r\n\r\n                        if (s.Substatus === enmEvaluationStatus.DocumentCheck) {\r\n                            const prevCheckCount = evaluationSteps.filter((v, vIndex) => v.Substatus === s.Substatus && i > vIndex).length;\r\n                            const attachments = this.state.attachments.filter((_, k) => k <= prevCheckCount).flatMap(a => a);\r\n                            (formProps as IDocumentCheckFormProps).damageCaseDocumentTypeAttachments = attachments;\r\n                            (formProps as IDocumentCheckFormProps).numberOfPreviousEvaluations = evaluationSteps.filter((v, vIndex) => v.Substatus === enmEvaluationStatus.PolicyholderConfirmation && v.ResponseType === enmPolicyholderResponseTypes.Objection && i > vIndex).length;\r\n                        }\r\n\r\n                        const Component = (EvaluationComponents as any)[formName];\r\n                        if (Component) {\r\n                            if (formName === \"PolicyholderConfirmationForm\") {\r\n                                (formProps as IPolicyholderConfirmationFormProps).policyholderPanel = true;\r\n                                (formProps as IPolicyholderConfirmationFormProps).parent = this;\r\n                            }\r\n\r\n                            if (formName === \"ContactSettingForm\") {\r\n                                (formProps as any).evaluationMethodChanged = evaluationMethodChanged;\r\n                            }\r\n\r\n                            history = (\r\n                                <div style={{ padding: 20 }} ref={node => {\r\n                                    if (!needUserAction && i === evaluationSteps.length - 1 && !!node && this.state.state === enmEntityManagerState.View && !this.state.loading) {\r\n                                        node.scrollIntoView({ behavior: \"smooth\" });\r\n                                    }\r\n                                }}>\r\n                                    <Component key={s.RowGuid} {...formProps} />\r\n                                </div>\r\n                            );\r\n\r\n                            steps.push(\r\n                                <div key={s.RowGuid} className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                                    <div className=\"box-title\">\r\n                                        <div className=\"caption\">\r\n                                            <Descriptions>\r\n                                                <Descriptions.Item><b>{title}</b></Descriptions.Item>\r\n                                                <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dateTime}</span></Descriptions.Item>\r\n                                                <Descriptions.Item label=\"کاربر\">{s.Creator?.FullName ?? 'کارشناس پرونده خسارت'}</Descriptions.Item>\r\n                                            </Descriptions>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div className=\"box-body form\">\r\n                                        <div className=\"form-body\">\r\n                                            {history}\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            );\r\n                        }\r\n                        else if (s.Substatus === enmEvaluationStatus.DefectiveDocuments) {\r\n                            history = (\r\n                                <div style={{ padding: 20 }} ref={node => {\r\n                                    if (!needUserAction && i === evaluationSteps.length - 1 && !!node && this.state.state === enmEntityManagerState.View && !this.state.loading) {\r\n                                        node.scrollIntoView({ behavior: \"smooth\" });\r\n                                    }\r\n                                }}>\r\n                                    <AttachmentDownloader key={s.RowGuid} attachments={s.DamageCaseDocumentTypes.flatMap((a: any) => a.DamageCaseDocumentTypeAttachments)} />\r\n                                </div>\r\n                            );\r\n                            steps.push(\r\n                                <div key={s.RowGuid} className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                                    <div className=\"box-title\">\r\n                                        <div className=\"caption\">\r\n                                            <Descriptions>\r\n                                                <Descriptions.Item><b>{title}</b></Descriptions.Item>\r\n                                                <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dateTime}</span></Descriptions.Item>\r\n                                                <Descriptions.Item label=\"کاربر\">{s.Creator?.FullName}</Descriptions.Item>\r\n                                            </Descriptions>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div className=\"box-body form\">\r\n                                        <div className=\"form-body\">\r\n                                            {history}\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            );\r\n                        }\r\n\r\n                    });\r\n            });\r\n\r\n            let policyholderName = currentEntity.PolicyEquipmentModel.Policy.Policyholder.FullName;\r\n\r\n            if (currentEntity.EvaluationStatus === enmEvaluationStatus.PolicyholderConfirmation) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <div>\r\n                            بیمه گزار/مشتری گرامی، طبق نظر کارشناس محترم ارزیاب، خسارت شما بررسی گردید. خواهشمند است ضمن بررسی نتیجه \"برآورد خسارت\" در فرم ذیل، نظر خود را ثبت نمایید\r\n                        </div>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"DamageEstimationPaymentMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.EvaluationStatus === enmEvaluationStatus.Rejected && currentEntity.Status === enmDamageCaseStatus.Evaluation) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            بیمه گزار/مشتری گرامی، آقا/خانم <span style={{ color: \"darkgray\" }}>{policyholderName}</span> پرونده خسارت شماره <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span> توسط کارشناسان بیمه رد شده و قابل پرداخت نیست، جزئیات فوق را مشاهده بفرمایید. در صورت عدم رضایت می توانید مطابق با دستورالعمل‌های شرکت بیمه سامان با شماره 8943-021 واحد امور مشتریان بخش شکایت تماس گرفته یا از طریق سایت بیمه سامان، فرم\r\n                            <a href=\"https://www.si24.ir/fa/services/form_Criticism/add/template/defaultTemplate/swd_id/54504/\" target=\"_blank\"> \"انتقادات و نارضایتی‌ها\" </a>\r\n                            را تکمیل بفرمائید.\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"DamageEstimationMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.EvaluationStatus === enmEvaluationStatus.PolicyholderRejected/* && currentEntity.NumberOfPreviousEvaluations === 0*/) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            بیمه گزار/مشتری گرامی، آقا/خانم <span style={{ color: \"darkgray\" }}>{policyholderName}</span> پرونده خسارت تجهیزات الکترونیک به شماره <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span> جهت بررسی بیشتر به کارشناسان شرکت بیمه ارجاع داده می‌شود.\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"DamageEstimationMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            //else if (currentEntity.EvaluationStatus === enmEvaluationStatus.PolicyholderRejected && currentEntity.NumberOfPreviousEvaluations === 1) {\r\n            //    const messageNode = (\r\n            //        <div style={{ lineHeight: 2.2 }}>\r\n            //            <b>\r\n            //                بیمه گزار/مشتری گرامی، آقا/خانم <span style={{ color: \"darkgray\" }}>{policyholderName}</span> با توجه به اینکه پس از 2 بار ارزیابی پرونده خسارت شماره <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span>، مبلغ پرداختی مورد تأیید شما نیست، در صورت عدم رضایت می توانید مطابق با دستورالعمل‌های شرکت بیمه سامان با شماره 8943-021 واحد امور مشتریان بخش شکایت تماس گرفته یا از طریق سایت بیمه سامان، فرم\r\n            //                <a href=\"https://www.si24.ir/fa/services/form_Criticism/add/template/defaultTemplate/swd_id/54504/\" target=\"_blank\"> \"انتقادات و نارضایتی‌ها\" </a>\r\n            //                را تکمیل بفرمائید.\r\n            //            </b>\r\n            //        </div>\r\n            //    );\r\n            //    const msg = <div key={\"DamageEstimationMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n            //        <div style={{ direction: \"rtl\" }} ref={node => {\r\n            //            if (!!node && !this.state.loading) {\r\n            //                node.scrollIntoView({ behavior: \"smooth\" });\r\n            //            }\r\n            //        }}>\r\n            //            <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n            //        </div>\r\n            //    </div>\r\n            //    steps.push(msg);\r\n            //}\r\n\r\n            else if (currentEntity.Status === enmDamageCaseStatus.Evaluation && currentEntity.EvaluationStatus === enmEvaluationStatus.SendEssentials) {\r\n                let cntnt = ( // خسارت کلی\r\n                    <b>\r\n                        مشتری گرامی، آقا/خانم <span style={{ color: \"darkgray\" }}>{policyholderName}</span> با توجه به تشخیص خسارت کُلی توسط مرکز ارزیابی، خواهشمند است جعبه و متعلقات دستگاه(از قبیل شارژر، سیم شارژر، هندزفری، قلم، بند ساعت هوشمند و...) را با یادداشت نام و نام خانوادگی، کد ملّی و شماره تماس خود بر روی بسته به آدرس پستی: 1513813118 به آدرس : تهران، خیابان وزراء(خیابان خالد اسلامبولی)، نبش کوچه سیزدهم، پلاک 123، شرکت بیمه سامان، ارسال نمایید. پس از دریافت متعلقات ذکر شده پرونده خسارت بررسی و نتیجه از طریق پیام کوتاه اطلاع رسانی خواهد شد\r\n                    </b>\r\n                );\r\n\r\n                if (currentEntity.DamageTypeId === 3) { // خسارت سرقت\r\n                    if (currentEntity.DamageReason === \"سرقت کُلی\")\r\n                        cntnt = (\r\n                            <b>\r\n                                مشتری گرامی، آقا/خانم <span style={{ color: \"darkgray\" }}>{policyholderName}</span> مدارک پرونده سرقت به شماره  <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span>، مورد تأیید می‌باشد. خواهشمند است مدارک خسارت اعم از اصل نامه کلانتری، اصل نامه مقام قضایی، رسید سایت همیاب 24، نامه استشهادیه محلی، فیلم دوربین مداربسته در صورت تأیید کلانتری و یا آگاهی(بر روی فلش یا سی دی)، جعبه و متعلقات دستگاه(شارژر، کابل شارژر، هندزفری و...) را با یادداشت نام و نام خانوادگی و شماره تماس خود بر روی بسته به آدرس پستی: 1513813118 به نشانی : تهران، خیابان وزراء(خیابان خالد اسلامبولی)، نبش کوچه سیزدهم، پلاک 123، شرکت بیمه سامان، ارسال نمایید. پس از دریافت مدارک سرقت و تأیید انتقال مالکیت توسط شرکت بیمه سامان، طی 15 الی 20 روز کاری (بغیر از ایام تعطیلات) مبلغ مورد توافق خسارت پرونده شماره  <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span>، به حساب اعلام شده واریز خواهد شد.\r\n                            </b>\r\n                        );\r\n                    if (currentEntity.DamageReason === \"سرقت با شکست حرز\")\r\n                        cntnt = (\r\n                            <b>\r\n                                مشتری گرامی، آقا/خانم <span style={{ color: \"darkgray\" }}>{policyholderName}</span> مدارک پرونده سرقت به شماره <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span>، مورد تأیید می‌باشد. خواهشمند است مدارک خسارت اعم از اصل نامه کلانتری، اصل نامه مقام قضایی، رسید سایت همیاب 24، جعبه و متعلقات دستگاه(شارژر، کابل شارژر، هندزفری و...) را با یادداشت نام و نام خانوادگی و شماره تماس خود بر روی بسته به آدرس پستی: 1513813118 به نشانی : تهران، خیابان وزراء(خیابان خالد اسلامبولی)، نبش کوچه سیزدهم، پلاک 123، شرکت بیمه سامان، ارسال نمایید. پس از دریافت مدارک سرقت و تأیید انتقال مالکیت توسط شرکت بیمه سامان، طی 15 الی 20 روز کاری (بغیر از ایام تعطیلات) مبلغ مورد توافق خسارت پرونده شماره <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span>، به حساب اعلام شده واریز خواهد شد.\r\n                            </b>\r\n                        );\r\n                }\r\n\r\n                const { getUserInfo } = this.context as AppContextProps;\r\n                const { extraVariables } = getUserInfo()!;\r\n                const zobdehLocation: { Longitude?: number; Latitude?: number; } = extraVariables['ZobdehLocation'];\r\n\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <div>\r\n                            {cntnt}\r\n                            {!!zobdehLocation.Longitude && !!zobdehLocation.Latitude &&\r\n                                <div style={{ maxWidth: 400 }}>\r\n                                    <SimpleMap\r\n                                        disableChangeMarker={true}\r\n                                        cityName={'تهران'}\r\n                                        lat={zobdehLocation.Latitude}\r\n                                        lng={zobdehLocation.Longitude}\r\n                                    />\r\n                                </div>\r\n                            }\r\n                        </div>\r\n                    </div>\r\n                );\r\n\r\n                const msg = <div key={\"DamageSendEssentialsMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.Status === enmDamageCaseStatus.Evaluation && currentEntity.EvaluationStatus === enmEvaluationStatus.DamageEstimation && currentEntity.ReceiveDepreciated === true) {\r\n                let cntnt = \r\n                    \r\n                        currentEntity.DamageTypeId === 3\r\n                        ? <b>بیمه‌گزار/مشتری گرامی، <span style={{ color: \"darkgray\" }}>{policyholderName}</span>، مدارک سرقت پرونده <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span> دریافت گردید. پس از بررسی مدارک ارائه شده نتیجه از طریق پیامک کوتاه اطلاع رسانی خواهد شد. از صبر و شکیبائی شما سپاسگزاریم.</b>\r\n                        : <b>بیمه‌گزار/مشتری گرامی، <span style={{ color: \"darkgray\" }}>{policyholderName}</span>، دستگاه و متعلقات پرونده خسارت <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span> دریافت گردید. پس از بررسی مدارک ارائه شده نتیجه از طریق پیامک کوتاه اطلاع رسانی خواهد شد. از صبر و شکیبائی شما سپاسگزاریم.</b>\r\n                ;\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        {cntnt}\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"DamageEstimationMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.Status === enmDamageCaseStatus.ReceiveDepreciated && currentEntity.EvaluationStatus === enmEvaluationStatus.EvaluationComplete && currentEntity.DamageTypeId === 2) { // خسارت های جزئی\r\n                let cntnt = (\r\n                    <b>\r\n                        بیمه گزار/مشتری گرامی، آقا/خانم <span style={{ color: \"darkgray\" }}>{policyholderName}</span> خواهشمند است ضمن انجام تعمیرات در مرکز دلخواه، فاکتور ممهور و داغی به آدرس پستی: 1513813118 به آدرس : تهران، خیابان وزراء(خیابان خالد اسلامبولی)، نبش کوچه سیزدهم، پلاک 123، شرکت بیمه سامان. خواهشمند است نام و نام خانوادگی، کد ملی و شماره تماس خود را بر روی بسته ارسالی یادداشت نمایید. پس از دریافت داغی تعمیرات و فاکتور مهرشده محل تعمیر توسط شرکت بیمه سامان طی 15 الی 20 روز کاری (بغیر از ایام تعطیلات) مبلغ مورد توافق به حساب اعلام شده واریز خواهد شد\r\n                    </b>\r\n                );\r\n\r\n                const { getUserInfo } = this.context as AppContextProps;\r\n                const { extraVariables } = getUserInfo()!;\r\n                const zobdehLocation: { Longitude?: number; Latitude?: number; } = extraVariables['ZobdehLocation'];\r\n\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <div>\r\n                            {cntnt}\r\n                            {!!zobdehLocation.Longitude && !!zobdehLocation.Latitude &&\r\n                                <div style={{ maxWidth: 400 }}>\r\n                                    <SimpleMap\r\n                                        disableChangeMarker={true}\r\n                                        cityName={'تهران'}\r\n                                        lat={zobdehLocation.Latitude}\r\n                                        lng={zobdehLocation.Longitude}\r\n                                    />\r\n                                </div>\r\n                            }\r\n                        </div>\r\n                    </div>\r\n                );\r\n\r\n                const msg = <div key={\"DamageEstimationMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.Status === enmDamageCaseStatus.Financial && (currentEntity.FinancialStatus === enmFinancialStatus.WaitingForPay || currentEntity.FinancialStatus === enmFinancialStatus.InPayProgress)) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <div>\r\n                            بیمه گزار/مشتری گرامی، مدارک خسارت شماره <span style={{ color: \"darkgray\" }}>{currentEntity.TicketNo}</span> توسط شرکت بیمه سامان در تاریخ {dayjs(currentEntity.ReceiveDepreciatedDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")} دریافت و مورد تأیید می‌باشد. طی 15 الی 20 روز کاری (بغیر از ایام تعطیلات) مبلغ مورد توافق به حساب اعلام شده واریز خواهد شد.\r\n                        </div>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"DamageEstimationMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            if (needUserAction && currentEntity) {\r\n                if (currentEntity.EvaluationStatus === enmEvaluationStatus.DefectiveDocuments) {\r\n                    const lastStep: IDocumentCheck = evaluationSteps[evaluationSteps.length - 1];\r\n                    const action = (\r\n                        <div key={\"DefectiveDocuments\"} className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <Descriptions >\r\n                                        <Descriptions.Item><b>رفع نقص مدارک</b></Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n                                    <div style={{ padding: 0, direction: \"rtl\" }} ref={node => {\r\n                                        if (!!node && !this.state.loading) {\r\n                                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                                        }\r\n                                    }}>\r\n                                        <UploadDocuments\r\n                                            key=\"UploadDocuments\"\r\n                                            descriptions={lastStep.Description}\r\n                                            isChildComponent={true}\r\n                                            ticketNo={currentEntity.TicketNo}\r\n                                            essentialDocuments={lastStep.DefectiveDocuments.map(d => { return { Name: d.DocumentType.Name, Code: d.DocumentType.Code! }; })}\r\n                                            onClose={this.onLookupClosed}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n                    steps.push(action);\r\n                }\r\n                else if (currentEntity.EvaluationStatus === enmEvaluationStatus.PolicyholderConfirmation) { // enmEvaluationStatus.PolicyholderConfirmation\r\n                    const action = (\r\n                        <div key=\"PolicyholderConfirmation\" className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <Descriptions >\r\n                                        <Descriptions.Item style={{ padding: 10 }}><b>ثبت پاسخ بیمه گزار/مشتری</b></Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n                                    <div style={{ padding: 0, direction: \"rtl\" }} ref={node => {\r\n                                        if (!!node && !this.state.loading) {\r\n                                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                                        }\r\n                                    }}>\r\n                                        <PolicyholderConfirmation damageCase={currentEntity!} onClose={arg => arg && arg.preventBack === true ? this.view(this.state.currentEntity!.RowGuid) : this.back()} />\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n                    steps.push(action);\r\n                }\r\n            }\r\n\r\n            if (currentEntity.EvaluationStatus === enmEvaluationStatus.ContactSetting) {\r\n                let messageNode = <></>;\r\n                if (currentEntity.EvaluationMethod === enmEvaluationMethods.PolicyholderInPerson)\r\n                    messageNode = (\r\n                        <div style={{ lineHeight: 2.2 }}>\r\n                            <div>\r\n                                بیمه گزار/مشتری گرامی، زمان، تاریخ و نحوه ارزیابی مراجعه حضوری به ارزیاب از طریق پیام کوتاه و ایمیل حضورتان اطلاع رسانی خواهد شد. لطفاً در هنگام مراجعه به ارزیاب، مدارک زیر جهت سهولت در روند ارزیابی را به همراه داشته باشید :\r\n                            </div>\r\n                            <ul style={{ listStyleType: 'none' }}>\r\n                                <li>1. مدارک شناسایی (کارت ملّی یا شناسنامه)</li>\r\n                                <li>2. در حالاتی غیر از حالات سرقت کلی، سرقت با شکست حرز و سیل و طوفان ارائه دستگاه آسیب دیده به همراه جعبه دستگاه و متعلقات الزامی است.</li>\r\n                                <li>3. اصل سایر مدارک آپلود شده</li>\r\n                            </ul>\r\n                        </div>\r\n                    );\r\n                //else if (currentEntity.EvaluationMethod === enmEvaluationMethods.EvaluatorInPerson)\r\n                //    messageNode = (\r\n                //        <div style={{ lineHeight: 2.2 }}>\r\n                //            <div>\r\n                //                بیمه گزار/مشتری گرامی، زمان، تاریخ و نحوه ارزیابی مراجعه حضوری ارزیاب از طریق پیام کوتاه و ایمیل حضورتان اطلاع رسانی خواهد شد. لطفاً در هنگام مراجعه ارزیاب، مدارک زیر جهت سهولت در روند ارزیابی آماده گردد:\r\n                //            </div>\r\n                //            <ul style={{ listStyleType: 'none' }}>\r\n                //                <li>1. مدارک شناسایی (کارت ملّی یا شناسنامه)</li>\r\n                //                <li>2. در حالاتی غیر از حالات سرقت کلی، سرقت با شکست حرز و سیل و طوفان ارائه دستگاه آسیب دیده الزامی است.</li>\r\n                //                <li>3. اصل سایر مدارک آپلود شده</li>\r\n                //            </ul>\r\n                //        </div>\r\n                //    );\r\n                else if (currentEntity.EvaluationMethod === enmEvaluationMethods.VideoCall)\r\n                    messageNode = (\r\n                        <div style={{ lineHeight: 2.2 }}>\r\n                            بیمه گزار/مشتری گرامی، زمان، تاریخ و نحوه ارزیابی تماس تصویری از طریق پیام کوتاه، حضورتان اطلاع رسانی خواهد شد\r\n                        </div>\r\n                    );\r\n                const message = (\r\n                    <div key={\"ContactSettingMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                        <div style={{ direction: \"rtl\" }} ref={node => {\r\n                            if (!!node && !this.state.loading) {\r\n                                node.scrollIntoView({ behavior: \"smooth\" });\r\n                            }\r\n                        }}>\r\n                            <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                        </div>\r\n                    </div>\r\n                );\r\n                steps.push(message);\r\n            }\r\n\r\n            const evaluator = currentEntity.DamageCaseEvaluators[currentEntity.DamageCaseEvaluators.length - 1]?.Evaluator;\r\n            if (evaluator &&\r\n                (\r\n                    (currentEntity.EvaluationStatus === enmEvaluationStatus.MakingContact && currentEntity.EvaluationMethod === enmEvaluationMethods.PolicyholderInPerson)\r\n                    ||\r\n                    (currentEntity.Status === enmDamageCaseStatus.ReceiveDepreciated && currentEntity.EvaluationStatus !== enmEvaluationStatus.EvaluationComplete && currentEntity.DamageTypeId === 2)\r\n                )\r\n            ) {\r\n                const message = (\r\n                    <div key={\"MakingContactMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                        <div style={{ direction: \"rtl\" }} ref={node => {\r\n                            if (!!node && !this.state.loading) {\r\n                                node.scrollIntoView({ behavior: \"smooth\" });\r\n                            }\r\n                        }}>\r\n                            <Alert type=\"info\" style={{ marginTop: 10 }} message={\r\n                                <div style={{ lineHeight: 2.2 }}>\r\n                                    <>\r\n                                        {(currentEntity.Status === enmDamageCaseStatus.ReceiveDepreciated && currentEntity.DamageTypeId === 2) ?\r\n                                            <div>\r\n                                                بیمه گزار/مشتری گرامی، شماره تماس و آدرس مرکز ارزیابی <b>{evaluator.FullName}</b> به شرح ذیل است :\r\n                                            </div>\r\n                                            :\r\n                                            <>\r\n                                                <div>\r\n                                                    بیمه گزار/مشتری گرامی، شماره تماس و آدرس مرکز ارزیابی <b>{evaluator.FullName}</b> به شرح ذیل است. لطفاً در هنگام مراجعه به مرکز ارزیابی، مدارک زیر را جهت سهولت در روند ارزیابی به همراه داشته باشید :\r\n                                                </div>\r\n                                                <ul style={{ listStyleType: 'none' }}>\r\n                                                    <li>1. مدارک شناسایی (کارت ملّی یا شناسنامه)</li>\r\n                                                    <li>2. در حالاتی غیر از حالات سرقت کلی، سرقت با شکست حرز و سیل و طوفان ارائه دستگاه آسیب دیده به همراه جعبه دستگاه و متعلقات الزامی است.</li>\r\n                                                    <li>3. اصل سایر مدارک آپلود شده</li>\r\n                                                </ul>\r\n                                            </>\r\n                                        }\r\n                                    </>\r\n                                    {evaluator.Phone && <div>شماره تماس مرکز ارزیابی : <b style={{ unicodeBidi: \"plaintext\" }}>{evaluator.Phone.startsWith('9') ? `0${evaluator.Phone}` : `0${evaluator.Phone}`.replace(/\\D+/g, '').replace(/(\\d{3})(\\d+)/, '$1 - $2')}</b></div>}\r\n                                    <div>آدرس مرکز ارزیابی: <b>{evaluator.Address}</b></div>\r\n                                    {evaluator.WorkTime && <div>ساعت کار : <b>{evaluator.WorkTime}</b></div>}\r\n                                    {!!evaluator.Longitude && !!evaluator.Latitude &&\r\n                                        <div style={{ maxWidth: 400 }}>\r\n                                            <SimpleMap\r\n                                                disableChangeMarker={true}\r\n                                                cityName={evaluator.City?.Name}\r\n                                                lat={evaluator.Latitude}\r\n                                                lng={evaluator.Longitude}\r\n                                            />\r\n                                        </div>\r\n                                    }\r\n                                </div>\r\n                            } />\r\n                        </div>\r\n                    </div>\r\n                );\r\n                steps.push(message);\r\n            }\r\n\r\n            return (\r\n                <>\r\n                    {steps}\r\n                </>\r\n            );\r\n        };\r\n\r\n        this.viewButtonTitle = () => {\r\n            let entity = this.selectedEntity!;\r\n            return [enmDamageCaseStatus.Create, enmDamageCaseStatus.AssignEvaluator].indexOf(entity.Status) > -1 ||\r\n                (entity.EvaluationStatus && [enmEvaluationStatus.DocumentCheck, enmEvaluationStatus.ContactSetting, enmEvaluationStatus.DamageEstimation].indexOf(entity.EvaluationStatus) > -1)\r\n                ? \"مشاهده پرونده خسارت\" : ((entity.EvaluationStatus === enmEvaluationStatus.DefectiveDocuments) ? \"رفع نقص مدارک\" : (((entity.EvaluationStatus === enmEvaluationStatus.PolicyholderConfirmation) ? \"مشاهده نتیجه ارزیابی و اعلام نظر\" : \"پیگیری\")));\r\n        };\r\n\r\n        this.renderingToolbar = () => {\r\n            let result: ReactNode[] = [];\r\n            let entity = this.selectedEntity!;\r\n            if (entity.Status === enmDamageCaseStatus.Create) {\r\n                result.push(\r\n                    <Col key=\"SendToEvaluation\" style={{ marginLeft: 10 }}>\r\n                        <Button type=\"default\" onClick={() => this.sendToEvaluation(entity.TicketNo)}>ارسال مدارک</Button>\r\n                    </Col>\r\n                );\r\n                result.push(\r\n                    <Col key=\"RemoveDamageCase\" style={{ marginLeft: 10 }}>\r\n                        <Popconfirm okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} okText=\"بلی\" cancelText=\"خیر\" title=\"آیا مایلید پرونده خسارت را حذف نمایید؟\"\r\n                            onConfirm={() => this.removeDamageCase(entity.TicketNo)}>\r\n                            <Button type=\"default\">حذف پرونده خسارت</Button>\r\n                        </Popconfirm>\r\n                    </Col>\r\n                );\r\n            }\r\n            return result.length ? (<> {result} </>) : (<></>);\r\n        };\r\n\r\n        this.setRecordClassName = record => {\r\n            return record?.Status === enmDamageCaseStatus.Create || (!!record?.EvaluationStatus && [enmEvaluationStatus.DefectiveDocuments, enmEvaluationStatus.MakingContact, enmEvaluationStatus.PolicyholderConfirmation, enmEvaluationStatus.SendEssentials].indexOf(record.EvaluationStatus) > -1) ? 'new-record' : null;\r\n        };\r\n    }\r\n    componentDidUpdate(prevProps: IDamageCaseProps, prevState: IDamageCaseStates) {\r\n        super.componentDidUpdate(prevProps, prevState);\r\n\r\n        if (prevProps.defaultDamageCaseId !== this.props.defaultDamageCaseId) {\r\n            if (this.props.defaultDamageCaseId) {\r\n                this.metadata.title = \"پرونده جاری\";\r\n                this.originalFilter = () => ComparisonFilter.Equal<IDamageCase>(d => d.Id, this.props.defaultDamageCaseId);\r\n            }\r\n            this.fetchData();\r\n        }\r\n    }\r\n    sendToEvaluation = async (ticketNo: number) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"portal/checkdocuments\",\r\n            data: { ticketNo },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                const { sent, ticketNo, essentialDocuments } = result.Data as { sent: boolean; ticketNo: number; essentialDocuments?: { Name: string; Code: string; }[]; }\r\n                if (sent) {\r\n                    Core.successNotification('پرونده خسارت شما با موفقیت به واحد ارزیابی ارسال شد');\r\n                    return;\r\n                }\r\n                else {\r\n                    Core.warningNotification('لطفا مدارک لازم را آپلود نمائید');\r\n                    this.uploadDocuments(ticketNo, essentialDocuments);\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    uploadDocuments = (ticketNo: number, essentialDocuments?: { Name: string; Code: string; }[]) => {\r\n        this.addLookupForm(\"UploadDocuments\",\r\n            <UploadDocuments\r\n                key=\"UploadDocuments\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                ticketNo={ticketNo}\r\n                essentialDocuments={essentialDocuments}\r\n                onClose={this.onLookupClosed}\r\n                removeable={true}\r\n                onRemove={this.removeDamageCase}\r\n            />);\r\n    }\r\n    onEntityView = (entity: IDamageCase) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"damagecasepolicyholder/getallevaluationsteps\",\r\n            data: { damageCaseId: entity.Id },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                const steps = (result.Data.steps as { CreateDateTime: any; }[]).sort((a, b) => a.CreateDateTime > b.CreateDateTime ? 1 : -1) ?? [];\r\n                this.setState({ state: enmEntityManagerState.View, currentEntity: entity, evaluationSteps: steps, attachments: result.Data.attachments });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        this.callApi(fetchOpt);\r\n        return false;\r\n    }\r\n    createDamage = () => {\r\n        this.addLookupForm(\"DamageCaseCreate\",\r\n            <DamageCaseCreate\r\n                key=\"DamageCaseCreate\"\r\n                invokePath={this.metadata.title}\r\n                isChildComponent={true}\r\n                close={this.onLookupClosed}\r\n            />);\r\n    }\r\n    removeDamageCase = async (ticketNo: number) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"portal/RemoveDamageCase\",\r\n            data: { ticketNo },\r\n            onSuccess: async result => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification('پرونده خسارت شما حذف شد');\r\n                    await this.fetchData();\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n}","import { Button, Col, Form, Popconfirm } from \"antd\";\r\nimport { ReactNode } from \"react\";\r\nimport { Center } from \"../../baseInfo/center\";\r\nimport { ICenterProps } from \"../../baseInfo/center/interfaces\";\r\nimport { damageCaseIssuerTypesOptions, damageCaseStatusOptions, enmDamageCaseStatus, IDamageCase, IDamageCaseFetchingInfo, IDamageCaseInitialData, IDamageCaseProps, IDamageCaseStates } from \"../../baseInfo/damageCase/interfaces\";\r\nimport { BaseEntityManager, } from \"../../components/entityManager\";\r\nimport { ColumnFilter } from \"../../components/entityManager/columnfilter\";\r\nimport { enmControlType, enmPropertyType, IMetadata, IProperty } from \"../../components/entityManager/interfaces\";\r\nimport { ComparisonFilter, enmConditionalOperators } from \"../../components/infrastructure/filtering\";\r\nimport { enmOrderingType, ICallOptions } from \"../../components/infrastructure/models\";\r\n\r\nexport class ReceiveDepreciated extends BaseEntityManager<IDamageCase, IDamageCaseProps, IDamageCaseStates, IDamageCaseFetchingInfo, IDamageCaseInitialData>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"ReceiveDepreciated\",\r\n            title: \"دریافت داغی\",\r\n            Properties: [\r\n                {\r\n                    title: \"شماره پرونده خسارت\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"صادر کننده خسارت\",\r\n                    dataIndex: \"IssuerType\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: { options: damageCaseIssuerTypesOptions },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: (_: any, record: IDamageCase) => damageCaseStatusOptions.map(o => {\r\n                            if (!record)\r\n                                return { title: o.title, value: o.value };\r\n                            if (record.Status === enmDamageCaseStatus.ReceiveDepreciated && record.DamageTypeId !== 2)\r\n                                return { title: 'در انتظار تایید انتقال مالکیت', value: o.value };\r\n                            return { title: o.title, value: o.value };\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"مرکز ارزیابی\",\r\n                    dataIndex: \"EvaluatorId\",\r\n                    controlType: enmControlType.template,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    renderColumn: (_: any, record: IDamageCase) => {\r\n                        let evaluator = record.DamageCaseEvaluators[record.DamageCaseEvaluators.length - 1]?.Evaluator;\r\n                        return (\r\n                            <>\r\n                                {evaluator?.FullName}\r\n                            </>\r\n                        );\r\n                    },\r\n                    renderControl: (currentEntity: IDamageCase) => {\r\n                        let evaluator = currentEntity.DamageCaseEvaluators[currentEntity.DamageCaseEvaluators.length - 1]?.Evaluator;\r\n                        return (\r\n                            <>\r\n                                {evaluator?.FullName}\r\n                            </>\r\n                        );\r\n                    },\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"سریال بیمه نامه\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.SerialNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.Policyholder.NationalCode\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"PolicyEquipmentModel.Policy.Policyholder.FullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"نوع تجهیز\",\r\n                    dataIndex: \"PolicyEquipmentModel.Equipment.Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"PolicyEquipmentModel.BrandTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"مدل\",\r\n                    dataIndex: \"PolicyEquipmentModel.EquipmentModelTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"تایید انتقال مالکیت\",\r\n                    dataIndex: \"PossessionTransition\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"تایید دریافت داغی\",\r\n                    dataIndex: \"ReceiveDepreciated\",\r\n                    propertyType: enmPropertyType.boolean,\r\n                    controlType: enmControlType.checkbox,\r\n                    filterable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"تاریخ خسارت\",\r\n                    dataIndex: \"DamageDate\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره تماس بیمه گزار/مشتری\",\r\n                    dataIndex: \"EmergencyCallNumber\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    private evaluatorFilterProp: IProperty = {\r\n        dataIndex: \"EvaluatorFilterProp\",\r\n        controlType: enmControlType.lookup,\r\n        propertyType: enmPropertyType.number,\r\n        allowNull: true,\r\n        title: \"مرکز ارزیابی\",\r\n        lookup: {\r\n            lookupComponent: Center,\r\n            lookupDisplayFields: [\"FullName\"],\r\n            dropdownDisplayFields: [\"FullName\", \"NationalCode\"],\r\n            lookupProperty: \"\"\r\n        }\r\n    }\r\n    private evaluatorFilterValue?: number;\r\n    private evaluatorFilterOperator?: enmConditionalOperators;\r\n\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n\r\n        this.originalOrderings = () => [{ OrderBy: enmOrderingType.Descending, Property: \"Id\" }];\r\n\r\n        this.onLoaded = () => {\r\n            if (this.searchArea) {\r\n                const { dataIndex, title } = this.evaluatorFilterProp;\r\n                this.searchArea.render = () => {\r\n                    return [\r\n                        <Form.Item name={dataIndex} key={dataIndex} label={title}>\r\n                            <ColumnFilter\r\n                                parent={this}\r\n                                property={this.evaluatorFilterProp}\r\n                                onChange={currentFilter => {\r\n                                    this.evaluatorFilterValue = !!currentFilter?.value ? currentFilter.value[\"Id\"] : undefined;\r\n                                    this.evaluatorFilterOperator = currentFilter?.operator;\r\n                                }}\r\n                                preparelookupProps={(lookupProps: ICenterProps) => {\r\n                                    lookupProps.isEvaluator = true;\r\n                                    return lookupProps;\r\n                                }}\r\n                            />\r\n                        </Form.Item>\r\n                    ];\r\n                };\r\n            }\r\n        }\r\n\r\n        this.onDataFetching = fetchingInfo => {\r\n            if (!!this.evaluatorFilterValue && this.evaluatorFilterOperator !== undefined) {\r\n                fetchingInfo.EvaluatorFilter = new ComparisonFilter(\"Evaluator.Id\", this.evaluatorFilterOperator, this.evaluatorFilterValue);\r\n            }\r\n\r\n        };\r\n\r\n        this.onDataFetched = result => {\r\n            result && result.Data && result.Data.forEach(i => i.EmergencyCallNumber = '0' + i.EmergencyCallNumber);\r\n            return result;\r\n        };\r\n\r\n        this.renderingToolbar = () => {\r\n            const { selectedEntity } = this;\r\n            if (!selectedEntity)\r\n                return <></>;\r\n\r\n            let result: ReactNode[] = [];\r\n\r\n            // درصورتی که تایید انتقال مالکیت لازم باشد و انتقال مالکیت انجام نشده باشد\r\n            if (!selectedEntity.PossessionTransition && selectedEntity.DamageType?.PossessionTransition) {\r\n                result.push(\r\n                    <Col key=\"ConfirmPossessionTransition\" style={{ marginLeft: 10 }}>\r\n                        <Popconfirm title=\"آیا انتقال مالکیت مورد تایید است؟\" onConfirm={this.confirmPossessionTransition} >\r\n                            <Button key=\"ConfirmPossessionTransitionButton\" type=\"primary\" >تایید انتقال مالکیت</Button>\r\n                        </Popconfirm>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            if (!selectedEntity.ReceiveDepreciated) {\r\n                result.push(\r\n                    <Col key=\"ConfirmReceiveDepreciated\" style={{ marginLeft: 10 }}>\r\n                        <Popconfirm title=\"آیا دریافت داغی مورد تایید است؟\" onConfirm={this.confirmReceiveDepreciated} >\r\n                            <Button key=\"ConfirmReceiveDepreciatedButton\" type=\"primary\" >تایید دریافت داغی</Button>\r\n                        </Popconfirm>\r\n                    </Col>\r\n                );\r\n            }\r\n\r\n            return result.length ? (<> {result} </>) : (<></>);\r\n        };\r\n    }\r\n    confirmReceiveDepreciated = async () => {\r\n        if (!this.selectedEntity)\r\n            return <></>;\r\n\r\n        const damageCase = this.selectedEntity;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"receivedepreciated/confirmReceiveDepreciated\",\r\n            data: { damageCaseId: damageCase.Id, rowVrsn: damageCase.RowVrsn },\r\n            onSuccess: () => {\r\n                this.fetchData();\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    confirmPossessionTransition = async () => {\r\n        if (!this.selectedEntity)\r\n            return <></>;\r\n\r\n        const damageCase = this.selectedEntity;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"receivedepreciated/confirmPossessionTransition\",\r\n            data: { damageCaseId: damageCase.Id, rowVrsn: damageCase.RowVrsn },\r\n            onSuccess: () => {\r\n                this.fetchData();\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n}\r\n","import { ICustomerEquipmentModel } from \"../../baseInfo/customerEquipmentModel/interfaces\";\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { IEntityManagerProps, IEntityManagerStates, IInitialData, IMetadata, enmControlType, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport { IFetchingInfo } from \"../../components/infrastructure/models\";\r\n\r\nexport interface ICustomerEquipmentModelListProps extends IEntityManagerProps<ICustomerEquipmentModel> {\r\n\r\n}\r\n\r\ninterface ICustomerEquipmentModelListStates extends IEntityManagerStates<ICustomerEquipmentModel> {\r\n    \r\n}\r\n\r\nexport class CustomerEquipmentModelList extends BaseEntityManager<ICustomerEquipmentModel, ICustomerEquipmentModelListProps, ICustomerEquipmentModelListStates, IFetchingInfo, IInitialData> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"CustomerEquipmentModel\",\r\n            title: \"دستگاه های ثبت شده\",\r\n            Properties: [\r\n                {\r\n                    title: \"سریال تجهیز\",\r\n                    dataIndex: \"EquipmentSerialNo\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: false,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"تجهیز\",\r\n                    dataIndex: \"Equipment.Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"BrandTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    disabled: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"مدل تجهیز\",\r\n                    dataIndex: \"EquipmentModelTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"بیمه گزار/مشتری\",\r\n                    dataIndex: \"Customer.FullName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    disabled: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی بیمه گزار/مشتری\",\r\n                    dataIndex: \"Customer.NationalCode\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    width: 150\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    onInitializing() {\r\n        this.baseUrl = \"portal\";\r\n        this.getUrl = \"portal/CustomerEquipmentModelList\";\r\n        this.getInitialDataUrl = \"portal/GetCustomerEquipmentModelListInitialData\";\r\n\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n    }\r\n}","import { IUser } from \"../../account/user/interfaces\";\r\nimport { IEntityManagerProps, IEntityManagerStates, IInitialData } from \"../../components/entityManager/interfaces\";\r\nimport { IFilter } from \"../../components/infrastructure/filtering\";\r\nimport { IEntity, IFetchingInfo } from \"../../components/infrastructure/models\";\r\nimport { IAttachment } from \"../attachment/interfaces\";\r\nimport { ICenter } from \"../center/interfaces\";\r\nimport { ICity } from \"../city/interfaces\";\r\nimport { ICustomerEquipmentModel } from \"../customerEquipmentModel/interfaces\";\r\nimport { IEquipmentProblem } from \"../equipment/interfaces\";\r\nimport { IProvince } from \"../province/interfaces\";\r\n\r\nexport enum enmRepairCaseStatus {\r\n    AssignCenter = 1,\r\n    Repairation = 2,\r\n    Rejected = 3,\r\n    Completed = 4,\r\n    Payment = 5,\r\n    ReturnDevice = 6,\r\n    Archived = 7\r\n}\r\n\r\nexport enum enmRepairationStatus {\r\n    RequestCheck = 1,\r\n    SendDevice = 2,\r\n    Estimation = 3,\r\n    CustomerConfirmation = 4,\r\n    RepairationComplete = 5,\r\n    CustomerRejected = 6,\r\n    Failed = 97,\r\n    Completed = 98,\r\n    Rejected = 99\r\n}\r\n\r\nexport enum enmSendMethods {\r\n    PolicyholderInPerson = 1,\r\n    Courier = 2\r\n}\r\n\r\nexport enum enmRepairCaseCheckStates {\r\n    Rejected = 1,\r\n    Confirmed = 2\r\n}\r\n\r\nexport enum enmPolicyholderRepairResponseTypes {\r\n    Cancel = 1,\r\n    Agree = 2,\r\n}\r\n\r\nexport const repairCaseStatusOptions = [\r\n    { title: 'منتظر بررسی و ارسال به کارشناس', value: enmRepairCaseStatus.AssignCenter },\r\n    { title: 'در دست اقدام', value: enmRepairCaseStatus.Repairation },\r\n    { title: 'رد شده', value: enmRepairCaseStatus.Rejected },\r\n    { title: 'خاتمه یافته', value: enmRepairCaseStatus.Completed },\r\n    { title: 'منتظر پرداخت', value: enmRepairCaseStatus.Payment },\r\n    { title: 'منتظر تحویل به مشتری', value: enmRepairCaseStatus.ReturnDevice },\r\n    { title: 'بایگانی شده', value: enmRepairCaseStatus.Archived }\r\n];\r\n\r\nexport const repairationStatusOptions = [\r\n    { userCartableTitle: 'منتظر بررسی کارشناس', centerCartableTitle: 'منتظر بررسی کارشناس', name: 'بررسی درخواست', value: enmRepairationStatus.RequestCheck },\r\n    { userCartableTitle: 'منتظر ارسال دستگاه', centerCartableTitle: 'منتظر دریافت دستگاه', name: 'دریافت دستگاه', value: enmRepairationStatus.SendDevice },\r\n    { userCartableTitle: 'منتظر برآورد هزینه', centerCartableTitle: 'منتظر برآورد هزینه', name: 'برآورد هزینه', value: enmRepairationStatus.Estimation },\r\n    { userCartableTitle: 'منتظر ثبت نظر مشتری', centerCartableTitle: 'منتظر ثبت نظر مشتری', name: 'تاییدیه مشتری', value: enmRepairationStatus.CustomerConfirmation },\r\n    { userCartableTitle: 'درحال  انجام تعمیرات', centerCartableTitle: 'درحال  انجام تعمیرات', name: 'تعمیرات', value: enmRepairationStatus.RepairationComplete },\r\n    { userCartableTitle: 'رد شده توسط مشتری', centerCartableTitle: 'رد شده توسط مشتری', name: 'رد شده توسط مشتری', value: enmRepairationStatus.CustomerRejected },\r\n    { userCartableTitle: 'غیرقابل تعمیر', centerCartableTitle: 'غیرقابل تعمیر', name: 'غیرقابل تعمیر', value: enmRepairationStatus.Failed },\r\n    { userCartableTitle: 'پایان تعمیرات', centerCartableTitle: 'پایان تعمیرات', name: 'پایان تعمیرات', value: enmRepairationStatus.Completed },\r\n    { userCartableTitle: 'رد شده', centerCartableTitle: 'رد شده', name: 'رد شده', value: enmRepairationStatus.Rejected },\r\n];\r\n\r\n\r\nexport const sendMethodsOptions = [\r\n    { disabled: false, name: \"ارسال حضوری\", userCartableTitle: \"منتظر ارسال دستگاه\", centerCartableTitle: \"منتظر دریافت دستگاه\", value: enmSendMethods.PolicyholderInPerson },\r\n    { disabled: false, name: \"ارسال با پیک\", userCartableTitle: \"منتظر ارسال دستگاه\", centerCartableTitle: \"منتظر دریافت دستگاه\", value: enmSendMethods.Courier },\r\n];\r\n\r\nexport interface IRepairCaseCenter extends IEntity {\r\n    Substatus: enmRepairationStatus;\r\n    RepairationSteps: { Substatus: enmRepairationStatus; CreateDateTime: any; }[];\r\n    RepairCenterId?: number;\r\n    CreateDateTime: any;\r\n    RepairCenter?: ICenter;\r\n    Creator?: IUser;\r\n    RepairationStartTime?: Date | null;\r\n    AdminConfirm: boolean;\r\n    AdminDescription?: string;\r\n}\r\n\r\nexport interface IRepairCase extends IEntity {\r\n    Code: number;\r\n    TicketNo: number;\r\n    CustomerEquipmentModelId: number;\r\n    CustomerEquipmentModel: ICustomerEquipmentModel;\r\n    EmergencyCallNumber: string;\r\n    Status: enmRepairCaseStatus;\r\n    ProvinceId?: number;\r\n    Province: IProvince;\r\n    CityId?: number;\r\n    City: ICity;\r\n    Address?: string;\r\n    Description?: string;\r\n    SendMethod: enmSendMethods;\r\n    RepairCaseCenters: IRepairCaseCenter[],\r\n    RepairationStatus?: enmRepairationStatus;\r\n    PayableAmount?: number;\r\n    PayableAmountString: string;\r\n    RepairCaseAttachments: IAttachment[];\r\n    RepairCaseProblems: IRepairCaseProblem[];\r\n    DeviceReceived?: boolean;\r\n    DeviceReceivedDateTime?: Date;\r\n    DeviceReturned?: boolean;\r\n    DeviceReturnedDateTime?: Date;\r\n    Paid?: boolean;\r\n    PaymentDateTime?: Date;\r\n    PaymentReceiptDateTime?: Date;\r\n}\r\n\r\nexport interface IRepairCaseProblem extends IEntity {\r\n    RepairCaseId: number;\r\n    RepairCase: IRepairCase;\r\n    EquipmentProblemId: number;\r\n    EquipmentProblem: IEquipmentProblem;\r\n}\r\n\r\nexport interface IRepairCaseProps extends IEntityManagerProps<IRepairCase> {\r\n\r\n}\r\n\r\nexport interface IRepairCaseStates extends IEntityManagerStates<IRepairCase> {\r\n    repairationSteps: any[];\r\n}\r\n\r\nexport interface IRepairCaseInitialData extends IInitialData {\r\n    Center?: ICenter;\r\n}\r\n\r\nexport interface IRepairCaseFetchingInfo extends IFetchingInfo {\r\n    RepairCenterId?: number;\r\n    PolicyholderId?: number;\r\n    RepairCenterFilter?: IFilter;\r\n    ShowArchives?: boolean;\r\n}\r\n","import { Alert, Button, Checkbox, Col, Descriptions, Form, FormInstance, Input, Radio, Space } from \"antd\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport AppContext, { AppContextProps } from \"../../components/infrastructure/appContext\";\r\nimport { IProperty, enmControlType } from \"../../components/entityManager/interfaces\";\r\nimport { EquipmentItem } from \"../../baseInfo/equipment/equipmentItem\";\r\nimport { Brand } from \"../../baseInfo/brand\";\r\nimport { EquipmentModel } from \"../../baseInfo/equipmentModel\";\r\nimport { CustomerEquipmentModelList } from \"./customerEquipmentModelList\";\r\nimport { Province } from \"../../baseInfo/province\";\r\nimport { City } from \"../../baseInfo/city\";\r\nimport { ICallOptions, IFetchingInfo, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { ComparisonFilter } from \"../../components/infrastructure/filtering\";\r\nimport { IEquipment, IEquipmentItemProps, IEquipmentProblem } from \"../../baseInfo/equipment/interfaces\";\r\nimport { Redirect } from \"react-router\";\r\nimport { ArrowLeftOutlined, BarsOutlined, FileProtectOutlined, IssuesCloseOutlined, StopOutlined, InfoCircleFilled } from \"@ant-design/icons\";\r\nimport { Lookup } from \"../../components/lookup\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { enmSendMethods, sendMethodsOptions } from \"../../baseInfo/repairCase/interfaces\";\r\nimport { ICity, ICityProps } from \"../../baseInfo/city/interfaces\";\r\nimport { IProvince, IProvinceProps } from \"../../baseInfo/province/interfaces\";\r\nimport SimpleMap from \"../../components/map\";\r\nimport { IBrand } from \"../../baseInfo/brand/interfaces\";\r\nimport { IEquipmentModel, IEquipmentModelProps } from \"../../baseInfo/equipmentModel/interfaces\";\r\nimport { ICustomerEquipmentModel } from \"../../baseInfo/customerEquipmentModel/interfaces\";\r\nimport { AttachmentUploader } from \"../../baseInfo/attachment/attachmentUploader\";\r\nimport { IAttachment } from \"../../baseInfo/attachment/interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\ninterface IRepairCaseCreateProps extends IBaseProps {\r\n    close?: () => void;\r\n}\r\n\r\ninterface IRepairCaseCreateStates extends IBaseStates {\r\n    emergencyCallNumber: string;\r\n    problems: IProblem[];\r\n    saved?: boolean;\r\n    equipment?: IEquipment;\r\n    brand?: IBrand;\r\n    brandTitle?: string;\r\n    equipmentModel?: IEquipmentModel;\r\n    equipmentModelTitle?: string;\r\n    serialOrIMEI?: string;\r\n    province?: IProvince;\r\n    city?: ICity;\r\n    address?: string;\r\n    description?: string;\r\n    sendMethod?: enmSendMethods;\r\n    attachments: IAttachment[];\r\n    inquiryIMEIisPassed?: boolean;\r\n}\r\n\r\ninterface IProblem {\r\n    Id: number;\r\n    Name: string;\r\n    Selected: boolean;\r\n    Code: string;\r\n}\r\n\r\nconst ProblemsList = (props: { items: IProblem[], onChange: (items: IProblem[]) => void; }) => {\r\n    const list = props.items.map(item =>\r\n        <Descriptions.Item key={item.Id} >\r\n            <Checkbox defaultChecked={item.Selected} onChange={(e) => {\r\n                props.items.find(i => i.Id === item.Id)!.Selected = e.target.checked;\r\n                props.onChange(props.items);\r\n            }}>\r\n                {item.Name}\r\n            </Checkbox>\r\n        </Descriptions.Item>);\r\n    return (\r\n        <Descriptions key=\"ProblemsList\" layout='horizontal' column={{ xxl: 6, xl: 4, lg: 3, md: 2, sm: 2, xs: 1 }}>\r\n            {list}\r\n        </Descriptions>\r\n    );\r\n}\r\n\r\nexport class RepairCaseCreate extends BaseComponent<IRepairCaseCreateProps, IRepairCaseCreateStates>{\r\n    static contextType = AppContext;\r\n    _form?: FormInstance;\r\n\r\n    customerEquipmentModelProp: IProperty;\r\n    equipmentProp: IProperty;\r\n    brandProp: IProperty;\r\n    equipmentModelProp: IProperty;\r\n    provinceProp: IProperty;\r\n    cityProp: IProperty;\r\n    container?: HTMLDivElement | null;\r\n\r\n    constructor(props: IRepairCaseCreateProps) {\r\n        super(props)\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            emergencyCallNumber: '',\r\n            problems: [],\r\n            attachments: []\r\n        };\r\n\r\n        this.title = \"ثبت درخواست تعمیرات (آزاد)\";\r\n\r\n        this.customerEquipmentModelProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"PolicyEquipmentModelId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: CustomerEquipmentModelList,\r\n                lookupProperty: \"EquipmentSerialNo\",\r\n                lookupDisplayFields: [\"EquipmentSerialNo\"],\r\n                dropdownDisplayFields: [\"EquipmentSerialNo\", \"BrandTitle\", \"EquipmentModelTitle\", \"EquipmentTitle\"],\r\n                showButton: false,\r\n\r\n            }\r\n        };\r\n        this.equipmentProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"EquipmentId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: EquipmentItem,\r\n                lookupProperty: \"Code\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false,\r\n                dropdownDisplayFields: [\"Name\"]\r\n            }\r\n        };\r\n        this.brandProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"BrandId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: Brand,\r\n                lookupProperty: \"Code\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false\r\n            }\r\n        };\r\n        this.equipmentModelProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"EquipmentModelId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: EquipmentModel,\r\n                lookupProperty: \"Code\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false\r\n\r\n            }\r\n        };\r\n        this.provinceProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"ProvinceId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: Province,\r\n                lookupProperty: \"Id\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false,\r\n                dropdownDisplayFields: [\"Name\"]\r\n            }\r\n        };\r\n        this.cityProp = {\r\n            controlType: enmControlType.lookup,\r\n            dataIndex: \"CityId\",\r\n            width: \"100%\",\r\n            lookup: {\r\n                lookupComponent: City,\r\n                lookupProperty: \"Id\",\r\n                lookupDisplayFields: [\"Name\"],\r\n                showButton: false,\r\n                dropdownDisplayFields: [\"Name\"]\r\n            }\r\n        };\r\n    }\r\n\r\n    componentDidMount() {\r\n        super.componentDidMount();\r\n        this.initializing();\r\n    }\r\n    initializing = () => {\r\n        const { getUserInfo } = this.context as AppContextProps;\r\n        const userInfo = getUserInfo();\r\n\r\n        this._form?.setFields([\r\n            { name: 'emergencyCallNumber', value: userInfo?.phone ? '0' + userInfo.phone : '', }\r\n        ]);\r\n        this.setState({ emergencyCallNumber: userInfo?.phone ? '0' + userInfo.phone : '', loading: false });\r\n    }\r\n    getProblems = (equipmentId: number) => {\r\n        let fetchingInfo: IFetchingInfo = {\r\n            Orderings: [],\r\n            Filter: ComparisonFilter.Equal<IEquipmentProblem>(e => e.EquipmentId, equipmentId)\r\n        };\r\n        if (!equipmentId) {\r\n            this.setState({ problems: [] });\r\n            return;\r\n        }\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"equipmentproblem/get\",\r\n            data: {\r\n                fetchingInfo\r\n            },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    let data = (result.Data ?? []) as IEquipmentProblem[];\r\n                    this.setState({\r\n                        problems: data.map(e => {\r\n                            return { Code: e.Problem.Code, Id: e.ProblemId, Name: e.Problem.Name, Selected: false } as IProblem;\r\n                        })\r\n                    });\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        this.callApi(fetchOpt);\r\n    }\r\n    onChangeSerialOrIMEI = (serialOrIMEI?: ICustomerEquipmentModel | string) => {\r\n        let resetFields = false;\r\n        let customerEquipmentModel: ICustomerEquipmentModel | undefined = undefined;\r\n        if (typeof (serialOrIMEI) === 'string') {\r\n            if (serialOrIMEI !== this.state.serialOrIMEI) {\r\n                resetFields = true;\r\n                this.setState({\r\n                    equipment: undefined,\r\n                    brand: undefined,\r\n                    brandTitle: undefined,\r\n                    equipmentModel: undefined,\r\n                    equipmentModelTitle: undefined,\r\n                    serialOrIMEI: serialOrIMEI as string,\r\n                    inquiryIMEIisPassed: false\r\n                });\r\n            }\r\n        }\r\n        else {\r\n            resetFields = true;\r\n            customerEquipmentModel = serialOrIMEI as ICustomerEquipmentModel;\r\n            this.setState({\r\n                equipment: customerEquipmentModel?.Equipment,\r\n                brand: customerEquipmentModel?.Brand,\r\n                brandTitle: customerEquipmentModel?.Brand ? undefined : customerEquipmentModel?.BrandTitle,\r\n                equipmentModel: customerEquipmentModel?.EquipmentModel,\r\n                equipmentModelTitle: customerEquipmentModel?.EquipmentModel ? undefined : customerEquipmentModel?.EquipmentModelTitle,\r\n                serialOrIMEI: customerEquipmentModel?.EquipmentSerialNo,\r\n                inquiryIMEIisPassed: !!customerEquipmentModel\r\n            });\r\n            this.getProblems(customerEquipmentModel?.EquipmentId);\r\n        }\r\n\r\n        if (resetFields) {\r\n            this._form?.resetFields(['equipment', 'brand', 'equipmentModel']);\r\n            this._form?.setFields([\r\n                { name: \"equipment\", value: customerEquipmentModel?.Equipment },\r\n                { name: 'brand', value: customerEquipmentModel?.Brand },\r\n                { name: 'equipmentModel', value: customerEquipmentModel?.EquipmentModel }\r\n            ]);\r\n        }\r\n    }\r\n    onChangeEquipment = (equipment: IEquipment) => {\r\n        this.setState({ equipment, equipmentModel: undefined });\r\n        this._form?.resetFields([\"equipmentModel\"]);\r\n        this._form?.setFields([{ name: \"equipmentModel\", value: null }]);\r\n        this.getProblems(equipment?.Id);\r\n\r\n        this.getEquipmentBySerialOrIMEI(equipment?.Id, this.state.serialOrIMEI);\r\n    }\r\n    onChangeBrand = (brand: IBrand | string) => {\r\n        let resetEquipmentModel = false;\r\n        if (typeof (brand) === 'string') {\r\n            if (brand !== this.state.brand?.Name) {\r\n                resetEquipmentModel = true;\r\n                this.setState({ brandTitle: brand as string, brand: undefined, equipmentModel: undefined, equipmentModelTitle: undefined });\r\n            }\r\n        }\r\n        else {\r\n            resetEquipmentModel = true;\r\n            this.setState({ brand: brand as IBrand, brandTitle: undefined, equipmentModel: undefined, equipmentModelTitle: undefined });\r\n        }\r\n\r\n        if (resetEquipmentModel) {\r\n            this._form?.resetFields([\"equipmentModel\"]);\r\n            this._form?.setFields([{ name: \"equipmentModel\", value: null }]);\r\n        }\r\n        else {\r\n            this._form?.setFields([{ name: \"brand\", value: this.state.brandTitle ?? this.state.brand }]);\r\n        }\r\n    }\r\n    onChangeProvince = (province?: IProvince) => {\r\n        this.setState({ province: province, city: undefined });\r\n        this._form?.resetFields([\"city\"]);\r\n        this._form?.setFields([{ name: \"city\", value: null }]);\r\n    }\r\n    onChangeCity = (city?: ICity) => {\r\n        const province = city?.Province;\r\n        if (!this.state.province) {\r\n            this._form?.resetFields([\"province\"]);\r\n            this._form?.setFields([{ name: \"province\", value: province }]);\r\n            this.setState({ city, province });\r\n        }\r\n        else\r\n            this.setState({ city });\r\n    }\r\n    equipmentPreparelookupProps = (props: IEquipmentItemProps) => {\r\n        props.params = () => {\r\n            return {\r\n                codes: [\"1\", \"2\", \"5\", \"16\"],\r\n                onlySubItems: true\r\n            }\r\n        };\r\n        return props;\r\n    }\r\n    onChangeEquipmentModel = (equipmentModel: IEquipmentModel | string) => {\r\n        if (typeof (equipmentModel) === 'string') {\r\n            if (equipmentModel !== this.state.equipmentModel?.Name)\r\n                this.setState({ equipmentModelTitle: equipmentModel as string, equipmentModel: undefined });\r\n            else {\r\n                this._form?.setFields([{ name: \"equipmentModel\", value: this.state.equipmentModelTitle ?? this.state.equipmentModel }]);\r\n            }\r\n        }\r\n        else {\r\n            this.setState({ equipmentModel: equipmentModel as IEquipmentModel, equipmentModelTitle: undefined });\r\n        }\r\n    }\r\n    equipmentModelPreparelookupProps = (props: IEquipmentModelProps) => {\r\n        props.params = () => {\r\n            return {\r\n                brand: this.state.brand,\r\n                equipment: this.state.equipment\r\n            }\r\n        }\r\n        return props;\r\n    }\r\n    provincePreparelookupProps = (lookupProps: IProvinceProps) => {\r\n        lookupProps.params = () => {\r\n            return {\r\n                codes: [\"7\"]\r\n            };\r\n        };\r\n        return lookupProps;\r\n    }\r\n    cityPreparelookupProps = (lookupProps: ICityProps) => {\r\n        lookupProps.params = () => {\r\n            let province = this.state.province;\r\n            return { province, codes: [\"701\"] };\r\n        };\r\n        return lookupProps;\r\n    }\r\n    submitRequest = async () => {\r\n        const { getUserInfo } = this.context as AppContextProps;\r\n        const userInfo = getUserInfo();\r\n        const nationalCode = userInfo?.userName;\r\n\r\n        let repairCase = {\r\n            Policyholder: { NationalCode: nationalCode },\r\n            EmergencyCallNumber: this.state.emergencyCallNumber,\r\n            ProvinceCode: this.state.province?.Code,\r\n            CityCode: this.state.city?.Code,\r\n            Address: this.state.address,\r\n            Description: this.state.description,\r\n            SendMethod: this.state.sendMethod,\r\n            EquipmentModel: {\r\n                EquipmentId: this.state?.equipment?.Id,\r\n                BrandCode: this.state?.brand?.Code,\r\n                BrandTitle: this.state?.brandTitle,\r\n                EquipmentModelCode: this.state?.equipmentModel?.Code,\r\n                EquipmentModelTitle: this.state?.equipmentModelTitle,\r\n                SerialOrIMEI: this.state?.serialOrIMEI\r\n            },\r\n            Problems: this.state.problems.filter(p => p.Selected).map(p => p.Code)\r\n        };\r\n\r\n        let formData = new FormData();\r\n        formData.append('RepairCase', JSON.stringify(repairCase));\r\n\r\n        for (let i = 0; i < this.state.attachments.length; i++) {\r\n            formData.append('Attachments', (this.state.attachments[i] as any).File);\r\n            formData.append('AttachmentDescriptions', this.state.attachments[i].Description ?? '');\r\n        }\r\n\r\n        let opt: ICallOptions = {\r\n            withBlock: true,\r\n            withBlockTitle: 'در حال ثبت درخواست تعمیرات...',\r\n            url: \"portal/repairrequest\",\r\n            data: formData,\r\n            contentType: false,\r\n            headers: [{ key: \"encType\", value: \"multipart/form-data\" }],\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification(result.ValidationState.ValidationResults[0].Message);\r\n                    this.setState({ saved: true });\r\n                }\r\n            }\r\n        };\r\n        await this.callApi(opt);\r\n    }\r\n    onChangeAttachments = (attachments: IAttachment[]) => {\r\n        this.setState({ attachments });\r\n    }\r\n    getEquipmentBySerialOrIMEI = async (equipmentId?: number, serialOrIMEI?: string) => {\r\n        if (equipmentId === 4) {\r\n             await this._form?.validateFields(['serialOrIMEI']);\r\n        }\r\n        else if (equipmentId !== 4) {\r\n            if (!!equipmentId)\r\n                this.setState({ inquiryIMEIisPassed: true });\r\n            return;\r\n        }\r\n        let fetchOpt: ICallOptions = {\r\n            withBlock: true,\r\n            withBlockTitle: 'در حال استعلام سریال یا IMEI...',\r\n            url: \"portal/getEquipmentBySerialOrIMEI\",\r\n            data: {\r\n                equipmentSerialNoOrIMEI: serialOrIMEI\r\n            },\r\n            onSuccess: (result: IResultSet<IEquipmentModel>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    this.setState({\r\n                        brand: result.Data?.Brand,\r\n                        equipmentModel: result.Data,\r\n                        inquiryIMEIisPassed: true\r\n                    });\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    virtualRender() {\r\n\r\n        const { getUserInfo } = this.context as AppContextProps;\r\n        const { extraVariables } = getUserInfo()!;\r\n\r\n        const header = this.getPageHeader({\r\n            title: this.title,\r\n            extraHeaderNodes: (\r\n                <>\r\n                    <Alert\r\n                        style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                        message={\r\n                            <>\r\n                                {extraVariables[\"IsPolicyholder\"] && <p style={{ fontWeight: 600, fontSize: 18, margin: \"15px 0px\" }}>\r\n                                    <InfoCircleFilled className=\"blink\" style={{ color: '#1890ff', margin: 5, marginRight: 0, verticalAlign: 'top' }} />\r\n                                    بیمه گزار/مشتری گرامی، در صورتی که در حال حاضر صاحب بیمه هستید و به خسارت خورده اید، از طریق <Link to=\"/damagecasecreate\">\"ثبت خسارت بیمه نامه\"</Link> نسبت به ثبت درخواست خسارت اقدام نمایید و در صورتیکه که تمایل به تعمیرات آزاد خارج از بیمه نامه دارید، فُرم زیر را تکمیل نمایید.\r\n                                </p>}\r\n                                <p style={{ fontSize: 18, margin: \"15px 0px\" }}>\r\n                                    {!extraVariables[\"IsPolicyholder\"] && <InfoCircleFilled className=\"blink\" style={{ color: '#1890ff', margin: 5, marginRight: 0, verticalAlign: 'top' }} />}\r\n                                    فرآیند ثبت درخواست تعمیرات:\r\n                                </p>\r\n                                <p style={{ fontSize: 16 }}>\r\n                                    پس از وارد کردن اطلاعات خواسته شده در فیلد مخصوص و تکمیل فرآیند ثبت درخواست تعمیرات موبایل،‌ روی دکمه (ثبت درخواست) کلیک کنید.\r\n                                    <br />\r\n                                    پس از ثبت و نهایی سازی درخواست تعمیرات، پیامکی مبنی بر تأیید ثبت درخواست توسط شرکت زبده دریافت خواهید کرد.\r\n                                    <br />\r\n                                    در این مرحله کارشناسان بخش تعمیرات پس از تأیید و استعلام قیمت و بررسی دقیق مشکل دستگاه هزینه تقریبی تعمیرات را برای شما در نرم افزار ثبت خواهند نمود.\r\n                                    <br />\r\n                                    پس از هماهنگی با کارشناس مربوطه،‌ ارسال گوشی جهت تعمیر به انتخاب شما به صورت حضوری یا توسط پیک به شرکت زبده صورت می‌گیرد.\r\n                                    <br />\r\n                                    در این مرحله یک‌ کد رهگیری به شماره تماس شما ارسال خواهد شد،‌ که دریافت این کد به منزله تأیید ارسال گوشی توسط شما به نمایندگی مورد نظر بوده و به کمک آن می‌توانید فرآیند تعمیرات دستگاه خود را بررسی کنید.\r\n                                </p>\r\n                                <div style={{ fontSize: 16 }}>\r\n                                    هنگام ثبت درخواست به نکات زیر توجه کنید:\r\n                                    <ul>\r\n                                        <ol>1. در حین ثبت درخواست، تمامی اطلاعات خواسته شده را صحیح وارد کرده و حتی الامکان توضیحات را کامل و دقیق ثبت نمایید.</ol>\r\n                                        <ol>2. توجه داشته باشید،‌ که پس از ارسال دستگاه دریافت کد پیگیری ضروری است.</ol>\r\n                                        <ol>3. در صورتی که شماره همراه فعال ندارید،‌ حتما یک شماره تماس ثابت جهت ارتباط با نماینده در فیلد توضیحات ثبت کنید.</ol>\r\n                                    </ul>\r\n                                </div>\r\n                            </>\r\n                        }\r\n                        type=\"info\"\r\n                    />\r\n                </>),\r\n            onBack: () => {\r\n                if (this.props.close)\r\n                    this.props.close();\r\n                else\r\n                    window.history.back();\r\n            }\r\n        });\r\n\r\n        const zobdehLocation: { Longitude?: number; Latitude?: number; Address?: string; WorkTime?: string; CityName?: string; Phone?: string; } = extraVariables['ZobdehLocation'];\r\n\r\n        if (this.state.saved)\r\n            return <Redirect to={\"/repaircasepolicyholder\"} />\r\n\r\n        const span = window.matchMedia(\"(min-width: 992px)\").matches ? 2 : 1;\r\n\r\n        return (\r\n            <div ref={node => this.container = node}>\r\n                {header}\r\n                <Form\r\n\r\n                    labelCol={{ span: 8 }}\r\n                    wrapperCol={{ span: 14 }}\r\n                    layout={'horizontal'}\r\n                    ref={node => { if (node) this._form = node }}\r\n                    onFinish={async () => {\r\n                        await this.submitRequest();\r\n                    }}\r\n                    onReset={() => {\r\n                        if (this.props.close)\r\n                            this.props.close();\r\n                        else\r\n                            window.history.back();\r\n                    }}\r\n                    onFinishFailed={errorInfo => {\r\n                        if (this.container && errorInfo.errorFields.length) {\r\n                            const { name } = errorInfo.errorFields[0];\r\n                            const label = this.container.querySelector(`[for=\"${name[0]}\"]`);\r\n                            label?.scrollIntoView();\r\n                            const field = this._form?.getFieldInstance(name[0]);\r\n                            if (field?.focus)\r\n                                field.focus();\r\n                        }\r\n                    }}\r\n                >\r\n                    <div key=\"equipmentModelInfo\" className=\"box box-blue\">\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <FileProtectOutlined style={{ margin: 2, verticalAlign: 'text-top' }} />\r\n                                اطلاعات دستگاه\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n\r\n                                <Descriptions layout='horizontal' column={{ xl: 2, lg: 2, md: 1, sm: 1, xs: 1 }} >\r\n                                    <Descriptions.Item key=\"serialOrIMEI\">\r\n                                        <Form.Item\r\n                                            key=\"serialOrIMEI\"\r\n                                            name=\"serialOrIMEI\"\r\n                                            label=\"سریال یا (IMEI)\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                {\r\n                                                    validator: () => {\r\n                                                        if (!!this.state.serialOrIMEI && this.state.serialOrIMEI?.length !== 15 && this.state.equipment?.Id === 4)\r\n                                                            return Promise.reject(new Error('شماره سریال یا (IMEI) باید 15 رقم باشد'));\r\n                                                        return Promise.resolve();\r\n                                                    }\r\n                                                },\r\n                                                {\r\n                                                    required: true,\r\n                                                    validator: () => {\r\n                                                        if (!this.state.serialOrIMEI)\r\n                                                            return Promise.reject(new Error('شماره سریال یا (IMEI) اجباری است'));\r\n                                                        return Promise.resolve();\r\n                                                    }\r\n                                                }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                allowTextChange={true}\r\n                                                parent={this}\r\n                                                key=\"SerialOrIMEI\"\r\n                                                onChange={this.onChangeSerialOrIMEI}\r\n                                                defaultText={this.state.serialOrIMEI}\r\n                                                property={this.customerEquipmentModelProp}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"equipment\">\r\n                                        <Form.Item\r\n                                            key=\"equipment\"\r\n                                            name=\"equipment\"\r\n                                            label=\"دستگاه/تجهیز\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'دستگاه/تجهیز اجباری است' }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                key=\"EquipmentId\"\r\n                                                parent={this}\r\n                                                property={this.equipmentProp}\r\n                                                value={this.state.equipment}\r\n                                                onChange={this.onChangeEquipment}\r\n                                                preparelookupProps={this.equipmentPreparelookupProps}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"brand\">\r\n                                        <Form.Item\r\n                                            key=\"brand\"\r\n                                            name=\"brand\"\r\n                                            label=\"برند\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                {\r\n                                                    required: true,\r\n                                                    validator: () => {\r\n                                                        if (!this.state.brand && !this.state.brandTitle)\r\n                                                            return Promise.reject(new Error('برند اجباری است'));\r\n                                                        return Promise.resolve();\r\n                                                    }\r\n                                                }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                disabled={!this.state.inquiryIMEIisPassed}\r\n                                                allowTextChange={true}\r\n                                                parent={this}\r\n                                                key=\"BrandId\"\r\n                                                property={this.brandProp}\r\n                                                onChange={this.onChangeBrand}\r\n                                                defaultText={this.state.brandTitle ?? this.state.brand?.Name}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"equipmentModel\">\r\n                                        <Form.Item\r\n                                            key=\"equipmentModel\"\r\n                                            name=\"equipmentModel\"\r\n                                            label=\"مدل\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                {\r\n                                                    required: true,\r\n                                                    validator: () => {\r\n                                                        if (!this.state.equipmentModel && !this.state.equipmentModelTitle)\r\n                                                            return Promise.reject(new Error('مدل اجباری است'));\r\n                                                        return Promise.resolve();\r\n                                                    }\r\n                                                }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                disabled={!this.state.inquiryIMEIisPassed}\r\n                                                allowTextChange={true}\r\n                                                parent={this}\r\n                                                key=\"EquipmentModelId\"\r\n                                                property={this.equipmentModelProp}\r\n                                                onChange={this.onChangeEquipmentModel}\r\n                                                preparelookupProps={this.equipmentModelPreparelookupProps}\r\n                                                defaultText={this.state.equipmentModelTitle ?? this.state.equipmentModel?.Name}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"emergencyCallNumber\" span={1}>\r\n                                        <Form.Item\r\n                                            name=\"emergencyCallNumber\"\r\n                                            key=\"emergencyCallNumber\"\r\n                                            label=\"شماره موبایل در دسترس\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'شماره موبایل اجباری است' },\r\n                                                { len: 11, message: 'شماره موبایل باید 11 رقم باشد' },\r\n                                                {\r\n                                                    validator: () => {\r\n                                                        if (!this.state.emergencyCallNumber?.startsWith('0'))\r\n                                                            return Promise.reject(new Error('شماره موبایل با 0 آغاز شود'));\r\n                                                        return Promise.resolve();\r\n                                                    }\r\n                                                }\r\n                                            ]}\r\n                                            initialValue={this.state.emergencyCallNumber}\r\n                                        >\r\n                                            <Input\r\n                                                type={\"text\"}\r\n                                                onKeyPress={(event) => {\r\n                                                    if (event.charCode < 48 || event.charCode > 57) {\r\n                                                        event.preventDefault();\r\n                                                    }\r\n                                                }}\r\n                                                onChange={e => {\r\n                                                    this.setState({ emergencyCallNumber: e.target.value });\r\n                                                }}\r\n                                                value={this.state.emergencyCallNumber}\r\n                                                maxLength={11}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                </Descriptions>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div key=\"damageinfo\" className=\"box box-blue\" style={{ marginTop: 10 }}>\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <IssuesCloseOutlined style={{ margin: 2, verticalAlign: 'text-top' }} />\r\n                                اطلاعات درخواست\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n                                <Descriptions layout='horizontal' column={{ xl: 2, lg: 2, md: 1, sm: 1, xs: 1 }}>\r\n\r\n                                    <Descriptions.Item key=\"province\">\r\n                                        <Form.Item\r\n                                            name=\"province\"\r\n                                            key=\"province\"\r\n                                            label=\"استان\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'استان اجباری است' }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                parent={this}\r\n                                                onChange={this.onChangeProvince}\r\n                                                property={this.provinceProp}\r\n                                                preparelookupProps={this.provincePreparelookupProps}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"city\">\r\n                                        <Form.Item\r\n                                            name=\"city\"\r\n                                            key=\"city\"\r\n                                            label=\"شهر\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[\r\n                                                { required: true, message: 'شهر اجباری است' },\r\n                                                {\r\n                                                    validator: () => {\r\n                                                        if (this.state.city && this.state.city?.Code !== \"701\")\r\n                                                            return Promise.reject(new Error('در حال حاضر فقط ثبت درخواست تعمیر برای شهر تهران امکانپذیر است'));\r\n                                                        return Promise.resolve();\r\n                                                    }\r\n                                                }\r\n                                            ]}\r\n                                        >\r\n                                            <Lookup\r\n                                                parent={this}\r\n                                                onChange={this.onChangeCity}\r\n                                                property={this.cityProp}\r\n                                                preparelookupProps={this.cityPreparelookupProps}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"address\" span={1}>\r\n                                        <Form.Item\r\n                                            key=\"address\"\r\n                                            name=\"address\"\r\n                                            label=\"آدرس\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[{ required: true, message: 'آدرس اجباری است' }]}\r\n                                        >\r\n                                            <TextArea\r\n                                                value={this.state.address}\r\n                                                onChange={e => this.setState({ address: e.target.value })}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"description\">\r\n                                        <Form.Item\r\n                                            key=\"description\"\r\n                                            name=\"description\"\r\n                                            label=\"مشکل دستگاه خود را توضیح  دهید\"\r\n                                            style={{ width: \"100%\" }}\r\n                                            rules={[{ required: true, message: 'توضیحات اجباری است' }]}\r\n                                        >\r\n                                            <TextArea\r\n                                                value={this.state.description}\r\n                                                onChange={e => this.setState({ description: e.target.value })}\r\n                                            />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                    <Descriptions.Item key=\"attachments\">\r\n                                        <Form.Item\r\n                                            label={'تصاویر قسمت های آسیب دیده'}\r\n                                            name={'attachments'}\r\n                                            key={'attachments'}\r\n                                            style={{ width: \"100%\" }}\r\n                                        >\r\n                                            <AttachmentUploader\r\n                                                whiteList='image/png,image/jpg,image/jpeg,application/pdf'\r\n                                                attachments={this.state.attachments}\r\n                                                onChange={this.onChangeAttachments}\r\n                                                disabled={false} />\r\n                                        </Form.Item>\r\n                                    </Descriptions.Item>\r\n                                </Descriptions >\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    {!!this.state.problems.length &&\r\n                        <div key=\"problems\" className=\"box box-blue\" style={{ marginTop: 10 }}>\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <BarsOutlined style={{ margin: 2, verticalAlign: 'text-top' }} rotate={180} />\r\n                                    مشکل دستگاه خود را انتخاب نمایید\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n                                    <Form.Item wrapperCol={{ span: 24 }} key=\"problemItems\">\r\n                                        <ProblemsList items={this.state.problems} onChange={items => this.setState({ problems: items })} />\r\n                                    </Form.Item>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    }\r\n\r\n                    <div key=\"send\" className=\"box box-blue\" style={{ marginTop: 10 }}>\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <BarsOutlined style={{ margin: 2, verticalAlign: 'text-top' }} rotate={180} />\r\n                                روش ارسال\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n                                <Descriptions>\r\n                                    <Descriptions.Item key={'EvaluationMethod'} className=\"ant-col-24\">\r\n                                        <Form.Item\r\n                                            label={'لطفاً روش ارسال دستگاه آسیب دیده خود را انتخاب فرمایید'}\r\n                                            name={'EvaluationMethod'}\r\n                                            key={'EvaluationMethod'}\r\n                                            labelCol={{ style: { lineHeight: 'normal', width: '100%' } }}\r\n                                            wrapperCol={{ span: 16 }}\r\n                                            rules={[\r\n                                                {\r\n                                                    required: true,\r\n                                                    message: 'پاسخ اجباری است'\r\n                                                },\r\n                                                {\r\n                                                    validator: () => {\r\n                                                        if (this.state.sendMethod && this.state.sendMethod !== enmSendMethods.PolicyholderInPerson)\r\n                                                            return Promise.reject(new Error('در حال حاضر فقط ارسال به صورت حضوری امکانپذیر است'));\r\n                                                        return Promise.resolve();\r\n                                                    }\r\n                                                }\r\n                                            ]}\r\n                                            style={{ width: '100%' }}\r\n                                        >\r\n                                            <Radio.Group key={'SendMethod'} onChange={e => this.setState({ sendMethod: e.target.value })}>\r\n                                                {sendMethodsOptions.filter(s => s.disabled === false).map(s =>\r\n                                                    <Col key={s.value} style={{ marginTop: 10, lineHeight: \"normal\" }}>\r\n                                                        <Radio key={s.value} value={s.value}>{s.name}</Radio>\r\n                                                    </Col>\r\n                                                )}\r\n\r\n                                            </Radio.Group>\r\n                                        </Form.Item>\r\n\r\n                                    </Descriptions.Item>\r\n                                    {!!zobdehLocation &&\r\n                                        <Descriptions.Item key=\"zobdehInfo\" className={span === 1 ? \"ant-col-24\" : \"ant-col-12\"}>\r\n                                            <Alert type=\"info\" style={{ marginTop: 10 }} message={\r\n                                                <Space direction=\"vertical\">\r\n                                                    <Descriptions >\r\n                                                        <Descriptions.Item label={\"آدرس\"}> {zobdehLocation.Address}</Descriptions.Item>\r\n                                                    </Descriptions>\r\n                                                    {!!zobdehLocation.Phone &&\r\n                                                        <Descriptions>\r\n                                                            <Descriptions.Item label={\"تلفن\"}>\r\n                                                                <b style={{ unicodeBidi: \"plaintext\" }}>{zobdehLocation.Phone.startsWith('9') ? `0${zobdehLocation.Phone}` : `0${zobdehLocation.Phone}`.replace(/\\D+/g, '').replace(/(\\d{3})(\\d+)/, '$1 - $2')}</b>\r\n                                                            </Descriptions.Item>\r\n                                                        </Descriptions>\r\n                                                    }\r\n                                                    {!!zobdehLocation.WorkTime &&\r\n                                                        <Descriptions key=\"workTime\">\r\n                                                            <Descriptions.Item label={\"ساعت کار\"} > {zobdehLocation.WorkTime}</Descriptions.Item>\r\n                                                        </Descriptions>\r\n                                                    }\r\n                                                    {!!zobdehLocation.Latitude &&\r\n                                                        <Descriptions key=\"map\">\r\n                                                            <Descriptions.Item>\r\n                                                                <SimpleMap\r\n                                                                    disableChangeMarker={true}\r\n                                                                    cityName={zobdehLocation.CityName}\r\n                                                                    lat={zobdehLocation.Latitude}\r\n                                                                    lng={zobdehLocation.Longitude}\r\n                                                                />\r\n                                                            </Descriptions.Item>\r\n                                                        </Descriptions>\r\n                                                    }\r\n                                                </Space>\r\n                                            } />\r\n                                        </Descriptions.Item>\r\n                                    }\r\n                                </Descriptions>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n\r\n                    <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10, padding: '10px 45px' }}>\r\n                        <Button type=\"primary\" htmlType=\"submit\" icon={<ArrowLeftOutlined />} loading={this.state.loading} style={{ width: \"130px\", marginTop: 10, marginBottom: 10 }}>\r\n                            ثبت درخواست\r\n                        </Button>\r\n                        <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={this.state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                            انصراف\r\n                        </Button>\r\n                    </Form.Item>\r\n                </Form>\r\n            </div>\r\n        );\r\n    }\r\n}","//import { message } from \"antd\";\r\nimport { EntityManager } from \"../../components/entityManager\";\r\nimport { enmControlType, enmPropertyType, IEntityManagerProps, IEntityManagerStates, IMetadata } from \"../../components/entityManager/interfaces\";\r\nimport { ICallOptions, IEntity, IFetchingResult, IOrdering, IPaging } from \"../../components/infrastructure/models\";\r\n\r\ninterface IRepairCenter extends IEntity {\r\n    Name?: string;\r\n    Code?: string;\r\n    Phone?: string;\r\n    ProvinceName?: string;\r\n    ProvinceCode?: string;\r\n    CityName?: string;\r\n    CityCode?: string;\r\n    Address?: string;\r\n    WorkTime?: string;\r\n}\r\nexport interface IRepairCenterProps extends IEntityManagerProps<IRepairCenter> {\r\n    provinceCode?: string;\r\n    cityCode?: string;\r\n}\r\nexport interface IRepairCenterStates extends IEntityManagerStates<IRepairCenter> {\r\n\r\n}\r\n\r\nexport interface IRepairCenterFetchingResultDto extends IFetchingResult<IRepairCenter> {\r\n    RepairCentersCount: number;\r\n}\r\n\r\nexport class RepairCenter extends EntityManager<IRepairCenter, IRepairCenterProps, IRepairCenterStates> {\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            name: \"RepairCenter\",\r\n            title: \"مرکز تعمیر\",\r\n            Properties: [\r\n                {\r\n                    title: \"کد\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 70,\r\n                },\r\n                {\r\n                    title: \"نام مرکز\",\r\n                    dataIndex: \"Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"استان\",\r\n                    dataIndex: \"ProvinceName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"شهر\",\r\n                    dataIndex: \"CityName\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"آدرس\",\r\n                    dataIndex: \"Address\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 800,\r\n                },\r\n                {\r\n                    title: \"تلفن\",\r\n                    dataIndex: \"Phone\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    renderColumn: (_, record: IRepairCenter) => <>{(!!record.Phone && !record.Phone.startsWith('0') ? '0' : '') + record.Phone ?? ''}</>,\r\n                    width: 150,\r\n                },\r\n                {\r\n                    title: \"ساعت کار مرکز\",\r\n                    dataIndex: \"WorkTime\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    width: 150,\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    searchValue?: any;\r\n    onInitializing() {\r\n        super.onInitializing();\r\n        this.getInitialDataUrl = \"center/getinitialdata\";\r\n    }\r\n    async search(value?: any, _?: string, paging?: IPaging, ordering?: IOrdering) {\r\n        this.searchValue = value;\r\n\r\n        if (ordering)\r\n            this.ordering = ordering;\r\n\r\n        if (paging)\r\n            this.paging = paging;\r\n\r\n        await this.fetchData();\r\n    }\r\n    async fetchData() {\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: 'center/repaircenters',\r\n            data: { provinceCode: this.props.provinceCode, cityCode: this.props.cityCode, search: this.searchValue, paging: this.paging, ordering: this.ordering },\r\n            onSuccess: (result) => {\r\n\r\n                if (!this.mounted && !result.ValidationState.Successful)\r\n                    return;\r\n\r\n                //let res: any = result;\r\n\r\n                //if (this.props.isLookupMode && this.props.cityCode && !(res.Data as IRepairCenter[]).filter(e => e.CityCode === this.props.cityCode).length && !this.searchValue)\r\n                //    message.warn(\"در آدرس انتخابی شما ارزیاب فعال وجود ندارد، در صورت تمایل از لیست مراکز ارزیابی، مرکز مورد نظر خود را انتخاب بفرمایید.\", 5);\r\n\r\n                if (this.props.onDataFetched) {\r\n                    this.props.onDataFetched(result as IFetchingResult<IRepairCenter>);\r\n                    return;\r\n                }\r\n            },\r\n            onError: () => {\r\n                if (this.props.onDataFetched)\r\n                    this.props.onDataFetched({ Data: [], TotalResultCount: 0, ValidationState: { Successful: false, ValidationResults: [] } });\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n}","import { Core } from \"../../components/infrastructure/core\";\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../../components/infrastructure/baseComponent\";\r\nimport { IProperty, enmControlType, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport { RepairCenter } from \"./repairCenter\";\r\nimport { IRepairCase, IRepairCaseCenter } from \"../../baseInfo/repairCase/interfaces\";\r\nimport { IResultSet } from \"../../components/infrastructure/models\";\r\nimport DataForm from \"../../components/entityManager/dataform\";\r\nimport { Radio, RadioChangeEvent } from \"antd\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { ChangeEvent } from \"react\";\r\n\r\ninterface IAssignCenterProps extends IBaseProps {\r\n    onClose?: (args: any) => void;\r\n    onSubmit?: (options: {\r\n        data: any;\r\n        url: string;\r\n        headers?: { key: string; value: string; }[];\r\n        contentType?: any;\r\n        completeCallback: (result: IResultSet<any>) => void;\r\n    }) => Promise<boolean>;\r\n    repairCase: IRepairCase;\r\n    repairCaseCenter?: IRepairCaseCenter;\r\n    disabled?: boolean;\r\n}\r\n\r\ninterface IAssignCenterStates extends IBaseStates {\r\n    currentEntity: IRepairCaseCenter;\r\n}\r\n\r\nexport class AssignCenter extends BaseComponent<IAssignCenterProps, IAssignCenterStates>{\r\n    properties: IProperty[];\r\n    constructor(props: IAssignCenterProps) {\r\n        super(props)\r\n\r\n        this.state = {\r\n            isAuthorized: true,\r\n            loading: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            currentEntity: {\r\n                Id: props.repairCaseCenter?.Id ?? 0,\r\n                RowVrsn: props.repairCaseCenter?.RowVrsn,\r\n                RowGuid: props.repairCaseCenter?.RowGuid ?? Core.newId(),\r\n                AdminConfirm: props.repairCaseCenter?.AdminConfirm ?? true,\r\n                AdminDescription: props.repairCaseCenter?.AdminDescription,\r\n                RepairCenter: props.repairCaseCenter?.RepairCenter,\r\n                RepairCenterId: props.repairCaseCenter?.RepairCenterId,\r\n                ModifiedProperties: [],\r\n            } as any\r\n        };\r\n\r\n        this.properties = [\r\n            {\r\n                propertyType: enmPropertyType.boolean,\r\n                controlType: enmControlType.template,\r\n                dataIndex: \"AdminConfirm\",\r\n                title: \"درخواست مورد تأیید است؟\",\r\n                rules: [{ required: true, message: 'پاسخ اجباری است' }],\r\n                width: \"100%\",\r\n                renderControl: () => {\r\n                    return (\r\n                        <Radio.Group key={'AdminConfirm'}\r\n                            buttonStyle={\"solid\"}\r\n                            disabled={this.props.disabled}\r\n                            onChange={this.onChangeAdminConfirm}\r\n                        >\r\n                            <Radio value={true}>تأیید</Radio>\r\n                            <Radio value={false}>رد</Radio>\r\n                        </Radio.Group>\r\n                    );\r\n                }\r\n            },\r\n            {\r\n                propertyType: enmPropertyType.string,\r\n                controlType: enmControlType.template,\r\n                dataIndex: \"AdminDescription\",\r\n                title: \"توضیحات\",\r\n                //rules: [{ required: !this.state.currentEntity?.AdminConfirm, message: 'پاسخ اجباری است' }],\r\n                rulesFunc: (currentEntity: IRepairCaseCenter) => {\r\n                    return [\r\n                        {\r\n                            validator: () => {\r\n                                if (!currentEntity.AdminConfirm && !currentEntity.AdminDescription)\r\n                                    return Promise.reject('توضیحات اجباری است');\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]\r\n                },\r\n                width: \"100%\",\r\n                renderControl: () => {\r\n                    return (\r\n                        <TextArea\r\n                            disabled={this.props.disabled}\r\n                            rows={6}\r\n                            onChange={this.onChangeAdminDescription}\r\n                        />\r\n                    );\r\n                }\r\n            },\r\n            {\r\n                controlType: enmControlType.lookup,\r\n                dataIndex: \"RepairCenterId\",\r\n                width: \"100%\",\r\n                title: \"کارشناس تعمیر\",\r\n                //rules: [{ required: this.state.currentEntity?.AdminConfirm, message: 'پاسخ اجباری است' }],\r\n                rulesFunc: (currentEntity: IRepairCaseCenter) => {\r\n                    return [\r\n                        {\r\n                            validator: () => {\r\n                                if (!!currentEntity.AdminConfirm && !currentEntity.RepairCenterId)\r\n                                    return Promise.reject('کارشناس تعمیر اجباری است');\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]\r\n                },\r\n                disable: (sender: AssignCenter) => {\r\n                    return !sender.state.currentEntity?.AdminConfirm;\r\n                },\r\n                visibility: (currentEntity: IRepairCaseCenter) => {\r\n                    return !!currentEntity.AdminConfirm;\r\n                },\r\n                lookup: {\r\n                    lookupComponent: RepairCenter,\r\n                    lookupProperty: \"RepairCenter\",\r\n                    lookupDisplayFields: [\"Name\"],\r\n                    dropdownDisplayFields: [\"Name\", \"ProvinceName\", \"CityName\", \"Phone\", \"Address\", \"WorkTime\"],\r\n                    showButton: false\r\n                }\r\n            }\r\n        ];\r\n\r\n    }\r\n\r\n    submit = async () => {\r\n        const data = {\r\n            rowGuid: this.props.repairCase.RowGuid,\r\n            rowVrsn: this.props.repairCase.RowVrsn,\r\n            confirm: this.state.currentEntity?.AdminConfirm,\r\n            repairCenterId: this.state.currentEntity?.RepairCenter?.Id,\r\n            adminDescription: this.state.currentEntity?.AdminDescription\r\n        };\r\n\r\n        if (this.props.onSubmit) {\r\n            this.setLoading(true);\r\n            return await this.props.onSubmit({\r\n                data,\r\n                url: \"repaircasecenter/assigncenter\",\r\n                completeCallback: result => {\r\n                    this.setLoading(false);\r\n                    if (result.ValidationState.Successful) {\r\n                        this.props.onClose && this.props.onClose({});\r\n                    }\r\n                }\r\n            });\r\n        }\r\n        else\r\n            return Promise.resolve(true);\r\n    };\r\n\r\n    onChangeAdminConfirm = (e: RadioChangeEvent) => {\r\n        const { currentEntity } = this.state;\r\n        currentEntity.AdminConfirm = e.target.value;\r\n        if (!currentEntity.AdminConfirm) {\r\n            currentEntity.RepairCenter = undefined;\r\n            currentEntity.RepairCenterId = undefined;\r\n        }\r\n        if (currentEntity.ModifiedProperties.indexOf(\"AdminConfirm\") === -1)\r\n            currentEntity.ModifiedProperties.push(\"AdminConfirm\");\r\n        this.setState({ currentEntity });\r\n    };\r\n\r\n    onChangeAdminDescription = (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n        const { currentEntity } = this.state;\r\n        currentEntity.AdminDescription = e.target.value;\r\n        if (currentEntity.ModifiedProperties.indexOf(\"AdminDescription\") === -1)\r\n            currentEntity.ModifiedProperties.push(\"AdminDescription\");\r\n        this.setState({ currentEntity });\r\n    };\r\n\r\n    virtualRender() {\r\n        //const disableCenter = !this.state.confirm;\r\n\r\n        return (\r\n            <div>\r\n                <DataForm<IRepairCaseCenter>\r\n                    labelCol={{ xxl: 6, xl: 6, lg: 8, md: 8, sm: 10, xs: 24 }}\r\n                    wrapperCol={{ xxl: 12, xl: 12, lg: 16, md: 16, sm: 14, xs: 24 }}\r\n                    parent={this}\r\n                    borderLess={true}\r\n                    resetable={true}\r\n                    isReadonly={this.props.disabled}\r\n                    currentEntity={this.state.currentEntity}\r\n                    properties={this.properties}\r\n                    onSubmit={async () => await this.submit()}\r\n                    onReset={() => this.props.onClose && this.props.onClose(this)}\r\n                    onChange={(property, value) => {\r\n                        let currentEntity = this.state.currentEntity as any;\r\n                        if (currentEntity) {\r\n                            if (property.dataIndex === \"RepairCenterId\") {\r\n                                currentEntity[property.dataIndex!] = value ? value[\"Id\"] : 0;\r\n                                if (currentEntity.ModifiedProperties.indexOf(\"RepairCenterId\") === -1)\r\n                                    currentEntity.ModifiedProperties.push(\"RepairCenterId\");\r\n                            }\r\n                        }\r\n                        this.setState({ currentEntity });\r\n                    }}\r\n                    preparelookupProps={(propName, lookupProps) => {\r\n                        if (propName === \"RepairCenterId\") {\r\n\r\n                        }\r\n\r\n                        return lookupProps;\r\n                    }}\r\n                />\r\n            </div>\r\n        );\r\n    }\r\n}\r\n","import { Core } from \"../../components/infrastructure/core\";\r\nimport { Button, Form } from \"antd\";\r\nimport { StopOutlined, CheckCircleOutlined } from '@ant-design/icons';\r\nimport { IPaymentProps, IPaymentStates } from \"./interfaces\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { DatePicker as DatePickerJalali } from \"antd-jalali\";\r\nimport locale from 'antd/es/date-picker/locale/fa_IR';\r\nimport { AttachmentUploader } from \"../../baseInfo/attachment/attachmentUploader\";\r\nimport { IAttachment } from \"../../baseInfo/attachment/interfaces\";\r\nimport { AttachmentViewer } from \"../../baseInfo/attachment/attachmentViewer\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nexport const Payment = (props: IPaymentProps) => {\r\n\r\n    const [state, setState] = useState<IPaymentStates>({ loading: false, entity: props.entity ?? { PaymentReceipts: [] } as any });\r\n    const [form] = Form.useForm();\r\n\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 6, lg: 8, md: 8, sm: 10, xs: 24 },\r\n        wrapperCol: { xxl: 12, xl: 12, lg: 16, md: 16, sm: 14, xs: 24 }\r\n    };\r\n\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n\r\n    useEffect(() => {\r\n\r\n    }, []);\r\n\r\n    const submit = async () => {\r\n        const { entity } = state;\r\n        if (!entity)\r\n            return;\r\n\r\n        setState({ ...state, loading: true });\r\n        const data = new FormData();\r\n        data.append('Payment', JSON.stringify({\r\n            RepairCaseId: props.repairCase.Id,\r\n            RowVrsn: props.repairCase.RowVrsn,\r\n            ReceiptDateTime: state.entity.PaymentReceiptDateTime\r\n        }));\r\n\r\n        state.entity.PaymentReceipts.forEach((r: any) => {\r\n            data.append('ReceiptDescriptions', r['Description']);\r\n            data.append('Receipts', r['File']);\r\n        });\r\n\r\n        if (props.onSubmit)\r\n            await props.onSubmit({\r\n                data,\r\n                url: \"repaircasecenter/payment\",\r\n                contentType: false,\r\n                headers: [{ key: \"encType\", value: \"multipart/form-data\" }],\r\n                completeCallback: result => {\r\n                    setState({ ...state, loading: false });\r\n                    if (result.ValidationState.Successful) {\r\n                        Core.successNotification('دریافت مبلغ تعمیرات انجام شد');\r\n                        props.onClose && props.onClose({});\r\n                    }\r\n                }\r\n            });\r\n    };\r\n\r\n    const onChangePaymentReceiptDateTime = (e: any) => {\r\n        const { entity } = state;\r\n        if (e) {\r\n            let parsedDate = e.toDate();\r\n            parsedDate = new Date(parsedDate.toDateString());\r\n            const newEntity = { ...entity, PaymentReceiptDateTime: parsedDate.toDateString() };\r\n            setState({ ...state, entity: newEntity });\r\n        }\r\n        else {\r\n            const newEntity = { ...entity, PaymentReceiptDateTime: undefined };\r\n            setState({ ...state, entity: newEntity });\r\n        }\r\n    }\r\n\r\n    const onChangePaymentReceipts = (attachments: IAttachment[]) => {\r\n        const { entity } = state;\r\n        const newEntity = { ...entity, PaymentReceipts: attachments };\r\n        setState({ ...state, entity: newEntity });\r\n    }\r\n\r\n    const { PaymentReceiptDateTime, PaymentReceipts } = state.entity;\r\n    return (\r\n        <Form\r\n            form={form}\r\n            scrollToFirstError\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={submit}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n            style={{ padding: 0 }}\r\n            \r\n        >\r\n            <Form.Item\r\n                label={'تاریخ واریز'}\r\n                name={'PaymentReceiptDateTime'}\r\n                key={'PaymentReceiptDateTime'}\r\n                initialValue={PaymentReceiptDateTime}\r\n            >\r\n                <DatePickerJalali\r\n                    onChange={onChangePaymentReceiptDateTime}\r\n                    format=\"YYYY/MM/DD\"\r\n                    locale={locale}\r\n                    style={{ display: 'block' }}\r\n                    disabled={props.disabled}\r\n                />\r\n            </Form.Item>\r\n            <Form.Item\r\n                label={'تصویر واریز'}\r\n                name={'PaymentReceipts'}\r\n                key={'PaymentReceipts'}\r\n                style={{ width: \"100%\" }}\r\n            >\r\n                {props.disabled ?\r\n                    <AttachmentViewer attachments={PaymentReceipts.filter(a => !!a.Tag)} />\r\n                    :\r\n                    <AttachmentUploader\r\n                        whiteList='image/png,image/jpg,image/jpeg,application/pdf'\r\n                        attachments={PaymentReceipts}\r\n                        onChange={onChangePaymentReceipts}\r\n                        disabled={false} />\r\n                }\r\n            </Form.Item>\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<CheckCircleOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        ثبت\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n}","import { ChangeEvent, useEffect, useState } from \"react\";\r\nimport { IRequestCheckProps, IRequestCheckStates } from \"./interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState } from \"../../components/infrastructure/models\";\r\nimport { Button, Form, Radio, RadioChangeEvent } from \"antd\";\r\nimport { StopOutlined, CheckCircleOutlined } from '@ant-design/icons';\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nexport const RequestCheck = (props: IRequestCheckProps) => {\r\n\r\n    const [state, setState] = useState<IRequestCheckStates>({ loading: false, entity: props.entity ?? { RowGuid: Core.newId(), State: enmEntityState.Added } as any });\r\n    const [form] = Form.useForm();\r\n\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 6, lg: 8, md: 8, sm: 10, xs: 24 },\r\n        wrapperCol: { xxl: 12, xl: 12, lg: 16, md: 16, sm: 14, xs: 24 }\r\n    };\r\n\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n\r\n    useEffect(() => {\r\n        //const { requestCheck } = state;\r\n        //if (!requestCheck) {\r\n        //    setState({ requestCheck: { RowGuid: Core.newId(), State: enmEntityState.Added } as any });\r\n        //}\r\n    }, []);\r\n\r\n    const submit = async () => {\r\n        const { entity } = state;\r\n        if (!entity)\r\n            return;\r\n\r\n        const lastIndex = props.repairCase.RepairCaseCenters.length - 1;\r\n        const repairCaseCenter = props.repairCase.RepairCaseCenters[lastIndex];\r\n\r\n        setState({ ...state, loading: true });\r\n        const data = {\r\n            requestCheck: {\r\n                RowGuid: entity.RowGuid,\r\n                RepairCaseCenterId: repairCaseCenter.Id,\r\n                Description: entity.Description,\r\n                Confirm: entity.Confirm,\r\n            }\r\n        };\r\n\r\n        if (props.onSubmit)\r\n            await props.onSubmit({\r\n                data,\r\n                url: \"repaircasecenter/requestcheck\",\r\n                completeCallback: result => {\r\n                    setState({ ...state, loading: false });\r\n                    if (result.ValidationState.Successful) {\r\n                        Core.successNotification('بررسی درخواست انجام شد');\r\n                        props.onClose && props.onClose({});\r\n                    }\r\n                }\r\n            });\r\n    };\r\n\r\n    const onChangeConfirm = (e: RadioChangeEvent) => {\r\n        const { entity } = state;\r\n        entity.Confirm = e.target.value;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    const onChangeDescription = (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n        const { entity } = state;\r\n        entity.Description = e.target.value;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    return (\r\n        <Form\r\n            form={form}\r\n            scrollToFirstError\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={submit}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n            style={{ padding: 0 }}\r\n        >\r\n            <Form.Item\r\n                label={'درخواست مورد تأیید است؟'}\r\n                name={'Confirm'}\r\n                key={'Confirm'}\r\n                rules={[{ required: true, message: 'پاسخ اجباری است' }]}\r\n                initialValue={state.entity.Confirm}\r\n                labelCol={{ style: { lineHeight: 'normal' } }}\r\n            >\r\n                <Radio.Group key={'Confirm'}\r\n                    onChange={onChangeConfirm}\r\n                    buttonStyle={\"solid\"}\r\n                    disabled={props.disabled}\r\n                >\r\n                    <Radio value={true}>تأیید</Radio>\r\n                    <Radio value={false}>رد</Radio>\r\n                </Radio.Group>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n                label={'توضیحات'}\r\n                name={'Description'}\r\n                key={'Description'}\r\n                rules={[{ required: !state.entity.Confirm, message: 'توضیحات اجباری است' }]}\r\n                initialValue={state.entity.Description}\r\n            >\r\n                <TextArea\r\n                    onChange={onChangeDescription}\r\n                    disabled={props.disabled}\r\n                    rows={6}\r\n                />\r\n            </Form.Item>\r\n\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<CheckCircleOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        ثبت\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n}","import { ChangeEvent, useEffect, useState } from \"react\";\r\nimport { IEstimationProps, IEstimationStates } from \"./interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState } from \"../../components/infrastructure/models\";\r\nimport { Button, Form, Radio, RadioChangeEvent } from \"antd\";\r\nimport { StopOutlined, CheckCircleOutlined } from '@ant-design/icons';\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { PriceInput } from \"../../components/priceInput\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nexport const Estimation = (props: IEstimationProps) => {\r\n\r\n    const [state, setState] = useState<IEstimationStates>({ loading: false, entity: props.entity ?? { RowGuid: Core.newId(), State: enmEntityState.Added } as any });\r\n    const [form] = Form.useForm();\r\n\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 6, lg: 8, md: 8, sm: 10, xs: 24 },\r\n        wrapperCol: { xxl: 12, xl: 12, lg: 16, md: 16, sm: 14, xs: 24 }\r\n    };\r\n\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n\r\n    useEffect(() => {\r\n        //const { requestCheck } = state;\r\n        //if (!requestCheck) {\r\n        //    setState({ requestCheck: { RowGuid: Core.newId(), State: enmEntityState.Added } as any });\r\n        //}\r\n    }, []);\r\n\r\n    const submit = async () => {\r\n        const { entity } = state;\r\n        if (!entity)\r\n            return;\r\n\r\n        const lastIndex = props.repairCase.RepairCaseCenters.length - 1;\r\n        const repairCaseCenter = props.repairCase.RepairCaseCenters[lastIndex];\r\n\r\n        setState({ ...state, loading: true });\r\n        const data = {\r\n            estimation: {\r\n                RowGuid: entity.RowGuid,\r\n                RepairCaseCenterId: repairCaseCenter.Id,\r\n                Description: entity.Description,\r\n                EstimatedAmount: entity.EstimatedAmount,\r\n                Confirm: entity.Confirm,\r\n            }\r\n        };\r\n\r\n        if (props.onSubmit)\r\n            await props.onSubmit({\r\n                data,\r\n                url: \"repaircasecenter/estimation\",\r\n                completeCallback: result => {\r\n                    setState({ ...state, loading: false });\r\n                    if (result.ValidationState.Successful) {\r\n                        Core.successNotification('برآورد هزینه انجام شد');\r\n                        props.onClose && props.onClose({});\r\n                    }\r\n                }\r\n            });\r\n    };\r\n\r\n    const onChangeConfirm = (e: RadioChangeEvent) => {\r\n        const { entity } = state;\r\n        entity.Confirm = e.target.value;\r\n        if (entity.Confirm === false)\r\n            entity.EstimatedAmount = undefined;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    const onChangeDescription = (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n        const { entity } = state;\r\n        entity.Description = e.target.value;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    const onChangeEstimatedAmount = (value: any) => {\r\n        const { entity } = state;\r\n        entity.EstimatedAmount = value;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    return (\r\n        <Form\r\n            form={form}\r\n            scrollToFirstError\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={submit}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n            style={{ padding: 0 }}\r\n        >\r\n            <Form.Item\r\n                label={'دستگاه قابل تعمیر است؟'}\r\n                name={'Confirm'}\r\n                key={'Confirm'}\r\n                rules={[{ required: true, message: 'پاسخ اجباری است' }]}\r\n                initialValue={state.entity.Confirm}\r\n                labelCol={{ style: { lineHeight: 'normal' } }}\r\n            >\r\n                <Radio.Group key={'Confirm'}\r\n                    onChange={onChangeConfirm}\r\n                    buttonStyle={\"solid\"}\r\n                    disabled={props.disabled}\r\n                >\r\n                    <Radio value={true}>بلی</Radio>\r\n                    <Radio value={false}>خیر</Radio>\r\n                </Radio.Group>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n                label={'توضیحات'}\r\n                name={'Description'}\r\n                key={'Description'}\r\n                rules={[{ required: true, message: 'توضیحات اجباری است' }]}\r\n                initialValue={state.entity.Description}\r\n            >\r\n                <TextArea\r\n                    onChange={onChangeDescription}\r\n                    disabled={props.disabled}\r\n                    rows={6}\r\n                />\r\n            </Form.Item>\r\n\r\n\r\n            <Form.Item\r\n                label={'مبلغ برآورد هزینه'}\r\n                name={'EstimatedAmount'}\r\n                key={'EstimatedAmount'}\r\n                rules={[{ required: state.entity.Confirm, message: 'مبلغ اجباری است' }]}\r\n                initialValue={state.entity.EstimatedAmount}\r\n            >\r\n                <PriceInput\r\n                    disabled={props.disabled || !state.entity.Confirm}\r\n                    onChange={onChangeEstimatedAmount}\r\n                    style={{ width: \"100%\" }}\r\n                />\r\n            </Form.Item>\r\n\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<CheckCircleOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        ثبت\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n}","import { ChangeEvent, useEffect, useState } from \"react\";\r\nimport { ICustomerConfirmationProps, ICustomerConfirmationStates } from \"./interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState } from \"../../components/infrastructure/models\";\r\nimport { Button, Form, Radio, RadioChangeEvent } from \"antd\";\r\nimport { StopOutlined, CheckCircleOutlined } from '@ant-design/icons';\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nexport const CustomerConfirmation = (props: ICustomerConfirmationProps) => {\r\n\r\n    const [state, setState] = useState<ICustomerConfirmationStates>({ loading: false, entity: props.entity ?? { RowGuid: Core.newId(), State: enmEntityState.Added } as any });\r\n    const [form] = Form.useForm();\r\n\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 6, lg: 8, md: 8, sm: 10, xs: 24 },\r\n        wrapperCol: { xxl: 12, xl: 12, lg: 16, md: 16, sm: 14, xs: 24 }\r\n    };\r\n\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n\r\n    useEffect(() => {\r\n        //const { CustomerConfirmation } = state;\r\n        //if (!CustomerConfirmation) {\r\n        //    setState({ CustomerConfirmation: { RowGuid: Core.newId(), State: enmEntityState.Added } as any });\r\n        //}\r\n    }, []);\r\n\r\n    const submit = async () => {\r\n        const { entity } = state;\r\n        if (!entity)\r\n            return;\r\n\r\n        setState({ ...state, loading: true });\r\n        const data = {\r\n            data: {\r\n                TicketNo: props.repairCase.TicketNo,\r\n                Description: entity.Description,\r\n                Confirm: entity.Confirm\r\n            }\r\n        };\r\n\r\n        if (props.onSubmit)\r\n            await props.onSubmit({\r\n                data,\r\n                url: \"portal/repairationconfirmation\",\r\n                completeCallback: result => {\r\n                    setState({ ...state, loading: false });\r\n                    if (result.ValidationState.Successful) {\r\n                        Core.successNotification('اعلام نظر با موفقیت انجام شد');\r\n                        props.onClose && props.onClose({ preventBack: true });\r\n                    }\r\n                }\r\n            });\r\n    };\r\n\r\n    const onChangeConfirm = (e: RadioChangeEvent) => {\r\n        const { entity } = state;\r\n        entity.Confirm = e.target.value;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    const onChangeDescription = (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n        const { entity } = state;\r\n        entity.Description = e.target.value;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    return (\r\n        <Form\r\n            form={form}\r\n            scrollToFirstError\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={submit}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n            style={{ padding: 0 }}\r\n        >\r\n            <Form.Item\r\n                label={'آیا با مبلغ برآورد شده موافق هستید؟'}\r\n                name={'Confirm'}\r\n                key={'Confirm'}\r\n                rules={[{ required: true, message: 'پاسخ اجباری است' }]}\r\n                initialValue={state.entity.Confirm}\r\n                labelCol={{ style: { lineHeight: 'normal' } }}\r\n            >\r\n                <Radio.Group key={'Confirm'}\r\n                    onChange={onChangeConfirm}\r\n                    buttonStyle={\"solid\"}\r\n                    disabled={props.disabled}\r\n                >\r\n                    <Radio value={true}>بله موافق هستم، تعمیرات انجام شود</Radio>\r\n                    <Radio value={false}>خیر، انصراف می دهم</Radio>\r\n                </Radio.Group>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n                label={'توضیحات'}\r\n                name={'Description'}\r\n                key={'Description'}\r\n                //rules={[{ required: !state.entity.Confirm, message: 'توضیحات اجباری است' }]}\r\n                initialValue={state.entity.Description}\r\n            >\r\n                <TextArea\r\n                    onChange={onChangeDescription}\r\n                    disabled={props.disabled}\r\n                    rows={6}\r\n                />\r\n            </Form.Item>\r\n\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<CheckCircleOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        ثبت\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n}","import { ChangeEvent, useEffect, useState } from \"react\";\r\nimport { IEstimation, IRepairationCompleteProps, IRepairationCompleteStates } from \"./interfaces\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmEntityState } from \"../../components/infrastructure/models\";\r\nimport { Button, Form, Radio, RadioChangeEvent } from \"antd\";\r\nimport { StopOutlined, CheckCircleOutlined } from '@ant-design/icons';\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { PriceInput } from \"../../components/priceInput\";\r\nimport { enmRepairationStatus } from \"../../baseInfo/repairCase/interfaces\";\r\n\r\ntype LayoutType = Parameters<typeof Form>[0]['layout'];\r\n\r\nexport const RepairationComplete = (props: IRepairationCompleteProps) => {\r\n\r\n    const [state, setState] = useState<IRepairationCompleteStates>({ loading: false, entity: props.entity ?? { RowGuid: Core.newId(), State: enmEntityState.Added } as any });\r\n    const [form] = Form.useForm();\r\n\r\n    const formItemLayout = {\r\n        labelCol: { xxl: 6, xl: 6, lg: 8, md: 8, sm: 10, xs: 24 },\r\n        wrapperCol: { xxl: 12, xl: 12, lg: 16, md: 16, sm: 14, xs: 24 }\r\n    };\r\n\r\n    const [formLayout] = useState<LayoutType>('horizontal');\r\n\r\n    useEffect(() => {\r\n        //const { requestCheck } = state;\r\n        //if (!requestCheck) {\r\n        //    setState({ requestCheck: { RowGuid: Core.newId(), State: enmEntityState.Added } as any });\r\n        //}\r\n    }, []);\r\n\r\n    const submit = async () => {\r\n        const { entity } = state;\r\n        if (!entity)\r\n            return;\r\n\r\n        const lastIndex = props.repairCase.RepairCaseCenters.length - 1;\r\n        const repairCaseCenter = props.repairCase.RepairCaseCenters[lastIndex];\r\n\r\n        setState({ ...state, loading: true });\r\n        const data = {\r\n            complete: {\r\n                RowGuid: entity.RowGuid,\r\n                RepairCaseCenterId: repairCaseCenter.Id,\r\n                Description: entity.Description,\r\n                PayableAmount: entity.PayableAmount,\r\n                Done: entity.Done,\r\n            }\r\n        };\r\n\r\n        if (props.onSubmit)\r\n            await props.onSubmit({\r\n                data,\r\n                url: \"repaircasecenter/repairationcomplete\",\r\n                completeCallback: result => {\r\n                    setState({ ...state, loading: false });\r\n                    if (result.ValidationState.Successful) {\r\n                        Core.successNotification('ثبت نتیجه تعمیرات انجام شد');\r\n                        props.onClose && props.onClose({});\r\n                    }\r\n                }\r\n            });\r\n    };\r\n\r\n    const onChangeConfirm = (e: RadioChangeEvent) => {\r\n        const { entity } = state;\r\n        entity.Done = e.target.value;\r\n        if (entity.Done === false)\r\n            entity.PayableAmount = undefined;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    const onChangeDescription = (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n        const { entity } = state;\r\n        entity.Description = e.target.value;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    const onChangePayableAmount = (value: any) => {\r\n        const { entity } = state;\r\n        entity.PayableAmount = value;\r\n        setState({ ...state, entity });\r\n    };\r\n\r\n    const { steps } = props;\r\n    const estimations = steps.filter(s => s.Substatus === enmRepairationStatus.Estimation);\r\n    const lastEstimation = estimations[estimations.length - 1] as IEstimation;\r\n\r\n    return (\r\n        <Form\r\n            form={form}\r\n            scrollToFirstError\r\n            {...formItemLayout}\r\n            layout={formLayout}\r\n            onFinish={submit}\r\n            onReset={() => {\r\n                props.onClose && props.onClose(this);\r\n            }}\r\n            style={{ padding: 0 }}\r\n        >\r\n            <Form.Item\r\n                label={'مشکل دستگاه رفع شده است؟'}\r\n                name={'Done'}\r\n                key={'Done'}\r\n                rules={[{ required: true, message: 'پاسخ اجباری است' }]}\r\n                initialValue={state.entity.Done}\r\n                labelCol={{ style: { lineHeight: 'normal'} }}\r\n            >\r\n                <Radio.Group key={'Done'}\r\n                    onChange={onChangeConfirm}\r\n                    buttonStyle={\"solid\"}\r\n                    disabled={props.disabled}\r\n                >\r\n                    <Radio value={true}>مشکل رفع شد</Radio>\r\n                    <Radio value={false}>غیرقابل تعمیر است</Radio>\r\n                </Radio.Group>\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n                label={'توضیحات'}\r\n                name={'Description'}\r\n                key={'Description'}\r\n                rules={[{ required: true, message: 'توضیحات اجباری است' }]}\r\n                initialValue={state.entity.Description}\r\n            >\r\n                <TextArea\r\n                    onChange={onChangeDescription}\r\n                    disabled={props.disabled}\r\n                    rows={6}\r\n                />\r\n            </Form.Item>\r\n\r\n            <Form.Item\r\n                label={'مبلغ برآورد شده'}\r\n                name={'EstimatedAmount'}\r\n                key={'EstimatedAmount'}\r\n                initialValue={lastEstimation.EstimatedAmount}\r\n            >\r\n                <PriceInput\r\n                    disabled\r\n                    style={{ width: \"100%\" }}\r\n                />\r\n            </Form.Item>\r\n\r\n\r\n            <Form.Item\r\n                label={'مبلغ قابل پرداخت'}\r\n                name={'PayableAmount'}\r\n                key={'PayableAmount'}\r\n                rules={[{ required: state.entity.Done, message: 'مبلغ اجباری است' }]}\r\n                initialValue={state.entity.PayableAmount}\r\n            >\r\n                <PriceInput\r\n                    disabled={props.disabled || !state.entity.Done}\r\n                    onChange={onChangePayableAmount}\r\n                    style={{ width: \"100%\" }}\r\n                />\r\n            </Form.Item>\r\n\r\n            {props.disabled === true ? <></> :\r\n                <Form.Item wrapperCol={{ dir: 'ltr' }} style={{ zIndex: 1000, borderTop: '1px solid', borderColor: '#e5e5e5', marginTop: 10 }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" icon={<CheckCircleOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10 }}>\r\n                        ثبت\r\n                    </Button>\r\n\r\n                    <Button type=\"ghost\" htmlType=\"reset\" icon={<StopOutlined />} loading={state.loading} style={{ width: \"100px\", marginTop: 10, marginBottom: 10, marginLeft: 10, background: '#fff' }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            }\r\n        </Form>\r\n    );\r\n}","import { Alert, Checkbox, Col, Descriptions, Row } from \"antd\";\r\nimport { IRepairCase, IRepairCaseFetchingInfo, IRepairCaseInitialData, IRepairCaseProps, IRepairCaseStates, enmRepairCaseStatus, enmRepairationStatus, repairCaseStatusOptions, repairationStatusOptions, sendMethodsOptions } from \"../../baseInfo/repairCase/interfaces\";\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { IMetadata, enmControlType, enmEntityManagerState, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport AppContext, { AppContextProps } from \"../../components/infrastructure/appContext\";\r\nimport { ICallOptions, IResultSet, enmOrderingType } from \"../../components/infrastructure/models\";\r\nimport { InfoCircleFilled } from \"@ant-design/icons\";\r\nimport { AttachmentViewer } from \"../../baseInfo/attachment/attachmentViewer\";\r\nimport jalaliday from 'jalaliday';\r\nimport dayjs from 'dayjs';\r\nimport { IRepairationActionProps } from \"../../repairation/repairCaseCenter/interfaces\";\r\nimport * as RepairationComponents from '../../repairation/repairCaseCenter/components';\r\nimport SimpleMap from \"../../components/map\";\r\nimport { CustomerConfirmation } from \"../../repairation/repairCaseCenter/customerConfirmation\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { IProblem } from \"../../baseInfo/problem/interfaces\";\r\n\r\ndayjs.extend(jalaliday);\r\n\r\nconst ProblemsList = (props: { items: IProblem[] }) => {\r\n    const list = props.items.map(item =>\r\n        <Descriptions.Item key={item.Id} >\r\n            <Checkbox checked >\r\n                {item.Name}\r\n            </Checkbox>\r\n        </Descriptions.Item>);\r\n    return (\r\n        <Descriptions key=\"ProblemsList\" layout='horizontal' column={{ xxl: 8, xl: 6, lg: 4, md: 3, sm: 2, xs: 1 }}>\r\n            {list}\r\n        </Descriptions>\r\n    );\r\n}\r\n\r\nconst CenterLocation = (center: { Longitude?: number; Latitude?: number; Address?: string; WorkTime?: string; CityName?: string; Phone?: string; }) => {\r\n    return (\r\n        !!center.Longitude && !!center.Latitude ?\r\n            <div style={{ maxWidth: 400 }}>\r\n                <Row>\r\n                    <Col style={{ zIndex: 0 }}>\r\n                        <Descriptions >\r\n                            <Descriptions.Item label={\"آدرس\"}> {center.Address}</Descriptions.Item>\r\n                        </Descriptions>\r\n                    </Col>\r\n                    {!!center.Phone &&\r\n                        <Col style={{ zIndex: 0 }}>\r\n                            <Descriptions>\r\n                                <Descriptions.Item label={\"تلفن\"}>\r\n                                    <b style={{ unicodeBidi: \"plaintext\" }}>{center.Phone.startsWith('9') ? `0${center.Phone}` : `0${center.Phone}`.replace(/\\D+/g, '').replace(/(\\d{3})(\\d+)/, '$1 - $2')}</b>\r\n                                </Descriptions.Item>\r\n                            </Descriptions>\r\n                        </Col>\r\n                    }\r\n                    {!!center.WorkTime &&\r\n                        <Col style={{ zIndex: 0 }}>\r\n                            <Descriptions key=\"workTime\">\r\n                                <Descriptions.Item label={\"ساعت کار\"} > {center.WorkTime}</Descriptions.Item>\r\n                            </Descriptions>\r\n                        </Col>\r\n                    }\r\n                    {!!center.Latitude &&\r\n                        <Col style={{ zIndex: 0 }}>\r\n                            <Descriptions key=\"map\" style={{ zIndex: 0 }}>\r\n                                <Descriptions.Item>\r\n                                    <SimpleMap\r\n                                        disableChangeMarker={true}\r\n                                        cityName={center.CityName}\r\n                                        lat={center.Latitude}\r\n                                        lng={center.Longitude}\r\n                                    />\r\n                                </Descriptions.Item>\r\n                            </Descriptions>\r\n                        </Col>\r\n                    }\r\n                </Row>\r\n            </div>\r\n            :\r\n            <></>\r\n    );\r\n}\r\n\r\nexport class RepairCasePolicyholder extends BaseEntityManager<IRepairCase, IRepairCaseProps, IRepairCaseStates, IRepairCaseFetchingInfo, IRepairCaseInitialData>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"لیست درخواست های تعمیرات (آزاد)\",\r\n            name: \"RepairCasePolicyholder\",\r\n            Properties: [\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"شماره پرونده\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        options: repairCaseStatusOptions\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"وضعیت تعمیرات\",\r\n                    dataIndex: \"RepairationStatus\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: () => repairationStatusOptions.map(o => {\r\n                            return { title: o.userCartableTitle, value: o.value, name: o.name };\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"IMEI/سریال دستگاه\",\r\n                    dataIndex: \"CustomerEquipmentModel.EquipmentSerialNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"کد ملی مشتری\",\r\n                    dataIndex: \"CustomerEquipmentModel.Customer.NationalCode\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"مشتری\",\r\n                    dataIndex: \"CustomerEquipmentModel.Customer.FullName\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200\r\n                },\r\n                {\r\n                    title: \"نوع تجهیز\",\r\n                    dataIndex: \"CustomerEquipmentModel.Equipment.Name\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"CustomerEquipmentModel.BrandTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"مدل\",\r\n                    dataIndex: \"CustomerEquipmentModel.EquipmentModelTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120\r\n                },\r\n                {\r\n                    title: \"روش ارسال\",\r\n                    dataIndex: \"SendMethod\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: () => {\r\n                            return sendMethodsOptions.map(a => {\r\n                                return { name: a.name, title: a.name, value: a.value };\r\n                            });\r\n                        }\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"تاریخ درخواست\",\r\n                    dataIndex: \"CreateDateTime\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150\r\n                },\r\n                {\r\n                    title: \"توضیحات\",\r\n                    dataIndex: \"Description\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.template,\r\n                    disabled: true,\r\n                    filterable: false,\r\n                    showColumn: false,\r\n                    renderControl: (currentEntity: IRepairCase) => {\r\n                        return <TextArea value={currentEntity?.Description} datatype=\"string\" disabled />;\r\n                    }\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    static contextType = AppContext;\r\n\r\n    onInitializing() {\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2\r\n        };\r\n\r\n        this.viewButtonTitle = () => {\r\n            let entity = this.selectedEntity!;\r\n            return entity.RepairationStatus === enmRepairationStatus.CustomerConfirmation ? \"مشاهده نتیجه بررسی و اعلام نظر\" : \"پیگیری درخواست\";\r\n        };\r\n\r\n        this.originalOrderings = () => [\r\n            { OrderBy: enmOrderingType.Ascending, Property: \"Status\" },\r\n            { OrderBy: enmOrderingType.Ascending, Property: \"RepairationStatus\" },\r\n            { OrderBy: enmOrderingType.Descending, Property: \"Id\" }\r\n        ];\r\n\r\n        this.onDataFetching = (fetchingInfo, onViewMode) => {\r\n            fetchingInfo.FetchingDetails = onViewMode;\r\n        };\r\n\r\n        this.extraHeaderNodes = () => {\r\n            return (\r\n                this.state.state === enmEntityManagerState.List && <Alert\r\n                    style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                    message={\r\n                        <>\r\n                            <span>مشتری گرامی، لطفا جهت مشاهده جزئیات و پیگیری درخواست، روی ردیف مورد نظر کلیک نمایید</span>\r\n                        </>\r\n                    }\r\n                    type=\"info\"\r\n                    icon={<InfoCircleFilled className=\"blink\" />}\r\n                    showIcon\r\n                />\r\n            );\r\n        };\r\n\r\n        this.extraViewNode = () => {\r\n\r\n            const { currentEntity, repairationSteps } = this.state;\r\n            if (!currentEntity)\r\n                return;\r\n\r\n            let steps: React.ReactNode[] = [];\r\n\r\n            if (currentEntity.RepairCaseAttachments.length || currentEntity.RepairCaseProblems.length) {\r\n                steps.push(\r\n                    <div key={\"RepairCaseMoreInfo\"} className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <Descriptions>\r\n                                    <Descriptions.Item><b>اطلاعات بیشتر</b></Descriptions.Item>\r\n                                    <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dayjs(currentEntity.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span></Descriptions.Item>\r\n                                    <Descriptions.Item label=\"کاربر\">{currentEntity?.CustomerEquipmentModel.Customer.FullName}</Descriptions.Item>\r\n                                </Descriptions>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n                                <div style={{ padding: 10 }}>\r\n\r\n                                    {!!currentEntity.RepairCaseProblems.length &&\r\n                                        <>\r\n                                            <p>مشکلات دستگاه:</p>\r\n                                            <ProblemsList key={'RepairCaseProblems'} items={currentEntity.RepairCaseProblems.map(p => p.EquipmentProblem.Problem)} />\r\n                                        </>\r\n                                    }\r\n                                    {!!currentEntity.RepairCaseAttachments.length &&\r\n                                        <>\r\n                                            <br />\r\n                                            <AttachmentViewer key={'RepairCaseAttachments'} attachments={currentEntity.RepairCaseAttachments.filter(a => !a.Tag)} />\r\n                                        </>\r\n                                    }\r\n\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n            }\r\n\r\n            let repairCaseCenterId: number | undefined = undefined;\r\n            currentEntity.RepairCaseCenters.forEach(repairCaseCenter => {\r\n                if (repairCaseCenter.Id !== repairCaseCenterId) {\r\n                    repairCaseCenterId = repairCaseCenter.Id;\r\n\r\n                    steps.push(\r\n                        <div key={(repairCaseCenter as any).RowGuid} className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <Descriptions>\r\n                                        <Descriptions.Item><b>بررسی و تخصیص کارشناس تعمیر</b></Descriptions.Item>\r\n                                        <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dayjs(repairCaseCenter.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span></Descriptions.Item>\r\n                                        <Descriptions.Item label=\"کاربر\">{repairCaseCenter.Creator?.FullName ?? 'مدیر سیستم'}</Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n\r\n                                    <RepairationComponents.AssignCenter\r\n                                        repairCase={this.state.currentEntity!}\r\n                                        repairCaseCenter={repairCaseCenter}\r\n                                        disabled={true}\r\n                                    />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n\r\n                    repairationSteps.filter(s => s.RepairCaseCenterId === repairCaseCenterId)\r\n                        .forEach((s, i) => {\r\n                            let title = repairationStatusOptions.find(o => o.value === s.Substatus)?.name;\r\n\r\n                            let repeatedStep = !!repairationSteps.find((v, vIndex) => v.Substatus === s.Substatus && i > vIndex);\r\n                            if (repeatedStep)\r\n                                title += ' (مجدد) ';\r\n                            let dateTime = dayjs(s.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\");\r\n                            let history: React.ReactNode;\r\n                            let formName = enmRepairationStatus[Number(s.Substatus)];\r\n                            let formProps: IRepairationActionProps<any> = {\r\n                                steps: repairationSteps,\r\n                                entity: s,\r\n                                disabled: true,\r\n                                repairCase: this.state.currentEntity!,\r\n                            };\r\n\r\n                            const Component = (RepairationComponents as any)[formName];\r\n                            if (Component) {\r\n\r\n                                history = (\r\n                                    <div style={{ padding: 20 }}>\r\n                                        <Component key={s.RowGuid} {...formProps} />\r\n                                    </div>\r\n                                );\r\n\r\n                                steps.push(\r\n                                    <div key={s.RowGuid} className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                                        <div className=\"box-title\">\r\n                                            <div className=\"caption\">\r\n                                                <Descriptions>\r\n                                                    <Descriptions.Item><b>{title}</b></Descriptions.Item>\r\n                                                    <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dateTime}</span></Descriptions.Item>\r\n                                                    <Descriptions.Item label=\"کاربر\">{s.Creator?.FullName ?? 'کارشناس پرونده خسارت'}</Descriptions.Item>\r\n                                                </Descriptions>\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"box-body form\">\r\n                                            <div className=\"form-body\">\r\n                                                {history}\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                );\r\n                            }\r\n                        });\r\n                }\r\n            });\r\n\r\n            let userFullName = currentEntity.CustomerEquipmentModel.Customer.FullName;\r\n\r\n            const { getUserInfo } = this.context as AppContextProps;\r\n            const { extraVariables } = getUserInfo()!;\r\n            const zobdehLocation: { Longitude?: number; Latitude?: number; Address?: string; WorkTime?: string; CityName?: string; Phone?: string; } = extraVariables['ZobdehLocation'];\r\n\r\n            const lastStep = repairationSteps[repairationSteps.length - 1];\r\n\r\n            if (currentEntity.Paid === true) {\r\n                const action = (\r\n                    <div style={{ padding: 20 }} ref={node => {\r\n                        if (!!node && this.state.state === enmEntityManagerState.View)\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                    }}>\r\n                        <RepairationComponents.Payment key={\"Payment\"}\r\n                            steps={steps}\r\n                            repairCase={currentEntity}\r\n                            disabled\r\n                            entity={{\r\n                                RepairCaseId: currentEntity.Id,\r\n                                PaymentReceiptDateTime: !!currentEntity.PaymentReceiptDateTime ? dayjs(new Date(currentEntity.PaymentReceiptDateTime)).calendar('jalali') : undefined,\r\n                                PaymentReceipts: currentEntity.RepairCaseAttachments.filter(a => !!a.Tag)\r\n                            }} />\r\n                    </div>\r\n                );\r\n\r\n                steps.push(\r\n                    <div key={\"Payment\"} className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <Descriptions>\r\n                                    <Descriptions.Item><b>پرداخت</b></Descriptions.Item>\r\n                                </Descriptions>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n                                {action}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n            }\r\n            if (currentEntity.Status === enmRepairCaseStatus.Repairation && currentEntity.RepairationStatus === enmRepairationStatus.RequestCheck) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            مشتری گرامی، آقا/خانم {userFullName} درخواست تعمیرات آزاد شما با شماره پیگیری {currentEntity.TicketNo} و شماره پرونده {currentEntity.Code} در پورتال شرکت زبده ثبت گردید. نتیجه در اسرع وقت از طریق پیام کوتاه به اطلاع شما خواهد رسید.\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"AssignCenter\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.Status === enmRepairCaseStatus.Rejected && currentEntity.RepairationStatus === enmRepairationStatus.Rejected) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            مشتری گرامی، آقا/خانم {userFullName} درخواست تعمیرات شماره {currentEntity.TicketNo} بررسی گردید، متأسفانه در حال حاضر قادر به ارائه خدمات به شما نیستیم. از اینکه ما را انتخاب کردید سپاسگزاریم.\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"AssignCenter\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.RepairationStatus === enmRepairationStatus.SendDevice) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <p>\r\n                            مشتری گرامی، آقا/خانم {userFullName} درخواست تعمیر شماره {currentEntity.TicketNo} بررسی و مورد تأیید است. خواهشمند است دستگاه آسیب دیده خود را به آدرس زیر ارسال نمایید\r\n                        </p>\r\n\r\n                        <CenterLocation {...zobdehLocation} />\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.RepairationStatus === enmRepairationStatus.Estimation) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <div>\r\n                            مشتری گرامی، آقا/خانم {userFullName} دستگاه شما با درخواست تعمیر {currentEntity.TicketNo} جهت بررسی و انجام اقدامات لازم دریافت گردید. نتیجه در اسرع وقت از طریق پیام کوتاه به شما اطلاع رسانی خواهد شد.\r\n                        </div>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.RepairationStatus === enmRepairationStatus.Rejected && currentEntity.Status === enmRepairCaseStatus.ReturnDevice) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <p>\r\n                            مشتری گرامی، آقا/خانم {userFullName} درخواست تعمیرات شماره {currentEntity.TicketNo} بررسی گردید، متأسفانه در حال حاضر قادر به ارائه خدمات به شما نیستیم. خواهشمند است با مراجعه به آدرس زیر نسبت به دریافت دستگاه اقدام نمایید\r\n                        </p>\r\n\r\n                        <CenterLocation {...zobdehLocation} />\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.RepairationStatus === enmRepairationStatus.CustomerConfirmation) {\r\n                const estimatedAmount = lastStep.EstimatedAmount;\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <div>\r\n                            <b>\r\n                                مشتری گرامی، آقا/خانم {userFullName} درخواست تعمیر شماره {currentEntity.TicketNo} برآورد هزینه گردید. طبق نظر کارشناس تعمیرات، هزینه  تعمیرات <span>{`${estimatedAmount}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}</span> ریال است. خواهشمند است در اسرع وقت نظر خود را در این خصوص اعلام نمایید.\r\n                            </b>\r\n                        </div>\r\n                    </div>\r\n                );\r\n\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n\r\n                const action = (\r\n                    <div key=\"CustomerConfirmation\" className=\"box box-blue\" style={{ marginBottom: 10 }}>\r\n                        <div className=\"box-title\">\r\n                            <div className=\"caption\">\r\n                                <Descriptions >\r\n                                    <Descriptions.Item style={{ padding: 10 }}><b>اعلام نظر مشتری</b></Descriptions.Item>\r\n                                </Descriptions>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"box-body form\">\r\n                            <div className=\"form-body\">\r\n                                <div style={{ padding: 0, direction: \"rtl\" }} ref={node => {\r\n                                    if (!!node && !this.state.loading) {\r\n                                        node.scrollIntoView({ behavior: \"smooth\" });\r\n                                    }\r\n                                }}>\r\n                                    <CustomerConfirmation\r\n                                        steps={repairationSteps}\r\n                                        repairCase={currentEntity!}\r\n                                        onClose={arg => arg && arg.preventBack === true ? this.view(this.state.currentEntity!.RowGuid) : this.back()}\r\n                                        onSubmit={async ({ data, url, contentType, headers, completeCallback }) => {\r\n                                            let fetchOpt: ICallOptions = {\r\n                                                url,\r\n                                                data,\r\n                                                contentType,\r\n                                                headers,\r\n                                                onSuccess: async (result: IResultSet<any>) => {\r\n                                                    completeCallback(result);\r\n                                                }\r\n                                            };\r\n                                            await this.callApi(fetchOpt);\r\n                                        }} />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n                steps.push(action);\r\n            }\r\n            else if (currentEntity.Status === enmRepairCaseStatus.ReturnDevice && currentEntity.RepairationStatus === enmRepairationStatus.CustomerRejected) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <p>\r\n                            مشتری گرامی، آقا/خانم {userFullName} با توجه به انصراف شما از تعمیرات خواهشمند است با مراجعه به آدرس زیر نسبت به دریافت دستگاه اقدام نمایید\r\n                        </p>\r\n\r\n                        <CenterLocation {...zobdehLocation} />\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.RepairationStatus === enmRepairationStatus.RepairationComplete) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            مشتری گرامی، آقا/خانم {userFullName} تعمیرات دستگاه شما انجام و در اسرع وقت نتیجه حضورتان از طریق پیام کوتاه اطلاع رسانی میگردد.\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.Status === enmRepairCaseStatus.ReturnDevice && currentEntity.RepairationStatus === enmRepairationStatus.Failed) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <p>\r\n                            مشتری گرامی، آقا/خانم {userFullName} درخواست تعمیرات به شماره {currentEntity.TicketNo} غیرقابل تعمیر است، خواهشمند است در اسرع وقت نسبت به دریافت دستگاه خود به آدرس زیر مراجعه نمایید\r\n                        </p>\r\n\r\n                        <CenterLocation {...zobdehLocation} />\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if ([enmRepairCaseStatus.Payment].indexOf(currentEntity.Status) > -1 && currentEntity.RepairationStatus === enmRepairationStatus.Completed) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            مشتری گرامی، آقا/خانم {userFullName} درخواست تعمیرات به شماره {currentEntity.TicketNo} انجام شد و مشکل دستگاه شما رفع گردیده است. خواهشمند است جهت دریافت دستگاه و پرداخت هزینه به آدرس زیر مراجعه نمایید\r\n                        </b>\r\n\r\n                        <CenterLocation {...zobdehLocation} />\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n            else if (currentEntity.RepairationStatus === enmRepairationStatus.Rejected && currentEntity.Status === enmRepairCaseStatus.ReturnDevice && currentEntity.DeviceReturned !== true) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <p>\r\n                            مشتری گرامی، آقا/خانم {userFullName} درخواست تعمیرات شماره {currentEntity.TicketNo} بررسی گردید، متأسفانه در حال حاضر قادر به ارائه خدمات به شما نیستیم. خواهشمند است با مراجعه به آدرس زیر نسبت به دریافت دستگاه اقدام نمایید\r\n                        </p>\r\n\r\n                        <CenterLocation {...zobdehLocation} />\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"CustomerPanelMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }} ref={node => {\r\n                        if (!!node && !this.state.loading) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n\r\n            if (currentEntity.Paid === true) {\r\n                let returnDate = !!currentEntity.PaymentReceiptDateTime \r\n                    ? dayjs(currentEntity.PaymentReceiptDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")\r\n                    : dayjs(currentEntity.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\");\r\n\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            هزینه تعمیرات در تاریخ <b>{returnDate}</b> پرداخت شد\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"PaymentMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n\r\n            if (currentEntity.DeviceReturned === true) {\r\n                let returnDate = dayjs(currentEntity.DeviceReturnedDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\");\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        {currentEntity.Paid === true\r\n                            ?\r\n                            <p>\r\n                                مشتری گرامی، آقا/خانم <b>{userFullName}</b> درخواست تعمیرات شماره <b>{currentEntity.TicketNo}</b> با موفقیت انجام و دستگاه در تاریخ <b>{returnDate}</b> تحویل مشتری گردید.  از اینکه ما را انتخاب کرده‌اید سپاسگزاریم\r\n                            </p>\r\n                            :\r\n                            <p>\r\n                                دستگاه در تاریخ <b>{returnDate}</b> به مشتری تحویل داده شد\r\n                            </p>\r\n                        }\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"DeviceReturnedMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n\r\n            if (currentEntity.Status === enmRepairCaseStatus.Archived) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            درخواست بسته شد\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = <div key={\"ClosedMessage\"} className=\"box\" style={{ marginBottom: 10 }}>\r\n                    <div style={{ direction: \"rtl\" }}>\r\n                        <Alert type=\"info\" style={{ marginTop: 10 }} message={messageNode} />\r\n                    </div>\r\n                </div>\r\n                steps.push(msg);\r\n            }\r\n\r\n            return (\r\n                <>\r\n                    {steps}\r\n                </>\r\n            );\r\n        };\r\n\r\n    }\r\n\r\n    onEntityView = (entity: IRepairCase) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"repaircasepolicyholder/getallrepairationsteps\",\r\n            data: { repairCaseId: entity.Id },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (!result.ValidationState.Successful)\r\n                    return;\r\n                this.setState({ state: enmEntityManagerState.View, currentEntity: entity, repairationSteps: result.Data.steps });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        this.callApi(fetchOpt);\r\n        return false;\r\n    }\r\n}","import { Alert, Button, Checkbox, Col, Descriptions, Form, Popconfirm } from \"antd\";\r\nimport { IRepairCase, IRepairCaseFetchingInfo, IRepairCaseInitialData, IRepairCaseProps, IRepairCaseStates, enmRepairCaseStatus, enmRepairationStatus, repairCaseStatusOptions, repairationStatusOptions, sendMethodsOptions } from \"../../baseInfo/repairCase/interfaces\";\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { IMetadata, IProperty, enmControlType, enmEntityManagerState, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport { AttachmentViewer } from \"../../baseInfo/attachment/attachmentViewer\";\r\nimport jalaliday from 'jalaliday';\r\nimport dayjs from 'dayjs';\r\nimport { ICallOptions, IResult, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { IRepairationActionProps } from \"./interfaces\";\r\nimport * as RepairationComponents from './components';\r\nimport React, { ReactNode } from \"react\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { ColumnFilter } from \"../../components/entityManager/columnfilter\";\r\nimport { ICenterProps } from \"../../baseInfo/center/interfaces\";\r\nimport { Center } from \"../../baseInfo/center\";\r\nimport { ComparisonFilter, enmConditionalOperators } from \"../../components/infrastructure/filtering\";\r\nimport { IExcelColumn } from \"antd-table-saveas-excel/app\";\r\nimport { FileExcelOutlined, PrinterOutlined } from '@ant-design/icons';\r\nimport { Excel } from \"antd-table-saveas-excel\";\r\nimport { Payment } from \"./components\";\r\nimport { IProblem } from \"../../baseInfo/problem/interfaces\";\r\nimport ReactToPrint, { PrintContextConsumer } from \"react-to-print\";\r\n\r\ndayjs.extend(jalaliday);\r\n\r\nconst ProblemsList = (props: { items: IProblem[] }) => {\r\n    const list = props.items.map(item =>\r\n        <Descriptions.Item key={item.Id} >\r\n            <Checkbox checked >\r\n                {item.Name}\r\n            </Checkbox>\r\n        </Descriptions.Item>);\r\n    return (\r\n        <Descriptions key=\"ProblemsList\" layout='horizontal' column={{ xxl: 5, xl: 4, lg: 3, md: 2, sm: 2, xs: 1 }}>\r\n            {list}\r\n        </Descriptions>\r\n    );\r\n}\r\n\r\nexport class RepairCaseCenter extends BaseEntityManager<IRepairCase, IRepairCaseProps, IRepairCaseStates, IRepairCaseFetchingInfo, IRepairCaseInitialData>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"پرونده های تعمیرات (آزاد)\",\r\n            name: \"RepairCaseCenter\",\r\n            Properties: [\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md', 'sm', 'xs']\r\n                },\r\n                {\r\n                    title: \"شماره پرونده\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: () => repairCaseStatusOptions.map(o => {\r\n                            if (o.value === enmRepairCaseStatus.Payment) {\r\n                                return { title: 'منتظر دریافت مبلغ تعمیرات', value: o.value };\r\n                            }\r\n                            return { title: o.title, value: o.value };\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    responsive: ['lg', 'md', 'sm', 'xs']\r\n                },\r\n                {\r\n                    title: \"وضعیت تعمیرات\",\r\n                    dataIndex: \"RepairationStatus\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: () => repairationStatusOptions.map(o => {\r\n                            return { title: o.centerCartableTitle, value: o.value, name: o.name };\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    sortable: false,\r\n                    width: 200,\r\n                    responsive: ['lg', 'md', 'sm']\r\n                },\r\n                {\r\n                    title: \"سریال یا IMEI دستگاه\",\r\n                    dataIndex: \"CustomerEquipmentModel.EquipmentSerialNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"کد ملی مشتری\",\r\n                    dataIndex: \"CustomerEquipmentModel.Customer.NationalCode\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md', 'sm']\r\n                },\r\n                {\r\n                    title: \"مشتری\",\r\n                    dataIndex: \"CustomerEquipmentModel.Customer.FullName\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"نوع تجهیز\",\r\n                    dataIndex: \"CustomerEquipmentModel.Equipment.Name\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 120,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"CustomerEquipmentModel.BrandTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"مدل\",\r\n                    dataIndex: \"CustomerEquipmentModel.EquipmentModelTitle\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"روش ارسال\",\r\n                    dataIndex: \"SendMethod\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: () => {\r\n                            return sendMethodsOptions.map(a => {\r\n                                return { name: a.name, title: a.name, value: a.value };\r\n                            });\r\n                        }\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"تاریخ درخواست\",\r\n                    dataIndex: \"CreateDateTime\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"توضیحات\",\r\n                    dataIndex: \"Description\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.template,\r\n                    disabled: true,\r\n                    filterable: false,\r\n                    showColumn: false,\r\n                    renderControl: (currentEntity: IRepairCase) => {\r\n                        return <TextArea value={currentEntity?.Description} datatype=\"string\" disabled />;\r\n                    },\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"شماره تماس مشتری\",\r\n                    dataIndex: \"EmergencyCallNumber\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    static contextType = AppContext;\r\n    private repairCenterFilterProp: IProperty = {\r\n        dataIndex: \"RepairCenter\",\r\n        controlType: enmControlType.lookup,\r\n        propertyType: enmPropertyType.number,\r\n        allowNull: true,\r\n        title: \"مرکز تعمیر\",\r\n        lookup: {\r\n            lookupComponent: Center,\r\n            lookupDisplayFields: [\"FullName\"],\r\n            dropdownDisplayFields: [\"FullName\", \"NationalCode\"],\r\n            lookupProperty: \"\"\r\n        }\r\n    }\r\n    private repairCenterFilterValue?: number;\r\n    private repairCenterFilterOperator?: enmConditionalOperators;\r\n\r\n    private showArchivesFilterProp: IProperty = {\r\n        dataIndex: \"ShowArchives\",\r\n        controlType: enmControlType.checkbox,\r\n        propertyType: enmPropertyType.boolean,\r\n        allowNull: true,\r\n        title: \"پرونده های بایگانی؟\"\r\n    };\r\n    private showArchivesFilterValue?: boolean = false;\r\n\r\n    executingCommand?: string;\r\n    onInitializing() {\r\n        this.extraFormNodeMarginTop = 5;\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2,\r\n            onReset: () => {\r\n                this.repairCenterFilterValue = undefined;\r\n                this.repairCenterFilterOperator = 0;\r\n                this.showArchivesFilterValue = false;\r\n            }\r\n        };\r\n\r\n        this.onBack = () => {\r\n            this.executingCommand = \"\";\r\n        };\r\n\r\n        this.viewButtonTitle = () => \"مشاهده پرونده تعمیر\";\r\n\r\n        this.onDataFetching = (fetchingInfo, onViewMode) => {\r\n            if (this.initialData?.Center?.Id === 1 && !!this.repairCenterFilterValue && this.repairCenterFilterOperator !== undefined) {\r\n                fetchingInfo.RepairCenterFilter = new ComparisonFilter(\"RepairCenter.Id\", this.repairCenterFilterOperator, this.repairCenterFilterValue);\r\n            }\r\n            else\r\n                fetchingInfo.RepairCenterFilter = undefined;\r\n            fetchingInfo.ShowArchives = this.showArchivesFilterValue;\r\n            fetchingInfo.FetchingDetails = onViewMode;\r\n        };\r\n\r\n        this.onLoaded = (initialData: IRepairCaseInitialData) => {\r\n            if (!this.searchArea)\r\n                return;\r\n\r\n            this.searchArea.render = () => {\r\n                const extraFilters: React.ReactNode[] = [];\r\n                if (initialData?.Center?.Id === 1) {\r\n                    const { dataIndex, title } = this.repairCenterFilterProp;\r\n                    const repairCenterFilterNode = (\r\n                        <Form.Item name={dataIndex} key={dataIndex} label={title}>\r\n                            <ColumnFilter\r\n                                parent={this}\r\n                                property={this.repairCenterFilterProp}\r\n                                onChange={currentFilter => {\r\n                                    this.repairCenterFilterValue = !!currentFilter?.value ? currentFilter.value[\"Id\"] : undefined;\r\n                                    this.repairCenterFilterOperator = currentFilter?.operator;\r\n                                }}\r\n                                preparelookupProps={(lookupProps: ICenterProps) => {\r\n                                    lookupProps.isRepairCenter = true;\r\n                                    return lookupProps;\r\n                                }}\r\n                            />\r\n                        </Form.Item>\r\n                    );\r\n                    extraFilters.push(repairCenterFilterNode);\r\n                }\r\n\r\n                const { dataIndex, title } = this.showArchivesFilterProp;\r\n                extraFilters.push(\r\n                    <Form.Item name={dataIndex} key={dataIndex} label={title}>\r\n                        <ColumnFilter\r\n                            parent={this}\r\n                            property={this.showArchivesFilterProp}\r\n                            onChange={currentFilter => {\r\n                                this.showArchivesFilterValue = currentFilter?.value;\r\n                            }}\r\n                            initialValue={{ value: false, operator: 0 }}\r\n                        />\r\n                    </Form.Item>\r\n                );\r\n                return extraFilters;\r\n            };\r\n        }\r\n\r\n        this.renderingToolbar = () => {\r\n            let result: ReactNode[] = [];\r\n            let entity = this.selectedEntity!;\r\n            const currentRepairCenter = entity.RepairCaseCenters[entity.RepairCaseCenters.length - 1];\r\n            if (this.initialData) {\r\n                if (this.initialData.AccessList[\"AssignCenter\"] && entity.Status === enmRepairCaseStatus.AssignCenter) {\r\n                    result.push(\r\n                        <Col key=\"AssignCenter\" style={{ marginLeft: 10 }}>\r\n                            <Button key=\"AssignCenter\" type=\"primary\" onClick={this.handleCommand}>بررسی و ارسال به کارشناس</Button>\r\n                        </Col>\r\n                    );\r\n                }\r\n                else if (this.initialData.Center?.Id === currentRepairCenter?.RepairCenterId && entity.Status === enmRepairCaseStatus.Repairation) {\r\n                    if (this.initialData.AccessList[\"RequestCheck\"] && entity.RepairationStatus === enmRepairationStatus.RequestCheck) {\r\n                        result.push(\r\n                            <Col key=\"RequestCheck\" style={{ marginLeft: 10 }}>\r\n                                <Button key=\"RequestCheck\" type=\"primary\" onClick={this.handleCommand}>بررسی درخواست</Button>\r\n                            </Col>\r\n                        );\r\n                    }\r\n                    else if (this.initialData.AccessList[\"ReceiveDevice\"] && entity.RepairationStatus === enmRepairationStatus.SendDevice) {\r\n                        result.push(\r\n                            <Col key=\"ReceiveDevice\" style={{ marginLeft: 10 }}>\r\n                                <Popconfirm okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} okText=\"بلی\" cancelText=\"خیر\" title=\"آیا دریافت دستگاه مورد تأیید است؟\"\r\n                                    onConfirm={this.receiveDevice}>\r\n                                    <Button key=\"ReceiveDevice\" type=\"primary\">دریافت دستگاه</Button>\r\n                                </Popconfirm>\r\n                            </Col>\r\n                        );\r\n                    }\r\n                    else if (this.initialData.AccessList[\"Estimation\"] && entity.RepairationStatus === enmRepairationStatus.Estimation) {\r\n                        result.push(\r\n                            <Col key=\"Estimation\" style={{ marginLeft: 10 }}>\r\n                                <Button key=\"Estimation\" type=\"primary\" onClick={this.handleCommand}>برآورد هزینه</Button>\r\n                            </Col>\r\n                        );\r\n                    }\r\n                    else if (this.initialData.AccessList[\"RepairationComplete\"] && entity.RepairationStatus === enmRepairationStatus.RepairationComplete) {\r\n                        result.push(\r\n                            <Col key=\"RepairationComplete\" style={{ marginLeft: 10 }}>\r\n                                <Button key=\"RepairationComplete\" type=\"primary\" onClick={this.handleCommand}>ثبت نتیجه تعمیرات</Button>\r\n                            </Col>\r\n                        );\r\n                    }\r\n                }\r\n                else if (this.initialData.Center?.Id === currentRepairCenter?.RepairCenterId && this.initialData.AccessList[\"Payment\"] && entity.Status === enmRepairCaseStatus.Payment) {\r\n                    result.push(\r\n                        <Col key=\"Payment\" style={{ marginLeft: 10 }}>\r\n                            <Button key=\"Payment\" type=\"primary\" onClick={this.handleCommand}>دریافت مبلغ تعمیرات</Button>\r\n                        </Col>\r\n                    );\r\n                }\r\n                else if (this.initialData.Center?.Id === currentRepairCenter?.RepairCenterId && this.initialData.AccessList[\"ReturnDevice\"] && entity.Status === enmRepairCaseStatus.ReturnDevice) {\r\n                    result.push(\r\n                        <Col key=\"ReturnDevice\" style={{ marginLeft: 10 }}>\r\n                            <Popconfirm okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} okText=\"بلی\" cancelText=\"خیر\" title=\"آیا دستگاه به مشتری تحویل داده شود؟\"\r\n                                onConfirm={this.returnDevice}>\r\n                                <Button key=\"ReturnDevice\" type=\"primary\">تحویل دستگاه به مشتری</Button>\r\n                            </Popconfirm>\r\n                        </Col>\r\n                    );\r\n                }\r\n                else if (this.initialData.AccessList[\"Archive\"] && [enmRepairCaseStatus.Completed, enmRepairCaseStatus.Rejected].indexOf(entity.Status) > -1) {\r\n                    result.push(\r\n                        <Col key=\"Archive\" style={{ marginLeft: 10 }}>\r\n                            <Popconfirm okButtonProps={{ size: \"middle\" }} cancelButtonProps={{ size: \"middle\" }} okText=\"بلی\" cancelText=\"خیر\" title=\"آیا پرونده بایگانی شود؟\"\r\n                                onConfirm={this.archive}>\r\n                                <Button key=\"Archive\" type=\"primary\">بایگانی</Button>\r\n                            </Popconfirm>\r\n                        </Col>\r\n                    );\r\n                }\r\n            }\r\n\r\n            return result.length ? (<> {result} </>) : (<></>);\r\n        }\r\n\r\n        this.extraViewNode = () => {\r\n            const { currentEntity, repairationSteps } = this.state;\r\n            if (!currentEntity)\r\n                return;\r\n\r\n            let steps: React.ReactNode[] = [];\r\n\r\n            if (currentEntity.RepairCaseAttachments.length || currentEntity.RepairCaseProblems.length) {\r\n                steps.push(\r\n                    <div key={\"RepairCaseMoreInfo\"} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                        <div className=\"box box-blue\" >\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <Descriptions>\r\n                                        <Descriptions.Item><b>اطلاعات بیشتر</b></Descriptions.Item>\r\n                                        <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dayjs(currentEntity.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span></Descriptions.Item>\r\n                                        <Descriptions.Item label=\"کاربر\">{currentEntity?.CustomerEquipmentModel.Customer.FullName}</Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n                                    <div style={{ padding: 10 }}>\r\n\r\n                                        {!!currentEntity.RepairCaseProblems.length &&\r\n                                            <>\r\n                                                <p>مشکل دستگاه:</p>\r\n                                                <ProblemsList key={'RepairCaseProblems'} items={currentEntity.RepairCaseProblems.map(p => p.EquipmentProblem.Problem)} />\r\n                                            </>\r\n                                        }\r\n                                        {!!currentEntity.RepairCaseAttachments.length &&\r\n                                            <>\r\n                                                <br />\r\n                                                <AttachmentViewer key={'RepairCaseAttachments'} attachments={currentEntity.RepairCaseAttachments.filter(a => !a.Tag)} />\r\n                                            </>\r\n                                        }\r\n\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n            }\r\n\r\n            let repairCaseCenterId: number | undefined = undefined;\r\n            currentEntity.RepairCaseCenters.forEach(repairCaseCenter => {\r\n                if (repairCaseCenter.Id !== repairCaseCenterId) {\r\n                    repairCaseCenterId = repairCaseCenter.Id;\r\n\r\n                    steps.push(\r\n                        <div key={(repairCaseCenter as any).RowGuid} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                            <div className=\"box box-blue\">\r\n                                <div className=\"box-title\">\r\n                                    <div className=\"caption\">\r\n                                        <Descriptions>\r\n                                            <Descriptions.Item><b>بررسی و تخصیص کارشناس تعمیر</b></Descriptions.Item>\r\n                                            <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dayjs(repairCaseCenter.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span></Descriptions.Item>\r\n                                            <Descriptions.Item label=\"کاربر\">{repairCaseCenter.Creator?.FullName ?? 'مدیر سیستم'}</Descriptions.Item>\r\n                                        </Descriptions>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"box-body form\">\r\n                                    <div className=\"form-body\">\r\n\r\n                                        <RepairationComponents.AssignCenter\r\n                                            repairCase={this.state.currentEntity!}\r\n                                            repairCaseCenter={repairCaseCenter}\r\n                                            disabled={true}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n\r\n                    repairationSteps.filter(s => s.RepairCaseCenterId === repairCaseCenterId)\r\n                        .forEach((s, i) => {\r\n                            let title = repairationStatusOptions.find(o => o.value === s.Substatus)?.name;\r\n\r\n                            let repeatedStep = !!repairationSteps.find((v, vIndex) => v.Substatus === s.Substatus && i > vIndex);\r\n                            if (repeatedStep)\r\n                                title += ' (مجدد) ';\r\n                            let dateTime = dayjs(s.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\");\r\n                            let history: React.ReactNode;\r\n                            let formName = enmRepairationStatus[Number(s.Substatus)];\r\n                            let formProps: IRepairationActionProps<any> = {\r\n                                steps: repairationSteps,\r\n                                entity: s,\r\n                                disabled: true,\r\n                                repairCase: this.state.currentEntity!,\r\n                            };\r\n\r\n                            const Component = (RepairationComponents as any)[formName];\r\n                            if (Component) {\r\n\r\n                                history = (\r\n                                    <div>\r\n                                        <Component key={s.RowGuid} {...formProps} />\r\n                                    </div>\r\n                                );\r\n\r\n                                steps.push(\r\n                                    <div key={s.RowGuid} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                                        <div className=\"box box-blue\">\r\n                                            <div className=\"box-title\">\r\n                                                <div className=\"caption\">\r\n                                                    <Descriptions>\r\n                                                        <Descriptions.Item><b>{title}</b></Descriptions.Item>\r\n                                                        <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dateTime}</span></Descriptions.Item>\r\n                                                        <Descriptions.Item label=\"کاربر\">{s.Creator?.FullName}</Descriptions.Item>\r\n                                                    </Descriptions>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className=\"box-body form\">\r\n                                                <div className=\"form-body\">\r\n                                                    {history}\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                );\r\n                            }\r\n                        });\r\n                }\r\n            });\r\n\r\n            if (this.executingCommand) {\r\n                let formProps: IRepairationActionProps<any> = {\r\n                    steps: repairationSteps,\r\n                    onClose: () => {\r\n                        this.back();\r\n                    },\r\n                    onSubmit: async ({ data, url, contentType, headers, completeCallback }) => {\r\n                        let fetchOpt: ICallOptions = {\r\n                            url,\r\n                            data,\r\n                            contentType,\r\n                            headers,\r\n                            onSuccess: async (result: IResultSet<any>) => {\r\n                                completeCallback(result);\r\n                                if (result.ValidationState.Successful)\r\n                                    await this.fetchData();\r\n                            }\r\n                        };\r\n                        await this.callApi(fetchOpt);\r\n                    },\r\n                    repairCase: this.state.currentEntity!,\r\n                };\r\n                const Component = (RepairationComponents as any)[this.executingCommand];\r\n                if (Component) {\r\n                    let title = this.executingCommand === \"AssignCenter\" ?\r\n                        repairCaseStatusOptions.find(o => enmRepairCaseStatus[Number(o.value)] === this.executingCommand)?.title :\r\n                        repairationStatusOptions.find(o => enmRepairationStatus[Number(o.value)] === this.executingCommand)?.name;\r\n\r\n                    const action = (\r\n                        <div style={{ padding: 20 }} ref={node => {\r\n                            if (!!node && this.state.state === enmEntityManagerState.View) {\r\n                                node.scrollIntoView({ behavior: \"smooth\" });\r\n                            }\r\n                        }}>\r\n                            <Component key={this.executingCommand} {...formProps} />\r\n                        </div>\r\n                    );\r\n\r\n                    steps.push(\r\n                        <div key={this.executingCommand} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                            <div className=\"box box-blue\">\r\n                                <div className=\"box-title\">\r\n                                    <div className=\"caption\">\r\n                                        <Descriptions>\r\n                                            <Descriptions.Item><b>{title}</b></Descriptions.Item>\r\n                                        </Descriptions>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"box-body form\">\r\n                                    <div className=\"form-body\">\r\n                                        {action}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n                }\r\n            }\r\n            else {\r\n                if (currentEntity.Paid === true) {\r\n                    const action = (\r\n                        <div style={{ padding: 20 }} ref={node => {\r\n                            if (!!node && this.state.state === enmEntityManagerState.View) {\r\n                                node.scrollIntoView({ behavior: \"smooth\" });\r\n                            }\r\n                        }}>\r\n                            <Payment key={\"Payment\"}\r\n                                steps={steps}\r\n                                repairCase={currentEntity}\r\n                                disabled\r\n                                entity={{\r\n                                    RepairCaseId: currentEntity.Id,\r\n                                    PaymentReceiptDateTime: !!currentEntity.PaymentReceiptDateTime ? dayjs(new Date(currentEntity.PaymentReceiptDateTime)).calendar('jalali') : undefined,\r\n                                    PaymentReceipts: currentEntity.RepairCaseAttachments.filter(a => !!a.Tag)\r\n                                }} />\r\n                        </div>\r\n                    );\r\n\r\n                    steps.push(\r\n                        <div key={\"Payment\"} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                            <div className=\"box box-blue\" >\r\n                                <div className=\"box-title\">\r\n                                    <div className=\"caption\">\r\n                                        <Descriptions>\r\n                                            <Descriptions.Item><b>دریافت مبلغ تعمیرات</b></Descriptions.Item>\r\n                                        </Descriptions>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"box-body form\">\r\n                                    <div className=\"form-body\">\r\n                                        {action}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n\r\n                    let returnDate = !!currentEntity.PaymentReceiptDateTime\r\n                        ? dayjs(currentEntity.PaymentReceiptDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")\r\n                        : dayjs(currentEntity.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\");\r\n\r\n                    const messageNode = (\r\n                        <div style={{ lineHeight: 2.2 }}>\r\n                            <b>\r\n                                هزینه تعمیرات در تاریخ <b>{returnDate}</b> دریافت شد\r\n                            </b>\r\n                        </div>\r\n                    );\r\n                    const msg = (\r\n                        <div key={\"PaymentMessage\"} style={{ padding: \"5px 0\" }}>\r\n                            <div className=\"box\" >\r\n                                <div style={{ direction: \"rtl\" }}>\r\n                                    <Alert type=\"info\" message={messageNode} />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n                    steps.push(msg);\r\n                }\r\n\r\n                if (currentEntity.DeviceReturned === true) {\r\n                    let returnDate = dayjs(currentEntity.DeviceReturnedDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\");\r\n                    const messageNode = (\r\n                        <div style={{ lineHeight: 2.2 }}>\r\n                            <b>\r\n                                دستگاه در تاریخ <b>{returnDate}</b> به مشتری تحویل داده شد\r\n                            </b>\r\n                        </div>\r\n                    );\r\n                    const msg = (\r\n                        <div key={\"DeviceReturnedMessage\"} style={{ padding: \"5px 0\" }}>\r\n                            <div className=\"box\" >\r\n                                <div style={{ direction: \"rtl\" }}>\r\n                                    <Alert type=\"info\" message={messageNode} />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n                    steps.push(msg);\r\n                }\r\n\r\n                if (currentEntity.Status === enmRepairCaseStatus.Archived) {\r\n                    const messageNode = (\r\n                        <div style={{ lineHeight: 2.2 }}>\r\n                            <b>\r\n                                درخواست بسته شد\r\n                            </b>\r\n                        </div>\r\n                    );\r\n                    const msg = (\r\n                        <div key={\"ClosedMessage\"} style={{ padding: \"5px 0\" }}>\r\n                            <div className=\"box\" >\r\n                                <div style={{ direction: \"rtl\" }}>\r\n                                    <Alert type=\"info\" message={messageNode} />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n                    steps.push(msg);\r\n                }\r\n            }\r\n\r\n            return (\r\n                <>\r\n                    {steps}\r\n                </>\r\n            );\r\n        };\r\n\r\n        this.extraHeaderButtons = () => {\r\n            let buttons: React.ReactNode[] = [];\r\n            if (this.initialData && this.initialData.AccessList[\"ExportToExcel\"]) {\r\n                buttons.push(\r\n                    <Button key=\"ExportToExcel\" type=\"primary\" onClick={this.exportToExcel} icon={<FileExcelOutlined />}>اکسل</Button>\r\n                );\r\n            }\r\n            if (this.state.state === enmEntityManagerState.View) {\r\n                buttons.push(\r\n                    <ReactToPrint key=\"printRepairCase\" content={() => this.viewRef ?? null} >\r\n                        <PrintContextConsumer>\r\n                            {({ handlePrint }) => (\r\n                                <Button key=\"printRepairCase\"\r\n                                    icon={<PrinterOutlined />}\r\n                                    style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '140px', marginRight: 10 }}\r\n                                    type=\"default\"\r\n                                    onClick={handlePrint}>\r\n                                    چاپ پرونده\r\n                                </Button>\r\n                            )}\r\n                        </PrintContextConsumer>\r\n                    </ReactToPrint>\r\n                );\r\n            }\r\n            return buttons;\r\n        };\r\n    }\r\n\r\n    handleCommand = async () => {\r\n        const { selectedEntity } = this;\r\n        if (!selectedEntity)\r\n            return;\r\n\r\n        if (selectedEntity.Status === enmRepairCaseStatus.AssignCenter)\r\n            this.executingCommand = \"AssignCenter\";\r\n        else if (selectedEntity.Status === enmRepairCaseStatus.Payment)\r\n            this.executingCommand = \"Payment\";\r\n        else\r\n            this.executingCommand = enmRepairationStatus[Number(selectedEntity.RepairationStatus)];\r\n\r\n        await this.view(selectedEntity.RowGuid);\r\n    }\r\n    receiveDevice = async () => {\r\n        const { selectedEntity } = this;\r\n        if (!selectedEntity)\r\n            return;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"repaircasecenter/receivedevice\",\r\n            data: { repairCaseId: selectedEntity.Id, rowVrsn: selectedEntity.RowVrsn },\r\n            onSuccess: async (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification(\"دستگاه با موفقیت دریافت شد\");\r\n                    await this.fetchData();\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    payment = async () => {\r\n        const { selectedEntity } = this;\r\n        if (!selectedEntity)\r\n            return;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"repaircasecenter/payment\",\r\n            data: { repairCaseId: selectedEntity.Id, rowVrsn: selectedEntity.RowVrsn },\r\n            onSuccess: async (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification(\"هزینه تعمیرات با موفقیت پرداخت شد\");\r\n                    await this.fetchData();\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    returnDevice = async () => {\r\n        const { selectedEntity } = this;\r\n        if (!selectedEntity)\r\n            return;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"repaircasecenter/returndevice\",\r\n            data: { repairCaseId: selectedEntity.Id, rowVrsn: selectedEntity.RowVrsn },\r\n            onSuccess: async (result: IResult) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification(\"دستگاه با موفقیت تحویل مشتری شد\");\r\n                    await this.fetchData();\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    archive = async () => {\r\n        const { selectedEntity } = this;\r\n        if (!selectedEntity)\r\n            return;\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"repaircasecenter/archive\",\r\n            data: { repairCaseId: selectedEntity.Id, rowVrsn: selectedEntity.RowVrsn },\r\n            onSuccess: async (result: IResult) => {\r\n                if (result.ValidationState.Successful) {\r\n                    Core.successNotification(\"پرونده بایگانی شد\");\r\n                    await this.fetchData();\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n    onEntityView = (entity: IRepairCase) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"repaircasecenter/getallrepairationsteps\",\r\n            data: { repairCaseId: entity.Id },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                this.setState({ state: enmEntityManagerState.View, currentEntity: entity, repairationSteps: result.Data.steps });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        this.callApi(fetchOpt);\r\n        return false;\r\n    }\r\n    getExcelColumns = (): IExcelColumn[] => {\r\n        return [\r\n            {\r\n                dataIndex: 'TicketNo',\r\n                title: 'شماره پیگیری',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'Code',\r\n                title: 'شماره پرونده',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'CustomerNationalCode',\r\n                title: 'کد ملی مشتری',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'CustomerFullName',\r\n                title: 'نام و نام خانوادگی مشتری',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'EquipmentName',\r\n                title: 'دستگاه/تجهیز',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'BrandName',\r\n                title: 'برند',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'EquipmentModelName',\r\n                title: 'مدل',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'Status',\r\n                title: 'وضعیت پرونده',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return repairCaseStatusOptions.find(s => s.value === record.Status)?.title;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'RepairationStatus',\r\n                title: 'وضعیت تعمیر',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return repairationStatusOptions.find(s => s.value === record.RepairationStatus)?.name;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'ProvinceName',\r\n                title: 'استان',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'CityName',\r\n                title: 'شهر',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'Problems',\r\n                title: 'مشکلات',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'CustomerDescription',\r\n                title: 'توضیحات مشتری',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'SendMethod',\r\n                title: 'نحوه ارسال دستگاه',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return sendMethodsOptions.find(s => s.value === record.SendMethod)?.name;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'AdminDescription',\r\n                title: 'توضیحات مدیر سیستم',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'SentToRepairCenterDateTime',\r\n                title: 'تاریخه ارسال به کارشناس',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.SentToRepairCenterDateTime ? dayjs(record.SentToRepairCenterDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : '';\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'ExpertRejectDescription',\r\n                title: 'علت رد درخواست توسط کارشناس',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'EstimationExpertFullName',\r\n                title: 'نام کارشناس',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'EstimationDateTime',\r\n                title: 'تاریخ برآورد هزینه',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.EstimationDateTime ? dayjs(record.EstimationDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : '';\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'EstimatedAmount',\r\n                title: 'مبلغ برآورد هزینه',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'ExpertFullName',\r\n                title: 'نام تعمیرکار',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'RepairationCompleteDateTime',\r\n                title: 'تاریخ پایان تعمیرات',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.RepairationCompleteDateTime ? dayjs(record.RepairationCompleteDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : null;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'PayableAmount',\r\n                title: 'مبلغ هزینه تعمیرات',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'DeviceReceivedDateTime',\r\n                title: 'تاریخ دریافت دستگاه از مشتری',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.DeviceReceivedDateTime ? dayjs(record.DeviceReceivedDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : null;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'DeviceReturnedDateTime',\r\n                title: 'تاریخ تحویل دستگاه به مشتری',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.DeviceReturnedDateTime ? dayjs(record.DeviceReturnedDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : null;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'PaymentDateTime',\r\n                title: 'تاریخ پرداخت',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.PaymentDateTime ? dayjs(record.PaymentDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : null;\r\n                }\r\n            }\r\n        ];\r\n    }\r\n    exportToExcel = async () => {\r\n\r\n        let fetchingInfo = this.getCurrentFetchingInfo();\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"repaircasecenter/exporttoexcel\",\r\n            data: { fetchingInfo },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    const data = result.Data as [];\r\n                    if (!data.length) {\r\n                        Core.warningNotification('اطلاعاتی یافت نشد');\r\n                        return;\r\n                    }\r\n                    const columns = this.getExcelColumns();\r\n                    const excel = new Excel();\r\n                    excel\r\n                        .addSheet(this.title)\r\n                        .addColumns(columns)\r\n                        .addDataSource(result.Data, {\r\n                            str2Percent: true\r\n                        })\r\n                        .saveAs(this.title + \".xlsx\");\r\n\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n}","import { Alert, Button, Checkbox, Descriptions, Form } from \"antd\";\r\nimport { IRepairCase, IRepairCaseFetchingInfo, IRepairCaseInitialData, IRepairCaseProps, IRepairCaseStates, enmRepairCaseStatus, enmRepairationStatus, repairCaseStatusOptions, repairationStatusOptions, sendMethodsOptions } from \"../../baseInfo/repairCase/interfaces\";\r\nimport { BaseEntityManager } from \"../../components/entityManager\";\r\nimport { IMetadata, IProperty, enmControlType, enmEntityManagerState, enmPropertyType } from \"../../components/entityManager/interfaces\";\r\nimport AppContext from \"../../components/infrastructure/appContext\";\r\nimport { AttachmentViewer } from \"../../baseInfo/attachment/attachmentViewer\";\r\nimport jalaliday from 'jalaliday';\r\nimport dayjs from 'dayjs';\r\nimport { ICallOptions, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { IRepairationActionProps } from \"./interfaces\";\r\nimport * as RepairationComponents from './components';\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport TextArea from \"antd/lib/input/TextArea\";\r\nimport { ColumnFilter } from \"../../components/entityManager/columnfilter\";\r\nimport { ICenterProps } from \"../../baseInfo/center/interfaces\";\r\nimport { Center } from \"../../baseInfo/center\";\r\nimport { ComparisonFilter, enmConditionalOperators } from \"../../components/infrastructure/filtering\";\r\nimport { IExcelColumn } from \"antd-table-saveas-excel/app\";\r\nimport { FileExcelOutlined, PrinterOutlined } from '@ant-design/icons';\r\nimport { Excel } from \"antd-table-saveas-excel\";\r\nimport { Payment } from \"./components\";\r\nimport { IProblem } from \"../../baseInfo/problem/interfaces\";\r\nimport ReactToPrint, { PrintContextConsumer } from \"react-to-print\";\r\n\r\ndayjs.extend(jalaliday);\r\n\r\nconst ProblemsList = (props: { items: IProblem[] }) => {\r\n    const list = props.items.map(item =>\r\n        <Descriptions.Item key={item.Id} >\r\n            <Checkbox checked >\r\n                {item.Name}\r\n            </Checkbox>\r\n        </Descriptions.Item>);\r\n    return (\r\n        <Descriptions key=\"ProblemsList\" layout='horizontal' column={{ xxl: 5, xl: 4, lg: 3, md: 2, sm: 2, xs: 1 }}>\r\n            {list}\r\n        </Descriptions>\r\n    );\r\n}\r\n\r\nexport class RepairCaseArchive extends BaseEntityManager<IRepairCase, IRepairCaseProps, IRepairCaseStates, IRepairCaseFetchingInfo, IRepairCaseInitialData>{\r\n    static initMetadata = (): IMetadata => {\r\n        return {\r\n            title: \"بایگانی پرونده های تعمیرات (آزاد)\",\r\n            name: \"RepairCaseArchive\",\r\n            Properties: [\r\n                {\r\n                    title: \"شماره پیگیری\",\r\n                    dataIndex: \"TicketNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md', 'sm', 'xs']\r\n                },\r\n                {\r\n                    title: \"شماره پرونده\",\r\n                    dataIndex: \"Code\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.numberinput,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"وضعیت پرونده\",\r\n                    dataIndex: \"Status\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: () => repairCaseStatusOptions.map(o => {\r\n                            if (o.value === enmRepairCaseStatus.Payment) {\r\n                                return { title: 'منتظر دریافت مبلغ تعمیرات', value: o.value };\r\n                            }\r\n                            return { title: o.title, value: o.value };\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 200,\r\n                    responsive: ['lg', 'md', 'sm', 'xs']\r\n                },\r\n                {\r\n                    title: \"وضعیت تعمیرات\",\r\n                    dataIndex: \"RepairationStatus\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: () => repairationStatusOptions.map(o => {\r\n                            return { title: o.centerCartableTitle, value: o.value, name: o.name };\r\n                        })\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    sortable: false,\r\n                    width: 200,\r\n                    responsive: ['lg', 'md', 'sm']\r\n                },\r\n                {\r\n                    title: \"سریال یا IMEI دستگاه\",\r\n                    dataIndex: \"CustomerEquipmentModel.EquipmentSerialNo\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"کد ملی مشتری\",\r\n                    dataIndex: \"CustomerEquipmentModel.Customer.NationalCode\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md', 'sm']\r\n                },\r\n                {\r\n                    title: \"مشتری\",\r\n                    dataIndex: \"CustomerEquipmentModel.Customer.FullName\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: false,\r\n                    sortable: false,\r\n                    width: 200,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"نوع تجهیز\",\r\n                    dataIndex: \"CustomerEquipmentModel.Equipment.Name\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    width: 120,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"برند\",\r\n                    dataIndex: \"CustomerEquipmentModel.Brand.Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"مدل\",\r\n                    dataIndex: \"CustomerEquipmentModel.EquipmentModel.Name\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    filterable: true,\r\n                    sortable: true,\r\n                    width: 120,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"روش ارسال\",\r\n                    dataIndex: \"SendMethod\",\r\n                    propertyType: enmPropertyType.number,\r\n                    controlType: enmControlType.combobox,\r\n                    combobox: {\r\n                        optionsFunc: () => {\r\n                            return sendMethodsOptions.map(a => {\r\n                                return { name: a.name, title: a.name, value: a.value };\r\n                            });\r\n                        }\r\n                    },\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"تاریخ درخواست\",\r\n                    dataIndex: \"CreateDateTime\",\r\n                    propertyType: enmPropertyType.date,\r\n                    controlType: enmControlType.date,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"توضیحات\",\r\n                    dataIndex: \"Description\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.template,\r\n                    disabled: true,\r\n                    filterable: false,\r\n                    showColumn: false,\r\n                    renderControl: (currentEntity: IRepairCase) => {\r\n                        return <TextArea value={currentEntity?.Description} datatype=\"string\" disabled />;\r\n                    },\r\n                    responsive: ['lg', 'md']\r\n                },\r\n                {\r\n                    title: \"شماره تماس مشتری\",\r\n                    dataIndex: \"EmergencyCallNumber\",\r\n                    propertyType: enmPropertyType.string,\r\n                    controlType: enmControlType.textbox,\r\n                    disabled: true,\r\n                    filterable: true,\r\n                    showColumn: false,\r\n                    width: 150,\r\n                    responsive: ['lg', 'md']\r\n                }\r\n            ]\r\n        };\r\n    }\r\n    static contextType = AppContext;\r\n    private repairCenterFilterProp: IProperty = {\r\n        dataIndex: \"RepairCenter\",\r\n        controlType: enmControlType.lookup,\r\n        propertyType: enmPropertyType.number,\r\n        allowNull: true,\r\n        title: \"مرکز تعمیر\",\r\n        lookup: {\r\n            lookupComponent: Center,\r\n            lookupDisplayFields: [\"FullName\"],\r\n            dropdownDisplayFields: [\"FullName\", \"NationalCode\"],\r\n            lookupProperty: \"\"\r\n        }\r\n    }\r\n    private repairCenterFilterValue?: number;\r\n    private repairCenterFilterOperator?: enmConditionalOperators;\r\n\r\n    onInitializing() {\r\n        this.extraFormNodeMarginTop = 5;\r\n        this.searchable = true;\r\n        this.searchArea = {\r\n            columnsPerRow: 2,\r\n            onReset: () => {\r\n                this.repairCenterFilterValue = undefined;\r\n                this.repairCenterFilterOperator = 0;\r\n            }\r\n        };\r\n\r\n        this.viewButtonTitle = () => \"مشاهده پرونده تعمیر\";\r\n\r\n        this.onDataFetching = (fetchingInfo, onViewMode) => {\r\n            if (this.initialData?.Center?.Id === 1 && !!this.repairCenterFilterValue && this.repairCenterFilterOperator !== undefined) {\r\n                fetchingInfo.RepairCenterFilter = new ComparisonFilter(\"RepairCenter.Id\", this.repairCenterFilterOperator, this.repairCenterFilterValue);\r\n            }\r\n            else\r\n                fetchingInfo.RepairCenterFilter = undefined;\r\n            fetchingInfo.FetchingDetails = onViewMode;\r\n        };\r\n\r\n        this.onLoaded = (initialData: IRepairCaseInitialData) => {\r\n            if (this.searchArea) {\r\n                let repairCenterFilterNode = <></>;\r\n                if (initialData?.Center?.Id === 1) {\r\n                    const { dataIndex, title } = this.repairCenterFilterProp;\r\n                    repairCenterFilterNode = (\r\n                        <Form.Item name={dataIndex} key={dataIndex} label={title}>\r\n                            <ColumnFilter\r\n                                parent={this}\r\n                                property={this.repairCenterFilterProp}\r\n                                onChange={currentFilter => {\r\n                                    this.repairCenterFilterValue = !!currentFilter?.value ? currentFilter.value[\"Id\"] : undefined;\r\n                                    this.repairCenterFilterOperator = currentFilter?.operator;\r\n                                }}\r\n                                preparelookupProps={(lookupProps: ICenterProps) => {\r\n                                    lookupProps.isRepairCenter = true;\r\n                                    return lookupProps;\r\n                                }}\r\n                            />\r\n                        </Form.Item>\r\n                    );\r\n                }\r\n                this.searchArea.render = () => {\r\n                    return [\r\n                        <>\r\n                            {repairCenterFilterNode}\r\n                        </>\r\n                    ];\r\n                };\r\n            }\r\n        }\r\n\r\n        this.extraViewNode = () => {\r\n            const { currentEntity, repairationSteps } = this.state;\r\n            if (!currentEntity)\r\n                return;\r\n\r\n            let steps: React.ReactNode[] = [];\r\n\r\n            if (currentEntity.RepairCaseAttachments.length || currentEntity.RepairCaseProblems.length) {\r\n                steps.push(\r\n                    <div key={\"RepairCaseMoreInfo\"} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                        <div className=\"box box-blue\">\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <Descriptions>\r\n                                        <Descriptions.Item><b>اطلاعات بیشتر</b></Descriptions.Item>\r\n                                        <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dayjs(currentEntity.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span></Descriptions.Item>\r\n                                        <Descriptions.Item label=\"کاربر\">{currentEntity?.CustomerEquipmentModel.Customer.FullName}</Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n                                    <div style={{ padding: 5 }}>\r\n\r\n                                        {!!currentEntity.RepairCaseProblems.length &&\r\n                                            <>\r\n                                                <p>مشکل دستگاه:</p>\r\n                                                <ProblemsList key={'RepairCaseProblems'} items={currentEntity.RepairCaseProblems.map(p => p.EquipmentProblem.Problem)} />\r\n                                            </>\r\n                                        }\r\n                                        {!!currentEntity.RepairCaseAttachments.length &&\r\n                                            <>\r\n                                                <br />\r\n                                                <AttachmentViewer key={'RepairCaseAttachments'} attachments={currentEntity.RepairCaseAttachments.filter(a => !a.Tag)} />\r\n                                            </>\r\n                                        }\r\n\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n            }\r\n\r\n            let repairCaseCenterId: number | undefined = undefined;\r\n            currentEntity.RepairCaseCenters.forEach(repairCaseCenter => {\r\n                if (repairCaseCenter.Id !== repairCaseCenterId) {\r\n                    repairCaseCenterId = repairCaseCenter.Id;\r\n\r\n                    steps.push(\r\n                        <div key={(repairCaseCenter as any).RowGuid} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                            <div className=\"box box-blue\" >\r\n                                <div className=\"box-title\">\r\n                                    <div className=\"caption\">\r\n                                        <Descriptions>\r\n                                            <Descriptions.Item><b>بررسی و تخصیص کارشناس تعمیر</b></Descriptions.Item>\r\n                                            <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dayjs(repairCaseCenter.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\")}</span></Descriptions.Item>\r\n                                            <Descriptions.Item label=\"کاربر\">{repairCaseCenter.Creator?.FullName ?? 'مدیر سیستم'}</Descriptions.Item>\r\n                                        </Descriptions>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"box-body form\">\r\n                                    <div className=\"form-body\">\r\n\r\n                                        <RepairationComponents.AssignCenter\r\n                                            repairCase={this.state.currentEntity!}\r\n                                            repairCaseCenter={repairCaseCenter}\r\n                                            disabled={true}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    );\r\n\r\n                    repairationSteps.filter(s => s.RepairCaseCenterId === repairCaseCenterId)\r\n                        .forEach((s, i) => {\r\n                            let title = repairationStatusOptions.find(o => o.value === s.Substatus)?.name;\r\n\r\n                            let repeatedStep = !!repairationSteps.find((v, vIndex) => v.Substatus === s.Substatus && i > vIndex);\r\n                            if (repeatedStep)\r\n                                title += ' (مجدد) ';\r\n                            let dateTime = dayjs(s.CreateDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\");\r\n                            let history: React.ReactNode;\r\n                            let formName = enmRepairationStatus[Number(s.Substatus)];\r\n                            let formProps: IRepairationActionProps<any> = {\r\n                                steps: repairationSteps,\r\n                                entity: s,\r\n                                disabled: true,\r\n                                repairCase: this.state.currentEntity!,\r\n                            };\r\n\r\n                            const Component = (RepairationComponents as any)[formName];\r\n                            if (Component) {\r\n\r\n                                history = (\r\n                                    <div>\r\n                                        <Component key={s.RowGuid} {...formProps} />\r\n                                    </div>\r\n                                );\r\n\r\n                                steps.push(\r\n                                    <div key={s.RowGuid} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                                        <div className=\"box box-blue\">\r\n                                            <div className=\"box-title\">\r\n                                                <div className=\"caption\">\r\n                                                    <Descriptions>\r\n                                                        <Descriptions.Item><b>{title}</b></Descriptions.Item>\r\n                                                        <Descriptions.Item label=\"تاریخ\"><span style={{ direction: \"ltr\", float: \"left\" }}>{dateTime}</span></Descriptions.Item>\r\n                                                        <Descriptions.Item label=\"کاربر\">{s.Creator?.FullName}</Descriptions.Item>\r\n                                                    </Descriptions>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className=\"box-body form\">\r\n                                                <div className=\"form-body\">\r\n                                                    {history}\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                );\r\n                            }\r\n                        });\r\n                }\r\n            });\r\n\r\n            if (currentEntity.Paid === true) {\r\n                const action = (\r\n                    <div style={{ padding: 20 }} ref={node => {\r\n                        if (!!node && this.state.state === enmEntityManagerState.View) {\r\n                            node.scrollIntoView({ behavior: \"smooth\" });\r\n                        }\r\n                    }}>\r\n                        <Payment key={\"Payment\"}\r\n                            steps={steps}\r\n                            repairCase={currentEntity}\r\n                            disabled\r\n                            entity={{\r\n                                RepairCaseId: currentEntity.Id,\r\n                                PaymentReceiptDateTime: !!currentEntity.PaymentReceiptDateTime ? dayjs(new Date(currentEntity.PaymentReceiptDateTime)).calendar('jalali') : undefined,\r\n                                PaymentReceipts: currentEntity.RepairCaseAttachments.filter(a => !!a.Tag)\r\n                            }} />\r\n                    </div>\r\n                );\r\n\r\n                steps.push(\r\n                    <div key={\"Payment\"} style={{ padding: \"5px 0\", pageBreakInside: \"avoid\" }}>\r\n                        <div className=\"box box-blue\">\r\n                            <div className=\"box-title\">\r\n                                <div className=\"caption\">\r\n                                    <Descriptions>\r\n                                        <Descriptions.Item><b>دریافت مبلغ تعمیرات</b></Descriptions.Item>\r\n                                    </Descriptions>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"box-body form\">\r\n                                <div className=\"form-body\">\r\n                                    {action}\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n\r\n                let returnDate = currentEntity.PaymentReceiptDateTime\r\n                    ? dayjs(currentEntity.PaymentReceiptDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\")\r\n                    : dayjs(currentEntity.PaymentDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\");\r\n\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            هزینه تعمیرات در تاریخ <b>{returnDate}</b> دریافت شد\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = (\r\n                    <div key={\"PaymentMessage\"} style={{ padding: \"5px 0\" }}>\r\n                        <div className=\"box\">\r\n                            <div style={{ direction: \"rtl\" }}>\r\n                                <Alert type=\"info\" message={messageNode} />\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n                steps.push(msg);\r\n            }\r\n\r\n            if (currentEntity.DeviceReturned === true) {\r\n                let returnDate = dayjs(currentEntity.DeviceReturnedDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD\");\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            دستگاه در تاریخ <b>{returnDate}</b> به مشتری تحویل داده شد\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = (\r\n                    <div key={\"DeviceReturnedMessage\"} style={{ padding: \"5px 0\" }}>\r\n                        <div className=\"box\" >\r\n                            <div style={{ direction: \"rtl\" }}>\r\n                                <Alert type=\"info\" message={messageNode} />\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n\r\n                steps.push(msg);\r\n            }\r\n\r\n            if (currentEntity.Status === enmRepairCaseStatus.Archived) {\r\n                const messageNode = (\r\n                    <div style={{ lineHeight: 2.2 }}>\r\n                        <b>\r\n                            درخواست بسته شد\r\n                        </b>\r\n                    </div>\r\n                );\r\n                const msg = (\r\n                    <div key={\"ClosedMessage\"} style={{ padding: \"5px 0\" }}>\r\n                        <div className=\"box\">\r\n                            <div style={{ direction: \"rtl\" }}>\r\n                                <Alert type=\"info\" message={messageNode} />\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                );\r\n                steps.push(msg);\r\n            }\r\n\r\n            return (\r\n                <>\r\n                    {steps}\r\n                </>\r\n            );\r\n        };\r\n\r\n        this.extraHeaderButtons = () => {\r\n            let buttons: React.ReactNode[] = [];\r\n            if (this.initialData && this.initialData.AccessList[\"ExportToExcel\"]) {\r\n                buttons.push(\r\n                    <Button key=\"ExportToExcel\" type=\"primary\" onClick={this.exportToExcel} icon={<FileExcelOutlined />}>اکسل</Button>\r\n                );\r\n            }\r\n            if (this.state.state === enmEntityManagerState.View) {\r\n                buttons.push(\r\n                    <ReactToPrint key=\"printRepairCase\" content={() => this.viewRef ?? null}>\r\n                        <PrintContextConsumer>\r\n                            {({ handlePrint }) => (\r\n                                <Button key=\"printRepairCase\"\r\n                                    icon={<PrinterOutlined />}\r\n                                    style={{ lineHeight: '0.5em', verticalAlign: 'middle', width: '140px', marginRight: 10 }}\r\n                                    type=\"default\"\r\n                                    onClick={handlePrint}>\r\n                                    چاپ پرونده\r\n                                </Button>\r\n                            )}\r\n                        </PrintContextConsumer>\r\n                    </ReactToPrint>\r\n                );\r\n            }\r\n            return buttons;\r\n        };\r\n    }\r\n\r\n    onEntityView = (entity: IRepairCase) => {\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"RepairCaseArchive/getallrepairationsteps\",\r\n            data: { repairCaseId: entity.Id },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                this.setState({ state: enmEntityManagerState.View, currentEntity: entity, repairationSteps: result.Data.steps });\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        this.callApi(fetchOpt);\r\n        return false;\r\n    }\r\n    getExcelColumns = (): IExcelColumn[] => {\r\n        return [\r\n            {\r\n                dataIndex: 'TicketNo',\r\n                title: 'شماره پیگیری',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'Code',\r\n                title: 'شماره پرونده',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'CustomerNationalCode',\r\n                title: 'کد ملی مشتری',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'CustomerFullName',\r\n                title: 'نام و نام خانوادگی مشتری',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'EquipmentName',\r\n                title: 'دستگاه/تجهیز',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'BrandName',\r\n                title: 'برند',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'EquipmentModelName',\r\n                title: 'مدل',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'Status',\r\n                title: 'وضعیت پرونده',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return repairCaseStatusOptions.find(s => s.value === record.Status)?.title;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'RepairationStatus',\r\n                title: 'وضعیت تعمیر',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return repairationStatusOptions.find(s => s.value === record.RepairationStatus)?.name;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'ProvinceName',\r\n                title: 'استان',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'CityName',\r\n                title: 'شهر',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'Problems',\r\n                title: 'مشکلات',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'CustomerDescription',\r\n                title: 'توضیحات مشتری',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'SendMethod',\r\n                title: 'نحوه ارسال دستگاه',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return sendMethodsOptions.find(s => s.value === record.SendMethod)?.name;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'AdminDescription',\r\n                title: 'توضیحات مدیر سیستم',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'SentToRepairCenterDateTime',\r\n                title: 'تاریخه ارسال به کارشناس',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.SentToRepairCenterDateTime ? dayjs(record.SentToRepairCenterDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : '';\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'ExpertRejectDescription',\r\n                title: 'علت رد درخواست توسط کارشناس',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'EstimationExpertFullName',\r\n                title: 'نام کارشناس',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'EstimationDateTime',\r\n                title: 'تاریخ برآورد هزینه',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.EstimationDateTime ? dayjs(record.EstimationDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : '';\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'EstimatedAmount',\r\n                title: 'مبلغ برآورد هزینه',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'ExpertFullName',\r\n                title: 'نام تعمیرکار',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'RepairationCompleteDateTime',\r\n                title: 'تاریخ پایان تعمیرات',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.RepairationCompleteDateTime ? dayjs(record.RepairationCompleteDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : null;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'PayableAmount',\r\n                title: 'مبلغ هزینه تعمیرات',\r\n                width: 200,\r\n            },\r\n            {\r\n                dataIndex: 'DeviceReceivedDateTime',\r\n                title: 'تاریخ دریافت دستگاه از مشتری',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.DeviceReceivedDateTime ? dayjs(record.DeviceReceivedDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : null;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'DeviceReturnedDateTime',\r\n                title: 'تاریخ تحویل دستگاه به مشتری',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.DeviceReturnedDateTime ? dayjs(record.DeviceReturnedDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : null;\r\n                }\r\n            },\r\n            {\r\n                dataIndex: 'PaymentDateTime',\r\n                title: 'تاریخ پرداخت',\r\n                width: 200,\r\n                render: (_, record) => {\r\n                    return !!record.PaymentDateTime ? dayjs(record.PaymentDateTime).calendar('jalali').locale('fa').format(\"YYYY/MM/DD HH:mm\") : null;\r\n                }\r\n            }\r\n        ];\r\n    }\r\n    exportToExcel = async () => {\r\n\r\n        let fetchingInfo = this.getCurrentFetchingInfo();\r\n\r\n        let fetchOpt: ICallOptions = {\r\n            url: \"RepairCaseArchive/exporttoexcel\",\r\n            data: { fetchingInfo },\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful) {\r\n                    const data = result.Data as [];\r\n                    if (!data.length) {\r\n                        Core.warningNotification('اطلاعاتی یافت نشد');\r\n                        return;\r\n                    }\r\n                    const columns = this.getExcelColumns();\r\n                    const excel = new Excel();\r\n                    excel\r\n                        .addSheet(this.title)\r\n                        .addColumns(columns)\r\n                        .addDataSource(result.Data, {\r\n                            str2Percent: true\r\n                        })\r\n                        .saveAs(this.title + \".xlsx\");\r\n\r\n                }\r\n            },\r\n            onError: () => {\r\n\r\n            }\r\n        };\r\n        await this.callApi(fetchOpt);\r\n    }\r\n}","import React, { CSSProperties } from 'react';\r\nimport { isMobile } from 'react-device-detect';\r\nimport { Badge, Layout, Menu } from 'antd';\r\nimport { Link } from 'react-router-dom';\r\nimport * as Icons from '@ant-design/icons';\r\nimport { IComponentItem } from '../components/infrastructure/models';\r\nimport AppContext, { AppContextProps } from '../components/infrastructure/appContext';\r\nimport * as AllComponents from './components';\r\nconst { SubMenu } = Menu;\r\nconst { Sider } = Layout;\r\n\r\ninterface NsMenuState {\r\n    rootSubmenuKeys: string[];\r\n    openKeys: string[];\r\n}\r\n\r\ninterface NsMenuProps {\r\n    selectedKey?: string | undefined;\r\n    components: IComponentItem[];\r\n}\r\n\r\nexport class MainMenu extends React.Component<NsMenuProps, NsMenuState> {\r\n    static contextType = AppContext;\r\n    static displayName = MainMenu.name;\r\n    mounted: boolean = false;\r\n\r\n    sider?: HTMLDivElement | null;\r\n\r\n    isSmallWindow: boolean = false;\r\n    constructor(props: NsMenuProps) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            rootSubmenuKeys: this.props.components.filter(m => m.ParentId === null).map(m => m.Id),\r\n            openKeys: []\r\n        };\r\n        this.isSmallWindow = isMobile || window.matchMedia('(max-width: 575px)').matches;\r\n    }\r\n    onDragEndMenu = (e: React.DragEvent<HTMLLIElement>, menuItem: IComponentItem) => {\r\n        document.elementFromPoint(e.clientX, e.clientY)?.closest(\"#content-container\")?.dispatchEvent(new CustomEvent('dragEndMenuItem', { detail: menuItem }));\r\n    }\r\n    renderMenu(parentid: string | null = null) {\r\n        let _self = this;\r\n        const { getPanelInfo } = this.context as AppContextProps;\r\n        const panelInfo = getPanelInfo();\r\n\r\n        return this.props.components.filter(c => c.ParentId === parentid && (!c.Path || ((AllComponents as any)[c.Item!.split('?')[0]])))\r\n            .map(c => {\r\n                const count = c.Path\r\n                    ? panelInfo && panelInfo.data.filter(d => d.key === c.Id).length\r\n                    : panelInfo && this.props.components.filter(s => s.ParentId === c.Id && !!panelInfo.data.find(d => d.key === s.Id))\r\n                        .map(s => panelInfo.data.filter(d => d.key === s.Id))\r\n                        .reduce((a, b) => a + b.length, 0);\r\n\r\n                const title = (\r\n                    <>\r\n                        {c.Title}\r\n                        {!!count && <Badge className=\"menuitem-badge\" size=\"small\" count={count}></Badge>}\r\n                    </>\r\n                );\r\n\r\n                return c.Path ?\r\n                    (\r\n                        <Menu.Item\r\n                            style={{ height: 32, lineHeight: \"32px\" }}\r\n                            key={c.Path}\r\n                            icon={_self.getIcon(c.Icon)}\r\n                            onDragEnd={e => this.onDragEndMenu(e, c)}\r\n                            draggable={true}\r\n                        >\r\n                            <Link\r\n                                key={c.Path}\r\n                                to={c.Id === \"Home\" ? \"/\" : '/refresh?' + encodeURIComponent(c.Path)}\r\n                                onClick={() => {\r\n                                    if (this.isSmallWindow) {\r\n                                        const { setSidebarCollapsed } = this.context as AppContextProps;\r\n                                        setSidebarCollapsed(true);\r\n                                    }\r\n                                }}\r\n                            >\r\n                                {title}\r\n                            </Link>\r\n                        </Menu.Item>)\r\n                    : <SubMenu key={c.Id} title={title} icon={_self.getIcon(c.Icon)}>{_self.renderMenu(c.Id)} </SubMenu>\r\n            });\r\n    }\r\n    getIcon(name?: string) {\r\n        const Icon = name ? (Icons as any)[name] : null;\r\n        if (Icon)\r\n            return <Icon />;\r\n    }\r\n    handleClickOutside = (event: MouseEvent) => {\r\n        if (!this.mounted)\r\n            return;\r\n\r\n        const { sidebarCollapsed } = this.context as AppContextProps;\r\n        if (this.sider && !this.sider.contains(event.target as any) && this.isSmallWindow && !sidebarCollapsed) {\r\n            let triggers = document.getElementsByClassName(\"trigger\");\r\n            if (triggers.length) {\r\n                let trigger = triggers[0] as any;\r\n                if (trigger.click)\r\n                    trigger.click();\r\n            }\r\n        }\r\n    }\r\n    componentDidMount() {\r\n        this.mounted = true;\r\n        document.addEventListener(\"mousedown\", this.handleClickOutside);\r\n\r\n        const { getUserInfo } = this.context as AppContextProps;\r\n        const userInfo = getUserInfo();\r\n\r\n        const defautltOpenMenu = userInfo?.extraVariables[\"PolicyholderId\"] ? ['PolicyholderPortal'] : [];\r\n        if (defautltOpenMenu.length)\r\n            this.setState({ openKeys: defautltOpenMenu });\r\n        else\r\n            this.forceUpdate();\r\n    }\r\n    componentWillUnmount() {\r\n        this.mounted = false;\r\n        document.removeEventListener(\"mousedown\", this.handleClickOutside);\r\n    }\r\n    onOpenChange = (keys: string[]) => {\r\n        const latestOpenKey = keys.find(key => this.state.openKeys.indexOf(key) === -1)!;\r\n        if (this.state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {\r\n            this.setState({ openKeys: keys });\r\n        } else {\r\n            this.setState({ openKeys: latestOpenKey ? [latestOpenKey] : [] });\r\n        }\r\n    }\r\n    render() {\r\n        if (!this.mounted)\r\n            return <></>;\r\n\r\n        const { path } = this.context;\r\n        const collapseWidth = this.isSmallWindow ? 0 : undefined;\r\n        const style: CSSProperties | undefined = this.isSmallWindow ? { position: \"absolute\", height: \"100vh\", zIndex: 1001 } : {};\r\n\r\n        const { sidebarCollapsed } = this.context as AppContextProps;\r\n\r\n        return (\r\n            <Sider\r\n                ref={node => this.sider = node}\r\n                trigger={null}\r\n                collapsible\r\n                collapsed={sidebarCollapsed}\r\n                className=\"custom-scroll\"\r\n                style={{ maxWidth: 300, overflowX: 'auto', ...style }}\r\n                width={sidebarCollapsed ? undefined : \"max-content\"}\r\n                collapsedWidth={collapseWidth}\r\n                breakpoint=\"lg\"\r\n                onBreakpoint={broken => {\r\n                    const { setSidebarCollapsed } = this.context as AppContextProps;\r\n                    setSidebarCollapsed(broken);\r\n                }}\r\n                onCollapse={(collapsed, _type) => {\r\n                    const { setSidebarCollapsed } = this.context as AppContextProps;\r\n                    setSidebarCollapsed(collapsed);\r\n                }}\r\n\r\n            >\r\n                <Menu theme=\"dark\"\r\n                    mode=\"inline\"\r\n                    style={{ width: \"100%\" }}\r\n                    openKeys={this.state.openKeys}\r\n                    onOpenChange={this.onOpenChange}\r\n                    defaultSelectedKeys={[path ?? '/']}\r\n                >\r\n                    {this.renderMenu()}\r\n                </Menu>\r\n            </Sider>\r\n        );\r\n    }\r\n}\r\n","import { Component } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport AppContext, { AppContextProps } from '../components/infrastructure/appContext';\r\nimport { Core } from '../components/infrastructure/core';\r\n\r\ninterface IErrorBoundaryProps {\r\n\r\n}\r\ninterface IErrorBoundaryStates {\r\n    hasError: boolean;\r\n}\r\n\r\nexport class ErrorBoundary extends Component<IErrorBoundaryProps, IErrorBoundaryStates> {\r\n    static contextType = AppContext;\r\n    constructor(props: IErrorBoundaryProps) {\r\n        super(props);\r\n        this.state = { hasError: false };\r\n    }\r\n    static getDerivedStateFromError() {\r\n        return { hasError: true };\r\n    }\r\n    componentDidCatch(error: any, errorInfo: any) {\r\n        if (process.env.NODE_ENV === 'production') {\r\n            const { path, params } = this.context as AppContextProps;\r\n            const referenceUrl = Core.getUrl(path, params);\r\n            Core.logError(referenceUrl, error.message, error.stack);\r\n            this.setState({ hasError: true });\r\n        }\r\n        else\r\n            console.error(error, errorInfo);\r\n    }\r\n    render() {\r\n        if (this.state.hasError) {\r\n            const { path, params } = this.context as AppContextProps;\r\n            let returnUrl = '';\r\n            const url = Core.getUrl(path, params);\r\n            if (url !== '')\r\n                returnUrl = '?returnUrl=' + url;\r\n            let errorPageUrl = '/errorpage';\r\n            return (<Redirect to={{ pathname: errorPageUrl, search: returnUrl }} />);\r\n        }\r\n        return this.props.children;\r\n    }\r\n}\r\n\r\n","import { Tooltip } from 'antd';\r\nimport { useState, useEffect, useRef } from 'react';\r\n\r\nconst BackTopButton = () => {\r\n    const [showButton, setShowButton] = useState(false);\r\n    const lastPosition = useRef(0);\r\n\r\n    const scrollToTop = () => {\r\n        const container = document.getElementById('content-container');\r\n        container?.scrollTo({ top: 0, behavior: 'smooth' });\r\n    };\r\n\r\n    useEffect(() => {\r\n        const container = document.getElementById('content-container');\r\n        const checkScrollHeight = () => {\r\n            if (!container)\r\n                return;\r\n            if (!showButton && container.scrollTop > 100 && container.scrollTop < lastPosition.current)\r\n                setShowButton(true);\r\n            else if (showButton && (container.scrollTop < 100 || container.scrollTop > lastPosition.current))\r\n                setShowButton(false);\r\n            lastPosition.current = container.scrollTop;\r\n        };\r\n        container?.addEventListener('scroll', checkScrollHeight);\r\n        return () => {\r\n            container?.removeEventListener('scroll', checkScrollHeight);\r\n        };\r\n    }, [showButton]);\r\n\r\n    return (\r\n        <Tooltip title=\"برگشتن به بالای صفحه\" placement=\"rightTop\">\r\n            <span className=\"backTopButtonContainer\" style={{ display: showButton ? 'flex' : 'none' }} onClick={scrollToTop}>\r\n                <svg\r\n                    width={24}\r\n                    height={24}\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"#ffffff\"\r\n                    strokeWidth={2}\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                >\r\n                    <path d=\"M12 19V5M5 12l7-7 7 7\" />\r\n                </svg>\r\n            </span>\r\n        </Tooltip>\r\n    );\r\n};\r\n\r\nexport default BackTopButton;","import * as signalR from \"@microsoft/signalr\";\r\n\r\nconst URL = !process.env.NODE_ENV || process.env.NODE_ENV === 'development' ? 'http://localhost:5037/api/userpanelhub' : '/api/userpanelhub';\r\n\r\nexport interface IUserPanelHubDto {\r\n    MessageGuid?: any;\r\n    Data: {\r\n        [key: string]: { Message: string; Id: number; RowGuid: any; Path: string; }[]\r\n    };\r\n}\r\n\r\nexport class UserPanelHubConnector {\r\n    private connection: signalR.HubConnection;\r\n    public subscribeEvents: (onMessageReceived: (data: IUserPanelHubDto) => void) => void;\r\n    public unsubscribeEvents: () => void;\r\n    static instance?: UserPanelHubConnector;\r\n    constructor() {\r\n        this.connection = new signalR.HubConnectionBuilder()\r\n            .withUrl(URL, {\r\n                skipNegotiation: true,\r\n                transport: signalR.HttpTransportType.WebSockets\r\n            })\r\n            .withAutomaticReconnect()\r\n            .build();\r\n        this.connection.start().catch(err => console.error(err));\r\n        this.subscribeEvents = onMessageReceived => {\r\n            this.connection.on(\"messageReceived\", data => {\r\n                onMessageReceived(JSON.parse(data));\r\n            });\r\n        };\r\n        this.unsubscribeEvents = () => {\r\n            this.connection.off(\"messageReceived\");\r\n            this.connection.stop();\r\n        };\r\n    }\r\n}\r\n","import { Alert, Badge, Drawer, message, Tooltip } from \"antd\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faMessage } from '@fortawesome/free-solid-svg-icons';\r\nimport { useContext, useEffect, useRef, useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Core } from \"../components/infrastructure/core\";\r\nimport { IPanelInfo, IPanelMessage, IResultSet } from \"../components/infrastructure/models\";\r\nimport { UserPanelHubConnector, IUserPanelHubDto } from '../components/signalR/signalRUserPanelConnection';\r\nimport AppContext, { AppContextProps } from \"../components/infrastructure/appContext\";\r\nimport { InfoCircleOutlined } from '@ant-design/icons';\r\n\r\nconst PnlMsg = (props: IPanelMessage) => {\r\n    let { content }: any = props;\r\n\r\n    const numbers = content.match(/\\d+/g);\r\n    for (let i = 0; i < numbers.length; i++) {\r\n        if (!!numbers[i] && numbers[i].length >= 6)\r\n            content = content.replace(numbers[i], `<b>${numbers[i]}</b>`);\r\n        if (i === numbers.length - 1)\r\n            content = Core.decode(content);\r\n    }\r\n\r\n    return (\r\n        <Alert\r\n            key={props.rowGuid}\r\n            style={{ padding: 5, marginBottom: 6, boxShadow: 'rgb(0 0 0 / 12%) 0px 0px 5px 2px' }}\r\n            description={content}\r\n            type={\"info\"}\r\n            icon={<InfoCircleOutlined style={{ fontSize: 16 }} />}\r\n            showIcon\r\n        />\r\n    );\r\n}\r\n\r\nconst UserPanel = () => {\r\n    const { getPanelInfo, setPanelInfo, getUserInfo } = useContext<AppContextProps>(AppContext);\r\n    const panelInfo = getPanelInfo();\r\n    const userInfo = getUserInfo();\r\n\r\n    const [drawerCollapsed, setDrawerCollapsed] = useState(true);\r\n    const selectedMessageId = useRef<any>(undefined);\r\n    const panelInfoRef = useRef<IPanelInfo>(panelInfo);\r\n\r\n    const changeDrawerCollapse = () => {\r\n        setDrawerCollapsed(!drawerCollapsed);\r\n    }\r\n\r\n    const subscribeUserPanelHubEvanthandler = (userPanelHubDto: IUserPanelHubDto) => {\r\n        if (!!userPanelHubDto.MessageGuid) {\r\n            let messageContent = null;\r\n            for (var key in userPanelHubDto.Data) {\r\n                let msg = userPanelHubDto.Data[key].find(m => m.RowGuid === userPanelHubDto.MessageGuid);\r\n                if (!!msg)\r\n                    messageContent = msg.Message;\r\n            }\r\n\r\n            if (!!messageContent)\r\n                showNotification(userPanelHubDto.MessageGuid, messageContent);\r\n\r\n            message.info({\r\n                content: messageContent ?? 'پیام جدید دارید',\r\n                style: { cursor: 'pointer' },\r\n                onClick: () => {\r\n                    selectedMessageId.current = userPanelHubDto.MessageGuid;\r\n                    if (drawerCollapsed)\r\n                        changeDrawerCollapse();\r\n                }\r\n            });\r\n        }\r\n\r\n        setUserPanelNotification(userPanelHubDto.Data);\r\n    }\r\n\r\n    const getUserPanelWaitingDamageCasesCount = async () => {\r\n\r\n        await Core.callApi({\r\n            url: `home/getWaitingNotifications`,\r\n            onSuccess: (result: IResultSet<any>) => {\r\n                if (result.ValidationState.Successful)\r\n                    setUserPanelNotification(result.Data);\r\n            }\r\n        });\r\n    }\r\n\r\n    const setUserPanelNotification = (data: { [key: string]: { Message?: string; Id?: number; RowGuid: any; Path: string; }[] }) => {\r\n\r\n        let newData = [];\r\n\r\n        for (let key in data) {\r\n            for (let i = 0; i < data[key].length; i++) {\r\n                newData.push({ key, ...data[key][i] });\r\n            }\r\n        }\r\n\r\n        panelInfoRef.current.data = newData;\r\n        setPanelInfo(panelInfoRef.current);\r\n    }\r\n\r\n    const notify = (messageGuid: any, messageContent: string) => {\r\n        var options: NotificationOptions = {\r\n            body: messageContent ?? 'پیام جدید دارید',\r\n            dir: 'rtl',\r\n            vibrate: 1,\r\n            icon: '/logo.png',\r\n        };\r\n\r\n        const notification = new Notification('شرکت خدمات تجهیزات الکترونیک زبده', options);\r\n        notification.onclick = function () {\r\n            window.parent.focus();\r\n            notification.close();\r\n            setTimeout(() => {\r\n                selectedMessageId.current = messageGuid;\r\n                if (drawerCollapsed)\r\n                    changeDrawerCollapse();\r\n            }, 100);\r\n        }\r\n    };\r\n\r\n    const showNotification = (messageGuid: any, messageContent: string) => {\r\n        if (\"Notification\" in window) {\r\n            Notification.requestPermission()\r\n                .then(permission => {\r\n                    if (permission === \"granted\" && document.visibilityState !== \"visible\")\r\n                        notify(messageGuid, messageContent);\r\n                });\r\n        }\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (!userInfo?.extraVariables[\"EvaluatorId\"] && !userInfo?.extraVariables[\"PolicyholderId\"])\r\n            return;\r\n\r\n        const { subscribeEvents, unsubscribeEvents } = new UserPanelHubConnector();\r\n        subscribeEvents(subscribeUserPanelHubEvanthandler);\r\n\r\n        getUserPanelWaitingDamageCasesCount();\r\n\r\n        return () => {\r\n            setPanelInfo({ data: [] });\r\n            unsubscribeEvents();\r\n        }\r\n    }, []);\r\n\r\n    const msgs = panelInfo.data.filter(m => !!m.Id && !!m.Message).map(message => {\r\n        return {\r\n            content: message.Message!, id: message.Id!, rowGuid: message.RowGuid, link: '/refresh?' + encodeURIComponent(`/${message.Path}?defaultId=${message.Id}`)\r\n        } as IPanelMessage\r\n    });\r\n\r\n    const messages = msgs.map(m =>\r\n        <div key={m.rowGuid}>\r\n            {\r\n                m.link ?\r\n                    <Tooltip title=\"برای مشاهده کلیک نمایید\" >\r\n                        <Link\r\n                            to={m.link}\r\n                            onClick={changeDrawerCollapse}\r\n                            ref={node => {\r\n                                if (node && !drawerCollapsed && m.rowGuid === selectedMessageId.current) {\r\n                                    selectedMessageId.current = undefined;\r\n                                    node.click();\r\n                                }\r\n                            }}\r\n                        >\r\n                            <PnlMsg {...m} />\r\n                        </Link>\r\n                    </Tooltip>\r\n                    :\r\n                    <PnlMsg {...m} />\r\n            }\r\n        </div>\r\n    );\r\n    return (\r\n        <>\r\n            {\r\n                msgs.length > 0 &&\r\n                <Tooltip title=\"پیامها\">\r\n                    <Badge count={msgs.length} size=\"small\">\r\n                        <FontAwesomeIcon icon={faMessage} size={'2x'} onClick={changeDrawerCollapse} style={{ verticalAlign: 'middle', cursor: 'pointer' }} />\r\n                    </Badge>\r\n                </Tooltip>\r\n            }\r\n            <Drawer\r\n                title=\"پیامها\"\r\n                placement={'left'}\r\n                closable={true}\r\n                onClose={changeDrawerCollapse}\r\n                visible={!drawerCollapsed}\r\n                key={'notification-drawer'}\r\n                bodyStyle={{ padding: 0 }}\r\n            >\r\n                <div className=\"custom-scroll\" style={{ padding: 6, height: \"100%\" }}>\r\n                    {messages}\r\n                </div>\r\n            </Drawer>\r\n        </>\r\n    );\r\n};\r\n\r\nexport default UserPanel;","import React from \"react\";\r\nimport { Avatar, Dropdown, Layout, Menu, Space, Image, Tooltip, Popconfirm, Button } from 'antd';\r\nimport { MainMenu } from \"./mainmenu\";\r\nimport { MenuUnfoldOutlined, MenuFoldOutlined, UserOutlined, KeyOutlined, DownOutlined, UserDeleteOutlined } from '@ant-design/icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faSignOutAlt, faUserAlt } from '@fortawesome/free-solid-svg-icons';\r\nimport 'antd/dist/antd.css';\r\nimport { Link, Redirect, Route, RouteComponentProps, Switch } from \"react-router-dom\";\r\nimport { ICallOptions } from \"../components/infrastructure/models\";\r\nimport * as AllComponents from './components';\r\nimport { BaseComponent, IBaseProps, IBaseStates } from \"../components/infrastructure/baseComponent\";\r\nimport CustomSpinner from \"../components/infrastructure/customSpinner\";\r\nimport AppContext, { AppContextProps } from \"../components/infrastructure/appContext\";\r\nimport { ErrorBoundary } from \"./errorBoundary\";\r\nimport { Core } from \"../components/infrastructure/core\";\r\nimport BackTopButton from \"../components/backTopButton\";\r\nimport UserPanel from \"./userPanel\";\r\n\r\nconst { Header, Content, Footer } = Layout;\r\n\r\ninterface NsLayoutState extends IBaseStates {\r\n    drawerCollapsed: boolean;\r\n}\r\n\r\ninterface NsLayoutProps extends IBaseProps {\r\n    children?: React.ReactNode;\r\n}\r\n\r\nexport class MainLayout extends BaseComponent<NsLayoutProps, NsLayoutState> {\r\n    static displayName = Layout.name;\r\n    static contextType = AppContext;\r\n    mounted: boolean = false;\r\n    logo?: HTMLImageElement | null;\r\n    constructor(props: NsLayoutProps) {\r\n        super(props)\r\n        this.state = {\r\n            loading: true,\r\n            isAuthorized: true,\r\n            windowSize: window.innerWidth <= 765 ? 1 : 2,\r\n            drawerCollapsed: true\r\n        };\r\n    }\r\n    toggle = () => {\r\n        const { sidebarCollapsed, setSidebarCollapsed } = this.context as AppContextProps;\r\n        setSidebarCollapsed(!sidebarCollapsed);\r\n    };\r\n    componentDidMount() {\r\n        this.mounted = true;\r\n        super.componentDidMount();\r\n        this.getMenu();\r\n    }\r\n    componentDidUpdate() {\r\n        const { sidebarCollapsed } = this.context as AppContextProps;\r\n        if (this.logo) {\r\n            if (sidebarCollapsed)\r\n                this.logo.classList.add(\"fadeOut\");\r\n            else\r\n                this.logo.classList.add(\"fadeIn\");\r\n        }\r\n    }\r\n    componentWillUnmount() {\r\n        this.mounted = false;\r\n        super.componentWillUnmount();\r\n    }\r\n    getMenu = async () => {\r\n        const { setInfo } = this.context as AppContextProps;\r\n        let opt: ICallOptions = {\r\n            url: 'home/getmenu',\r\n            onSuccess: (result) => {\r\n                if (result.ValidationState.Successful) {\r\n                    const { MenuItems, UserInfo } = (result as any).Data;\r\n                    setInfo(MenuItems, UserInfo);\r\n                }\r\n            },\r\n            onComplete: () => {\r\n                const { getUserInfo } = this.context as AppContextProps;\r\n                if (!getUserInfo || !getUserInfo())\r\n                    this.setState({ isAuthorized: false });\r\n            }\r\n        };\r\n\r\n        await this.callApi(opt);\r\n    }\r\n    removeAccount = async () => {\r\n        let opt: ICallOptions = {\r\n            url: 'user/removeaccount',\r\n            onSuccess: (result) => {\r\n                if (result.ValidationState.Successful) {\r\n                    window.location.replace(\"/\");\r\n                }\r\n            }\r\n        };\r\n\r\n        await this.callApi(opt);\r\n    }\r\n    virtualRender() {\r\n        if (!this.mounted)\r\n            return <></>;\r\n\r\n        if (this.state.loading)\r\n            return (<div className=\"center\" style={{ minHeight: \"100vh\" }}><CustomSpinner /></div>);\r\n\r\n        const { getMenuItems, getUserInfo } = this.context as AppContextProps;\r\n        const menuItems = getMenuItems();\r\n        const { userFullName, extraVariables, profilePicturePath } = getUserInfo()!;\r\n\r\n        const isPolicyholder = extraVariables[\"PolicyholderId\"];\r\n        //const isPolicyholder = extraVariables[\"IsPolicyholder\"];\r\n\r\n        const menu = (\r\n            <Menu style={{ width: \"auto\" }}>\r\n                <Menu.Item key=\"username\">\r\n                    <div style={{ marginLeft: 10, fontWeight: \"bold\" }}>\r\n                        {userFullName}\r\n                    </div>\r\n                </Menu.Item>\r\n                <Menu.Item key=\"profile\" icon={<UserOutlined />}>\r\n                    <Link to={{ pathname: '/profile' }}>پروفایل</Link>\r\n                </Menu.Item>\r\n                {!!isPolicyholder &&\r\n                    <Menu.Item key=\"resetpassword\" icon={<KeyOutlined />}>\r\n                        <Link to={{ pathname: '/resetpassword' }}>تغییر کلمه عبور</Link>\r\n                    </Menu.Item>\r\n                }\r\n                {!!isPolicyholder &&\r\n                    <Popconfirm\r\n                        title=\"آیا از حذف حساب خود اطمینان دارید؟\"\r\n                        onConfirm={this.removeAccount}\r\n                    >\r\n                        <Menu.Item key=\"removeaccount\" style={{ padding: 0 }}>\r\n                            <Button style={{ margin: 0, padding: '4px 10px', border: 'none' }} icon={<UserDeleteOutlined />}>حذف حساب کاربری</Button>\r\n                        </Menu.Item>\r\n                    </Popconfirm>\r\n                }\r\n            </Menu>\r\n        );\r\n\r\n        const { sidebarCollapsed, blockLayout, blockTitle } = this.context as AppContextProps;\r\n\r\n        let footerStyle: any = { textAlign: 'center', backgroundColor: 'rgb(217 232 233)', zIndex: 1000 };\r\n        if (!Core.isTestEnvironment)\r\n            footerStyle = { ...footerStyle, padding: 0 };\r\n\r\n        return (\r\n            <Layout className=\"mainlayout\">\r\n                <Header className=\"box site-layout-background col\" style={{\r\n                    padding: 0,\r\n                    width: \"100%\",\r\n                    zIndex: 1000,\r\n                    background: 'rgb(205 215 245)'\r\n                }}>\r\n                    <div className=\"row\" style={{ margin: 0 }}>\r\n                        <div style={{ padding: 0, width: 230 }}>\r\n                            <img alt=\"\" ref={node => this.logo = node} className={sidebarCollapsed ? \"logo1\" : \"logo\"} src={sidebarCollapsed ? \"./logo.png\" : \"./logoFull.png\"} />\r\n                            {React.createElement(sidebarCollapsed ? MenuFoldOutlined : MenuUnfoldOutlined, {\r\n                                className: 'trigger',\r\n                                onClick: this.toggle,\r\n                                style: {}\r\n                            })}\r\n                        </div>\r\n                        <div style={{ width: \"calc(100% - 230px)\" }}>\r\n                            <div style={{ float: \"left\" }}>\r\n                                <Space>\r\n                                    <UserPanel />\r\n                                    <Dropdown overlay={menu} arrow={true} trigger={[\"click\"]} >\r\n                                        <Space className=\"userinfo\">\r\n                                            <DownOutlined style={{ color: \"grey\" }} />\r\n                                            {profilePicturePath\r\n                                                ? <Avatar src={<Image src={profilePicturePath} style={{ height: 48 }} />} size={48} />\r\n                                                : <Avatar icon={<FontAwesomeIcon icon={faUserAlt} style={{ verticalAlign: 'text-top', fontSize: 24 }} />} size={48} />\r\n                                            }\r\n                                        </Space>\r\n                                    </Dropdown>\r\n                                    <Tooltip title={\"خروج\"} >\r\n                                        <Link to={{ pathname: '/logout' }} style={{ position: 'relative', top: 6 }}>\r\n                                            <FontAwesomeIcon className=\"fa-signout\" icon={faSignOutAlt} style={{ fontSize: 20 }} transform={{ flipX: true }} />\r\n                                        </Link>\r\n                                    </Tooltip>\r\n                                </Space>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </Header>\r\n                <Layout className=\"site-layout\">\r\n                    {this.state.loading ? <CustomSpinner /> :\r\n                        <MainMenu components={menuItems}></MainMenu>\r\n                    }\r\n                    <Content style={{\r\n                        paddingBottom: 10,\r\n                        position: \"relative\"\r\n                    }}>\r\n                        <div id=\"content-container\"\r\n                            className=\"custom-scroll site-layout-background\"\r\n                            style={{\r\n                                padding: '0px 10px',\r\n                                minHeight: 280,\r\n                                paddingBottom: 20\r\n                            }}\r\n                        >\r\n                            <Switch>\r\n                                <Route exact path='/errorpage' component={AllComponents.ErrorPage} />\r\n                                <Route exact path=\"/\" render={() =>\r\n                                    <ErrorBoundary>\r\n                                        <AllComponents.Home />\r\n                                    </ErrorBoundary>\r\n                                } />\r\n                                <Route exact path=\"/profile\" render={() =>\r\n                                    <ErrorBoundary>\r\n                                        <AllComponents.Profile />\r\n                                    </ErrorBoundary>\r\n                                } />\r\n                                <Route exact path=\"/resetpassword\" render={() =>\r\n                                    <ErrorBoundary>\r\n                                        <AllComponents.ResetPassword />\r\n                                    </ErrorBoundary>\r\n                                } />\r\n                                <Route exact path=\"/logout\" render={() =>\r\n                                    <ErrorBoundary>\r\n                                        <AllComponents.LogOut />\r\n                                    </ErrorBoundary>\r\n                                } />\r\n                                {menuItems.filter((c, index) => c.Item && !menuItems.filter((a, i) => i < index && a.Item?.split('?')[0] === c.Item?.split('?')[0]).length)\r\n                                    .map(component => {\r\n                                        const componentName = component.Item!.split('?')[0];\r\n                                        const Component = (AllComponents as any)[componentName];\r\n                                        return Component && (\r\n                                            <Route\r\n                                                path={\"/\" + componentName}\r\n                                                key={componentName}\r\n                                                render={() =>\r\n                                                    <ErrorBoundary>\r\n                                                        <Component />\r\n                                                    </ErrorBoundary>\r\n                                                }\r\n                                            />)\r\n                                    })}\r\n                                <Route path=\"/refresh\" render={(props: RouteComponentProps) => {\r\n                                    const { search } = props.location;\r\n                                    const currentPath = decodeURIComponent(search).substring(1).split('?');\r\n                                    const currentSearch = currentPath.length > 1 ? '?' + currentPath[1] : '';\r\n                                    return <Redirect to={{ pathname: currentPath[0], search: currentSearch }} />;\r\n                                }} />\r\n                                <Redirect to={{ pathname: \"/errorpage\", search: \"?id=404\" }} /> {/* اگر مسیر وجود نداشت به مسیر پیشفرض هدایت شود*/}\r\n                            </Switch>\r\n\r\n                            <BackTopButton />\r\n\r\n                        </div>\r\n                        {blockLayout && <div className=\"busy\"><CustomSpinner title={blockTitle} /></div>}\r\n                    </Content>\r\n                </Layout>\r\n                <Footer style={footerStyle}>\r\n                    {Core.isTestEnvironment ?\r\n                        <b>نسخه آزمایشی</b> :\r\n                        <div>\r\n                            <a href=\"https://si24.ir\" target=\"_blank\" rel=\"noreferrer\">\r\n                                <img src=\"/saman.png\" style={{ height: 44 }} alt=\"شرکت بیمه سامان\" ></img>\r\n                                شرکت بیمه سامان\r\n                            </a> ©2024\r\n                        </div>\r\n                    }\r\n                </Footer>\r\n            </Layout>\r\n        );\r\n    }\r\n}\r\n","import { Form, Input, Button, Checkbox } from 'antd';\r\nimport { UserOutlined, LockOutlined } from '@ant-design/icons';\r\nimport '../index.css';\r\nimport { enmValidationLevel, ICallOptions } from '../../components/infrastructure/models';\r\nimport React from 'react';\r\nimport { Link, Redirect } from 'react-router-dom';\r\nimport { Core } from '../../components/infrastructure/core';\r\nimport { Captcha } from '../../components/captcha/index';\r\nimport AppContext from '../../components/infrastructure/appContext';\r\n\r\ninterface ILoginState {\r\n    success?: boolean;\r\n    loading?: boolean;\r\n    resetPassword?: boolean;\r\n    firstLogin?: boolean;\r\n    userName?: string;\r\n}\r\n\r\nconst UserLogin = () => {\r\n    const { params } = React.useContext(AppContext);\r\n    const [state, setState] = React.useState<ILoginState>({ success: false, userName: params['username'] ?? '' });\r\n    const [form] = Form.useForm();\r\n\r\n    const componentWillUnmount = React.useRef(false);\r\n\r\n    const onFinish = async (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n\r\n        setState({ ...state, loading: true });\r\n\r\n        let opts: ICallOptions = {\r\n            url: \"user/login\",\r\n            data: {\r\n                userName: values['username'],\r\n                password: values['password'],\r\n                rememberMe: values['remember'],\r\n                captcha: values['captcha']\r\n            },\r\n            headers: [{\r\n                key: 'content-type', value: 'application/json;charset=UTF-8'\r\n            }],\r\n            onComplete: () => {\r\n                if (componentWillUnmount.current)\r\n                    return;\r\n                setState({ ...state, loading: false });\r\n            },\r\n            onSuccess: result => {\r\n                if (componentWillUnmount.current)\r\n                    return;\r\n\r\n                if (!result.ValidationState.Successful) {\r\n                    Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n                    setState({ ...state, loading: false });\r\n                }\r\n                else {\r\n                    if (result.ValidationState.ValidationResults.length) {\r\n                        Core.successNotification(result.ValidationState.ValidationResults[0].Message);\r\n                        if (result.ValidationState.ValidationResults[0].Level === enmValidationLevel.ResetPassword) {\r\n                            setState({ ...state, loading: false, resetPassword: true });\r\n                            return;\r\n                        }\r\n                        else if (result.ValidationState.ValidationResults[0].Level === enmValidationLevel.FirstLogin) {\r\n                            setState({ ...state, loading: false, firstLogin: true });\r\n                            return;\r\n                        }\r\n                    }\r\n                    else {\r\n                        Core.successNotification('خوش آمدید');\r\n                        setState({ ...state, success: true });\r\n                    }\r\n                }\r\n            }\r\n        };\r\n\r\n        await Core.callApi(opts);\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n        };\r\n    }, []);\r\n\r\n    if (state.success) {\r\n        let returnUrl = '/';\r\n        if (params[\"returnurl\"] && params[\"returnurl\"] !== '/logout')\r\n            returnUrl = decodeURIComponent(params[\"returnurl\"]);\r\n        const split = returnUrl.split('?');\r\n        return <Redirect to={{ pathname: split[0], search: split.length > 1 ? '?' + split[1] : '' }} />\r\n    }\r\n\r\n    if (state.resetPassword) {\r\n        return <Redirect to={\"/resetpassword\"} />\r\n    }\r\n\r\n    if (state.firstLogin) {\r\n        return <Redirect to={\"/resetpassword?username=\" + form.getFieldValue(\"username\") + \"&code=\" + form.getFieldValue(\"password\")} />\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div className=\"box box-blue\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                <img src={'/userlogo.png'} style={{ marginTop: 20, width: 80 }} alt=\"\" />\r\n                <p className=\"\" style={{ justifyContent: 'center', alignItems: 'center', display: 'flex', fontSize: 18, fontWeight: \"bold\", color: \"antiquewhite\" }}>ورود کاربران ستادی</p>\r\n            </div>\r\n            <Form\r\n                form={form}\r\n                //labelCol={{ span: 6 }}\r\n                wrapperCol={{ span: 24 }}\r\n                name=\"normal_login\"\r\n                className=\"box login-form\"\r\n                initialValues={{ remember: true }}\r\n                onFinish={onFinish}\r\n                style={{ paddingLeft: 50, paddingRight: 50, paddingBottom: 50, paddingTop: 5, border: \"1px solid white\", backgroundColor: \"#fefefe90\", borderBottomLeftRadius: 15, borderBottomRightRadius: 15, width: \"100%\", textAlign: \"right\" }}\r\n            >\r\n                <Form.Item\r\n                    name=\"username\"\r\n                    //label=\"نام کاربری\"\r\n                    rules={[\r\n                        { required: true, message: 'لطفا نام کاربری را وارد نمایید' },\r\n                        {\r\n                            required: true,\r\n                            validator: () => {\r\n                                const userName = form.getFieldValue('username');\r\n                                if (Core.isNationalCode(userName))\r\n                                    return Promise.reject(new Error('نام کاربری نمیتواند کد ملی باشد'));\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]}\r\n                    initialValue={state.userName}\r\n                >\r\n                    <Input\r\n                        autoComplete=\"off\"\r\n                        prefix={<UserOutlined className=\"site-form-item-icon\" />}\r\n                        placeholder=\"نام کاربری\"\r\n                        style={{ width: \"100%\" }} />\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                   // label=\"کلمه عبور\"\r\n                    name=\"password\"\r\n                    rules={[{ required: true, message: 'لطفا کلمه عبور را وارد نمایید' }]}\r\n                >\r\n                    <Input\r\n                        prefix={<LockOutlined className=\"site-form-item-icon\" />}\r\n                        type=\"password\"\r\n                        placeholder=\"کلمه عبور\"\r\n                        autoComplete=\"off\"\r\n                        style={{ width: \"100%\" }}\r\n                    />\r\n                </Form.Item>\r\n\r\n                {!state.loading &&\r\n                    <Captcha\r\n                        form={form}\r\n                        name=\"captcha\"\r\n                        label=\"متن تصویر\"\r\n                    />\r\n                }\r\n\r\n                <Form.Item\r\n                    name=\"remember\"\r\n                    valuePropName=\"checked\"\r\n                    style={{ textAlign: 'right', marginTop: 15, marginBottom: 15 }}\r\n                >\r\n                    <Checkbox >به خاطر بسپار </Checkbox>\r\n                </Form.Item>\r\n\r\n                <Form.Item style={{ direction: 'ltr', textAlign: 'justify' }}>\r\n                    <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={state.loading}>\r\n                        ورود\r\n                    </Button>\r\n                    <Link className=\"login-form-forgot\" to={{ pathname: '/forgetpassword' }} style={{ marginLeft: 10 }}> بازنشانی کلمه عبور</Link>\r\n                </Form.Item>\r\n            </Form>\r\n        </>\r\n    );\r\n};\r\n\r\nexport default UserLogin;","import React from \"react\";\r\n\r\nexport interface ITimerProps {\r\n    expired: () => void;\r\n    estimationTime: { minutes: number; seconds: number; }\r\n}\r\n\r\nexport class Timer extends React.Component<ITimerProps, { time?: { m: number; s: number; }, seconds: number }> {\r\n    private timer: any;\r\n    constructor(props: ITimerProps) {\r\n        super(props);\r\n        this.state = { time: { m: props.estimationTime.minutes, s: props.estimationTime.seconds }, seconds: props.estimationTime.minutes * 60 + props.estimationTime.seconds };\r\n        this.timer = 0;\r\n        this.startTimer = this.startTimer.bind(this);\r\n        this.countDown = this.countDown.bind(this);\r\n    }\r\n\r\n    secondsToTime(secs: number) {\r\n        let hours = Math.floor(secs / (60 * 60));\r\n\r\n        let divisor_for_minutes = secs % (60 * 60);\r\n        let minutes = Math.floor(divisor_for_minutes / 60);\r\n\r\n        let divisor_for_seconds = divisor_for_minutes % 60;\r\n        let seconds = Math.ceil(divisor_for_seconds);\r\n\r\n        let obj = {\r\n            \"h\": hours,\r\n            \"m\": minutes,\r\n            \"s\": seconds\r\n        };\r\n        return obj;\r\n    }\r\n\r\n    componentDidMount() {\r\n        let timeLeftVar = this.secondsToTime(this.state.seconds);\r\n        this.setState({ time: timeLeftVar });\r\n    }\r\n\r\n    componentWillUnmount() {\r\n        if (this.timer)\r\n            clearInterval(this.timer);\r\n    }\r\n\r\n    startTimer() {\r\n        if (this.timer === 0 && this.state.seconds > 0) {\r\n            this.timer = setInterval(this.countDown, 1000);\r\n        }\r\n    }\r\n\r\n    countDown() {\r\n        // Remove one second, set state so a re-render happens.\r\n        let seconds = this.state.seconds - 1;\r\n        this.setState({\r\n            time: this.secondsToTime(seconds),\r\n            seconds: seconds,\r\n        });\r\n\r\n        // Check if we're at zero.\r\n        if (seconds === 0) {\r\n            clearInterval(this.timer);\r\n            this.props.expired();\r\n        }\r\n    }\r\n\r\n    render() {\r\n        this.startTimer();\r\n        return (\r\n            <div style={{ float: \"left\", direction: \"ltr\", display: \"inline\", width: 50 }}>\r\n                {this.state.time?.m.toString().padStart(2, \"0\")} : {this.state.time?.s.toString().padStart(2, \"0\")}\r\n            </div>\r\n        );\r\n    }\r\n}","import { CSSProperties } from \"react\";\r\nimport dayjs from 'dayjs';\r\nimport jalaliday from 'jalaliday';\r\nimport { Col, Form, FormInstance, Input, Select, Space } from \"antd\";\r\nimport React from \"react\";\r\nimport { Rule } from \"antd/lib/form\";\r\n\r\nconst { Option } = Select;\r\n\r\ndayjs.extend(jalaliday);\r\n\r\ninterface IJalaliDatePickerProps {\r\n    name: string;\r\n    label: string;\r\n    style?: CSSProperties;\r\n    defaultValue?: any;\r\n    onChange?: (value: any) => void;\r\n    placeholder?: string;\r\n    disabled?: boolean;\r\n    value?: any;\r\n    form?: FormInstance;\r\n    rules?: Rule[];\r\n}\r\n\r\ninterface IJalaliDatePickerStates {\r\n    isLeapYear: boolean;\r\n    currentMonthDays: number;\r\n    year?: number;\r\n    month?: number;\r\n    day?: number;\r\n    value?: any;\r\n}\r\n\r\nconst monthList: { month: number; title: string; days: number; }[] = [\r\n    { month: 1, title: 'فروردین', days: 31 },\r\n    { month: 2, title: 'اردیبهشت', days: 31 },\r\n    { month: 3, title: 'خرداد', days: 31 },\r\n    { month: 4, title: 'تیر', days: 31 },\r\n    { month: 5, title: 'مرداد', days: 31 },\r\n    { month: 6, title: 'شهریور', days: 31 },\r\n    { month: 7, title: 'مهر', days: 30 },\r\n    { month: 8, title: 'آبان', days: 30 },\r\n    { month: 9, title: 'آذر', days: 30 },\r\n    { month: 10, title: 'دی', days: 30 },\r\n    { month: 11, title: 'بهمن', days: 30 },\r\n    { month: 12, title: 'اسفند', days: 29 },\r\n];\r\n\r\nexport const CustomJalaliDatePicker = (props: IJalaliDatePickerProps) => {\r\n    const [state, setState] = React.useState<IJalaliDatePickerStates>({ currentMonthDays: 0, isLeapYear: false, value: props.defaultValue });\r\n\r\n    const today = dayjs(new Date(), { jalali: true } as any).calendar('jalali').locale('fa');\r\n    const thisYear = today.year();\r\n    let years = [<Option key={null} value={null}>...</Option>];\r\n    for (let i = thisYear; i > thisYear - 100; i--)\r\n        years.push(<Option key={i} value={i}>{i}</Option>);\r\n\r\n    let days = [<Option key={null} value={null}>...</Option>];\r\n    for (let i = 1; i <= state.currentMonthDays; i++)\r\n        days.push(<Option key={i} value={i}>{i}</Option>);\r\n\r\n    let mounths = monthList.map(m => <Option key={m.month} value={m.month}>{m.title}</Option>);\r\n    const isLeapYearJalali = (year: number) => {\r\n        const matches = [1, 5, 9, 13, 17, 22, 26, 30];\r\n        const modulus = year - (Math.floor(year / 33) * 33);\r\n\r\n        for (let i = 0; i !== 8; i++)\r\n            if (matches[i] === modulus)\r\n                return true;\r\n        return false;\r\n    };\r\n\r\n    const onYearSelect = (value: any) => {\r\n        if (isLeapYearJalali(value)) {\r\n            setState({ ...state, isLeapYear: true, year: value, month: undefined, day: undefined });\r\n        }\r\n        else {\r\n            setState({ ...state, isLeapYear: false, year: value, month: undefined, day: undefined });\r\n        }\r\n    };\r\n\r\n    const onMonthSelect = (value: any) => {\r\n        if (state.isLeapYear && value === 12)\r\n            setState({ ...state, currentMonthDays: 30, month: value, day: undefined });\r\n        else {\r\n            const currentDays = monthList.find(m => m.month === value)?.days;\r\n            setState({ ...state, currentMonthDays: currentDays ?? 0, month: value, day: undefined });\r\n        }\r\n    };\r\n\r\n    const onDaySelect = (value: any) => {\r\n        setState({ ...state, day: value });\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        if (!state.year || !state.month || !state.day) {\r\n            props.form?.setFields([{ name: props.name, value: undefined }]);\r\n            setState({ ...state, value: undefined });\r\n        }\r\n        else {\r\n            let parsedDate = new Date(dayjs(state.year + '-' + state.month + '-' + state.day, { jalali: true } as any).locale('en').format());\r\n            parsedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000);\r\n            const newValue = parsedDate.toDateString();\r\n            props.form?.setFields([{ name: props.name, value: newValue }]);\r\n            setState({ ...state, value: newValue });\r\n        }\r\n        props.form?.validateFields([props.name]);\r\n    }, [state.year, state.month, state.day]);\r\n\r\n    React.useEffect(() => {\r\n        props.onChange && props.onChange(state.value);\r\n    }, [state.value]);\r\n\r\n    return (\r\n        <>\r\n            <Form.Item\r\n                name={props.name}\r\n                label={props.label}\r\n                rules={props.rules}\r\n                onReset={() => setState({ currentMonthDays: 0, isLeapYear: false, value: props.defaultValue })}\r\n                extra={\r\n                    <Space style={{ display: 'flex', position: \"absolute\", top: 0, right: 0 }}>\r\n                        <Col key=\"year\" style={{ display: 'flex', alignItems: 'center', width: 'min-content' }}>\r\n                            <Select style={{ width: 80 }} placeholder=\"سال\" disabled={props.disabled} key=\"year\" onSelect={onYearSelect} value={state.year}>\r\n                                {years}\r\n                            </Select>\r\n                        </Col>\r\n                        <Col key=\"month\" style={{ display: 'flex', alignItems: 'center', width: 'min-content' }}>\r\n                            <Select style={{ width: 100 }} placeholder=\"ماه\" disabled={props.disabled || !state.year} key=\"month\" onSelect={onMonthSelect} value={state.month}>\r\n                                {[<Option key={null} value={null}>...</Option>, ...mounths]}\r\n                            </Select>\r\n                        </Col>\r\n                        <Col key=\"day\" style={{ display: 'flex', alignItems: 'center', width: 'min-content' }}>\r\n                            <Select style={{ width: 80 }} placeholder=\"روز\" disabled={props.disabled || (!state.year && !state.month)} key=\"day\" onSelect={onDaySelect} value={state.day}>\r\n                                {days}\r\n                            </Select>\r\n                        </Col>\r\n                    </Space>\r\n                }\r\n            >\r\n                <Input hidden />\r\n            </Form.Item>\r\n        </>\r\n    );\r\n}","import { Form, Input, Button, AutoComplete, Alert } from 'antd';\r\nimport { LoadingOutlined, DownOutlined, InfoCircleFilled } from '@ant-design/icons';\r\nimport '../index.css';\r\nimport React from 'react';\r\nimport { Captcha } from '../../components/captcha/index';\r\nimport { IResultSet, enmValidationLevel } from '../../components/infrastructure/models';\r\nimport { Core } from '../../components/infrastructure/core';\r\nimport TextArea from 'antd/lib/input/TextArea';\r\nimport debounce from 'lodash/debounce';\r\nimport { Timer } from '../forgetPassword/timer';\r\nimport { CustomJalaliDatePicker } from '../../components/jalaliDatePicker/customJalaliDatePicker';\r\n\r\n//const { Option } = AutoComplete;\r\n\r\ninterface IRegisterPolicyholderState {\r\n    loading?: boolean;\r\n}\r\n\r\ninterface IRegisterPolicyholderProp {\r\n    nationalCode: string;\r\n    onReturn: () => void;\r\n    onRegistered: (userName: string, phone: string, captcha: string, isNew: boolean) => void;\r\n}\r\n\r\ninterface IProvince {\r\n    Name: string;\r\n    Code: string;\r\n}\r\n\r\ninterface ICity {\r\n    Name: string;\r\n    Code: string;\r\n    ProvinceCode: string;\r\n}\r\n\r\ninterface IProvinceStates {\r\n    loaded: boolean;\r\n    selectedProvinceCode?: string;\r\n    originalProvinceList: IProvince[];\r\n    provinceList: IProvince[];\r\n}\r\n\r\ninterface ICityStates {\r\n    loading: boolean;\r\n    selectedCityCode?: string;\r\n    cityList: ICity[];\r\n}\r\n\r\ninterface IPolicyholderState {\r\n    birthDate?: string;\r\n    disabled: boolean;\r\n    loading: boolean;\r\n    policyholderData?: any;\r\n}\r\n\r\nconst RegisterPolicyholder = (props: IRegisterPolicyholderProp) => {\r\n    const [state, setState] = React.useState<IRegisterPolicyholderState>({});\r\n    const [policyholderState, setPolicyholderState] = React.useState<IPolicyholderState>({ loading: false, disabled: true });\r\n    const [provinceState, setProvinceState] = React.useState<IProvinceStates>({ loaded: false, originalProvinceList: [], provinceList: [] });\r\n    const [cityState, setCityState] = React.useState<ICityStates>({ loading: false, cityList: [] });\r\n    const [form] = Form.useForm();\r\n\r\n    const componentWillUnmount = React.useRef(false);\r\n    const policyholderLoading = React.useRef(false);\r\n\r\n    const register = async (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n\r\n        setState({ ...state, loading: true });\r\n\r\n        let response = await fetch(\"api/userpolicyholder/registerpolicyholder\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                policyholder: {\r\n                    NationalCode: props.nationalCode,\r\n                    BirthDate: policyholderState.birthDate,\r\n                    FirstName: values[\"firstName\"],\r\n                    LastName: values[\"lastName\"],\r\n                    FatherName: values[\"fatherName\"],\r\n                    Phone: values[\"phone\"],\r\n                    Email: values[\"email\"],\r\n                    Address: values[\"address\"],\r\n                    PostalCode: values[\"postalCode\"],\r\n                    ProvinceCode: provinceState.selectedProvinceCode,\r\n                    CityCode: cityState.selectedCityCode\r\n                },\r\n                captcha: values['captcha']\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current === true)\r\n            return;\r\n\r\n        let result: IResultSet<any> = await response.json();\r\n\r\n        if (!result.ValidationState.Successful) {\r\n            if (result.ValidationState.ValidationResults.find(v => [enmValidationLevel.Unauthorized, enmValidationLevel.AccessDenied].indexOf(v.Level) > -1)) {\r\n                Core.errorNotification(result.ValidationState.ValidationResults[0].Message!);\r\n                props.onReturn();\r\n                return;\r\n            }\r\n            Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n            setState({ ...state, loading: false });\r\n        }\r\n        else {\r\n            if (result.ValidationState.ValidationResults.length) {\r\n                Core.successNotification(result.ValidationState.ValidationResults[0].Message);\r\n                setState({ ...state, loading: false });\r\n            }\r\n            else {\r\n                const { UserName, Phone, IsNew } = result.Data;\r\n                if (IsNew)\r\n                    Core.successNotification(\"اطلاعات با موفقیت ثبت شد، لطفا سریال یا IMEI دستگاه موبایل را استعلام نمایید\");\r\n                props.onRegistered(UserName, Phone, IsNew ? values['captcha'] : '', IsNew);\r\n            }\r\n        }\r\n    };\r\n\r\n    const getProvinceList = async () => {\r\n        if (state.loading)\r\n            return;\r\n\r\n        setState({ ...state, loading: true });\r\n\r\n        let response = await fetch(\"api/userpolicyholder/getprovincelist\", {\r\n            method: 'POST',\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current === true)\r\n            return;\r\n\r\n        let result: IResultSet<any> = await response.json();\r\n        if (!result.ValidationState.Successful) {\r\n            Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n            setProvinceState({ ...provinceState, loaded: true });\r\n        }\r\n        else {\r\n            setProvinceState({ loaded: true, originalProvinceList: result.Data, provinceList: result.Data });\r\n        }\r\n        setState({ ...state, loading: false });\r\n    };\r\n\r\n    const getCityList = async (provinceCode?: string, value?: string) => {\r\n        if (cityState.loading)\r\n            return;\r\n\r\n        setCityState({ ...cityState, loading: true });\r\n\r\n        let response = await fetch(\"api/userpolicyholder/getcitylist\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({ provinceCode, value }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current === true)\r\n            return;\r\n\r\n        let result: IResultSet<any> = await response.json();\r\n        if (!result.ValidationState.Successful) {\r\n            Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n            setCityState({ ...cityState, loading: false });\r\n        }\r\n        else {\r\n            setCityState({ loading: false, cityList: result.Data });\r\n        }\r\n    };\r\n\r\n    const debouncedCitySearch = React.useMemo(() => {\r\n        return debounce(getCityList, 700);\r\n    }, []);\r\n\r\n    const back = async () => {\r\n        let response = await fetch(\"api/userpolicyholder/logoutpolicyholderextraaccess\", {\r\n            method: 'POST',\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n        await response.json();\r\n        props.onReturn();\r\n    };\r\n\r\n    const checkPolicyholder = async (values: any) => {\r\n        if (policyholderState.loading)\r\n            return;\r\n\r\n        setPolicyholderState({ ...policyholderState, loading: true });\r\n\r\n        let response = await fetch(\"api/userpolicyholder/checkpolicyholder\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                nationalCode: props.nationalCode,\r\n                birthDate: policyholderState.birthDate,\r\n                captcha: values['captcha']\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current || !policyholderLoading.current) {\r\n            return;\r\n        }\r\n\r\n        let result: IResultSet<any> = await response.json();\r\n\r\n        if (!result.ValidationState.Successful) {\r\n            Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n        }\r\n        else if (result.ValidationState.ValidationResults.length) {\r\n            Core.successNotification(result.ValidationState.ValidationResults[0].Message);\r\n        }\r\n\r\n        setPolicyholderState({ ...policyholderState, loading: false, disabled: !result.Data && !result.ValidationState.Successful, policyholderData: result.Data });\r\n\r\n        if (result.ValidationState.Successful) {\r\n            form.setFieldsValue(result.Data);\r\n        }\r\n    };\r\n\r\n    const finish = (values: any) => {\r\n        if (policyholderState.disabled) {\r\n            checkPolicyholder(values);\r\n        }\r\n        else\r\n            register(values);\r\n    }\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n            debouncedCitySearch.cancel();\r\n            //debouncedEquipmentSearch.cancel();\r\n            //debouncedBrandSearch.cancel();\r\n            //debouncedEquipmentModelSearch.cancel();\r\n        };\r\n    }, []);\r\n\r\n    React.useEffect(() => {\r\n        policyholderLoading.current = policyholderState.loading;\r\n    }, [policyholderState.loading]);\r\n\r\n    React.useEffect(() => {\r\n        if (!policyholderState.policyholderData)\r\n            form.resetFields(['firstName', 'lastName', 'fatherName', 'address', 'postalCode', 'city', 'province', 'phone', 'email']);\r\n        else\r\n            form.setFieldsValue(policyholderState.policyholderData);\r\n\r\n        return () => {\r\n\r\n        };\r\n    }, [policyholderState.policyholderData]);\r\n\r\n    if (!provinceState.loaded && !policyholderState.disabled) {\r\n        getProvinceList();\r\n    }\r\n\r\n    return (\r\n        <Form\r\n            scrollToFirstError\r\n            form={form}\r\n            labelCol={{ span: 6 }}\r\n            wrapperCol={{ span: 18 }}\r\n            name=\"normal_login\"\r\n            className=\" login-form col-sm-8 col-md-6 col-lg-6 col-xl-4 col-xs-8 \"\r\n            initialValues={{ remember: true }}\r\n            onFinish={finish}\r\n            onReset={back}\r\n            style={{ width: \"calc(100% - 20px)\", height: \"100%\", textAlign: 'right', margin: 10 }}\r\n        >\r\n            <div className=\"box box-blue\" style={{ backgroundColor: \"#fefefe90\", border: \"1px solid white\", borderRadius: 15 }}>\r\n                <div className=\"box-title\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                    <div className=\"caption\">{policyholderState.disabled ?\r\n                        \"استعلام\"\r\n                        :\r\n                        \"مشخصات بیمه گزار/مشتری\"\r\n                    }\r\n                    </div>\r\n                </div>\r\n\r\n                <div className=\"box-body form\" style={{ border: \"1px solid white\", borderRadius: 15 }}>\r\n                    <div className=\"form-body\">\r\n\r\n                        {policyholderState.disabled && !policyholderState.policyholderData &&\r\n                            <Alert\r\n                                style={{ marginBottom: 20, textAlign: 'justify' }}\r\n                                description={\"لطفا اطلاعات را ملاحظه نموده و تکمیل نمایید.\"}\r\n                                type=\"info\"\r\n                                showIcon\r\n                                icon={<InfoCircleFilled className=\"blink\" />}\r\n                            />\r\n                        }\r\n\r\n                        {!policyholderState.disabled && policyholderState.policyholderData &&\r\n                            <Alert\r\n                                style={{ marginBottom: 20, textAlign: 'justify' }}\r\n                                description={\"لطفا اطلاعات را ملاحظه نموده و تکمیل نمایید.\"}\r\n                                type=\"info\"\r\n                                showIcon\r\n                                icon={<InfoCircleFilled className=\"blink\" />}\r\n                            />\r\n                        }\r\n\r\n                        {!policyholderState.disabled && !policyholderState.policyholderData &&\r\n                            <Alert\r\n                                style={{ marginBottom: 20, textAlign: 'justify' }}\r\n                                type=\"warning\"\r\n                                icon={<InfoCircleFilled className=\"blink\" />}\r\n                                showIcon\r\n                                description=\"اطلاعات یافت نشد، لطفا صحت تاریخ تولد و کد ملی را کنترل نموده و در صورت  عدم تطابق با مشخصات شناسنامه، با کلیک بر روی استعلام مجدد، اطلاعات را دوباره استعلام  کنید، در غیر اینصورت، اطلاعات خود را در فرم وارد نموده و ثبت نمایید\"\r\n                            />\r\n                        }\r\n\r\n                        <Form.Item\r\n                            name=\"nationalCode\"\r\n                            label=\"کد ملی\"\r\n                            rules={[\r\n                                { required: true, message: 'کد ملی الزامی است' },\r\n                                {\r\n                                    validator: () => {\r\n                                        const nationalCode = form.getFieldValue('nationalCode');\r\n                                        if (!Core.isNationalCode(nationalCode))\r\n                                            return Promise.reject(new Error('کد ملی میبایست معتبر باشد'));\r\n                                        return Promise.resolve();\r\n                                    }\r\n                                }]}\r\n                            initialValue={props.nationalCode}\r\n                        >\r\n                            <Input\r\n                                autoComplete=\"off\"\r\n                                placeholder=\"کد ملی\"\r\n                                disabled\r\n                            />\r\n                        </Form.Item>\r\n\r\n                        <CustomJalaliDatePicker\r\n                            name=\"birthDate\"\r\n                            label=\"تاریخ تولد\"\r\n                            form={form}\r\n                            rules={[{\r\n                                required: true,\r\n                                message: 'تاریخ تولد الزامی است'\r\n                            }]}\r\n                            defaultValue={policyholderState.birthDate}\r\n                            onChange={value => setPolicyholderState({ ...policyholderState, birthDate: value })}\r\n                            disabled={!policyholderState.disabled || policyholderState.loading}\r\n                        />\r\n\r\n                        {!policyholderState.disabled &&\r\n                            <div>\r\n\r\n                                <Form.Item\r\n                                    name=\"firstName\"\r\n                                    label=\"نام\"\r\n                                    rules={[{ required: true, message: 'نام الزامی است' }]}\r\n                                >\r\n                                    <Input\r\n                                        autoComplete=\"off\"\r\n                                        placeholder=\"نام\"\r\n                                        disabled={!!policyholderState && policyholderState.policyholderData?.firstName}\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"lastName\"\r\n                                    label=\"نام خانوادگی\"\r\n                                    rules={[{ required: true, message: 'نام الزامی است' }]}\r\n                                >\r\n                                    <Input\r\n                                        autoComplete=\"off\"\r\n                                        placeholder=\"نام خانوادگی\"\r\n                                        disabled={!!policyholderState && policyholderState.policyholderData?.lastName}\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"fatherName\"\r\n                                    label=\"نام پدر\"\r\n                                >\r\n                                    <Input\r\n                                        autoComplete=\"off\"\r\n                                        placeholder=\"نام پدر\"\r\n                                        disabled={!!policyholderState && policyholderState.policyholderData?.fatherName}\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"phone\"\r\n                                    label=\"شماره موبایل\"\r\n                                    rules={[\r\n                                        { required: true, message: 'شماره موبایل اجباری است' },\r\n                                        { len: 11, message: 'شماره موبایل باید 11 رقم باشد' }\r\n                                    ]}\r\n                                >\r\n                                    <Input\r\n                                        placeholder=\"شماره موبایل\"\r\n                                        type=\"text\"\r\n                                        onKeyPress={(event: any) => {\r\n                                            if (event.charCode < 48 || event.charCode > 57) {\r\n                                                event.preventDefault();\r\n                                            }\r\n                                        }}\r\n                                        maxLength={11}\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"province\"\r\n                                    label=\"استان\"\r\n                                >\r\n                                    <AutoComplete\r\n                                        allowClear\r\n                                        options={provinceState.provinceList.map(p => { return { key: p.Code, value: p.Name } })}\r\n                                        onSearch={(value) => {\r\n                                            const list = provinceState.originalProvinceList.filter(p => p.Name.indexOf(value) > -1);\r\n                                            setProvinceState({ ...provinceState, provinceList: list });\r\n                                        }}\r\n                                        onChange={(_: any, option: any) => {\r\n                                            const newProvinceState = { ...provinceState, selectedProvinceCode: option?.key };\r\n                                            setProvinceState(newProvinceState);\r\n                                            form.setFields([{ name: 'city', value: undefined }]);\r\n                                            getCityList(option?.key);\r\n                                        }}\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"city\"\r\n                                    label=\"شهر\"\r\n                                >\r\n                                    <AutoComplete\r\n                                        options={cityState.cityList.map(p => { return { key: p.Code, value: p.Name } })}\r\n                                        optionFilterProp=\"name\"\r\n                                        onSearch={value => debouncedCitySearch(provinceState.selectedProvinceCode, value)}\r\n                                        onChange={(_: any, option: any) => {\r\n                                            const newCityState = { ...cityState, selectedCityCode: option?.key };\r\n                                            setCityState(newCityState);\r\n                                        }}\r\n                                    >\r\n                                        <Input\r\n                                            suffix={cityState.loading ? <LoadingOutlined style={{ width: 12, height: 12, color: 'rgba(0, 0, 0, 0.25)', fontSize: 12, marginLeft: -5 }} /> : <DownOutlined style={{ width: 12, height: 12, color: 'rgba(0, 0, 0, 0.25)', fontSize: 12, marginLeft: -5 }} />}\r\n                                            allowClear\r\n                                        />\r\n                                    </AutoComplete>\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"address\"\r\n                                    label=\"آدرس\"\r\n                                >\r\n                                    <TextArea\r\n                                        placeholder={\"آدرس\"}\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"postalCode\"\r\n                                    label=\"کد پستی\"\r\n                                >\r\n                                    <Input\r\n                                        autoComplete=\"off\"\r\n                                        placeholder=\"کد پستی\"\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                                <Form.Item\r\n                                    name=\"email\"\r\n                                    label=\"ایمیل\"\r\n                                    rules={[{ required: true, message: 'ایمیل الزامی است' }]}\r\n                                >\r\n                                    <Input\r\n                                        placeholder={\"ایمیل\"}\r\n                                        type={\"email\"}\r\n                                    />\r\n                                </Form.Item>\r\n\r\n                            </div>\r\n                        }\r\n\r\n                        {(!state.loading && !policyholderState.loading) &&\r\n                            <Captcha\r\n                                showLabel\r\n                                form={form}\r\n                                name=\"captcha\"\r\n                                label=\"متن تصویر\"\r\n                            />\r\n                        }\r\n\r\n                        <Form.Item style={{ direction: 'ltr', textAlign: 'justify' }}>\r\n                            {\r\n                                !policyholderState.disabled &&\r\n                                <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={state.loading}>\r\n                                    <Timer key=\"timer\" estimationTime={{ minutes: 15, seconds: 0 }} expired={back} />\r\n                                    <span>ثبت</span>\r\n                                </Button>\r\n                            }\r\n                            {\r\n                                policyholderState.disabled &&\r\n                                <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={policyholderState.loading}>\r\n                                    {policyholderState.loading ? <span>در حال استعلام</span> : <span>استعلام</span>}\r\n                                </Button>\r\n                            }\r\n                            <Button\r\n                                type=\"default\"\r\n                                className=\"login-form-button\"\r\n                                htmlType=\"button\"\r\n                                onClick={() => {\r\n                                    if (state.loading || policyholderState.loading) {\r\n                                        form.resetFields(['birthDate']);\r\n                                        setPolicyholderState({ disabled: true, loading: false });\r\n                                    }\r\n                                    else {\r\n                                        back();\r\n                                    }\r\n                                }}\r\n                            >\r\n                                {state.loading || policyholderState.loading ? <span>لغو</span> : <span>برگشت</span>}\r\n                            </Button>\r\n                            {\r\n                                !policyholderState.disabled &&\r\n                                <Button type=\"default\" htmlType=\"button\" className=\"login-form-button\" loading={state.loading}\r\n                                    onClick={() => {\r\n                                        form.resetFields(['birthDate']);\r\n                                        setPolicyholderState({ disabled: true, loading: false });\r\n                                    }}\r\n                                >\r\n                                    استعلام مجدد\r\n                                </Button>\r\n                            }\r\n                        </Form.Item>\r\n\r\n\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n        </Form>\r\n    );\r\n};\r\n\r\nexport default RegisterPolicyholder;","import { Form, Input, Button, Alert, Tooltip } from 'antd';\r\nimport { UserOutlined, LockOutlined, MobileOutlined } from '@ant-design/icons';\r\nimport '../index.css';\r\nimport './style.css';\r\nimport { IResult } from '../../components/infrastructure/models';\r\nimport React from 'react';\r\nimport { Link, Redirect } from 'react-router-dom';\r\nimport { Core } from '../../components/infrastructure/core';\r\nimport { Captcha } from '../../components/captcha/index';\r\nimport { Timer } from '../forgetPassword/timer';\r\nimport AppContext from '../../components/infrastructure/appContext';\r\n\r\ninterface IPolicyholderLoginState {\r\n    success?: boolean;\r\n    loading?: boolean;\r\n    codeSent?: boolean;\r\n    forceCaptcha: boolean;\r\n    captcha?: string;\r\n    firstSendCode?: boolean;\r\n}\r\n\r\ninterface IPolicyholderLoginProp {\r\n    userName?: string;\r\n    phone?: string;\r\n    phoneNotDefined?: boolean;\r\n    onReturn?: () => void;\r\n    captcha: string;\r\n    lastSendCode?: number;\r\n}\r\n\r\nconst PolicyholderLogin = (props: IPolicyholderLoginProp) => {\r\n    const [state, setState] = React.useState<IPolicyholderLoginState>({ success: false, forceCaptcha: !props.captcha, captcha: props.captcha, firstSendCode: true, codeSent: !!props.lastSendCode });\r\n    const [form] = Form.useForm();\r\n    const { params } = React.useContext(AppContext);\r\n\r\n    const componentWillUnmount = React.useRef(false);\r\n    const submitKind = React.useRef<'login' | 'sendcode' | undefined>();\r\n\r\n    const onPasswordValidate = () => {\r\n        if (submitKind.current === 'login' && !form.getFieldValue('password'))\r\n            return Promise.reject(new Error('لطفا کلمه عبور را وارد نمایید'));\r\n        return Promise.resolve();\r\n    }\r\n\r\n    const onNationalCodeValidate = () => {\r\n        const nationalCode = form.getFieldValue('nationalCode');\r\n        if (!!nationalCode && !Core.isNationalCode(nationalCode))\r\n            return Promise.reject(new Error('کد ملی میبایست معتبر باشد'));\r\n        return Promise.resolve();\r\n    }\r\n\r\n    const onTimerExpired = () => setState({ forceCaptcha: true });\r\n\r\n    const onLogin = () => submitKind.current = 'login';\r\n\r\n    const onSendCode = () => {\r\n        if (state.codeSent)\r\n            return;\r\n        submitKind.current = 'sendcode';\r\n        form.submit();\r\n    }\r\n\r\n    const login = async (values: any) => {\r\n\r\n        setState({ ...state, loading: true, codeSent: state.codeSent, forceCaptcha: false, captcha: values['captcha'] ?? state.captcha });\r\n        let response = await fetch(\"api/userpolicyholder/login\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                userName: props.userName,\r\n                password: values['password'],\r\n                captcha: values['captcha'] ?? state.captcha,\r\n                rememberMe: false //values['remember']\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current)\r\n            return;\r\n\r\n        if (response.status === 200) {\r\n            let result: IResult = await response.json();\r\n            if (!result.ValidationState.Successful) {\r\n                Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n                setState({ loading: false, forceCaptcha: true, firstSendCode: state.firstSendCode, codeSent: state.codeSent });\r\n            }\r\n            else {\r\n                Core.successNotification('خوش آمدید');\r\n                setState({ success: true, forceCaptcha: false });\r\n            }\r\n        }\r\n        else {\r\n            setState({ loading: false, forceCaptcha: true, firstSendCode: state.firstSendCode, codeSent: state.codeSent });\r\n        }\r\n    };\r\n\r\n    const sendCode = async (values: any) => {\r\n\r\n        setState({ loading: true, codeSent: false, forceCaptcha: false, captcha: values['captcha'] ?? state.captcha })\r\n        let response = await fetch(\"api/userpolicyholder/sendcode\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                userName: values['nationalCode'],\r\n                captcha: values['captcha'] ?? state.captcha\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current)\r\n            return;\r\n\r\n        if (response.status === 200) {\r\n            let result: IResult = await response.json();\r\n            if (!result.ValidationState.Successful) {\r\n                Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n                setState({ loading: false, forceCaptcha: true, firstSendCode: state.firstSendCode, codeSent: state.codeSent });\r\n            }\r\n            else {\r\n                Core.successNotification('کلمه عبور یکبار مصرف با موفقیت ارسال شد');\r\n                setState({ loading: false, codeSent: true, forceCaptcha: false, firstSendCode: false, captcha: values['captcha'] ?? state.captcha });\r\n            }\r\n        }\r\n        else {\r\n            setState({ loading: false, forceCaptcha: true, firstSendCode: state.firstSendCode, codeSent: state.codeSent });\r\n        }\r\n    };\r\n\r\n    const onFinish = (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n\r\n        if (submitKind.current === 'login')\r\n            login(values);\r\n        else if (submitKind.current === 'sendcode')\r\n            sendCode(values);\r\n    }\r\n\r\n    const phoneNotDefined = props.phoneNotDefined || params['phonenotdefined'] === \"true\";\r\n    const phone = phoneNotDefined && !!props.userName ? \"شماره تلفن ثبت نشده است\" : props.phone;\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n        };\r\n    }, []);\r\n\r\n    if (state.success) {\r\n        let returnUrl = '/';\r\n        if (params[\"returnurl\"] && params[\"returnurl\"] !== '/logout')\r\n            returnUrl = decodeURIComponent(params[\"returnurl\"]);\r\n        const split = returnUrl.split('?');\r\n        return <Redirect to={{ pathname: split[0], search: split.length > 1 ? '?' + split[1] : '' }} />\r\n    }\r\n\r\n    const disableLoginBtn = state.codeSent !== true && Core.isDevelopement !== true;\r\n\r\n    return (\r\n        <>\r\n            <div className=\"box box-blue\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                <img src={'/userlogo.png'} style={{ marginTop: 20, width: 80 }} alt=\"\" />\r\n                <p className=\"\" style={{ justifyContent: 'center', alignItems: 'center', display: 'flex', fontSize: 18, fontWeight: \"bold\", color: \"antiquewhite\" }}>\r\n                    <>ورود بیمه گزار/مشتری</>\r\n                </p>\r\n            </div>\r\n\r\n            <Form\r\n                form={form}\r\n                //labelCol={{ span: 6 }}\r\n                wrapperCol={{ span: 24 }}\r\n                name=\"normal_login\"\r\n                className=\"box login-form\"\r\n                initialValues={{ remember: true }}\r\n                onFinish={onFinish}\r\n                onReset={() => {\r\n                    if (props.onReturn)\r\n                        props.onReturn();\r\n                    else\r\n                        setState({ loading: false, forceCaptcha: true });\r\n                }}\r\n                style={{ paddingLeft: 50, paddingRight: 50, paddingBottom: 50, paddingTop: 5, border: \"1px solid white\", backgroundColor: \"#fefefe90\", borderBottomLeftRadius: 15, borderBottomRightRadius: 15, width: \"100%\", textAlign: \"right\" }}\r\n            >\r\n                <Form.Item\r\n                    name=\"nationalCode\"\r\n                    //label=\"کد ملی\"\r\n                    initialValue={props.userName ?? ''}\r\n                    rules={[{ validator: onNationalCodeValidate }]}\r\n                    hidden\r\n                >\r\n                    <Input\r\n                        autoComplete=\"off\"\r\n                        prefix={<UserOutlined className=\"site-form-item-icon\" />}\r\n                        placeholder=\"کد ملی\" disabled={!!props.phone && props.phone !== \"\"}\r\n                    />\r\n                </Form.Item>\r\n\r\n                <Form.Item\r\n                    //label=\"موبایل\"\r\n                    hidden\r\n                >\r\n                    <Input disabled value={phone} suffix={<MobileOutlined className=\"site-form-item-icon\" />} style={{ direction: 'ltr', display: 'inline-flex' }} />\r\n                </Form.Item>\r\n\r\n                <Alert\r\n                    style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                    message={\r\n                        state.codeSent ?\r\n                            <div>\r\n                                بیمه گزار/مشتری گرامی، کلمه عبور یکبار مصرف به شماره\r\n                                &nbsp;\r\n                                <b style={{ unicodeBidi: \"plaintext\" }}>{props.phone}</b>\r\n                                &nbsp;\r\n                                ارسال شد،\r\n                                پس از دریافت پیامک، کد دریافت شده را در باکس پایین وارد نمایید.\r\n                            </div>\r\n                            :\r\n                            <>\r\n                                {phoneNotDefined ?\r\n                                    <div>\r\n                                        بیمه گزار/مشتری گرامی، شماره موبایل ثبت نشده است،\r\n                                        لطفا از\r\n                                        &nbsp;\r\n                                        <Link className=\"login-form-forgot\" to={{ pathname: '/changecontact', search: '?username=' + props.userName + '&phone=' + props.phone }}>\r\n                                            <Tooltip title=\"ویرایش شماره موبایل\">\r\n                                                <b style={{ borderBottom: \"1px solid\", paddingBottom: 2 }} >اینجا</b>\r\n                                            </Tooltip>\r\n                                        </Link>\r\n                                        &nbsp;\r\n                                        شماره موبایل خود را ثبت نمایید.\r\n                                    </div>\r\n                                    :\r\n                                    <div>\r\n                                        بیمه گزار/مشتری گرامی، کلمه عبور یکبار مصرف به شماره\r\n                                        &nbsp;\r\n                                        <b style={{ unicodeBidi: \"plaintext\" }}>{props.phone}</b>\r\n                                        &nbsp;\r\n                                        ارسال خواهد شد،\r\n                                        لطفا در صورتی که شماره همراه شما تغییر کرده است، از\r\n                                        &nbsp;\r\n                                        <Link className=\"login-form-forgot\" to={{ pathname: '/changecontact', search: '?username=' + props.userName + '&phone=' + props.phone }}>\r\n                                            <Tooltip title=\"ویرایش شماره موبایل\">\r\n                                                <b style={{ borderBottom: \"1px solid\", paddingBottom: 2 }} >اینجا</b>\r\n                                            </Tooltip>\r\n                                        </Link>\r\n                                        &nbsp;\r\n                                        شماره موبایل خود را ویرایش نمایید.\r\n                                    </div>\r\n                                }\r\n                            </>\r\n                    }\r\n                    type=\"info\"\r\n                />\r\n\r\n                <Form.Item\r\n                    name=\"password\"\r\n                    //label=\"کلمه عبور\"\r\n                    rules={[{ validator: onPasswordValidate }]}\r\n                >\r\n                    <Input\r\n                        autoComplete=\"off\"\r\n                        prefix={<LockOutlined className=\"site-form-item-icon\" />}\r\n                        placeholder=\"کلمه عبور یکبار مصرف\"\r\n                        type=\"password\"\r\n                    />\r\n                </Form.Item>\r\n\r\n                {state.forceCaptcha &&\r\n                    <Captcha\r\n                        form={form}\r\n                        name=\"captcha\"\r\n                        label=\"متن تصویر\"\r\n                    />\r\n                }\r\n\r\n                {/*{state.codeSent &&*/}\r\n                {/*    <Form.Item*/}\r\n                {/*        name=\"remember\"*/}\r\n                {/*        valuePropName=\"checked\"*/}\r\n                {/*        style={{ textAlign: 'right', marginTop: 15, marginBottom: 15 }}*/}\r\n                {/*    >*/}\r\n                {/*        <Checkbox>*/}\r\n                {/*            <span>به خاطر بسپار</span>*/}\r\n                {/*        </Checkbox>*/}\r\n                {/*    </Form.Item>*/}\r\n                {/*}*/}\r\n\r\n                <Form.Item\r\n                    style={{ direction: 'ltr', textAlign: 'justify' }}\r\n                >\r\n                    <>\r\n                        {!phoneNotDefined &&\r\n                            <Button\r\n                                htmlType=\"button\"\r\n                                type=\"primary\"\r\n                                className=\"login-form-button\"\r\n                                loading={state.loading}\r\n                                onClick={onSendCode}\r\n                                style={{ pointerEvents: state.codeSent ? 'none' : 'inherit', opacity: state.codeSent ? 0.6 : 0.9, backgroundColor: '#4ca066', }}\r\n                            >\r\n                                {state.codeSent && <Timer key=\"timer\" estimationTime={{ minutes: !!props.lastSendCode ? Math.floor(props.lastSendCode / 60) : 3, seconds: !!props.lastSendCode ? props.lastSendCode % 60 : 0 }} expired={onTimerExpired} />}\r\n                                {state.loading === true\r\n                                    ? (submitKind.current === 'sendcode' ? <>درحال ارسال کلمه عبور</> : (state.codeSent ? <>ارسال مجدد</> : <> درحال بررسی کلمه عبور</>))\r\n                                    : (state.firstSendCode === true ? <>ارسال کلمه عبور</> : (state.codeSent ? <>ارسال مجدد</> : <>ارسال مجدد کلمه عبور</>))\r\n                                }\r\n                            </Button>\r\n                        }\r\n                        <Button type=\"primary\" htmlType=\"submit\" disabled={disableLoginBtn} onClick={onLogin} className=\"login-form-button\" loading={state.loading}>\r\n                            <span>\r\n                                ورود\r\n                            </span>\r\n                        </Button>\r\n\r\n                        <Button type=\"default\" htmlType=\"reset\" className=\"login-form-button\" loading={state.loading}>\r\n                            انصراف\r\n                        </Button>\r\n                    </>\r\n                </Form.Item>\r\n            </Form>\r\n        </>\r\n    );\r\n};\r\n\r\nexport default PolicyholderLogin;","import React from \"react\";\r\nimport { Core } from \"../../components/infrastructure/core\";\r\nimport { enmValidationLevel, IResultSet } from \"../../components/infrastructure/models\";\r\nimport { Alert, Button, Form, Input, Radio, Tooltip } from \"antd\";\r\nimport { InfoCircleFilled, QuestionCircleFilled } from '@ant-design/icons';\r\nimport { Captcha } from \"../../components/captcha\";\r\n\r\ninterface RegisterSerialOrIMEIStates {\r\n    loading: boolean;\r\n    equipmentType: \"Mobile\" | \"Other\";\r\n    done?: boolean;\r\n    captcha: string;\r\n}\r\n\r\ninterface RegisterSerialOrIMEIProps {\r\n    nationalCode: string;\r\n    captcha: string;\r\n    onRegistered: (captcha: string) => void;\r\n    onReturn: () => void;\r\n}\r\n\r\n\r\nexport const RegisterSerialOrIMEI = (props: RegisterSerialOrIMEIProps) => {\r\n    const [state, setState] = React.useState<RegisterSerialOrIMEIStates>({ loading: false, equipmentType: \"Mobile\", captcha: props.captcha });\r\n    const [form] = Form.useForm();\r\n    const componentWillUnmount = React.useRef(false);\r\n\r\n    const back = async () => {\r\n        let response = await fetch(\"api/userpolicyholder/logoutpolicyholderextraaccess\", {\r\n            method: 'POST',\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n        await response.json();\r\n        props.onReturn();\r\n    };\r\n\r\n    const inquiry = async (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n\r\n        const imei1 = values['imei1'];\r\n        const imei2 = values['imei2'];\r\n        const equipmentSerialNo = values['equipmentSerialNo'];\r\n\r\n        if (!equipmentSerialNo && !imei1 && !imei2) {\r\n            Core.errorNotification('حداقل یکی از ورودی های IMEI1 یا IMEI2 اجباری است');\r\n            return;\r\n        }\r\n\r\n        setState({ ...state, loading: true });\r\n\r\n        let response = await fetch(\"api/userpolicyholder/registerserialorimei\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                nationalCode: props.nationalCode,\r\n                isMobile: state.equipmentType === \"Mobile\",\r\n                imei1: state.equipmentType === \"Mobile\" ? values['imei1'] ?? null : null,\r\n                imei2: state.equipmentType === \"Mobile\" ? values['imei2'] ?? null : null,\r\n                equipmentSerialNo: state.equipmentType === \"Other\" ? values['equipmentSerialNo'] ?? null : null,\r\n                captcha: values['captcha'] ?? state.captcha\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current === true)\r\n            return;\r\n\r\n        let result: IResultSet<string> = await response.json();\r\n\r\n        if (!result.ValidationState.Successful) {\r\n            if (result.ValidationState.ValidationResults.find(v => [enmValidationLevel.Unauthorized, enmValidationLevel.AccessDenied].indexOf(v.Level) > -1)) {\r\n                Core.errorNotification(result.ValidationState.ValidationResults[0].Message!);\r\n                props.onReturn();\r\n                return;\r\n            }\r\n            Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n            setState({ ...state, loading: false, captcha: '' });\r\n        }\r\n        else {\r\n            Core.successNotification(\"استعلام با موفقیت انجام شد، لطفاً کلمه عبور یکبار مصرف را درخواست نمایید\");\r\n            props.onRegistered(values['captcha'] ?? state.captcha);\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n        };\r\n    }, []);\r\n\r\n    const mobileFieldsStyle = state.equipmentType === \"Mobile\" ? {} : { display: \"none\" };\r\n    const otherFieldsStyle = state.equipmentType === \"Mobile\" ? { display: \"none\" } : {};\r\n\r\n    return (\r\n\r\n        <Form\r\n            form={form}\r\n            labelCol={{ span: 6 }}\r\n            wrapperCol={{ span: 18 }}\r\n            name=\"normal_login\"\r\n            className=\" login-form col-sm-8 col-md-6 col-lg-6 col-xl-4 col-xs-8 \"\r\n            initialValues={{ remember: true }}\r\n            onFinish={inquiry}\r\n            onReset={back}\r\n            style={{ width: \"calc(100% - 20px)\", height: \"100%\", textAlign: 'right', margin: 10 }}\r\n        >\r\n            <div className=\"box box-blue\" style={{ backgroundColor: \"#fefefe90\", border: \"1px solid white\", borderRadius: 15 }}>\r\n                <div className=\"box-title\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                    <div className=\"caption\">استعلام سریال یا IMEI</div>\r\n                </div>\r\n\r\n                <div className=\"box-body form\" style={{ border: \"1px solid white\", borderRadius: 15 }}>\r\n                    <div className=\"form-body\">\r\n\r\n                        <Alert\r\n                            style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                            message={\"بیمه گزار/مشتری گرامی، لطفا سریال دستگاه یا IMEI را وارد نمایید.\"}\r\n                            type=\"info\"\r\n                            icon={<InfoCircleFilled className=\"blink\" />}\r\n                            showIcon\r\n                        />\r\n\r\n                        <Radio.Group key={'equipmentType'} style={{ marginBottom: 10 }} onChange={e => setState({ ...state, equipmentType: e.target.value })} value={state.equipmentType}>\r\n                            <Radio key={'mobile'} value={\"Mobile\"}>\r\n                                <div>\r\n                                    <span>ثبت دستگاه موبایل</span>\r\n\r\n                                </div>\r\n                            </Radio>\r\n                            <Radio key={'other'} value={\"Other\"}>\r\n                                <div>\r\n                                    <span>ثبت دستگاه غیر موبایل</span>\r\n\r\n                                </div>\r\n                            </Radio>\r\n                        </Radio.Group>\r\n\r\n                        <Form.Item\r\n                            name=\"imei1\"\r\n                            label=\"سریال IMEI1\"\r\n                            style={mobileFieldsStyle}\r\n                            extra={\r\n                                <Tooltip title=\"با وارد کردن کد USSD *#06# و یا برچسب روی جلد گوشی همراه خود شماره سریال IMEI1 را با دقت وارد نمایید\" placement={\"right\"}>\r\n                                    <Button icon={<QuestionCircleFilled style={{ transform: \"scaleX(-1)\" }} />} style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0, minHeight: 0 }} />\r\n                                </Tooltip>\r\n                            }\r\n                        >\r\n                            <Input\r\n                                autoComplete=\"off\"\r\n                                placeholder=\"سریال IMEI1 دستگاه موبایل\"\r\n                            />\r\n                        </Form.Item>\r\n\r\n                        <Form.Item\r\n                            name=\"imei2\"\r\n                            label=\"سریال IMEI2\"\r\n                            style={mobileFieldsStyle}\r\n                            extra={\r\n                                <Tooltip title=\"با وارد کردن کد USSD *#06# و یا برچسب روی جلد گوشی همراه خود شماره سریال IMEI2 را با دقت وارد نمایید\" placement={\"right\"}>\r\n                                    <Button icon={<QuestionCircleFilled style={{ transform: \"scaleX(-1)\" }} />} style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0, minHeight: 0 }} />\r\n                                </Tooltip>\r\n                            }\r\n                        >\r\n                            <Input\r\n                                autoComplete=\"off\"\r\n                                placeholder=\"سریال IMEI2 دستگاه موبایل\"\r\n                            />\r\n                        </Form.Item>\r\n\r\n                        <Form.Item\r\n                            name=\"equipmentSerialNo\"\r\n                            label=\"سریال دستگاه\"\r\n                            extra={\r\n                                <Tooltip title=\"سریال دستگاه غیر موبایل\" placement={\"right\"}>\r\n                                    <Button icon={<QuestionCircleFilled style={{ transform: \"scaleX(-1)\" }} />} style={{ marginRight: 1, verticalAlign: 'top', position: \"absolute\", top: 0, left: 0, minHeight: 0 }} />\r\n                                </Tooltip>\r\n                            }\r\n                            style={otherFieldsStyle}\r\n                        >\r\n                            <Input\r\n                                autoComplete=\"off\"\r\n                                placeholder=\"سریال دستگاه غیر موبایل\"\r\n                            />\r\n                        </Form.Item>\r\n\r\n                        {(!state.loading && !state.captcha) &&\r\n                            <Captcha\r\n                                showLabel\r\n                                form={form}\r\n                                name=\"captcha\"\r\n                                label=\"متن تصویر\"\r\n                            />\r\n                        }\r\n\r\n                        <Form.Item\r\n                            style={{ direction: 'ltr', textAlign: 'justify', marginTop: 10 }}\r\n                        >\r\n                            <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={state.loading}>\r\n                                ادامه\r\n                            </Button>\r\n                            <Button type=\"default\" htmlType=\"reset\" className=\"login-form-button\" loading={state.loading}>\r\n                                لغو\r\n                            </Button>\r\n                        </Form.Item>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n        </Form>\r\n    );\r\n}","import { Form, Input, Button, Alert } from 'antd';\r\nimport { UserOutlined, QuestionCircleFilled } from '@ant-design/icons';\r\nimport '../index.css';\r\nimport './style.css';\r\nimport { IResultSet } from '../../components/infrastructure/models';\r\nimport React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Core } from '../../components/infrastructure/core';\r\nimport { Captcha } from '../../components/captcha/index';\r\nimport RegisterPolicyholder from './registerPolicyholder';\r\nimport PolicyholderLogin from './policyholderLogin';\r\nimport AppContext from '../../components/infrastructure/appContext';\r\nimport { RegisterSerialOrIMEI } from './registerSerialOrIMEI';\r\n\r\ninterface IPolicyholderLoginState {\r\n    loading?: boolean;\r\n    phone?: string;\r\n    phoneNotDefined?: boolean;\r\n    exists?: boolean;\r\n    isNew?: boolean;\r\n    userName?: string;\r\n    captcha: string;\r\n    lastSendCode?: number;\r\n    inquerySerialOrIMEI?: boolean;\r\n}\r\n\r\ninterface ICheckPolicyholder {\r\n    NationalCode?: string;\r\n    Exists?: boolean;\r\n    Phone: string;\r\n    LastSendCode?: number;\r\n    IsNew?: boolean;\r\n}\r\n\r\nconst PolicyholderCheckLogin = () => {\r\n    const { params } = React.useContext(AppContext);\r\n    const [state, setState] = React.useState<IPolicyholderLoginState>({ phone: params['phone'], userName: params['username'], captcha: '' });\r\n    const [form] = Form.useForm();\r\n\r\n    const componentWillUnmount = React.useRef(false);\r\n\r\n    const check = async (values: any) => {\r\n        const nationalCode = values['nationalCode'];\r\n        if (!!nationalCode && nationalCode !== \"\" && !Core.isNationalCode(nationalCode)) {\r\n            Core.errorNotification('کد ملی باید معتبر باشد');\r\n            return;\r\n        }\r\n\r\n        setState({ ...state, loading: true });\r\n\r\n        let response = await fetch(\"api/userpolicyholder/checknationalcode\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                captcha: values['captcha'],\r\n                nationalCode\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n\r\n        if (componentWillUnmount.current === true)\r\n            return;\r\n\r\n        let result: IResultSet<ICheckPolicyholder> = await response.json();\r\n        if (!result.ValidationState.Successful) {\r\n            Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n            setState({ ...state, loading: false });\r\n        }\r\n        else {\r\n            if (result.ValidationState.ValidationResults.length) {\r\n                Core.successNotification(result.ValidationState.ValidationResults[0].Message);\r\n            }\r\n            if (!!result.Data) {\r\n                const { Phone, Exists, NationalCode, LastSendCode, IsNew } = result.Data!;\r\n                if (Exists === false)\r\n                    Core.successNotification('لطفا مشخصات خود را استعلام نموده و ثبت نمایید');\r\n                if (IsNew === true)\r\n                    Core.successNotification('لطفا سریال یا IMEI دستگاه موبایل را استعلام نمایید');\r\n                setState({ ...state, phone: Phone, phoneNotDefined: !result.Data?.Phone || result.Data?.Phone === \"\", exists: Exists, userName: NationalCode, captcha: values['captcha'], lastSendCode: LastSendCode, isNew: IsNew });\r\n                return;\r\n            }\r\n            setState({ ...state, loading: false });\r\n        }\r\n    };\r\n\r\n    const onFinish = async (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n\r\n        await check(values);\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        return () => {\r\n            componentWillUnmount.current = true;\r\n        };\r\n    }, []);\r\n\r\n    if (state.exists === false) {\r\n        return <RegisterPolicyholder\r\n            nationalCode={state.userName!}\r\n            onReturn={() => setState({ captcha: '' })}\r\n            onRegistered={(userName, phone, captcha, isNew) => setState({ userName, phone, exists: true, captcha, isNew })} />;\r\n    }\r\n    else if (state.userName && state.isNew && !state.inquerySerialOrIMEI) {\r\n        return <RegisterSerialOrIMEI\r\n            nationalCode={state.userName!}\r\n            captcha={state.captcha}\r\n            onRegistered={captcha => setState({ ...state, captcha, inquerySerialOrIMEI: true })}\r\n            onReturn={() => setState({ captcha: '' })}\r\n        />;\r\n    }\r\n    else if (state.userName) {\r\n        return <PolicyholderLogin\r\n            userName={state.userName}\r\n            phone={state.phone}\r\n            phoneNotDefined={state.phoneNotDefined}\r\n            onReturn={() => setState({ captcha: '' })}\r\n            captcha={state.captcha}\r\n            lastSendCode={state.lastSendCode}\r\n        />;\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div className=\"box box-blue\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                <img src={'/userlogo.png'} style={{ marginTop: 20, width: 80 }} alt=\"\" />\r\n                <p className=\"\" style={{ justifyContent: 'center', alignItems: 'center', display: 'flex', fontSize: 18, fontWeight: \"bold\", color: \"antiquewhite\" }}>ورود بیمه گزار/مشتری</p>\r\n            </div>\r\n\r\n            <Form\r\n                form={form}\r\n                //labelCol={{ span: 6 }}\r\n                wrapperCol={{ span: 24 }}\r\n                name=\"normal_login\"\r\n                className=\"box login-form\"\r\n                initialValues={{ remember: true }}\r\n                onFinish={onFinish}\r\n                onReset={() => {\r\n                    setState({ loading: false, captcha: '' });\r\n                }}\r\n                style={{ paddingLeft: 50, paddingRight: 50, paddingBottom: 50, paddingTop: 5, border: \"1px solid white\", backgroundColor: \"#fefefe90\", borderBottomLeftRadius: 15, borderBottomRightRadius: 15, width: \"100%\", textAlign: \"right\" }}\r\n            >\r\n                {state.exists === undefined && !state.userName &&\r\n                    <Alert\r\n                        style={{ marginTop: 10, marginBottom: 20, textAlign: 'justify' }}\r\n                        message={\"بیمه گزار/مشتری گرامی، لطفا جهت ورود به پورتال، کد ملی خود را وارد نمایید.\"}\r\n                        showIcon\r\n                        type=\"info\"\r\n                    />\r\n                }\r\n\r\n                <Form.Item\r\n                    name=\"nationalCode\"\r\n                    //label=\"کد ملی\"\r\n                    rules={[\r\n                        { required: true, message: 'کد ملی الزامی است' },\r\n                        {\r\n                            validator: () => {\r\n                                const nationalCode = form.getFieldValue('nationalCode');\r\n                                if (!!nationalCode && !Core.isNationalCode(nationalCode))\r\n                                    return Promise.reject(new Error('کد ملی میبایست معتبر باشد'));\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]}\r\n                >\r\n                    <Input\r\n                        autoComplete=\"off\"\r\n                        prefix={<UserOutlined className=\"site-form-item-icon\" />}\r\n                        placeholder=\"کد ملی\"\r\n                        disabled={!!state.phone && state.phone !== \"\"}\r\n                        onKeyPress={(event: any) => {\r\n                            if (event.charCode < 48 || event.charCode > 57) {\r\n                                event.preventDefault();\r\n                            }\r\n                        }}\r\n                        maxLength={10}\r\n                    />\r\n                </Form.Item>\r\n\r\n                {!state.loading &&\r\n                    <Captcha\r\n                        form={form}\r\n                        name=\"captcha\"\r\n                        label=\"متن تصویر\"\r\n                    />\r\n                }\r\n\r\n                <Form.Item\r\n                    style={{ direction: 'ltr', textAlign: 'justify' }}\r\n                >\r\n                    {state.phoneNotDefined && <Link className=\"login-form-forgot\" to={{ pathname: '/changecontact', search: \"?username=\" + state.userName }} >تغییر شماره موبایل</Link>}\r\n                    <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={state.loading}>\r\n                        بررسی\r\n                    </Button>\r\n                    <Link to={\"/help\"}>\r\n                        <Button type=\"default\" htmlType=\"button\" className=\"login-form-button\" icon={<QuestionCircleFilled style={{ color: 'cornflowerblue', float: 'left', marginTop: 2, marginRight: 5, transform: \"scaleX(-1)\" }} />}>\r\n                            راهنما\r\n                        </Button>\r\n                    </Link>\r\n                </Form.Item>\r\n            </Form>\r\n        </>\r\n    );\r\n};\r\n\r\nexport default PolicyholderCheckLogin;","import '../index.css';\r\nimport { Component } from 'react';\r\nimport { LockFilled } from '@ant-design/icons';\r\nimport { Link } from 'react-router-dom';\r\nimport { Col } from 'antd';\r\nimport UserLogin from './userLogin';\r\nimport PolicyholderCheckLogin from './policyholderCheckLogin';\r\nimport SimplePage from '../../home/simplePage';\r\n\r\ninterface ILoginState {\r\n    loginName: \"PolicyholderLogin\" | \"UserLogin\";\r\n}\r\n\r\nexport interface ILoginProp {\r\n\r\n}\r\n\r\nexport default class Login extends Component<ILoginProp, ILoginState> {\r\n    constructor(props: ILoginProp) {\r\n        super(props)\r\n        let loginName = localStorage.getItem(\"LoginName\");\r\n        if (loginName !== \"PolicyholderLogin\" && loginName !== \"UserLogin\") {\r\n            localStorage.setItem(\"LoginName\", \"PolicyholderLogin\");\r\n            loginName = \"PolicyholderLogin\";\r\n        }\r\n        this.state = {\r\n            loginName: loginName as \"PolicyholderLogin\" | \"UserLogin\"\r\n        }\r\n    }\r\n    componentDidMount() {\r\n        //const { cookieEnabled } = navigator;\r\n        //if (!cookieEnabled) {\r\n        //    Modal.warn({\r\n        //        title: 'تنظیمات کوکی ها',\r\n        //        content: 'مرورگر شما، دسترسی به کوکی ها را مسدود کرده است. لطفا اجازه لازم را جهت اجرای سایت اعمال بفرمایید .',\r\n        //        centered: true,\r\n        //        autoFocusButton: 'ok',\r\n        //        direction: 'rtl',\r\n        //        okText: 'باشه'\r\n        //    });\r\n        //}\r\n        let container = document.getElementById(\"container\");\r\n        if (container && !container.classList.contains(\"custom-scroll\")) {\r\n            container.style.overflow = \"auto\";\r\n            container.classList.add(\"custom-scroll\");\r\n        }\r\n    }\r\n    componentWillUnmount() {\r\n        let container = document.getElementById(\"container\");\r\n        if (container && container.classList.contains(\"custom-scroll\")) {\r\n            container.style.overflow = \"hidden\";\r\n            container.classList.remove(\"custom-scroll\");\r\n        }\r\n    }\r\n    render() {\r\n        const renderSwitch = () => {\r\n\r\n            switch (this.state.loginName) {\r\n                case \"UserLogin\":\r\n                    return <UserLogin />;\r\n                case \"PolicyholderLogin\":\r\n                default:\r\n                    return <PolicyholderCheckLogin />;\r\n            }\r\n        };\r\n\r\n        const extraHeaderCols = (\r\n            <Col span={10}>\r\n                <Link className={'login-link'} to={\"#\"} style={{ float: 'left', marginLeft: 10 }} onClick={e => {\r\n                    e.stopPropagation();\r\n                    const loginName = this.state.loginName === \"PolicyholderLogin\" ? \"UserLogin\" : \"PolicyholderLogin\";\r\n                    localStorage.setItem(\"LoginName\", loginName);\r\n                    this.setState({ loginName });\r\n                }}>\r\n                    <LockFilled style={{ marginLeft: 5 }} />\r\n                    <span>{this.state.loginName === \"PolicyholderLogin\" ? \"ورود کاربران ستادی\" : \"ورود بیمه گزار/مشتری\"}</span>\r\n                </Link>\r\n            </Col>\r\n        );\r\n\r\n        return (\r\n            <SimplePage extraHeaderCols={extraHeaderCols} >\r\n                {renderSwitch()}\r\n            </SimplePage>\r\n        );\r\n    }\r\n};\r\n\r\n","import { Form, Input, Button } from 'antd';\r\nimport { UserOutlined, MobileOutlined } from '@ant-design/icons';\r\nimport '../index.css';\r\nimport { IResult } from '../../components/infrastructure/models';\r\nimport React from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Core } from '../../components/infrastructure/core';\r\nimport { Captcha } from '../../components/captcha';\r\nimport AppContext from '../../components/infrastructure/appContext';\r\nimport SimplePage from '../../home/simplePage';\r\n\r\ninterface IForgetPasswordState {\r\n    success?: boolean;\r\n    loading?: boolean;\r\n    userName?: string;\r\n}\r\n\r\nexport const ForgetPassword = () => {\r\n    const { params } = React.useContext(AppContext);\r\n    const [state, setState] = React.useState<IForgetPasswordState>({ success: false, userName: params['username'] ?? '' });\r\n    const [form] = Form.useForm();\r\n\r\n    const onFinish = async (values: any) => {\r\n        if (state.loading)\r\n            return;\r\n        await sendActivationCode(values);\r\n    };\r\n\r\n    const sendActivationCode = async (values: any) => {\r\n        setState({ ...state, loading: true });\r\n        let response = await fetch(\"api/user/forgetpassword\", {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n                userName: values['username'],\r\n                phoneNumber: values['phonenumber'],\r\n                captcha: values['captcha']\r\n            }),\r\n            headers: { 'content-type': 'application/json;charset=UTF-8' }\r\n        });\r\n        console.log(response.status);\r\n        let result: IResult = await response.json();\r\n        if (!result.ValidationState.Successful) {\r\n            Core.errorNotification(result.ValidationState.ValidationResults[0].Message);\r\n            setState({ ...state, loading: false });\r\n        }\r\n        else {\r\n            Core.successNotification(result.ValidationState.ValidationResults[0].Message);\r\n            setState({ ...state, success: true });\r\n            form.setFields([{ name: \"captcha\", value: \"\" }]);\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        // componentDidMount\r\n        let container = document.getElementById(\"container\");\r\n        if (container && !container.classList.contains(\"custom-scroll\")) {\r\n            container.style.overflow = \"auto\";\r\n            container.classList.add(\"custom-scroll\");\r\n        }\r\n\r\n        return () => {\r\n            // componentWillUnmount\r\n        };\r\n    }, []);\r\n\r\n    if (state.success) {\r\n        const userName = form.getFieldValue('username');\r\n        return <Redirect to={{ pathname: '/login', search: (userName ? '?username=' + userName : '') }} />\r\n    }\r\n\r\n    return (\r\n        <SimplePage>\r\n            <div className=\"box box-blue\" style={{ border: \"1px solid white\", borderTopLeftRadius: 15, borderTopRightRadius: 15 }}>\r\n                <img src={'/forgetpassword.png'} style={{ marginTop: 20, width: 80 }} alt=\"\" />\r\n                <p className=\"\" style={{ justifyContent: 'center', alignItems: 'center', display: 'flex', fontSize: 18, fontWeight: \"bold\", color: \"antiquewhite\" }}>بازنشانی کلمه عبور</p>\r\n            </div>\r\n            <Form\r\n                form={form}\r\n                //labelCol={{ span: 6 }}\r\n                wrapperCol={{ span: 24 }}\r\n                name=\"normal_login\"\r\n                className=\"box login-form\"\r\n                onFinish={onFinish}\r\n                style={{ paddingLeft: 50, paddingRight: 50, paddingBottom: 50, paddingTop: 5, border: \"1px solid white\", backgroundColor: \"#fefefe90\", borderBottomLeftRadius: 15, borderBottomRightRadius: 15, width: \"100%\", textAlign: \"right\" }}\r\n            >\r\n                <Form.Item\r\n                    name=\"username\"\r\n                    //label=\"نام کاربری\"\r\n                    rules={[\r\n                        { required: true, message: 'لطفا نام کاربری را وارد نمایید' },\r\n                        {\r\n                            required: true,\r\n                            validator: async () => {\r\n                                const userName = form.getFieldValue('username');\r\n                                if (Core.isNationalCode(userName))\r\n                                    return Promise.reject(new Error('نام کاربری نمیتواند کد ملی باشد'));\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]}\r\n                    initialValue={state.userName}\r\n                >\r\n                    <Input\r\n                        autoComplete=\"off\"\r\n                        prefix={<UserOutlined className=\"site-form-item-icon\" />}\r\n                        placeholder=\"نام کاربری\"\r\n                    />\r\n                </Form.Item>\r\n                <Form.Item\r\n                    name=\"phonenumber\"\r\n                    //label=\"شماره موبایل\"\r\n                    rules={[\r\n                        { len: 11, message: 'شماره موبایل باید 11 رقم باشد' },\r\n                        {\r\n                            validator: () => {\r\n                                const phonenumber = form.getFieldValue('phonenumber');\r\n                                if (!phonenumber)\r\n                                    return Promise.reject(new Error('شماره موبایل را وارد نمایید'));\r\n                                return Promise.resolve();\r\n                            }\r\n                        }\r\n                    ]}\r\n                >\r\n                    <Input\r\n                        placeholder=\"شماره موبایل\"\r\n                        style={{ width: \"100%\" }}\r\n                        type=\"text\"\r\n                        prefix={<MobileOutlined className=\"site-form-item-icon\" />}\r\n                        onKeyPress={(event: any) => {\r\n                            if (event.charCode < 48 || event.charCode > 57) {\r\n                                event.preventDefault();\r\n                            }\r\n                        }}\r\n                    />\r\n\r\n                </Form.Item>\r\n\r\n                {!state.loading &&\r\n                    <Captcha\r\n                        form={form}\r\n                        name=\"captcha\"\r\n                        label=\"متن تصویر\"\r\n                    />\r\n                }\r\n\r\n                <Form.Item style={{ direction: 'ltr', textAlign: 'justify' }} >\r\n                    <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" loading={state.loading}>\r\n                        <>درخواست</>\r\n                    </Button>\r\n                    <Button type=\"default\" htmlType=\"reset\" className=\"login-form-button\" loading={state.loading} onClick={() => {\r\n                        setState({ ...state, success: true });\r\n                    }}>\r\n                        لغو\r\n                    </Button>\r\n                </Form.Item>\r\n            </Form>\r\n        </SimplePage>\r\n    );\r\n};\r\n\r\n","import { Modal } from 'antd';\r\nimport { ExclamationCircleOutlined } from '@ant-design/icons';\r\nimport { useUpdateCheck } from 'react-update-notification';\r\nimport { useEffect, useState } from 'react';\r\n\r\nexport const VersionUpdateNotificationContainer = () => {\r\n    const [visible, setVisible] = useState(false);\r\n    const { status, reloadPage } = useUpdateCheck({\r\n        type: 'interval',\r\n        interval: 60000\r\n    });\r\n\r\n    const setReminder = () => {\r\n        setTimeout(() => {\r\n            setVisible(true);\r\n        }, 60000);\r\n        setVisible(false);\r\n    };\r\n\r\n    useEffect(() => {\r\n        setVisible(status === 'available');\r\n    }, [status]);\r\n\r\n    return (\r\n        <Modal title=\"بروزرسانی\"\r\n            visible={visible}\r\n            onOk={reloadPage}\r\n            onCancel={setReminder}\r\n            bodyStyle={{ textAlign: 'center' }}\r\n            okText=\"باشه\"\r\n            cancelText=\"یادآوری مجدد!\"\r\n        >\r\n            <p>\r\n                <ExclamationCircleOutlined style={{ color: \"orange\", fontSize: 48 }} />\r\n            </p>\r\n            <p>نسخه جدید نرم افزار موجود است، آیا مایلید بروزرسانی انجام شود؟</p>\r\n            <p>در صورت عدم بروزرسانی، ممکن است کاربری نرم افزار با مشکل مواجه شود. اگر عملیات ناتمام دارید می توانید بروزرسانی را به تعویق بیاندازید.</p>\r\n        </Modal>\r\n    );\r\n};","import React, { useRef } from 'react';\r\nimport { ConfigProvider } from 'antd';\r\nimport fa_IR from \"antd/lib/locale/fa_IR\";\r\nimport { useLocation } from 'react-router';\r\nimport AppContext from './components/infrastructure/appContext';\r\nimport { MainLayout } from './home/mainlayout';\r\nimport './home/index.css'\r\nimport { Switch } from 'react-router-dom';\r\nimport { Route } from 'react-router-dom';\r\nimport Login from './account/login/index';\r\nimport { ForgetPassword } from './account/forgetPassword';\r\nimport { ResetPassword } from './account/resetPassword';\r\nimport { ChangeContact } from './account/login/changeContact';\r\nimport { useState } from 'react';\r\nimport { IComponentItem, IPanelInfo, IUserInfo } from './components/infrastructure/models';\r\nimport { ErrorBoundary } from './home/errorBoundary';\r\nimport { isMobile } from 'react-device-detect';\r\nimport { VersionUpdateNotificationContainer } from './components/infrastructure/versionUpdateNotificationContainer';\r\nimport { Faq } from './home/faq';\r\nimport { Help } from './home/help';\r\n\r\ninterface AppState {\r\n    userInfo?: IUserInfo | null;\r\n    panelInfo: IPanelInfo;\r\n    menuItems: IComponentItem[];\r\n    sidebarCollapsed: boolean;\r\n    blockLayout: boolean;\r\n    blockTitle?: string;\r\n}\r\n\r\nexport default function App() {\r\n    const parseParams = function (): { [key: string]: string } {\r\n        let params: { [key: string]: string } = {};\r\n        new URLSearchParams(location.search).forEach((v, k) => {\r\n            params[k.toLowerCase()] = v;\r\n        });\r\n        return params;\r\n    }\r\n\r\n    const [state, setState] = useState<AppState>({ panelInfo: { data: [] }, menuItems: [], sidebarCollapsed: isMobile, blockLayout: false });\r\n\r\n    const layoutBlockCount = useRef(0);\r\n\r\n    const setInfo = (menuItems: IComponentItem[], userInfo?: IUserInfo | null) => {\r\n        const newState = { ...state, userInfo, menuItems }\r\n        setState(newState);\r\n    };\r\n\r\n    const getUserInfo = () => {\r\n        const { userInfo } = state;\r\n        return userInfo;\r\n    };\r\n\r\n    const getMenuItems = () => {\r\n        const { menuItems } = state;\r\n        return menuItems;\r\n    };\r\n\r\n    const getPanelInfo = () => {\r\n        const { panelInfo } = state;\r\n        return panelInfo;\r\n    };\r\n\r\n    const setSidebarCollapsed = (sidebarCollapsed: boolean) => {\r\n        setState({ ...state, sidebarCollapsed });\r\n    };\r\n\r\n    const setBlockLayout = (blockLayout: boolean, blockTitle?: string) => {\r\n        layoutBlockCount.current = blockLayout ? layoutBlockCount.current + 1 : layoutBlockCount.current - 1;\r\n        setState({ ...state, blockLayout: layoutBlockCount.current > 0, blockTitle });\r\n    };\r\n\r\n    const setPanelInfo = (panelInfo: IPanelInfo) => {\r\n        const newState = { ...state, panelInfo };\r\n        setState(newState);\r\n    };\r\n\r\n    const location = useLocation();\r\n\r\n    React.useEffect(() => { }, [location]);\r\n\r\n    const params = parseParams();\r\n\r\n    window.history.replaceState(null, '', location.pathname);\r\n\r\n    for (let key in localStorage)\r\n        if (key !== \"LoginName\" && !key.startsWith(\"homeMenu_\"))\r\n            localStorage.removeItem(key);\r\n\r\n    return (\r\n        <ConfigProvider locale={fa_IR} direction=\"rtl\" >\r\n            <AppContext.Provider value={{\r\n                params: params,\r\n                path: location.pathname,\r\n                getUserInfo: getUserInfo,\r\n                getMenuItems: getMenuItems,\r\n                sidebarCollapsed: state.sidebarCollapsed,\r\n                blockLayout: state.blockLayout,\r\n                blockTitle: state.blockTitle,\r\n                setInfo,\r\n                setSidebarCollapsed,\r\n                getPanelInfo,\r\n                setPanelInfo,\r\n                setBlockLayout\r\n            }} >\r\n                {\r\n                    <>\r\n                        <VersionUpdateNotificationContainer />\r\n                        <Switch>\r\n                            <Route exact path='/login' component={Login} />\r\n                            <Route exact path='/forgetpassword' component={ForgetPassword} />\r\n                            <Route exact path='/resetpassword' component={ResetPassword} />\r\n                            <Route exact path=\"/changecontact\" component={ChangeContact} />\r\n                            <Route exact path=\"/faq\" render={() =>\r\n                                <ErrorBoundary>\r\n                                    <Faq />\r\n                                </ErrorBoundary>\r\n                            } />\r\n                            <Route exact path=\"/help\" render={() =>\r\n                                <ErrorBoundary>\r\n                                    <Help />\r\n                                </ErrorBoundary>\r\n                            } />\r\n                            <Route>\r\n                                <ErrorBoundary>\r\n                                    <MainLayout />\r\n                                </ErrorBoundary>\r\n                            </Route>\r\n                        </Switch>\r\n                    </>\r\n                }\r\n            </AppContext.Provider >\r\n        </ConfigProvider>\r\n    );\r\n}","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://cra.link/PWA\r\n\r\nconst isLocalhost = Boolean(\r\n    window.location.hostname === 'localhost' ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.location.hostname === '[::1]' ||\r\n    // 127.0.0.0/8 are considered localhost for IPv4.\r\n    window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n);\r\n\r\nexport function register(config) {\r\n    if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n        // The URL constructor is available in all browsers that support SW.\r\n        const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n        if (publicUrl.origin !== window.location.origin) {\r\n            // Our service worker won't work if PUBLIC_URL is on a different origin\r\n            // from what our page is served on. This might happen if a CDN is used to\r\n            // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n            return;\r\n        }\r\n\r\n        window.addEventListener('load', () => {\r\n            const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n            if (isLocalhost) {\r\n                // This is running on localhost. Let's check if a service worker still exists or not.\r\n                checkValidServiceWorker(swUrl, config);\r\n\r\n                // Add some additional logging to localhost, pointing developers to the\r\n                // service worker/PWA documentation.\r\n                navigator.serviceWorker.ready.then(() => {\r\n                    console.log(\r\n                        'This web app is being served cache-first by a service ' +\r\n                        'worker. To learn more, visit https://cra.link/PWA'\r\n                    );\r\n                });\r\n            } else {\r\n                // Is not localhost. Just register service worker\r\n                registerValidSW(swUrl, config);\r\n            }\r\n        });\r\n    }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n    navigator.serviceWorker\r\n        .register(swUrl)\r\n        .then((registration) => {\r\n            registration.onupdatefound = () => {\r\n                const installingWorker = registration.installing;\r\n                if (installingWorker == null) {\r\n                    return;\r\n                }\r\n                installingWorker.onstatechange = () => {\r\n                    if (installingWorker.state === 'installed') {\r\n                        if (navigator.serviceWorker.controller) {\r\n                            // At this point, the updated precached content has been fetched,\r\n                            // but the previous service worker will still serve the older\r\n                            // content until all client tabs are closed.\r\n                            console.log(\r\n                                'New content is available and will be used when all ' +\r\n                                'tabs for this page are closed. See https://cra.link/PWA.'\r\n                            );\r\n\r\n                            // Execute callback\r\n                            if (config && config.onUpdate) {\r\n                                config.onUpdate(registration);\r\n                            }\r\n                        } else {\r\n                            // At this point, everything has been precached.\r\n                            // It's the perfect time to display a\r\n                            // \"Content is cached for offline use.\" message.\r\n                            console.log('Content is cached for offline use.');\r\n\r\n                            // Execute callback\r\n                            if (config && config.onSuccess) {\r\n                                config.onSuccess(registration);\r\n                            }\r\n                        }\r\n                    }\r\n                };\r\n            };\r\n        })\r\n        .catch((error) => {\r\n            console.error('Error during service worker registration:', error);\r\n        });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n    // Check if the service worker can be found. If it can't reload the page.\r\n    fetch(swUrl, {\r\n        headers: { 'Service-Worker': 'script' },\r\n    })\r\n        .then((response) => {\r\n            // Ensure service worker exists, and that we really are getting a JS file.\r\n            const contentType = response.headers.get('content-type');\r\n            if (\r\n                response.status === 404 ||\r\n                (contentType != null && contentType.indexOf('javascript') === -1)\r\n            ) {\r\n                // No service worker found. Probably a different app. Reload the page.\r\n                navigator.serviceWorker.ready.then((registration) => {\r\n                    registration.unregister().then(() => {\r\n                        window.location.reload();\r\n                    });\r\n                });\r\n            } else {\r\n                // Service worker found. Proceed as normal.\r\n                registerValidSW(swUrl, config);\r\n            }\r\n        })\r\n        .catch(() => {\r\n            console.log('No internet connection found. App is running in offline mode.');\r\n        });\r\n}\r\n\r\nexport function unregister() {\r\n    if ('serviceWorker' in navigator) {\r\n        navigator.serviceWorker.ready\r\n            .then((registration) => {\r\n                registration.unregister();\r\n            })\r\n            .catch((error) => {\r\n                console.error(error.message);\r\n            });\r\n    }\r\n}\r\n","const reportWebVitals = (onPerfEntry) => {\r\n  if (onPerfEntry && onPerfEntry instanceof Function) {\r\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n      getCLS(onPerfEntry);\r\n      getFID(onPerfEntry);\r\n      getFCP(onPerfEntry);\r\n      getLCP(onPerfEntry);\r\n      getTTFB(onPerfEntry);\r\n    });\r\n  }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') ?? undefined;\r\nconst rootElement = document.getElementById('container');\r\n\r\nReactDOM.render(\r\n    <BrowserRouter key={\"BrowserRouter\"} basename={baseUrl}>\r\n        <App />\r\n    </BrowserRouter>,\r\n    rootElement);\r\n\r\nserviceWorkerRegistration.unregister();\r\n\r\nreportWebVitals();\r\n"],"sourceRoot":""}