{"version":3,"sources":["GeneralBundle.js"],"names":["myApplication","projectName","apiName","appName","appCtrl","generalCtrl","protocol","projectType","projectTypeMobile","projectTypeWeb","language","defaultLanguage","projectTitle","apiMobileServerLink","apiMobileServerPort","dateTimeFormat","dateFormat","dateTimeFormatToDisplay","dateShortTimeFormatToDisplay","dateFormatToDisplay","timeFormat","timeFormatWithMilliseconds","shortTimeFormat","yearMonthFormat","yearMonthFormatToDisplay","moneyTwoDecimalCase","currency","minimumFractionDigits","moneyFiveDecimalCase","twoDecimalCase","type","precision","threeDecimalCase","fourDecimalCase","fiveDecimalCase","dateMonthYearFormat","dateMonthFormat","dateYearFormat","horizontalScrollAuxiliaryMenus","numberOfElementsToLoad","gridFont","differentLoginPages","differentLogin","loginPage","maxLimitFile","guidEmpty","listOfTranslationsAreas","defaultNif","numberRequestsToFormat","getLanguageObject","typeObject","this","selectedLanguage","toUpperCase","SetApplicationParametrization","BasicParametrization","Protocol","Language","Layout","family","size","color","ProjectType","ApiMobileServerLink","ApiMobileServerPort","ListOfTranslationsAreas","Modules","modules","DateTimeFormatToDisplay","DateFormatToDisplay","YearMonthFormatToDisplay","gridWarningMessages","EN","required","email","numeric","stringLenghtMax","max","stringLenghtFixedValue","value","stringLenghtMin","min","stringLenghtMinAndMax","numericRangeMax","numericRangeMin","numericRangeMinAndMax","PT-PT","warningMessages","fieldsRequired","thereWasError","thereWasErrorTryAgain","leavePage","thereWasErrorGettingData","concurrencyDataTexts","deletedRegister","serverData","enabled","disabled","editedRegister","loginMobileTexts","errorProcessingLogin","errorReadingData","invalidLogin","chooseValidConnection","basePageTexts","tools","exportExcel","exportXML","exportPDF","hideDisabled","showDisabled","loadingData","loading","deleteSuccess","insert","all","yes","no","noDataFound","continueNextPage","selectLater","chooseOption","confirmDelete","welcome","your","new","changeProfile","userData","photography","name","updateProfile","changePassword","newPassword","confirmNewPassword","currentPassword","canNotBeEqualToYourPreviousPassword","passwordsDoNotMatch","state","goBack","somethingWentWrong","success","filters","options","list","thumbnails","history","warning","search","stillDataLoading","errorEstablishingConnection","historyTexts","field","oldRegister","newRegister","user","alterationDate","saveCancelButtonsTexts","save","cancel","successfullSave","delete","submit","successProfileSave","setValues","successValuesSave","validationsTexts","notAllowed","error","errorLoadingTranslations","browserBlockingTranslations","generalFunctionsTexts","pendingChanges","irreversible","loadingRequests","loadImage","saveImage","removeImage","select","offline","online","days","clearTime","selectColor","clearColor","selectTime","Days","time","insertImage","selectImageOrDrag","nameOfFile","today","clear","PasswordSentToYourEmail","DateMustBeUnique","annexesSelectOrDrag","saveFunctions","invalidFields","invalidFieldsOnTable","invalidFieldsTable","invalidFieldsOnContacts","internalTable","isRequired","invalidApi","duplicatedConnection","defaultConnection","oneConnection","invalidFilters","notesFunctions","noNotesWereFound","downloadAttachment","deleteAttachment","deleteImage","edit","invalidFile","addAttachment","invalidPhoto","addPhoto","image","notesOf","thereWarAnErrorUploading","fileAttached","photoAttached","areYouSureDeleteNote","areYouSureDeletePhoto","areYouSureDeleteAttachment","photoRemovedSuccessfully","attachmentRemovedSuccessfully","noteSavedSuccessfully","noteRemovedSuccessfully","at","yesterday","pleaseAddTextOrImage","pivotGridTexts","allFields","columnFields","dataFields","filterFields","rowFields","title","fromFilter","toFilter","applyFilter","grandTotal","myApp","angular","module","$locationProvider","undefined","lowercase","$$lowercase","html5Mode","requireBase","run","$rootScope","$http","$location","$sessionStorage","$timeout","$q","GeneralModel","$state","window","onhashchange","evt","pendingRequests","forEach","request","push","HashObject","then","Hash","element","click","$on","event","toState","toParams","_fromState","_fromParams","model","OldParentId","SecondLevelMenu","Initializer","hasAccessToModule","moduleListToCheck","ConfigurationBase","s","length","preventDefault","go","redirectTo","location","generalModel","FullPageLoading","PageName","$$hash","resolve","data","statusText","status","fromState","fromParams","TranslationsObject","equals","Translations","$broadcast","pushState","absUrl","IsOnline","factory","$window","$mdSidenav","$compile","$filter","$mdDialog","$parse","ExportFiles","UploadMethod","ConcurrencyData","SaveFunctions","HistoryService","DateOperations","SwebModal","scope","rootScope","SetMenusDescription","menus","menu","TranslationCode","Description","GetMenus","ParentMenus","Menus","GetChildrenMenus","parentMenu","find","MenuId","ParentId","ChildrenMenus","ChangeMenu","Menu","Link","MenuActiveClass","activeClass","CurrentPage","parent","getMenuList","GetMenuList","CheckLogin","RefreshPage","reload","ToggleMenu","toggle","DownloadFile","fileName","format","controller","myId","additionalParameters","customAction","CallUploadMethod","SetMyForms","MyForms","OpenTools","$mdMenu","open","CloseTools","close","OpenDatePicker","assign","CheckLinkBreadCrumbs","$event","path","parameters","GoToPageBreadCrumbs","jqueryScrollbarOptions","onScroll","y","x","scroll","UpdateStateButton","ScrollToTop","animate","scrollTop","GoToPage","reloadPage","finalParameters","JSON","stringify","parse","onbeforeunload","current","IsUndefinedEmptyOrNull","DatabaseName","DeleteDatabase","SidebarOptions","State","SaveOption","Helpers","PendingChanges","OpenDialog","multiple","show","contentElement","document","body","clickOutsideToClose","CloseDialog","hide","IsHistoryOpen","CloseDialogConfirmDelete","text","ConfirmDelete","html","ThisOption","Irreversible","Delete","ShowDialogConfirmDelete","GeneralGridCheckbox","e","column","userDataType","allowEditing","cellElement","attr","GeneralGridCheckboxClicked","CancelOption","RefreshFilterSideBarHeight","sideBarHeight","parseInt","css","height","CloseOpenSideBarArea","area","findElement","hasClass","removeClass","addClass","CreateExportToExcelButton","buttonName","gridName","drawFunction","dxButton","onClick","dxDataGrid","exportToExcel","PendingExportToExcel","CreateSearchBox","boxName","delaySearch","dxTextBox","placeholder","IsUndefinedEmptyOrNullObject","Search","mode","valueChangeEvent","onValueChanged","HasMasterDetail","FilterGridModeMasterDetail","GridListName","MasterDetailsListName","MainElementName","option","refresh","OverrideGridSearch","clearTimeout","setTimeout","SearchGridModeValue","item","FilteredConditionsGrid","searchByText","CreateSearchBoxForGridMode","GenerateDisableEnableObject","object","id","container","Disabled","Enabled","on","grid","index","FindIndex","DisableEnable","dxTreeList","appendTo","GenerateCheckboxObject","SetCheckboxValue","GenerateDisableEnableObjectNotAllowEdition","rowIndex","cellValue","dataField","FilterGridMode","objectName","filteredObjectName","FilteredConditions","PageClick","$","pagination","substr","indexOf","Array","prototype","unique","a","concat","i","j","splice","objectNames","filterFunction","FilteredConditionsMasterDetail","mainElementFilteredIds","map","IdName","childElementFilteredIds","concateArray","$watch","_value","oldValues","ViewMode","GetMainId","idName","AngularCopy","GetObjectByString","__KEY__","string","isObject","division","replace","split","n","k","IsNotUndefinedEmptyOrNull","isUndefined","IsNotUndefinedEmptyOrNullObject","Date","Object","keys","IsObjectEmpty","SetObjectValueByString","stringArray","cutedString","total","substring","HasObjectKeys","key","hasOwnProperty","ValidateDate","isNaN","match","date","getTime","parents","rowsCount","each","closest","GetExtraConnection","DownloadFileObject","fileData","contentType","extension","action","blob","Loading","NewWindow","write","append","canRunAds","Base64ToBlob","navigator","msSaveOrOpenBlob","href","URL","createObjectURL","completeFileName","msSaveBlob","blobURL","createFileChooser","GetBase64FromBlobData","tempLink","createElement","style","display","setAttribute","download","appendChild","removeChild","revokeObjectURL","ShowInsertImageDialog","CloseInsertImageDialog","InvalidFields","StoredImageGridModel","StoredImageGridKey","ObjectToStoreImage","ObjectToStoreImageId","ObjectToStoreImageContentId","StoredImageFieldName","AddPhotography","gridKey","fieldId","PhotographyList","Id","Photography","Files","newImage","FileUploadTitle","LoadImage","ButtonFileUpload","SaveImage","ButtonFileUploadRemove","RemoveImage","FileUploadDocuments","FileUploadImage","FileUploadImageRemove","UploadBox","Upload","GetUploadBox","InsertImage","array","ArrayGridObjects","MainId","GridName","fieldName","getDataSource","_store","_array","getRowIndexByKey","DevExtreme","Grid","GetInsertedRowByKey","FieldName","FieldId","$ngfBlobUrl","GridToStoreImageId","GridFieldToStoreImage","GridFieldIdToStoreImage","q","objectForFilter","base64Data","byteCharacters","atob","byteArrays","offset","slice","byteNumbers","charCodeAt","byteArray","Uint8Array","Blob","ConvertImages","blobFile","response","base64data","position","deferred","defer","reader","FileReader","readAsDataURL","onloadend","result","Key","List","promise","ConvertAllFiles","GetEditDataClean","finalObject","editDataValid","GetEditData","filter","where","g","editDataRow","CreateBaseViewGridSelectElements","mainId","fieldShow","extraConnectionId","defaultSelectText","description","tagIndex","encodeHtml","GenerateSelectObject","getElementsByTagName","getElementsByClassName","stopPropagation","parentElement","className","NonEditable","ExtraConnectionId","SelectGridDropDownElement","gridElementsLoaded","objectLoadedByString","FillConcurrencyDataSource","findNewObject","editedObject","gridMainId","gridInstance","GetMainIdFromKey","edited","extraConnection","ExtraConnections","ObjectPathName","innerId","InnerId","editedItem","editedItemOldData","GetOldDataEditedRow","MainObjectPreviousSave","mainObjectPreviousSave","ParentObjectId","filterCondition","dividedId","CallGridDropDownGeneral","parentId","multipleSelect","pageSize","DropDownGeneralDialogButton","Select","SelectedRow","ExtraConnectionArrayIndex","SelectedRowIndex","Controller","DropDownAction","ExtraConnectionsFinishedLoading","FirstTimeLoadingExtra","CallGridDropDownGeneralContent","when","ListSearchGeneral","DrawGridDropDownGeneral","RefreshLoadExtra","catch","reason","ShowToastWarning","selectionState","configurePageSize","caption","arrayToPrint","columnDataField","indexOfName","GridDropDownGeneralDialog","dataSource","paging","export","showBorders","rowAlternationEnabled","sorting","groupPaging","grouping","summary","filterRow","visible","headerFilter","selection","allowColumnResizing","columnAutoWidth","columns","cellTemplate","nameToPrint","nameToSend","indexOfDataField","itemToPrint","datafieldAfterIndex","calculateCellValue","oldValue","newValue","noDataText","NoDataFound","font","onContentReady","rowsToSelect","editData","existingElements","h","_controllers","_dataSource","_items","l","component","clearSelection","selectRowsByIndexes","startSelectionWithCheckboxes","SetDataGridPageSize","targetEvent","onComplete","GeneralModelIsOpened","dataContent","lineId","DropdDownsEditedValues","fields","t","itemEditDataOldData","fieldsInData","finalDataContent","BaseModel","insideFields","isArray","datafield","finalDataField","CloseDialogGridDropDownGeneral","ClearDropDown","elements","elementsSeparated","GenerateColorObject","CallColorPicker","Color","rowContent","NewColor","GridNameColorPicker","changeColor","colorpicker","useAlpha","val","CloseDialogColorPicker","SaveColor","SaveColorStatus","ClearColor","GenerateTimeObject","interval","showSeconds","showQuantityDays","GenerateTimeObjectWithLink","addLink","emptyTime","daysText","CallTimePicker","lastIndexOf","showSecondsInTime","NewTime","NewDays","HasDaysPicker","ClearTime","saveTime","Save","timepicker","showSecond","minTime","maxTime","defaultTime","dynamic","dropdown","CloseDialogTimePicker","SaveTime","trigger","SaveTimeStatus","AddBase64ToImage","IsValidGuid","stringToTest","test","CheckIfThereAreEditedFields","secondGrid","thereAreChanges","$dirty","p","v","SecondGrid","WatchInitializerFinished","CallCamera","requestCode","RestoreClasses","GetChooserImageOrVideo","rotationAndPath","ImageField","$apply","IsPhotography","GetBase64Image","img","callback","context","canvas","originalImage","getElementById","onload","width","getContext","clearRect","drawImage","dataURL","toDataURL","src","rotationDegrees","rotate","Math","PI","CreateDateFilter","number","filterButtonName","inputDateStartId","inputDateEndId","filterAreaId","content","button","ApplyFilter","firstBlock","FromFilter","secondBlock","ToFilter","GetDatePartsByDate","newDate","year","getFullYear","toString","month","getMonth","day","getDate","hour","getHours","minutes","getMinutes","seconds","getSeconds","FieldSorter","SetCookie","cookieName","cookieValue","expireDays","setTime","expires","toUTCString","cookie","GetCookie","cookieArray","decodeURIComponent","cookieProperty","charAt","GetGridEditDataCleanBeforeSave","arrayElement","editedData","saveEditData","el","store","_key","RecoverPassword","isValid","SendRecoverClicked","RecoverUser","ShowToast","GoToFirstPageCardView","numberOfItems","RefreshGridBase","SearchContainsSplitWildCard","textArray","expression","wordArray","w","WildCardMatchRule","equalExpression","RegExp","join","ApplySearchFilter","allField","PreviousSearchWildCard","baseModel","FormatValueByFieldType","fieldType","FormatSecondsToTimeSpanString","totalSeconds","valueInTimeFormat","floor","hours","GetChildrensPivotGridTotal","children","childrenDirection","completeChildrens","newLevel","SetModules","m","moduleName","Code","Name","UploadAnnex","hasParent","parentList","FormUploadFileSubmitted","FilesAnnex","FileUploadNameAnnex","formData","FormData","fileType","$ngfName","AnnexesToAddList","FileType","FileName","ProcessUploadAnnexes","AnnexesSuccessfullyAdded","AttachmentAddedAvailableAfter","FormUploadFilesAnnexSubmitted","PostFiles","Documents","Index","reject","DeleteAnnex","AnnexId","DeleteAnnexes","GeneralMessageInformation","finally","DownloadResultBlob","BlobObject","remove","DownloadAnnex","PreviewAnnexes","ExportObjectName","ExportObject","ExportObjectType","LeftPadding","CountDecimals","SetBreadCrumbs","link","linkParameters","breadCrumb","BreadCrumb","LoadAttachmentComponent","ShowAttachmentsComponent","HandleResultException","exception","message","Message","$sce","htmlCode","trustAsHtml","code","replaceObject","localWebTranslations","localSharedTranslations","webTranslations","ReferenceError","sharedTranslations","ReplaceDynamicInformation","translation","OriginalText","myApplicationBasePageTranslation","toLowerCase","_exception","myApplicationGeneralFunctionsTranslation","directive","restrict","terminal","priority","elem","removeAttr","ctrlName","config","$translateProvider","translations","preferredLanguage","Settings","addEventListener","ShowToastWarningNoHide","Offline","noteDate","attrs","listOfBlocks","$parent","AccordionExpand","currentTarget","formatNumber","angularCopyFunction","require","ngModel","$validators","modelValue","formatContent","$eval","minimum","parseFloat","bind","toFixed","change","$locale","decimalSep","NUMBER_FORMATS","DECIMAL_SEP","toNumberRegex","filterFunc","decimalPlaces","modelCtrl","$formatters","$parsers","newViewValue","oldModelValue","$modelValue","newModelValue","formatNumberWithDecimals","$viewValue","oldPos","input","selectionStart","focus","createRange","moveStart","getCaretPosition","newPos","offsetWidth","offsetHeight","setSelectionRange","createTextRange","range","collapse","moveEnd","setCaretPosition","getSelection","$document","offsetX","offsetY","initialMouseX","initialMouseY","mousemove","mouseX","clientX","mouseY","clientY","left","top","mouseup","unbind","prop","NumberOperations","SavePage","formName","modelReference","mainObject","useDeprecated","existsSecondGrid","SecondGridEditData","SaveButtonClicked","CancelSaveProcess","UpdatedData","InsertedData","ObjectName","$$controls","$$attr","validations","ValidateField","$name","$invalid","nameToObject","CheckIfFloat","ElementId","IsSettingStandards","GuidEmpty","secondGridElementName","CreateObjectsSecondGrid","DisplayName","InvalidFieldsOnTable","ParentArray","CreateObjectsParentGrid","listGrids","InvalidFieldsTable","newArray","elementToAdd","ClearExtraConnectionsWithoutGrid","CheckIfThereAreEditedContacts","SavePageWithContacts","InvalidFieldsOnContacts","FinalProcessSavePage","ProcessSavePage","propertyName","propertyNameUpdate","ClearDeletedEditedObjects","SetStandardValues","MainController","SuccessSave","ResetSecondGridData","ConcurrencyError","ValidateServerData","PostDeprecatedObject","showMessage","GeneralMessageError","ShowToastAlert","ServerData","sucess","Post","PutDeprecatedObject","Put","CreateObjects","devExtremeObject","objectOldData","oldData","keyName","BasicName","f","oldDataForDelete","extraDelete","clearExtraDelete","keyForDelete","DeletedData","newData","z","keyNewData","arrayGridKey","foundInner","foundInsertion","objectsByString","addedElements","elementToInsert","secondGridEditedData","secondGridMainId","SecondGridMainId","secondGridObjectName","itemOldData","u","itemObjectsByString","isInsertedData","b","o","itemObjectByString","DeletedElements","itemNewData","keyNewDataInsert","parentObject","objectWasAdded","added","editedChild","itemModelSecondGridEditData","secondGridElement","itemSecondGridElementModelSecondGridEditData","updated","secondGridParent","secondGridUpdated","updatedNoParent","secondGridNoParent","secondGridUpdatedNoParent","inserted","secondGridEdited","insertedOnEdited","secondGridInserted","updatedOnEditedParent","secondGridEditWithParent","updatedOnEdited","secondGridEditWithoutParent","editedChildAdded","secondGridElementAdded","connectionsAdded","currentConnection","keyInConnection","objectWithParent","objectWithParentInserted","editedChildNoKey","secondGridElementNoKey","originalSecondGridElement","insertInUpdate","connectionNoKey","connectionSecondGrid","keyConnectionSecondGrid","updateWithParent","secondGridChild","secondGridFullChild","gridElement","secondGridIdName","ToDelete","extraConnectionCounter","keyExtraConnection","c","d","ReplaceRowVersion","RowVersion","SecondGridFullEditData","ProcessSaveGridsPatchMode","noDataForEditFound","secondGridDataSource","itemM","SecondGridRequired","itemDataSource","secondGridEditData","secondGridEditDataToRemove","InternalTable","IsRequired","secondGridData","itemSecondGridData","itemN","arrayList","editDataInGrid","ObjectPatch","GridsToSave","deferredToSave","modelToSave","positionToSave","ValidatePhotographies","ConfirmDeleteData","CallProcessFinalSaveGridsPatchMode","ProcessFinalSaveGridsPatchMode","LastSavedGrid","SaveGridPatchMode","ThereWasError","gridObjectName","ContentLoading","ArrayPosition","EditedElements","Patch","RemoveEditData","ToolsState","secondEditData","elementWasFound","secondDataSource","addRow","r","deleteRow","insideValue","insideDataField","DataField","service","GetIp","Validations","GeneralGetDeprecated","token","specificApiName","controlledDefer","ValidationsParameters","tokenToSend","Token","Controlled","get","headers","Authorization","params","xhr","ajaxOptions","thrownError","ValidationsGeneral","GeneralGet","ignoreSessionStorageToken","PreviewFilesDeprecated","paramIndex","property","propertyValue","req","XMLHttpRequest","responseType","setRequestHeader","onreadystatechange","readyState","newAnnex","fileInformation","getResponseHeader","send","PreviewFiles","blobType","GeneralPostDeprecated","post","GeneralPost","PostFilesDeprecated","settings","cache","method","Content-Type","GeneralPostWithParametersInUrlDeprecated","GeneralPostWithParametersInUrl","GeneralPutDeprecated","put","GeneralPut","GeneralPutWithParametersInUrlDeprecated","GeneralPutWithParametersInUrl","GeneralDeleteDeprecated","GeneralDelete","ExportToXmlDeprecated","ExportToXml","GetTokenDeprecated","ValidationsLogin","GetToken","ParseMinutesToTime","ValidateDayInMonth","CheckUniqueDateInColumn","nameOfField","fromDate","duplicate","mainKey","getKeyByRowIndex","gridObject","rule","FieldRequired","WageDefinitionId","CheckDateBiggerThan","firstDateName","currentDateName","startDate","CheckIfInt","Number","round","places","CalculateServiceTax","done","planned","tolerance","allowExceedProduction","abs","GeneralLoadData","_model","HistoryId","ListHistory","GridHistory","HistoryIdName","CreationUserId","CreationDatetime","registerId","creationUserId","creationDatetime","pageScope","ArrayFunctions","FindInObject","objectLine","DifferentLines","MainObjectId","ListFromServerById","CompareServerData","ObjectDataForConcurrency","CallConcurrencyByObject","ArrayScheduleObjects","CompareServerDataInSchedule","ConcurrencyParentWithoutTables","ListFromServer","deleted","CreationUser","User","deletedText","DeletedRegister","prepend","insideObject","CheckInnerObjectRowVersion","ShowServerData","innerObject","innerObjectServerData","InnerObjectId","propertyId","serverObject","off","mouseover","getBoundingClientRect","right","pageY","innerWidth","pageX","mouseout","CallConcurrency","deleteVisible","toolStateItem","getVisibleColumns","twoLevels","insertedRows","hasChanges","hasEditData","ParentRowInserted","ToolsStateItems","tool","myActualGrid","toDelete","AllowRemoval","eq","trLine","IsUpdating","dataCell","SecondLevelUpdate","Content","contentOldData","has","elementInner","myActualDataSource","myLineObject","arrayKey","OriginalObjectName","ReplaceObjectRowVersion","ConcurrencyObjectChangeElement","itemQ","completeServerData","finalServerData","serverDataContent","mainObjectDataContent","Fields","isImage","btoa","Caption","Lists","itemP","objectDescription","Field","CloseOpenArea","FillObjectConcurrencyCloud","DrawnIdName","Model","ModelName","insertAfter","ListId","bottom","displayInOpenArea","ConcurrencyObjectElement","ConcurrencyModel","thisElement","MainObjectListOfFields","dataFieldToShow","secondGridName","secondIdName","secondColumns","SecondGridName","serverDataItem","FormatServerEditView","mainElementLine","Cell","copy","elementName","serverDataToCompare","secondElementName","secondElementNameItem","newObject","serverDataToCompareItem","offsetTop","ConcurrencyBeforeSave","secondGridId","editDataSecondGrid","joinedData","itemL","reduce","gridChanges","nextRow","objectNameItem","findObjectsForFilter","findObjectForFilter","New","secondObjectForFilter","listItem","secondListItem","findObjects","findObject","InformationField","rowVersion","replaceRow","UpdateRow","elementId","positionsResolved","positionsResolvedSecondLevel","RowBackExtraConnections","newServerData","found","first","second","DeleteRowDeleted","gridElementName","DeleteRowWithServer","FillConcurrencyEditedObject","GoBackMainObject","err","OriginalElements","ObjectNameInSchedule","ScheduleObject","Convertion","SpecificCheckIfThereAreEditedFields","elementNameInSchedule","editedIdName","EditedScheduleId","mainIdName","ScheduleId","concurrencyObject","objectToSend","Concurrency","concurrencyToDelete","finalContent","PathName","port","api","host","HistoryModel","historyModel","LoadHistory","existTranslation","bindingOptions","HistoriesField","alignment","HistoriesOldValue","HistoriesNewValue","UsersName","HistoriesAlterationDate","dataType","sortOrder","customizeColumns","_","headerCellTemplate","header","info","toCall","previousPositionX","previousPositionY","rDirections","rCenteredX","rCenteredY","rWidth","rHeight","rFlex","rGrabber","rDisabled","previousElement","prev","flexBasis","documentElement","start","dragDir","axis","getComputedStyle","dir","vx","vy","inner","updateInfo","ScreenWidth","dragging","fun","$emit","dragEnd","target","removeEventListener","direction","grabber","innerHTML","ondragstart","which","getPropertyValue","cancelBubble","returnValue","dragStart","errorMessage","Expired","responseJSON","originalObject","call","indexToRemove","validationGroup","ReloadPage","collapseAll","OpenSwebModal","Element","Width","Height","last","ClickOutsideToClose","CloseSwebModal","OnComplete","$scope","GeneralFunctions","codes","Application","Solutions","Builder","Services","ServiceList","ServiceRequestList","$mdConstant","$stateParams","delayTimer","delayHelpFilter","originalValue","userToken","zoomObject","titleTag","canonicalLinkTag","metaDescription","metaKeywords","lastSolutionId","Project","Details","SearchValues","HelpSearchValues","separatorKeysForEmails","KEY_CODE","ENTER","COMMA","SPACE","SEMICOLO","ItemsPerPage","ShowInfoPages","HasHelp","HasLogin","Codes","CleanSolutionDetail","CleanSequencer","querySelector","innerText","urlParameters","SetApplication","promises","openMenu","applicationCode","languageId","LanguageSelected","MenusHistory","SetMenu","OpenMenus","SetMenus","SolutionsFiltered","Characteristics","SetSolutions","SetHelp","FilterDescriptionLength","FilterCodeLength","apply","characteristic","StartIndex","FilterCode","padEnd","FilterDescription","SetSolutionPages","SetSolutionQrCodes","S","searchValue","Filter","SetSearchValuesFromRoute","C","characteristicToAnalyse","GetCodesFromCharacteristic","mainCode","SelectCharacteristicOption","FilterCharacteristicOption","SetCharacteristicsFromRoute","O","solution","OpenSolutionDetail","OpenSolutionDetailFromSearchValues","P","activePage","numberOfPages","SetActivePageFromRoute","maxLength","EditFilterCodeComponent","Options","mask","repeat","InitializeFilterCodeMask","SolutionDetail","Photographies","Links","Specifications","StartPhotographyIndex","SelectedPhotographyIndex","SetSolutionDetail","specifications","Show","solutionId","SetPhotographies","SolutionDetailPhotographies","GetDetails","SolutionSelected","SetQrCode","SetProjectQuantity","ProjectQuantity","SetSolutionFilters","FilterClear","optionCodeToSelect","characteristicOption","CharacteristicOptions","Selected","GetSolutionByCode","solutions","CalculateMaxHeight","characteristicsOptionsElement","maxHeight","scrollHeight","paddingBottom","SetFilter","characteristicOptionCode","characteristicOptionDescription","characteristicOptionsSelected","characteristicIndex","filterDescriptionSplited","solutionsFiltered","solutionToAnalyse","trim","includes","some","characteristicsItem","characteristicOptionCodes","ClassyQR","GetSolutionToSetQuantity","solutionCode","solutionFiltered","SetSolutionQuantity","quantity","solutionOutsideProject","MinimumQuantity","IsFormValid","solutionWithInvalidLocation","IsAtYourSite","HTML","ScrollToElement","solutionWithInvalidAddress","Address","FocusElement","solutionWithInvalidParticipantsQuantity","ParticipantsQuantity","ValidateEmails","emailsToValidate","existValidEmail","emailToValidate","ValidateEmail","showErrorMessage","SetPropertyValueInt","csvSolution","valueToSet","optionCode","GetBaseUrl","isToSeo","baseUrl","GetIndividualLink","url","CopyToClipboard","textToCopy","clipboard","writeText","temporaryElement","execCommand","SetTranslations","Translation","CheckLensPosition","lensPosition","measurement","photographyMax","lastMenuIndex","SelectedMenu","ClearMenuSelectedOption","menuCode","photographies","GetPhotography","FileArray","MenuOptions","menuOption","selectedMenuOption","Sequencer","Columns","AddInSequencer","ignoreAddColumn","columnId","ColumnId","sequencerColumn","Order","newColumn","Position","SetSortable","dxSortable","group","moveItemOnDrop","onDragEnd","oldColumnId","fromData","newColumnId","toData","fromIndex","toIndex","itemElement","Reorder","oldColumn","solutionsToIncrementOrderInNewColumn","UpdatePosition","Scroll","Refresh","setOrder","solutionsOrdered","sort","newOrder","OrderColumn","$onInit","Logout","SetParameters","localStorage","getItem","Languages","reverse","SetLanguages","ChangeLanguage","setItem","newPhotography","SetFiltersToSolution","CloseSolutionDetail","GetIndexSolutionSelected","ShowPreviousSolutionDetail","GetSelectedSolutionPhotography","HasDetails","SeoInformation","PhotographyName","GetSolutionDescription","PreviousSolutionDetail","indexSolutionSelected","ShowNextSolutionDetail","NextSolutionDetail","HasSelectedSolutions","single","OpenServiceRequestListDialog","projectTypeCode","StepProjectServiceRequest","StepProjectSequencer","StepProjectDetails","StepProjectSubmitted","SendSequencer","solutionToAdd","solutionsInProject","quantityInProject","sum","quantityToAdd","DrawingNumber","HasBuilderCsv","SolutionNumber","solutionSpecifications","Participants","QuantityToDuplicate","LinksToSendQuantity","LinksToSend","SetSolutionToAdd","CloseProject","OnLocationChange","IsDojoRentalIncluded","IsCoffeeBreakIncluded","IsLunchIncluded","ReplicateValue","SetOriginalValue","IsUndefinedEmptyNullOrZero","solutionToUpdate","ReplicateArrayItemValue","OpenCloseFilter","nextElementSibling","classList","resize","characteristicsOptionsElements","characteristicsOptionsElementsLength","FilterClearShow","secondWhere","characteristics","characteristicsLength","characteristicOptions","characteristicOptionsLength","GetCharacteristicOptionCount","GetCheckBoxEditor","elementAttr","class","endsWith","GetSolutionPhotography","specificSolution","solutionCodeToGet","GetSolutionPhotographyFromServer","GetLanguagePhotography","flag","ScrollbarOptions","buttonTopVisibility","ButtonTopVisibility","Copy","selectNodeContents","removeAllRanges","addRange","Copied","CopyWithWhitespaces","tempElement","CopyAll","valueToCopy","elementToCopy","DeleteSolution","solutionToDelete","columnToRemove","BackToStepProjectServiceRequest","RemoveInSequencer","DuplicateSolution","solutionToDuplicate","positionToInsert","numberOfSolutionsToDuplicate","ShowProjectSolutions","IncreaseProjectQuantityInRequestList","DecreaseProjectQuantityInRequestList","IncreaseProjectQuantity","DecreaseProjectQuantity","minimumQuantity","GetMinimumQuantity","OnParticipantsQuantityChange","quantityToUpdate","SetParticipantsList","OnDeleteParticipant","OnLinksToSendQuantityQuantityChange","SetLinksToSendList","OnDeleteLinkToSend","ShowProjectDetails","details","ServiceProviderEmail","ServiceProviderEmails","ServiceRequesterEmails","emailsToAdd","emailToAdd","SetProjectDetails","ShowProjectDetailsInvalidFields","ProjectSubmit","IsProjectSubmitFormValid","solutionsToSend","solutionToSend","ProjectDetail","StepProjectSolutions","SendProject","ProjectComplete","OpenImportCsvDialog","File","Multiple","Pattern","Accept","Capture","Validate","DragOverClass","accept","pattern","debounce","Resize","centerCrop","ResizeIf","FirefoxPaste","ImportCsv","apiUrl","solutionFromCsv","solutionImported","IsSafetyTrainingIncluded","IsExpensesIncluded","IsSafetyEquipmentIncluded","RequestsToOpen","Notes","items","itemOnPage","currentPage","cssStyle","prevText","nextText","displayedPages","edges","ellipsePageSet","onInit","onPageClick","page","_evt","CopyIndividualLink","IndividualUrlCopied","CopyGeneralLink","selectedCharacteristicsOptions","selectedCharacteristicsToReturn","selectedCharacteristics","selectedCharacteristicToAnalyse","optionCodes","GetSelectedCharacteristicsOptions","json","UrlMaxLengthReached","GeneralUrlCopied","GetSolutionIndividualLink","AddEmail","originalEmail","values","emailPosition","Emails","ApplyHelpFilter","helpLinksFiltered","HelpLinks","helpLinkToAnalyse","HelpLinksFiltered","HelpFilter","OpenHelp","LoadingHelp","LoadHelp","CloseHelp","ApplyZoom","lens","individualSolutionPhotography","scaleX","scaleY","zoomedPhotography","backgroundSize","backgroundPosition","lensX","lensY","SetZoomedPhotography","cursorPositions","photographyPosition","pagePosition","cursorPositionX","cursorPositionY","pageXOffset","pageYOffset","GetCursorPositions","AdjustLens","GetLensPosition","HideLens","ShowZoomLens","ShowLens","file","Extension","folderName","SetPhotography","photographyPositionToSet","GoPreviousPhotography","GoNextPhotography","ShowGoNextPhotography","lastPosition","CloseMenus","menuHistory","menuSelected","menuOptionsFilters","Filters","menuOptionFilters","characteristicCode","ApplyMenuFilters","MenuOptionClick","Page","OpenInNewTab","Csv","nextMenu","NextMenu","PreviousMenu","pop","RestartMenus","GetVideoLink","Url","trustAsResourceUrl","OnFileUpload","fileReader","fileToUpload","fileInBase64","fileToAdd","FileInBase64","OnDeleteFile","GetFileImage","OpenLogin","Login","isFormValid","LoginClicked","InvalidLogin","username","LoginData","Username","password","Password","grant_type","token_type","access_token","Email","ClientName","ServiceUploadFiles","solutionWithFiles","HasSolutionsToSequence","ShowProjectSequencer","GetNumberOfItems","OpenDialogFilterCode","EditFilterCode","lastStructureId","detailsImported","Structures","StructuresProject","MenuOpen","CanUploadPhoto","CleanStructureDetail","SetStructures","checkStructures","StructuresFiltered","Orientations","Slopes","SlopeDirections","HUSupportTypes","HUSupports","RollJoints","GuideTypes","Types","ContactTypes","SalesPersons","Markets","RequestTypes","AssemblyTypes","InternalExternalMeasures","ProfileSupportQuantities","SetStructurePages","SetStructureQrCodes","firstCharacteristic","Visible","firstCode","MainCode","SetSelectedMainCharacteristic","ResetFilterCodeAndDescription","structureProject","structure","CheckAndAddStructure","Database","removeItem","SetStructuresSubmitted","OpenStructures","OpenStructureDetail","OpenStructureDetailsFromSearchValues","GetStructureByCode","structures","selectedCharacteristicOption","ignoreApplyFilter","structuresFiltered","structureToAnalyse","defaultStructure","BlankStructureCode","SetDefaultStructure","characteristicsVisibles","StructureSelected","SetFieldsToConsiderInLeanProject","fieldsToConsiderInLeanProject","ConsiderInLeanProject","SetPropertyValueIfUndefinedOrNull","CheckDropDownValue","arrayToCheck","valueToCheck","GetStructureToSetQuantity","structureCode","structureFiltered","oldColumnMainCode","newColumnMainCode","structureId","oldIndex","newIndex","oldStructureIndex","findIndex","InvalidStructurePosition","refreshScope","structuresToReorder","coefficient","structureToReorder","structuresOrdered","ValidateFieldValue","ImportCsvData","structuresImported","structureFromCsv","structureCharacteristics","structureToAdd","structureImported","csvStructure","SetPropertyValueFloat","SetPropertyValueDropDown","Topic","Type","Annotations","StructureQuantityToDuplicate","SetProjectDetailInformationFromCsv","SetProjectDetailsFromCsv","isList","SetStructureFilters","SetStructureDetail","StructureDetail","database","newStructure","TimesImported","SetCharacteristicsFromMenu","SubmissiontTypes","Draft","AssemblyCuttingList","ProposalRequest","GetCharacteristicsPhotographies","characteristicMainCode","CopyIndividualViewLink","CloseStructureDetail","GetIndexStructureSelected","ShowPreviousStructureDetail","PreviousStructureDetail","indexStructureSelected","ShowNextStructureDetail","NextStructureDetail","selectedOptionCode","firtsCharacteristicCode","FilterClearCharacteristicsOptions","previousValue","dxTextBoxInstance","GetStructurePhotography","specificStructure","structureCodeToGet","GetStructurePhotographyFromServer","GetCharacteristicOptionPhotography","FilterOption","fieldOption","OpenProjectDialog","StepMakeAList","numberOfStructuresToAdd","count","structureCharacteristic","valueCodeToSet","optionToSet","valueToAdd","BackToMakeAList","GetFieldsToConsiderInLeanProject","FieldsToConsiderInLeanProject","DeleteStructure","structureToDelete","structureMainCode","DuplicateStructure","structureToDuplicate","numberOfStructuresToDuplicate","valueToConsider","structureToUpdate","HasSelectedStructures","OnUploadPhoto","photo","photoInBase64","imageType","GetImageTypeFromBase64","UploadedPhoto","ClearPhoto","mainStructure","AddColumn","CheckAddColumn","String","padStart","GetNextPosition","GetNumberOfItens","Photos","ContactEmails","Quantity","SubmissionTypeCode","BackToLeanProject","structuresToSend","structureToSend","importCsvApiUrl","SetFiltersToStructure","FolderName","isTechnicalEmail","emails","ImportStructureCsv","databaseName","GetProjectStructurePhotography","GetProjectStructurePhotographyFromServer","CloseStructures","individualStructurePhotography","defaultTitle","defaultCanonicalUrl","defaultMetaDescription","defaultMetaKeyword","Areas","Area","SetSeoData","Keywords","GetSolutionById","GetSolutionByOldId","oldId","OldId","defaultSolution","SetDefaultSolution","GetMaximumSolutionId","maximumId","SetProjectSolutions","ConnectedToSolutionIds","connectedToSolutionId","line","StartSolutionId","EndSolutionId","lines","SetNotesOnChange","attributes","AddSolutionToSequencer","Duplicate","Remove","SetSequencerProperties","dxScrollView","showScrollbar","UpdateLines","CheckMove","fromColumnId","toColumnId","IncrementSolutionsOrder","DecrementSolutionsOrder","RemoveAndHideLines","MoveSolution","itemOrientation","handle","SetSolutionsOrder","columnsToSetOrder","columnToSetOrder","orderStart","orderEnd","solutionsToReorder","solutionToReorder","CheckKey","keyEvent","oldProjectSolutions","oldSolution","columnIdToReorder","DeleteSolutionById","DuplicateSolutionById","newSolution","order","numberOfSolutions","numberOfColumns","CheckSequencerColumns","checkColumns","columnsWithSolutions","indexofColumnWithSolutions","DecrementSolutionsColumnId","CheckSolutionsColumn","newStartSolution","newEndSolution","newLine","NewLine","SetLines","SetSequencer","CompanyName","emailValid","openStructures","startSolution","SendSolutionsToStructures","startLineId","endLineId","LeaderLine","scrollVertical","scrollHorizontal","scrollBottom","scrollLeft","scrollRight","existUpdates","dotStart","dotEnd","dotStartTop","dotEndTop","dotStartLeft","dotEnddotStartLeft","Hidden","linesToRemoveAndHide","ListLinesBySolution","RemoveAndHideLine","HideLine","StartLine","SolutionToStartLine","EndLine","ShowDotStart","ShowDotEnd","DotColorRed","GetNumberOfStartLinesHidden","GetNumberOfEndLinesHidden","structureslink","newPhotographyImage","filename","solutionCodesToGetPhoto","solutionsFromCsvMenu","NoSolutionsWereFound","promisesToGetPhotographies","Set","newPromise","results","solutionFromCsvMenu","solutionCodesToGetPhotoIndex","GetSolutionsFromCsvInMenu","$mdToast","toast","simple","hideDelay","textContent","highlightAction","highlightClass","_ShowToast","toastClass","_ShowToastWarning","_UpdateStateButton","$stateProvider","$urlRouterProvider","otherwise","$injector","invoke","templateUrl","ReadXml","xmlFile","dataToBase64","TextDecoder","decode","saveAs","byId","XmlFile","version","parentModel","uploadUsingUpload","resumable","upload","getReqParams","resumeSizeUrl","encodeURIComponent","resumeChunkSize","chunkSize","optional-header","errorMsg","progress","loaded","uploadUsing$http","http","uploadS3","s3url","AWSAccessKeyId","acl","policy","signature","storeS3UploadConfigInLocalStore","howToSend","success_action_redirect","usingFlash","FileAPI","CloseUploadFileDialog","changeAngularVersion","hash","angularVersion","invalidFiles","InvalidFiles","invalidFilesAnnex","InvalidFilesAnnex","invalidFilesNotesAnnex","InvalidFilesNotesAnnex","invalidFilesNotesAnnexPhoto","InvalidFilesNotesAnnexPhoto","maxSize","$errorMessages","$errorParam","LoadingUpload","FileUploadNameNotesAnnex","FileUploadNameNotesAnnexPhoto","files","formUpload","FileUploadName","FilesNotesAnnex","FilesNotesAnnexPhoto","uploadPic","isResumeSupported","restart","generateSignature","AWSSecretKey","jsonPolicy","defaultHtml","fromLocal","editHtml","confirm","generateErrorOnServer","serverErrorCode","serverErrorMsg","modelOptionsObj","validateObj","eval","validate","dragOverClassObj","dragOverClass","modelOptions","resizeObj","resizeIfFn","resizeIf","capture","acceptSelect","allowDir","keep","keepDistinct","orientation","runAllValidations","dimensions","duration","maxFiles","ignoreInvalid"],"mappings":"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","file":"../GeneralBundle.1739284541000.js","sourcesContent":["var myApplication = {\r\n projectName: '',\r\n apiName: '',\r\n appName: '',\r\n appCtrl: '',\r\n generalCtrl: '',\r\n protocol: 'http',\r\n projectType: '',\r\n projectTypeMobile: 'Mobile',\r\n projectTypeWeb: 'Web',\r\n language: '',\r\n defaultLanguage: '',\r\n projectTitle: '',\r\n apiMobileServerLink: '',\r\n apiMobileServerPort: '',\r\n dateTimeFormat: 'yyyy/MM/dd HH:mm:ss',\r\n dateFormat: 'yyyy/MM/dd',\r\n dateTimeFormatToDisplay: 'yyyy/MM/dd HH:mm:ss',\r\n dateShortTimeFormatToDisplay: 'yyyy/MM/dd HH:mm',\r\n dateFormatToDisplay: 'yyyy/MM/dd',\r\n timeFormat: 'HH:mm:ss',\r\n timeFormatWithMilliseconds: 'HH:mm:ss:SSS',\r\n shortTimeFormat: 'HH:mm',\r\n yearMonthFormat: 'yyyyMM',\r\n yearMonthFormatToDisplay: 'yyyy/MM',\r\n moneyTwoDecimalCase: { currency: \"EUR\", minimumFractionDigits: 2 },\r\n moneyFiveDecimalCase: { currency: \"EUR\", minimumFractionDigits: 5 },\r\n twoDecimalCase: { type: \"fixedPoint\", precision: 2 },\r\n threeDecimalCase: { type: \"fixedPoint\", precision: 3 },\r\n fourDecimalCase: { type: \"fixedPoint\", precision: 4 },\r\n fiveDecimalCase: { type: \"fixedPoint\", precision: 5 },\r\n dateMonthYearFormat: 'monthAndYear',\r\n dateMonthFormat: 'month',\r\n dateYearFormat: 'year',\r\n horizontalScrollAuxiliaryMenus: true,\r\n numberOfElementsToLoad: 50000,\r\n gridFont: {},\r\n differentLoginPages: [],\r\n differentLogin: '',\r\n loginPage: 'Login',\r\n maxLimitFile: '1GB',\r\n guidEmpty: \"00000000-0000-0000-0000-000000000000\",\r\n listOfTranslationsAreas: [],\r\n defaultNif: '999999990',\r\n numberRequestsToFormat: 5000,\r\n getLanguageObject: new function (typeObject, myApplication) {\r\n this.selectedLanguage = function (typeObject, myApplication) {\r\n if ((myApplication.language.toUpperCase() === \"EN\") || (myApplication.language.toUpperCase() === \"PT-PT\")) {\r\n return myApplication[typeObject][myApplication.language.toUpperCase()];\r\n }\r\n else {\r\n return myApplication[typeObject][myApplication.defaultLanguage.toUpperCase()];\r\n }\r\n };\r\n },\r\n SetApplicationParametrization: new function () {\r\n this.BasicParametrization = function (projectName, apiName, appName, appCtrl, generalCtrl, projectTitle) {\r\n myApplication.projectName = projectName;\r\n myApplication.apiName = apiName;\r\n myApplication.appName = appName;\r\n myApplication.appCtrl = appCtrl;\r\n myApplication.generalCtrl = generalCtrl;\r\n myApplication.projectTitle = projectTitle;\r\n };\r\n this.Protocol = function (protocol) {\r\n myApplication.protocol = protocol;\r\n };\r\n this.Language = function (language, defaultLanguage) {\r\n myApplication.language = language;\r\n myApplication.defaultLanguage = defaultLanguage;\r\n };\r\n this.Layout = function (family, size, color) {\r\n myApplication.gridFont = { family: family, size: size, color: color };\r\n };\r\n this.ProjectType = function (projectType) {\r\n myApplication.projectType = projectType;\r\n };\r\n this.ApiMobileServerLink = function (apiMobileServerLink) {\r\n myApplication.apiMobileServerLink = apiMobileServerLink;\r\n };\r\n this.ApiMobileServerPort = function (apiMobileServerPort) {\r\n myApplication.apiMobileServerPort = apiMobileServerPort;\r\n };\r\n this.ListOfTranslationsAreas = function (listOfTranslationsAreas) {\r\n myApplication.listOfTranslationsAreas = listOfTranslationsAreas;\r\n };\r\n this.Modules = function (modules) {\r\n myApplication.modules = modules;\r\n };\r\n this.DateTimeFormatToDisplay = function (dateTimeFormatToDisplay) {\r\n myApplication.dateTimeFormatToDisplay = dateTimeFormatToDisplay;\r\n };\r\n this.DateFormatToDisplay = function (dateFormatToDisplay) {\r\n myApplication.dateFormatToDisplay = dateFormatToDisplay;\r\n };\r\n this.YearMonthFormatToDisplay = function (yearMonthFormatToDisplay) {\r\n myApplication.yearMonthFormatToDisplay = yearMonthFormatToDisplay;\r\n };\r\n },\r\n gridWarningMessages: {\r\n EN: {\r\n required: new function () {\r\n return function () { return \"Mandatory Field.\"; };\r\n },\r\n email: new function () {\r\n return function () { return \"Email Field.\"; };\r\n },\r\n numeric: new function () {\r\n return function () { return \"Numeric Field.\"; };\r\n },\r\n stringLenghtMax: new function () {\r\n return function (max) { return \"This field can have a maximum amount of \" + max + \" characters.\"; };\r\n },\r\n stringLenghtFixedValue: new function () {\r\n return function (value) { return \"This field has to have \" + value + \" characters.\"; };\r\n },\r\n stringLenghtMin: new function () {\r\n return function (min) { return \"This field can have a minimum amount of \" + min + \" characters.\"; };\r\n },\r\n stringLenghtMinAndMax: new function () {\r\n return function (min, max) { return \"This field can have between \" + min + \" and \" + max + \" characters.\"; };\r\n },\r\n numericRangeMax: new function () {\r\n return function (max) { return \"This value has to have a maximum of \" + max + \".\"; };\r\n },\r\n numericRangeMin: new function () {\r\n return function (min) { return \"This value has to have a minimum of \" + min + \".\"; };\r\n },\r\n numericRangeMinAndMax: new function () {\r\n return function (min, max) { return \"This value has to bee between \" + min + \" and \" + max + \".\"; };\r\n }\r\n },\r\n \"PT-PT\": {\r\n required: new function () {\r\n return function () { return \"Campo obrigatório.\"; };\r\n },\r\n email: new function () {\r\n return function () { return \"Campo email.\"; };\r\n },\r\n numeric: new function () {\r\n return function () { return \"Campo numérico.\"; };\r\n },\r\n stringLenghtMax: new function () {\r\n return function (max) { return \"Este campo pode ter no máximo \" + max + \" carateres.\"; };\r\n },\r\n stringLenghtFixedValue: new function () {\r\n return function (value) { return \"Este campo tem de ter \" + value + \" carateres.\"; };\r\n },\r\n stringLenghtMin: new function () {\r\n return function (min) { return \"Este campo pode ter no mínimo \" + min + \" carateres.\"; };\r\n },\r\n stringLenghtMinAndMax: new function () {\r\n return function (min, max) { return \"Este campo tem de ter entre \" + min + \" e \" + max + \"carateres.\"; };\r\n },\r\n numericRangeMax: new function () {\r\n return function (max) { return \"Este valor tem de ser no máximo \" + max + \".\"; };\r\n },\r\n numericRangeMin: new function () {\r\n return function (min) { return \"Este valor tem de ser no mínimo \" + min + \".\"; };\r\n },\r\n numericRangeMinAndMax: new function () {\r\n return function (min, max) { return \"Este valor tem de ser entre \" + min + \" e \" + max + \".\"; };\r\n }\r\n }\r\n },\r\n warningMessages: {\r\n EN: {\r\n fieldsRequired: new function () {\r\n return function () { return \"There are mandatory fields to fill!\"; };\r\n },\r\n thereWasError: new function () {\r\n return function () { return \"There was an error saving your data.\"; };\r\n },\r\n thereWasErrorTryAgain: new function () {\r\n return function () { return \"There was an error saving your data. Please try again.\"; };\r\n },\r\n leavePage: new function () {\r\n return function () { return \"Leave this page? It is possible that your alterations have not been made.\"; };\r\n },\r\n thereWasErrorGettingData: new function () {\r\n return function () { return \"There was an error getting your data.\"; };\r\n }\r\n },\r\n \"PT-PT\": {\r\n fieldsRequired: new function () {\r\n return function () { return \"Há Campos Obrigatórios por Preencher!\"; };\r\n },\r\n thereWasError: new function () {\r\n return function () { return \"Houve um erro ao guardar os seus dados.\"; };\r\n },\r\n thereWasErrorTryAgain: new function () {\r\n return function () { return \"Houve um erro ao guardar os seus dados. Por favor, tente novamente.\"; };\r\n },\r\n leavePage: new function () {\r\n return function () { return \"Quer deixar a página? É possível que as suas alterações não tenham sido feitas.\"; };\r\n }\r\n }\r\n },\r\n concurrencyDataTexts: {\r\n EN: {\r\n deletedRegister: \"This register was deleted from server.\",\r\n serverData: \"Server Data\",\r\n enabled: \"Enabled\",\r\n disabled: \"Disabled\",\r\n editedRegister: \"This register was edited.\"\r\n },\r\n \"PT-PT\": {\r\n deletedRegister: \"Este registo foi eliminado no servidor.\",\r\n serverData: \"Dados no Servidor\",\r\n enabled: \"Ativo\",\r\n disabled: \"Inativo\",\r\n editedRegister: \"Este registo foi editado.\"\r\n }\r\n },\r\n loginMobileTexts: {\r\n EN: {\r\n errorProcessingLogin: \"Error processing your login.\",\r\n errorReadingData: \"There was an error reading your data, please try again.\",\r\n invalidLogin: \"Invalid Login.\",\r\n chooseValidConnection: \"Choose a valid connection.\"\r\n },\r\n \"PT-PT\": {\r\n errorProcessingLogin: \"Erro ao processar login.\",\r\n errorReadingData: \"Houve um erro a ler os seus dados, por favor tente novamente.\",\r\n invalidLogin: \"Login inválido.\",\r\n chooseValidConnection: \"Escolha uma conexão válida.\"\r\n }\r\n },\r\n basePageTexts: {\r\n EN: {\r\n tools: \"Tools\",\r\n exportExcel: \"Export to Excel\",\r\n exportXML: \"Export to XML\",\r\n exportPDF: \"Export to PDF\",\r\n hideDisabled: \"Hide Disabled\",\r\n showDisabled: \"Show Disabled\",\r\n loadingData: \"There are still data loading.\",\r\n loading: \"Loading...\",\r\n enabled: \"Enabled\",\r\n disabled: \"Disabled\",\r\n deleteSuccess: \" was deleted successfully.\",\r\n insert: \"Insert\",\r\n all: \"(All)\",\r\n yes: \"Yes\",\r\n no: \"No\",\r\n noDataFound: \"No data was found.\",\r\n continueNextPage: \"Continues on the next page\",\r\n selectLater: \"Select Later...\",\r\n chooseOption: \"Choose an option...\",\r\n confirmDelete: \"Are you sure you want to delete this register?\",\r\n welcome: \"Welcome, \",\r\n your: \"Your \",\r\n new: \"New\",\r\n changeProfile: \"Change User Profile\",\r\n userData: \"User Data\",\r\n photography: \"Photography\",\r\n name: \"Name\",\r\n email: \"Email\",\r\n language: \"Language\",\r\n updateProfile: \"Update Profile\",\r\n changePassword: \"Change Password\",\r\n newPassword: \"New Password\",\r\n confirmNewPassword: \"Confirm New Password\",\r\n currentPassword: \"Current Password\",\r\n canNotBeEqualToYourPreviousPassword: \"Your new password can not be equal to your previous password.\",\r\n passwordsDoNotMatch: \"The passwords do not match.\",\r\n state: \"State\",\r\n goBack: \"Go Back\",\r\n somethingWentWrong: \"Oops, something went wrong\",\r\n success: \"Success\",\r\n filters: \"Filters\",\r\n options: \"Options\",\r\n list: \"View in List\",\r\n thumbnails: \"Thumbnails\",\r\n history: \"History\",\r\n warning: \"Warning\",\r\n search: \"Search\",\r\n stillDataLoading: \"There is still data loading.\",\r\n errorEstablishingConnection: \"There was an error establishing the connection!\"\r\n },\r\n \"PT-PT\": {\r\n tools: \"Ferramentas\",\r\n exportExcel: \"Exportar para Excel\",\r\n exportPDF: \"Exportar para PDF\",\r\n exportXML: \"Exportar para XML\",\r\n hideDisabled: \"Esconder os Inativos\",\r\n showDisabled: \"Mostrar os Inativos\",\r\n loadingData: \"Ainda há dados a ser carregados.\",\r\n loading: \"A Carregar...\",\r\n enabled: \"Ativo\",\r\n disabled: \"Inativo\",\r\n deleteSuccess: \" foi removido com sucesso.\",\r\n insert: \"Inserir\",\r\n all: \"(Tudo)\",\r\n yes: \"Sim\",\r\n no: \"Não\",\r\n noDataFound: \"Não foram encontrados dados.\",\r\n continueNextPage: \"Continua na página seguinte\",\r\n selectLater: \"Escolher depois...\",\r\n chooseOption: \"Escolha uma opção...\",\r\n confirmDelete: \"Tem a certeza de que pretende eliminar este registo?\",\r\n welcome: \"Bem vindo, \",\r\n your: \"\",\r\n new: \"Novo\",\r\n changeProfile: \"Editar Perfil\",\r\n userData: \"Dados Utilizador\",\r\n photography: \"Fotografia\",\r\n name: \"Nome\",\r\n email: \"E-mail\",\r\n language: \"Linguagem\",\r\n updateProfile: \"Alterar Dados\",\r\n changePassword: \"Alterar Password\",\r\n newPassword: \"Nova Password\",\r\n confirmNewPassword: \"Confirmar Nova Password\",\r\n currentPassword: \"Password Atual\",\r\n canNotBeEqualToYourPreviousPassword: \"A sua nova Password não pode ser igual à anterior.\",\r\n passwordsDoNotMatch: \"As Passwords não correspondem.\",\r\n success: \"Sucesso\",\r\n state: \"Estado\",\r\n goBack: \"Voltar\",\r\n somethingWentWrong: \"Ups, algo está errado\",\r\n filters: \"Filtros\",\r\n options: \"Opções\",\r\n list: \"Vista em Lista\",\r\n thumbnails: \"Cartões\",\r\n history: \"Histórico\",\r\n warning: \"Aviso\",\r\n search: \"Pesquisa\",\r\n stillDataLoading: \"Ainda há dados a serem carregados.\",\r\n errorEstablishingConnection: \"Houve um erro a estabelecer a ligação!\"\r\n }\r\n },\r\n historyTexts: {\r\n EN: {\r\n field: \"Field\",\r\n oldRegister: \"Old Register\",\r\n newRegister: \"New Register\",\r\n user: \"User\",\r\n alterationDate: \"Alteration Date\",\r\n noDataFound: \"No data was found\"\r\n },\r\n \"PT-PT\": {\r\n field: \"Campo\",\r\n oldRegister: \"Registo Antigo\",\r\n newRegister: \"Novo Registo\",\r\n user: \"Utilizador\",\r\n alterationDate: \"Data de Alteração\",\r\n noDataFound: \"Não foram encontrados dados.\"\r\n }\r\n },\r\n saveCancelButtonsTexts: {\r\n EN: {\r\n save: \"Save\",\r\n cancel: \"Cancel\",\r\n successfullSave: \"Your data was saved successfully.\",\r\n new: \"New\",\r\n delete: \"Delete\",\r\n submit: \"Submit\",\r\n successProfileSave: \"Your data was updated successfully. Please login again.\",\r\n setValues: \"Set Standard Values\",\r\n successValuesSave: \"Your standard values were defined successfully.\"\r\n },\r\n \"PT-PT\": {\r\n save: \"Guardar\",\r\n cancel: \"Cancelar\",\r\n successfullSave: \"Os seus dados foram guardados com sucesso.\",\r\n new: \"Novo\",\r\n delete: \"Eliminar\",\r\n submit: \"Submeter\",\r\n successProfileSave: \"Os seus dados foram atualizados com sucesso. Por favor faça login novamente.\",\r\n setValues: \"Definir Valores Padrão\",\r\n successValuesSave: \"Os seus valores padrão foram definidos com sucesso.\"\r\n }\r\n },\r\n validationsTexts: {\r\n EN: {\r\n notAllowed: \"Not Allowed\",\r\n error: \"Error\",\r\n errorLoadingTranslations: \"There was an error loading your translations.\",\r\n browserBlockingTranslations: \"Your browser configurations is blocking the translations.\"\r\n },\r\n \"PT-PT\": {\r\n notAllowed: \"Não Permitido\",\r\n error: \"Erro\",\r\n errorLoadingTranslations: \"Houve um erro ao carregar as suas traduções.\",\r\n browserBlockingTranslations: \"As configurações do seu browser estão a bloquear as traduções.\"\r\n }\r\n },\r\n generalFunctionsTexts: {\r\n EN: {\r\n pendingChanges: \"There are pending changes. Are you sure you want to leave this page?\",\r\n confirmDelete: \"Are you sure you want to delete this registers?\",\r\n irreversible: \"This option is irreversible.\",\r\n delete: \"Delete\",\r\n exportExcel: \"Export to Excel\",\r\n search: \"Search...\",\r\n enabled: \"Enabled\",\r\n disabled: \"Disabled\",\r\n loading: \"Loading...\",\r\n loadingRequests: \"Loading your requests...\",\r\n loadImage: \"Load Image\",\r\n saveImage: \"Save Image\",\r\n removeImage: \"Delete Image\",\r\n select: \"Select\",\r\n noDataFound: \"No data was found.\",\r\n offline: \"Internet connection lost.\",\r\n online: \"Internet connection recovered.\",\r\n days: \"days\",\r\n clearTime: \"Clear Time\",\r\n selectColor: \"Select Color\",\r\n clearColor: \"Clear Color\",\r\n selectTime: \"Select Time\",\r\n Days: \"Days\",\r\n time: \"Time\",\r\n insertImage: \"Insert Image\",\r\n selectImageOrDrag: \"Select a File or Drag it Here.\",\r\n nameOfFile: \"Nome do Ficheiro:\",\r\n today: \"Today\",\r\n clear: \"Clear\",\r\n PasswordSentToYourEmail: \"We will send you an email with the new password.\",\r\n DateMustBeUnique: \"The date must be unique in this column.\",\r\n annexesSelectOrDrag: \"Select your file or drag it here.\"\r\n },\r\n \"PT-PT\": {\r\n pendingChanges: \"Há alterações pendentes.Tem a certeza que pretende sair desta página?\",\r\n confirmDelete: \"Tem a certeza que deseja eliminar estes registos?\",\r\n irreversible: \"Esta opção é irreversível.\",\r\n delete: \"Apagar\",\r\n exportExcel: \"Exportar para Excel\",\r\n search: \"Pesquisar...\",\r\n enabled: \"Ativo\",\r\n disabled: \"Inativo\",\r\n loading: \"A Carregar...\",\r\n loadingRequests: \"A carregar os seus pedidos...\",\r\n loadImage: \"Carregar Imagem\",\r\n saveImage: \"Guardar Imagem\",\r\n removeImage: \"Remover Imagem\",\r\n select: \"Selecionar\",\r\n noDataFound: \"Não foram encontrados dados.\",\r\n offline: \"Sem ligação à internet.\",\r\n online: \"Ligação à internet recuperada.\",\r\n days: \"dias\",\r\n clearTime: \"Limpar Tempo\",\r\n selectColor: \"Selecionar Cor\",\r\n clearColor: \"Limpar Cor\",\r\n selectTime: \"Selecionar Tempo\",\r\n Days: \"Dias\",\r\n time: \"Tempo\",\r\n insertImage: \"Inserir Imagem\",\r\n selectImageOrDrag: \"Selecione um Ficheiro ou Arraste-o para Aqui.\",\r\n nameOfFile: \"Nome do Ficheiro:\",\r\n today: \"Hoje\",\r\n clear: \"Limpar\",\r\n PasswordSentToYourEmail: \"Vamos enviar-lhe um email com a nova password.\",\r\n DateMustBeUnique: \"A data tem que ser única nesta coluna.\",\r\n annexesSelectOrDrag: \"Selecione o seu ficheiro ou arraste-o para aqui.\"\r\n }\r\n },\r\n saveFunctions: {\r\n EN: {\r\n invalidFields: \"There are invalid fields on this page information.\",\r\n invalidFieldsOnTable: \"There are invalid fields on internal table \",\r\n invalidFieldsTable: \"There are invalid fields on table \",\r\n invalidFieldsOnContacts: \"There are invalid fields on contacts.\",\r\n internalTable: \"Internal table \",\r\n isRequired: \" is required.\",\r\n invalidApi: \"No API was found in this connection URL.\",\r\n duplicatedConnection: \"A connection with same Name or Url already exists.\",\r\n defaultConnection: \"A default connection already exists.\",\r\n oneConnection: \"Can't remove this connection, one default connection should exist.\",\r\n invalidFilters: \"There are mandatory filters to fill!\"\r\n },\r\n \"PT-PT\": {\r\n invalidFields: \"Há campos inválidos nas informações desta página.\",\r\n invalidFieldsOnTable: \"Há campos inválidos na tabela interna de \",\r\n invalidFieldsTable: \"Há campos inválidos na tabela \",\r\n invalidFieldsOnContacts: \"Há campos inválidos nos contactos.\",\r\n internalTable: \"A tabela interna de \",\r\n isRequired: \" é obrigatória.\",\r\n invalidApi: \"Não foi encontrada API no URL inserido.\",\r\n duplicatedConnection: \"Uma conexão com o mesmo Nome ou Url já existem.\",\r\n defaultConnection: \"Já existe uma conexão por defeito.\",\r\n oneConnection: \"Não é possivel eliminar esta conexão, deve existir uma conexão por defeito.\",\r\n invalidFilters: \"Há filtros obrigatórios por preencher!\"\r\n }\r\n },\r\n notesFunctions: {\r\n EN: {\r\n noNotesWereFound: \"No notes were found.\",\r\n downloadAttachment: \"Download Attachment\",\r\n deleteAttachment: \"Delete Attachment\",\r\n deleteImage: \"Delete Image\",\r\n edit: \"edit\",\r\n delete: \"delete\",\r\n invalidFile: \"Invalid File!\",\r\n addAttachment: \"Add Attachment\",\r\n invalidPhoto: \"Invalid Photo!\",\r\n addPhoto: \"Add Photo\",\r\n image: \"Image\",\r\n notesOf: \"Notes of \",\r\n thereWarAnErrorUploading: \"There was an error uploading your attachments.\",\r\n fileAttached: \"File Attached\",\r\n photoAttached: \"Photo Attached\",\r\n areYouSureDeleteNote: \"Are you sure you want to delete this note?\",\r\n areYouSureDeletePhoto: \"Are you sure you want to delete this photo?\",\r\n areYouSureDeleteAttachment: \"Are you sure you want to delete this attachment?\",\r\n photoRemovedSuccessfully: \"Photo removed successfully.\",\r\n attachmentRemovedSuccessfully: \"Attachment removed successfully.\",\r\n noteSavedSuccessfully: \"Note saved successfully.\",\r\n noteRemovedSuccessfully: \"Note removed successfully.\",\r\n at: \" at \",\r\n yesterday: \"Yesterday\",\r\n today: \"Today\",\r\n pleaseAddTextOrImage: \"Please add text or an image to your note.\"\r\n },\r\n \"PT-PT\": {\r\n noNotesWereFound: \"Não foram encontradas notas.\",\r\n downloadAttachment: \"Download Anexo\",\r\n deleteAttachment: \"Apagar Anexo\",\r\n deleteImage: \"Apagar Imagem\",\r\n edit: \"editar\",\r\n delete: \"delete\",\r\n invalidFile: \"Ficheiro Inválido!\",\r\n addAttachment: \"Adicionar Anexo\",\r\n invalidPhoto: \"Foto Inválida!\",\r\n addPhoto: \"Adicionar Fotografia\",\r\n image: \"Imagem\",\r\n notesOf: \"Notas de \",\r\n thereWarAnErrorUploading: \"Houve um erro ao fazer upload dos seus anexos.\",\r\n fileAttached: \"Ficheiro Anexado\",\r\n photoAttached: \"Foto Anexada\",\r\n areYouSureDeleteNote: \"Tem a certeza que pretende eliminar esta nota?\",\r\n areYouSureDeletePhoto: \"Tem a certeza que pretende eliminar esta fotografia?\",\r\n areYouSureDeleteAttachment: \"Tem a certeza que pretende eliminar este anexo?\",\r\n photoRemovedSuccessfully: \"Fotografia removida com sucesso.\",\r\n attachmentRemovedSuccessfully: \"Anexo removido com sucesso.\",\r\n noteSavedSuccessfully: \"Nota guardarda com sucesso.\",\r\n noteRemovedSuccessfully: \"Nota removida com sucesso.\",\r\n at: \" às \",\r\n yesterday: \"Ontem\",\r\n today: \"Hoje\",\r\n pleaseAddTextOrImage: \"Por favor adicione texto ou uma imagem à sua nota.\"\r\n }\r\n },\r\n pivotGridTexts: {\r\n EN: {\r\n allFields: \"All Fields\",\r\n columnFields: \"Columns\",\r\n dataFields: \"Values\",\r\n filterFields: \"Filters\",\r\n rowFields: \"Rows\",\r\n title: \"Table Options\",\r\n fromFilter: \"From\",\r\n toFilter: \"to\",\r\n applyFilter: \"Apply\",\r\n grandTotal: \"Total\"\r\n },\r\n \"PT-PT\": {\r\n allFields: \"Todos Campos\",\r\n columnFields: \"Colunas\",\r\n dataFields: \"Valores\",\r\n filterFields: \"Filtros\",\r\n rowFields: \"Linhas\",\r\n title: \"Opções Tabela\",\r\n fromFilter: \"Desde\",\r\n toFilter: \"até\",\r\n applyFilter: \"Aplicar\",\r\n grandTotal: \"Total\"\r\n }\r\n }\r\n};\nmyApplication.SetApplicationParametrization.BasicParametrization('SolutionConfigurator', 'ProposalApi', 'SolutionsApp', 'BaseSolutionsAppCtrl', 'GeneralSolutionsAppCtrl', 'SolutionConfigurator');\r\n\r\nmyApplication.SetApplicationParametrization.Protocol('http');\r\n\r\nmyApplication.SetApplicationParametrization.Language('pt-PT', 'pt-PT');\r\n\r\nmyApplication.SetApplicationParametrization.Layout(\"Roboto\", '12px', '#333333');\r\n\r\nmyApplication.SetApplicationParametrization.ProjectType('Web');\r\n\nvar myApp;\r\nif (myApplication.projectType === myApplication.projectTypeWeb) {\r\n myApp = angular.module(myApplication.appName, ['dx', 'ngStorage', 'ngMaterial', 'ngMessages', 'ngDraggable',\r\n 'ui.sortable', 'ui.router', 'ngSanitize', 'jQueryScrollbar', 'ui.bootstrap', 'ngFileUpload', 'oc.lazyLoad', 'textAngular', 'pascalprecht.translate', 'chrisjsherm.service.uuid', 'angular.bind.notifier', 'ngLocale'], function ($locationProvider) {\r\n if (angular.lowercase === undefined) {\r\n angular.lowercase = angular.$$lowercase;\r\n }\r\n\r\n $locationProvider.html5Mode({\r\n enabled: true,\r\n requireBase: false\r\n });\r\n }).run(function ($rootScope, $http, $location, $sessionStorage, $timeout, $q, GeneralModel, $state) {\r\n window.onhashchange = function (evt) {\r\n $timeout(function () {\r\n var pendingRequests = [];\r\n\r\n $http.pendingRequests.forEach(function (request) {\r\n if (request.cancel) {\r\n pendingRequests.push(request.cancel);\r\n }\r\n });\r\n\r\n if (typeof $sessionStorage.HashObject !== \"undefined\") {\r\n $q.all(pendingRequests).then(function () {\r\n if ($sessionStorage.HashObject.Hash !== \"\") {\r\n $timeout(function () {\r\n angular.element('#' + $sessionStorage.HashObject.Hash).click();\r\n }, 500);\r\n }\r\n });\r\n }\r\n }, 500);\r\n };\r\n\r\n $rootScope.$on('$stateChangeStart', function (event, toState, toParams, _fromState, _fromParams) {\r\n GeneralModel.model.OldParentId = '';\r\n GeneralModel.model.SecondLevelMenu = false;\r\n\r\n if ((myApplication.appName === 'SwebApp') || (myApplication.appName === 'LidarcoApp') || (myApplication.appName === 'SingestJCApp')) {\r\n GeneralModel.Initializer();\r\n }\r\n\r\n if (toState.module) {\r\n let hasAccessToModule = false;\r\n let moduleListToCheck = $sessionStorage.Modules;\r\n\r\n if (myApplication.appName === 'SwebApp') {\r\n moduleListToCheck = $sessionStorage.ConfigurationBase.Modules;\r\n }\r\n\r\n for (var s = 0; s < toState.module.length; s++) {\r\n let moduleCode = toState.module[s];\r\n\r\n if (moduleListToCheck[moduleCode]) {\r\n hasAccessToModule = true;\r\n break;\r\n }\r\n }\r\n\r\n if ((typeof moduleListToCheck !== 'undefined') && !hasAccessToModule) {\r\n event.preventDefault();\r\n $state.go(toState.redirectTo, toParams, { location: 'replace' });\r\n $rootScope.generalModel.FullPageLoading = false;\r\n }\r\n }\r\n\r\n $sessionStorage.HashObject = { PageName: '', Hash: '' };\r\n\r\n if ((typeof $location.$$hash !== \"undefined\") && ($location.$$hash !== null) && ($location.$$hash !== '')) {\r\n $sessionStorage.HashObject = { PageName: toState.name, Hash: $location.$$hash };\r\n }\r\n\r\n $http.pendingRequests.forEach(function (request) {\r\n if (request.cancel) {\r\n request.cancel.resolve({ data: [], statusText: \"OK\", status: 200 });\r\n }\r\n });\r\n });\r\n\r\n $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {\r\n if (typeof $sessionStorage.HashObject === \"undefined\") {\r\n return;\r\n }\r\n\r\n $timeout(function () {\r\n if ((typeof GeneralModel.model.TranslationsObject !== \"undefined\") && (angular.equals(GeneralModel.model.TranslationsObject, {}))) {\r\n GeneralModel.model.TranslationsObject = $sessionStorage.Translations;\r\n }\r\n $rootScope.$broadcast('$$rebind::refresh');\r\n if ((typeof $sessionStorage.HashObject !== \"undefined\") && ($sessionStorage.HashObject.PageName === toState.name) && ($location.$$hash === \"\")) {\r\n window.history.pushState('', '', $location.absUrl() + '#' + $sessionStorage.HashObject.Hash);\r\n }\r\n\r\n });\r\n });\r\n });\r\n}\r\n\r\nmyApp.value('Settings', { IsOnline: true });\r\n\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('GeneralFunctions', [\"GeneralModel\", \"$q\", \"$window\", \"$mdSidenav\", \"$compile\", \"$state\", \"$timeout\", \"$filter\", \"$mdDialog\", \"$parse\", \"ExportFiles\", \"UploadMethod\", \"ConcurrencyData\", \"SaveFunctions\", \"HistoryService\", \"DateOperations\", \"SwebModal\", \"$sessionStorage\", \"$location\", function (GeneralModel, $q, $window, $mdSidenav, $compile, $state, $timeout, $filter, $mdDialog, $parse, ExportFiles, UploadMethod, ConcurrencyData, SaveFunctions, HistoryService, DateOperations, SwebModal, $sessionStorage, $location) {\r\n\r\n function GeneralFunctions(scope, rootScope) {\r\n SwebModal(scope);\r\n\r\n ConcurrencyData(scope);\r\n\r\n SaveFunctions(scope);\r\n\r\n HistoryService(scope);\r\n\r\n DateOperations(scope);\r\n\r\n scope.generalModel.GetMenus = function () {\r\n var menus = $sessionStorage.ParentMenus;\r\n\r\n SetMenusDescription(menus);\r\n\r\n scope.Menus = menus;\r\n\r\n return menus;\r\n }\r\n\r\n scope.generalModel.GetChildrenMenus = function () {\r\n if (!scope.Menus) {\r\n return null;\r\n }\r\n\r\n var parentMenu = scope.Menus.find(find => (find.MenuId === scope.generalModel.ParentId));\r\n\r\n if (!parentMenu) {\r\n return null;\r\n }\r\n\r\n var menus = parentMenu.ChildrenMenus;\r\n\r\n SetMenusDescription(menus);\r\n\r\n return menus;\r\n }\r\n\r\n function SetMenusDescription(menus) {\r\n if (!menus || !menus.length) {\r\n return;\r\n }\r\n\r\n menus.forEach(function (menu) {\r\n if (menu.TranslationCode && scope.generalModel.TranslationsObject) {\r\n menu.Description = scope.generalModel.TranslationsObject[menu.TranslationCode] || menu.TranslationCode;\r\n }\r\n });\r\n }\r\n\r\n scope.generalModel.ChangeMenu = function (Menu) {\r\n if (scope.generalModel.SecondLevelMenu && Menu.ChildrenMenus.length && (scope.generalModel.OldParentId === Menu.MenuId)) {\r\n scope.generalModel.OldParentId = '';\r\n scope.generalModel.SecondLevelMenu = false;\r\n } else if (scope.generalModel.SecondLevelMenu && !Menu.ChildrenMenus.length) {\r\n $state.go(Menu.Link);\r\n }\r\n else {\r\n if (!Menu.ChildrenMenus.length) {\r\n $state.go(Menu.Link);\r\n }\r\n else {\r\n scope.generalModel.ParentId = Menu.MenuId;\r\n scope.generalModel.OldParentId = Menu.MenuId;\r\n scope.generalModel.SecondLevelMenu = true;\r\n }\r\n }\r\n };\r\n\r\n scope.generalModel.MenuActiveClass = function (Menu) {\r\n var activeClass = false;\r\n\r\n if ((typeof Menu !== \"undefined\") && (typeof scope.generalModel.CurrentPage !== \"undefined\")) {\r\n var parent = $filter('filter')($sessionStorage.ParentMenus, { ChildrenMenus: { Link: scope.generalModel.CurrentPage } }, true);\r\n\r\n if ((scope.generalModel.CurrentPage === Menu.Link) || (parent.length && (parent[0].MenuId === Menu.MenuId))) {\r\n activeClass = true;\r\n }\r\n }\r\n\r\n return activeClass;\r\n };\r\n\r\n scope.generalModel.getMenuList = function () {\r\n GeneralModel.GetMenuList();\r\n };\r\n\r\n scope.generalModel.CheckLogin = function () {\r\n GeneralModel.CheckLogin();\r\n };\r\n\r\n scope.generalModel.RefreshPage = function () {\r\n $window.location.reload();\r\n };\r\n\r\n scope.generalModel.ToggleMenu = function () {\r\n $mdSidenav('left').toggle();\r\n };\r\n\r\n scope.generalModel.DownloadFile = function (model, fileName, format, controller, myId, additionalParameters, customAction) {\r\n new ExportFiles(scope, model, fileName, format, controller, myId, additionalParameters, customAction);\r\n };\r\n\r\n scope.generalModel.CallUploadMethod = function () {\r\n UploadMethod(scope);\r\n };\r\n\r\n scope.generalModel.SetMyForms = function () {\r\n if (typeof scope.MyForms === 'undefined') {\r\n scope.MyForms = {};\r\n }\r\n };\r\n\r\n scope.generalModel.OpenTools = function ($mdMenu, event) {\r\n $mdMenu.open(event);\r\n };\r\n\r\n scope.generalModel.CloseTools = function ($mdMenu, event) {\r\n $mdMenu.close(event);\r\n };\r\n\r\n scope.generalModel.OpenDatePicker = function (name) {\r\n var element = $parse(name)(scope);\r\n\r\n if (typeof element === 'undefined') {\r\n element = false;\r\n }\r\n\r\n $parse(name).assign(scope, !element);\r\n };\r\n\r\n scope.generalModel.CheckLinkBreadCrumbs = function ($event, path, parameters) {\r\n $event.preventDefault();\r\n GeneralModel.GoToPageBreadCrumbs(path, parameters);\r\n };\r\n\r\n scope.jqueryScrollbarOptions = {\r\n \"onScroll\": function (y, x) {\r\n if (y.scroll > 100) {\r\n GeneralModel.UpdateStateButton(true);\r\n }\r\n else {\r\n GeneralModel.UpdateStateButton(false);\r\n }\r\n }\r\n };\r\n\r\n scope.ScrollToTop = function (scroll) {\r\n angular.element(scroll).animate({ scrollTop: 0 }, 400);\r\n };\r\n\r\n scope.generalModel.GoToPage = function (path, parameters, reload) {\r\n if (!scope.generalModel.IsOnline) {\r\n return;\r\n }\r\n\r\n var reloadPage = false;\r\n var finalParameters = \"\";\r\n\r\n if ((typeof reload !== \"undefined\") && (reload)) {\r\n reloadPage = true;\r\n }\r\n\r\n if (typeof parameters !== 'undefined') {\r\n finalParameters = parameters;\r\n }\r\n\r\n if (finalParameters !== \"\") {\r\n if (typeof parameters === 'object') {\r\n parameters = JSON.stringify(parameters);\r\n }\r\n\r\n $state.go(path, JSON.parse(parameters), { reload: reloadPage });\r\n }\r\n else {\r\n $state.go(path, {}, { reload: reloadPage });\r\n }\r\n };\r\n\r\n $window.onbeforeunload = function () {\r\n if (($state.current.name === \"Login\") && !scope.generalModel.IsUndefinedEmptyOrNull($sessionStorage.DatabaseName)) {\r\n Translations.DeleteDatabase($sessionStorage.DatabaseName);\r\n }\r\n\r\n if (scope.generalModel.SidebarOptions && scope.generalModel.SidebarOptions.State.SaveOption) {\r\n return !scope.generalModel.IsUndefinedEmptyOrNull(Helpers.Translations.PendingChanges) ? Helpers.Translations.PendingChanges : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).pendingChanges;\r\n }\r\n };\r\n\r\n scope.generalModel.OpenDialog = function (name, multiple) {\r\n $mdDialog.show({\r\n contentElement: '#' + name + '',\r\n parent: angular.element(document.body),\r\n multiple: (typeof multiple !== 'undefined') ? multiple : true,\r\n clickOutsideToClose: false\r\n });\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n scope.generalModel.CloseDialog = function (name) {\r\n $mdDialog.hide({\r\n contentElement: '#' + name + ''\r\n });\r\n\r\n if (name === \"DialogHistory\") {\r\n scope.generalModel.IsHistoryOpen = false;\r\n }\r\n };\r\n\r\n scope.generalModel.CloseDialogConfirmDelete = function () {\r\n $mdDialog.hide({ contentElement: '#DialogConfirmDelete' });\r\n angular.element('#DialogConfirmDelete #DialogConfirmMessage').text(Helpers.Translations.ConfirmDelete);\r\n angular.element('#DialogConfirmDelete #DialogConfirmMessageIrreversible').html(Helpers.Translations.ThisOption + ' ' + Helpers.Translations.Irreversible + '');\r\n angular.element('#DialogConfirmDelete #DialogButtonConfirm').text(Helpers.Translations.Delete);\r\n };\r\n\r\n scope.generalModel.ShowDialogConfirmDelete = function () {\r\n $mdDialog.show({\r\n contentElement: '#DialogConfirmDelete',\r\n parent: angular.element(document.body),\r\n clickOutsideToClose: false\r\n });\r\n };\r\n\r\n scope.generalModel.GeneralGridCheckbox = function (e, tools) {\r\n if ((e.column.userDataType === 'boolean') && e.column.allowEditing) {\r\n angular.element(e.cellElement).find('.dx-widget.dx-checkbox').attr('ng-click', 'generalModel.GeneralGridCheckboxClicked(' + tools + ')');\r\n $compile(e.cellElement)(scope);\r\n }\r\n };\r\n\r\n scope.generalModel.GeneralGridCheckboxClicked = function (tools) {\r\n if (typeof tools !== 'undefined') {\r\n tools = true;\r\n }\r\n\r\n scope.generalModel.SidebarOptions.State.SaveOption = true;\r\n scope.generalModel.SidebarOptions.State.CancelOption = true;\r\n };\r\n\r\n scope.generalModel.RefreshFilterSideBarHeight = function () {\r\n var sideBarHeight = parseInt(angular.element('#SideBar').css('height'));\r\n var value = 250;\r\n var element = angular.element('#OptionsArea');\r\n var tools = angular.element('#ToolsArea');\r\n var title = angular.element('#FilterArea > h3');\r\n\r\n if (element.length && tools.length && ((element.height() + tools.height() + title.height()) > value)) {\r\n value = element.height() + tools.height() + title.height;\r\n }\r\n\r\n $timeout(angular.element('#FilterArea > .SideBarFilters').css('height', '' + (sideBarHeight - value) + 'px'), 100);\r\n };\r\n\r\n scope.generalModel.CloseOpenSideBarArea = function (area) {\r\n var findElement = angular.element('.' + area);\r\n\r\n if (findElement.hasClass('DisplayNone')) {\r\n angular.element('#IconOpenClose' + area + '.IconOpenClose').text('-');\r\n findElement.removeClass('DisplayNone');\r\n }\r\n else {\r\n angular.element('#IconOpenClose' + area + '.IconOpenClose').text('+');\r\n findElement.addClass('DisplayNone');\r\n }\r\n\r\n if (area === 'SideBarFilters') {\r\n scope.generalModel.RefreshFilterSideBarHeight();\r\n }\r\n };\r\n\r\n scope.generalModel.CreateExportToExcelButton = function (buttonName, gridName, drawFunction) {\r\n angular.element(\"#\" + buttonName + \"\").dxButton({\r\n onClick: function () {\r\n if (!angular.element(\"#\" + gridName).hasClass(\"dx-widget\")) {\r\n if (typeof drawFunction !== \"undefined\") {\r\n drawFunction();\r\n scope.generalModel.PendingExportToExcel = true;\r\n }\r\n }\r\n else {\r\n var grid;\r\n grid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n grid.exportToExcel();\r\n }\r\n }\r\n });\r\n };\r\n\r\n scope.generalModel.CreateSearchBox = function (boxName, gridName, model) {\r\n var delaySearch;\r\n angular.element(\"#\" + boxName + \"\").dxTextBox({\r\n placeholder: !scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Search : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).search,\r\n mode: 'search',\r\n valueChangeEvent: 'keyup',\r\n onValueChanged: function (e) {\r\n if ((typeof model !== \"undefined\") && (typeof model.HasMasterDetail !== \"undefined\") && model.HasMasterDetail) {\r\n scope.generalModel.FilterGridModeMasterDetail(e.value, model, [model.GridListName, model.MasterDetailsListName], model.MainElementName);\r\n angular.element(\"#\" + gridName).dxDataGrid('instance').option('dataSource', model[model.MainElementName]);\r\n angular.element(\"#\" + gridName).dxDataGrid('instance').refresh();\r\n }\r\n else if ((typeof model !== \"undefined\") && (typeof model.OverrideGridSearch !== \"undefined\") && model.OverrideGridSearch) {\r\n clearTimeout(delaySearch);\r\n\r\n delaySearch = setTimeout(function () {\r\n var filterFunction = function (item) {\r\n return model.FilteredConditionsGrid(item);\r\n };\r\n\r\n scope.generalModel.SearchGridModeValue = e.value;\r\n model[model.MainElementName] = $filter('filter')(model[model.GridListName], filterFunction);\r\n angular.element(\"#\" + gridName).dxDataGrid('instance').option('dataSource', model[model.MainElementName]);\r\n angular.element(\"#\" + gridName).dxDataGrid('instance').refresh();\r\n }, 1000);\r\n }\r\n else {\r\n var grid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n grid.searchByText(e.value);\r\n }\r\n }\r\n });\r\n };\r\n\r\n scope.generalModel.CreateSearchBoxForGridMode = function (boxName) {\r\n angular.element(\"#\" + boxName + \"\").html('
');\r\n $compile(angular.element(\"#\" + boxName + \" > div\"))(scope);\r\n };\r\n\r\n scope.generalModel.GenerateDisableEnableObject = function (gridName, object, id, container) {\r\n angular.element('').html(object[id] ? '' + ((!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.Disabled : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).disabled) + '' : '' + (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Enabled : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).enabled) + '')\r\n .on('dxclick', function () {\r\n var index = scope.generalModel.FindIndex(this);\r\n\r\n if (!angular.element(this).hasClass(\"LinkDisabled\")) {\r\n scope.generalModel.DisableEnable(index, gridName, (object[id] ? false : true));\r\n var grid;\r\n\r\n if (angular.element(\"#\" + gridName).hasClass('dx-treelist')) {\r\n grid = angular.element('#' + gridName).dxTreeList('instance');\r\n }\r\n else {\r\n grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n }\r\n\r\n if (typeof grid !== 'undefined') {\r\n grid.refresh();\r\n }\r\n }\r\n }).appendTo(container);\r\n };\r\n\r\n scope.generalModel.GenerateCheckboxObject = function (gridName, object, id, container) {\r\n angular.element('')\r\n .on('dxclick', function () {\r\n var index = scope.generalModel.FindIndex(this);\r\n if (!angular.element(this).hasClass(\"LinkDisabled\")) {\r\n scope.generalModel.SetCheckboxValue(index, gridName, (object[id] ? false : true), id);\r\n }\r\n }).appendTo(container);\r\n };\r\n\r\n scope.generalModel.GenerateDisableEnableObjectNotAllowEdition = function (gridName, object, id, container) {\r\n angular.element('')\r\n .html(object[id] ? '' + ((!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.Disabled : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).disabled) + '' : '' + ((!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.Enabled : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).enabled) + '')\r\n .appendTo(container);\r\n };\r\n\r\n scope.generalModel.DisableEnable = function (rowIndex, gridName, status) {\r\n if ((gridName === '') || (typeof gridName === 'undefined')) {\r\n return;\r\n }\r\n\r\n var grid;\r\n var findElement = angular.element(\"#\" + gridName);\r\n\r\n if (findElement.hasClass('dx-treelist')) {\r\n grid = findElement.dxTreeList('instance');\r\n }\r\n else {\r\n grid = findElement.dxDataGrid('instance');\r\n }\r\n\r\n grid.cellValue(rowIndex, 'Disabled', status);\r\n };\r\n\r\n scope.generalModel.SetCheckboxValue = function (rowIndex, gridName, status, dataField) {\r\n if ((gridName === '') || (typeof gridName === 'undefined')) {\r\n return;\r\n }\r\n\r\n var grid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n grid.cellValue(rowIndex, dataField, status);\r\n };\r\n\r\n scope.generalModel.FilterGridMode = function (value, model, objectName, filteredObjectName) {\r\n var filterFunction = function (item) {\r\n return model.FilteredConditions(item);\r\n };\r\n\r\n model[filteredObjectName] = $filter('filter')(model[objectName], filterFunction, value);\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(model.CurrentPage) && !model.PageClick && $('#alt-style-pagination').length) {\r\n model.CurrentPage = 1;\r\n $('#alt-style-pagination').pagination('selectPage', 1);\r\n\r\n if ($location.absUrl().substr(0, $location.absUrl().indexOf('#')) !== '') {\r\n window.history.pushState('', '', $location.absUrl().substr(0, $location.absUrl().indexOf('#')) + '#page-1');\r\n }\r\n }\r\n };\r\n\r\n Array.prototype.unique = function () {\r\n var a = this.concat();\r\n\r\n for (var i = 0; i < a.length; ++i) {\r\n for (var j = i + 1; j < a.length; ++j) {\r\n if (a[i] === a[j])\r\n a.splice(j--, 1);\r\n }\r\n }\r\n\r\n return a;\r\n };\r\n\r\n scope.generalModel.FilterGridModeMasterDetail = function (value, model, objectNames, filteredObjectName) {\r\n var filterFunction = function (item) {\r\n return model.FilteredConditionsMasterDetail(item, value);\r\n };\r\n\r\n var mainElementFilteredIds = $filter('filter')(model[objectNames[0]], filterFunction, value).map(function (item) {\r\n return item[model.IdName];\r\n });\r\n\r\n var childElementFilteredIds = $filter('filter')(model[objectNames[1]], filterFunction, value).map(function (item) {\r\n return item[model.IdName];\r\n });\r\n\r\n var concateArray = mainElementFilteredIds.concat(childElementFilteredIds).unique();\r\n\r\n model[filteredObjectName] = $filter('filter')(model[objectNames[0]],\r\n function (item) {\r\n return (concateArray.indexOf(item[model.IdName]) !== -1)\r\n }, concateArray);\r\n };\r\n\r\n scope.$watch('generalModel.ViewMode', function (_value, oldValues, scope) {\r\n if (angular.element('#GridBase').length && (angular.element(\"#GridBase\").hasClass(\"dx-widget\"))) {\r\n if (angular.element('#SearchTextBoxBase').length) {\r\n if (oldValues) {\r\n angular.element('#SearchTextBoxBase').dxTextBox('instance').option(\"value\", scope.generalModel.SearchGridModeValue);\r\n }\r\n else {\r\n scope.generalModel.SearchGridModeValue = angular.element('#SearchTextBoxBase').dxTextBox('instance').option(\"value\");\r\n }\r\n }\r\n\r\n if (!scope.generalModel.ViewMode) {\r\n angular.element('#GridBase').dxDataGrid('instance').refresh();\r\n }\r\n }\r\n });\r\n\r\n scope.generalModel.GetMainId = function (idName, object) {\r\n var id = scope.generalModel.AngularCopy(scope.generalModel.GetObjectByString(object, idName));\r\n\r\n if (typeof id === 'undefined') {\r\n id = object.__KEY__;\r\n }\r\n\r\n return id;\r\n };\r\n\r\n scope.generalModel.GetObjectByString = function (object, string) {\r\n if (angular.isObject(object) && !scope.generalModel.IsUndefinedEmptyOrNull(string)) {\r\n string = string.replace(/\\[(\\w+)\\]/g, '.$1');\r\n string = string.replace(/^\\./, '');\r\n var division = string.split('.');\r\n\r\n for (var i = 0, n = division.length; i < n; ++i) {\r\n var k = division[i];\r\n if (object !== null) {\r\n if (k in object) {\r\n object = object[k];\r\n }\r\n else {\r\n return;\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n return object;\r\n };\r\n\r\n scope.generalModel.IsNotUndefinedEmptyOrNull = function (value) {\r\n var result = (!angular.isUndefined(value) && (value !== null) && (value !== '') && (value !== 'null') && (value !== 'undefined'));\r\n\r\n return result;\r\n };\r\n\r\n scope.generalModel.IsNotUndefinedEmptyOrNullObject = function (value) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(value)) {\r\n return false;\r\n }\r\n\r\n if (value instanceof Date) {\r\n return true;\r\n }\r\n\r\n if ((typeof value === 'object') && !(value instanceof Date)) {\r\n var result = (Object.keys(value).length !== 0);\r\n\r\n return result;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n scope.generalModel.IsUndefinedEmptyOrNull = function (value) {\r\n var result = (!scope.generalModel.IsNotUndefinedEmptyOrNull(value));\r\n\r\n return result;\r\n };\r\n\r\n scope.generalModel.IsUndefinedEmptyOrNullObject = function (value) {\r\n var result = (!scope.generalModel.IsNotUndefinedEmptyOrNullObject(value));\r\n\r\n return result;\r\n };\r\n\r\n scope.generalModel.IsObjectEmpty = function (object) {\r\n if (typeof object === 'object') {\r\n return !Object.keys(object).length;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n scope.generalModel.SetObjectValueByString = function (object, string, value) {\r\n var stringArray = [];\r\n var cutedString = scope.generalModel.AngularCopy(string);\r\n var i;\r\n var total = 1;\r\n total += string.replace(/[^.]/g, \"\").length;\r\n total += string.replace(/[^[]/g, \"\").length;\r\n\r\n for (var n = 0; n < total; n++) {\r\n if ((cutedString.indexOf('.') > -1) && ((cutedString.indexOf('.') < cutedString.indexOf('[')) || (cutedString.indexOf('[') === -1))) {\r\n stringArray[n] = cutedString.split('.')[0];\r\n\r\n if (cutedString.split('.')[0].substring(cutedString.split('.')[0].length - 1) === ']') {\r\n stringArray[n] = cutedString.split('.')[0].substring(0, cutedString.split('.')[0].length - 1);\r\n }\r\n\r\n cutedString = cutedString.substr(cutedString.split('.')[0].length + 1);\r\n }\r\n else if ((cutedString.indexOf('[') > -1) && ((cutedString.indexOf('[') < cutedString.indexOf('.')) || (cutedString.indexOf('.') === -1))) {\r\n stringArray[n] = cutedString.split('[')[0];\r\n\r\n if (cutedString.split('[')[0].substring(cutedString.split('[')[0].length - 1) === ']') {\r\n stringArray[n] = cutedString.split('.')[0].substring(0, cutedString.split('.')[0].length - 1);\r\n }\r\n\r\n cutedString = cutedString.substr(cutedString.split('[')[0].length + 1);\r\n }\r\n else {\r\n stringArray[n] = scope.generalModel.AngularCopy(cutedString);\r\n break;\r\n }\r\n }\r\n\r\n for (i = 0; i < stringArray.length - 1; i++) {\r\n object = object[stringArray[i]];\r\n }\r\n\r\n object[stringArray[i]] = scope.generalModel.AngularCopy(value);\r\n };\r\n\r\n scope.generalModel.HasObjectKeys = function (object) {\r\n for (var key in object) {\r\n if (object.hasOwnProperty(key)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n scope.generalModel.ValidateDate = function (string) {\r\n var dateRegex = /^(?:\\d{4}|\\d{2})([./-])\\d{2}\\1(?:\\d{4}|\\d{2})$/;\r\n var isoDateRegex = /\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d/;\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(string) && (typeof string !== \"object\")) {\r\n if (isNaN(string) && (typeof string !== \"boolean\") && ((string.match(dateRegex) !== null) || (string.match(isoDateRegex) !== null))) {\r\n var date = new Date(string);\r\n\r\n if (isNaN(string) && !isNaN(date.getTime())) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n scope.generalModel.FindIndex = function (element) {\r\n if (angular.element(element).parents('.dx-datagrid-table').find('tbody').length > 1) {\r\n var rowsCount = 0;\r\n\r\n angular.element(element).parents('.dx-datagrid-table').find('tbody').each(function (index) {\r\n if (angular.element(element).closest('tbody').index() > index + 1) {\r\n rowsCount += angular.element(this).find('.dx-row').length;\r\n }\r\n });\r\n\r\n return (rowsCount + angular.element(element).closest('.dx-row').index());\r\n }\r\n else {\r\n return angular.element(element).closest('.dx-row').index();\r\n }\r\n };\r\n\r\n scope.generalModel.GetExtraConnection = function (id) {\r\n return GeneralModel.GetExtraConnection(id);\r\n };\r\n\r\n scope.generalModel.DownloadFileObject = function (fileName, fileData, contentType, extension, action) {\r\n var blob;\r\n if ((extension === '.pdf') && scope.generalModel.IsUndefinedEmptyOrNull(action)) {\r\n var loading = '';\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) {\r\n loading = Helpers.Translations.Loading;\r\n }\r\n else {\r\n loading = myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).loading;\r\n }\r\n\r\n scope.generalModel.NewWindow.document.write('
' + loading + '
');\r\n $(scope.generalModel.NewWindow.document).find(\"head\").append('');\r\n\r\n if (scope.generalModel.NewWindow.canRunAds === undefined) {\r\n scope.generalModel.NewWindow.close();\r\n scope.generalModel.DownloadFileObject(fileName, fileData, 'application/pdf', '.pdf', 'download');\r\n }\r\n else {\r\n blob = scope.generalModel.Base64ToBlob(fileData, 'application/pdf');\r\n\r\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveOrOpenBlob(blob);\r\n scope.generalModel.NewWindow.close();\r\n }\r\n else {\r\n scope.generalModel.NewWindow.location.href = URL.createObjectURL(blob);\r\n }\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n }\r\n\r\n scope.generalModel.NewWindow = \"\";\r\n }\r\n else {\r\n blob = scope.generalModel.Base64ToBlob(fileData, contentType);\r\n var completeFileName = fileName + extension;\r\n\r\n if (typeof window.navigator.msSaveBlob !== 'undefined') {\r\n window.navigator.msSaveBlob(blob, completeFileName);\r\n\r\n $timeout(function () {\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n\r\n return;\r\n }\r\n\r\n const blobURL = window.URL.createObjectURL(blob);\r\n\r\n if (myApplication.projectType === myApplication.projectTypeMobile) {\r\n window.createFileChooser.GetBase64FromBlobData(fileData, completeFileName);\r\n }\r\n\r\n const tempLink = document.createElement('a');\r\n tempLink.style.display = 'none';\r\n tempLink.href = blobURL;\r\n tempLink.setAttribute('download', completeFileName);\r\n\r\n if (typeof tempLink.download === 'undefined') {\r\n tempLink.setAttribute('target', '_blank');\r\n }\r\n\r\n document.body.appendChild(tempLink);\r\n tempLink.click();\r\n document.body.removeChild(tempLink);\r\n\r\n $timeout(function () {\r\n window.URL.revokeObjectURL(blobURL);\r\n }, 100);\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n }\r\n };\r\n\r\n scope.generalModel.ShowInsertImageDialog = function () {\r\n $mdDialog.show({\r\n multiple: true,\r\n contentElement: '#DialogInsertImage',\r\n parent: angular.element(document.body),\r\n clickOutsideToClose: false\r\n });\r\n };\r\n\r\n scope.generalModel.CloseInsertImageDialog = function () {\r\n scope.invalidFields = [];\r\n scope.generalModel.InvalidFields = [];\r\n scope.generalModel.StoredImageGridModel = \"\";\r\n scope.generalModel.StoredImageGridKey = \"\";\r\n scope.generalModel.ObjectToStoreImage = \"\";\r\n scope.generalModel.ObjectToStoreImageId = \"\";\r\n scope.generalModel.ObjectToStoreImageContentId = \"\";\r\n scope.generalModel.StoredImageFieldName = \"\";\r\n $mdDialog.hide({ contentElement: '#DialogInsertImage' });\r\n };\r\n\r\n scope.generalModel.AddPhotography = function (object, id, model, gridKey, fieldId) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(gridKey)) {\r\n gridKey = \"\";\r\n }\r\n\r\n var element = null;\r\n\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(gridKey)) {\r\n element = $parse(object)(rootScope);\r\n }\r\n\r\n if (!scope.generalModel.IsOnline) {\r\n return;\r\n }\r\n\r\n var image;\r\n\r\n for (var j = 0; j < scope.generalModel.PhotographyList.length; j++) {\r\n if (scope.generalModel.PhotographyList[j].Id === id) {\r\n image = scope.generalModel.PhotographyList[j].Photography;\r\n }\r\n }\r\n\r\n if ((element === null) && (typeof image === 'undefined')) {\r\n image = angular.element('#' + id + '').attr('src');\r\n }\r\n\r\n if ((image !== '') && (typeof image !== 'undefined')) {\r\n scope.generalModel.Files = image;\r\n }\r\n else if ((image !== '') && (typeof image !== 'undefined') && (element !== null) && (element.indexOf(\"data:image/gif;base64,\") >= 0)) {\r\n scope.generalModel.Files = scope.generalModel.Base64ToBlob(image, 'image/gif');\r\n }\r\n else if ((element !== null) && (element.indexOf(\"data:image/gif;base64,\") >= 0)) {\r\n var newImage = element.replace('data:image/gif;base64,', '');\r\n scope.generalModel.Files = scope.generalModel.Base64ToBlob(newImage, 'image/gif');\r\n }\r\n else {\r\n scope.generalModel.Files = [];\r\n }\r\n\r\n scope.generalModel.StoredImageGridModel = model;\r\n scope.generalModel.StoredImageGridKey = gridKey;\r\n scope.generalModel.ObjectToStoreImage = scope.generalModel.AngularCopy(object);\r\n scope.generalModel.ObjectToStoreImageId = \"\";\r\n scope.generalModel.ObjectToStoreImageContentId = id;\r\n scope.generalModel.StoredImageFieldName = fieldId;\r\n scope.generalModel.FileUploadTitle = !scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.LoadImage : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).loadImage;\r\n scope.generalModel.ButtonFileUpload = !scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.SaveImage : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).saveImage;\r\n scope.generalModel.ButtonFileUploadRemove = !scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.RemoveImage : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).removeImage;\r\n scope.generalModel.FileUploadDocuments = false;\r\n scope.generalModel.FileUploadImage = true;\r\n scope.generalModel.FileUploadImageRemove = true;\r\n\r\n scope.generalModel.UploadBox = Helpers.Upload.GetUploadBox('image/*', '1MB', true);\r\n\r\n scope.generalModel.ShowInsertImageDialog();\r\n };\r\n\r\n scope.generalModel.InsertImage = function () {\r\n var element = null;\r\n var array;\r\n\r\n if (scope.generalModel.StoredImageGridKey !== \"\") {\r\n array = $parse(scope.generalModel.ObjectToStoreImage)(scope);\r\n var id = scope[scope.generalModel.StoredImageGridModel].ArrayGridObjects[scope.generalModel.StoredImageGridKey].MainId;\r\n var gridName = scope[scope.generalModel.StoredImageGridModel].ArrayGridObjects[scope.generalModel.StoredImageGridKey].GridName;\r\n var fieldName = scope.generalModel.StoredImageFieldName;\r\n var object = {};\r\n object[id] = scope.generalModel.ObjectToStoreImageContentId.substr(11);\r\n var rowIndex;\r\n\r\n if (typeof angular.element('#' + gridName + '').dxDataGrid('instance') !== 'undefined') {\r\n var grid = angular.element('#' + gridName + '').dxDataGrid('instance');\r\n var data = $filter('filter')(grid.getDataSource()._store._array, object, true)[0];\r\n\r\n if (typeof data !== 'undefined') {\r\n rowIndex = grid.getRowIndexByKey(data);\r\n }\r\n else {\r\n rowIndex = Helpers.DevExtreme.Grid.GetInsertedRowByKey(grid, scope.generalModel.ObjectToStoreImageContentId.substr(11));\r\n }\r\n\r\n if ($filter('filter')(scope.generalModel.PhotographyList, { Id: scope.generalModel.ObjectToStoreImageContentId }, true).length) {\r\n scope.generalModel.PhotographyList[0].Photography = scope.generalModel.Files[0];\r\n }\r\n else {\r\n scope.generalModel.PhotographyList.push({ 'Id': scope.generalModel.ObjectToStoreImageContentId, 'Photography': scope.generalModel.Files[0], 'Grid': gridName, 'FieldName': fieldName, 'FieldId': id });\r\n }\r\n\r\n grid.cellValue(rowIndex, fieldName, scope.generalModel.Files[0].$ngfBlobUrl);\r\n }\r\n }\r\n else {\r\n element = $parse(scope.generalModel.ObjectToStoreImage);\r\n array = $parse(scope.generalModel.ObjectToStoreImage)(scope);\r\n\r\n if (scope.generalModel.ObjectToStoreImageId !== '') {\r\n if (typeof $filter('filter')(array, { Id: scope.generalModel.ObjectToStoreImageId }, true)[0] !== 'undefined') {\r\n $filter('filter')(array, { Id: scope.generalModel.ObjectToStoreImageId }, true)[0].Photography = scope.generalModel.Files[0];\r\n }\r\n else {\r\n array.push({ 'Id': scope.generalModel.ObjectToStoreImageId, 'Photography': scope.generalModel.Files[0], 'Grid': scope.generalModel.GridToStoreImageId, 'FieldName': scope.generalModel.GridFieldToStoreImage, 'FieldId': scope.generalModel.GridFieldIdToStoreImage });\r\n }\r\n\r\n angular.element(scope.generalModel.ObjectToStoreImageId).attr('src', scope.generalModel.Files[0].$ngfBlobUrl);\r\n }\r\n else {\r\n if ((array !== null) && (typeof $filter('filter')(scope.generalModel.PhotographyList, { Id: scope.generalModel.ObjectToStoreImageContentId }, true)[0] !== 'undefined')) {\r\n $filter('filter')(scope.generalModel.PhotographyList, { Id: scope.generalModel.ObjectToStoreImageContentId }, true)[0].Photography = scope.generalModel.Files[0];\r\n }\r\n else {\r\n scope.generalModel.PhotographyList.push({ 'Id': scope.generalModel.ObjectToStoreImageContentId, 'Photography': scope.generalModel.Files[0], 'Grid': '', 'FieldName': '', 'FieldId': '' });\r\n }\r\n\r\n element.assign(scope, scope.generalModel.Files[0].$ngfBlobUrl);\r\n }\r\n }\r\n\r\n scope.generalModel.CloseInsertImageDialog();\r\n };\r\n\r\n scope.generalModel.RemoveImage = function () {\r\n if (scope.generalModel.ObjectToStoreImage === '') {\r\n return;\r\n }\r\n\r\n $parse(scope.generalModel.ObjectToStoreImage)(scope);\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.StoredImageGridKey)) {\r\n var rowIndex;\r\n var id = scope[scope.generalModel.StoredImageGridModel].ArrayGridObjects[scope.generalModel.StoredImageGridKey].MainId;\r\n var gridName = scope[scope.generalModel.StoredImageGridModel].ArrayGridObjects[scope.generalModel.StoredImageGridKey].GridName;\r\n\r\n if (typeof angular.element('#' + gridName + '').dxDataGrid('instance') !== 'undefined') {\r\n var grid = angular.element('#' + gridName + '').dxDataGrid('instance');\r\n var objectForFilter = {};\r\n objectForFilter[id] = scope.generalModel.ObjectToStoreImageContentId.substr(11);\r\n\r\n var data = $filter('filter')(grid.getDataSource()._store._array, objectForFilter, true)[0];\r\n\r\n if (typeof data !== 'undefined') {\r\n rowIndex = grid.getRowIndexByKey(data);\r\n }\r\n else {\r\n rowIndex = Helpers.DevExtreme.Grid.GetInsertedRowByKey(grid, scope.generalModel.ObjectToStoreImageContentId.substr(11));\r\n }\r\n\r\n for (var j = 0; j < scope.generalModel.PhotographyList.length; j++) {\r\n if (scope.generalModel.PhotographyList[j].Id === scope.generalModel.ObjectToStoreImageContentId) {\r\n scope.generalModel.PhotographyList.splice(j, 1);\r\n break;\r\n }\r\n }\r\n\r\n grid.cellValue(rowIndex, scope.generalModel.StoredImageFieldName, \"\");\r\n }\r\n\r\n scope.generalModel.CloseInsertImageDialog();\r\n }\r\n else {\r\n if (scope.generalModel.ObjectToStoreImageId !== '') {\r\n for (var q = 0; q < scope.generalModel.PhotographyList.length; q++) {\r\n if (scope.generalModel.PhotographyList[q].Id === scope.generalModel.ObjectToStoreImageId) {\r\n scope.generalModel.PhotographyList.splice(q, 1);\r\n }\r\n }\r\n\r\n angular.element(scope.generalModel.ObjectToStoreImageId).attr('src', 'Application/Images/FallBackImage.1739284541000.png');\r\n }\r\n else {\r\n for (var k = 0; k < scope.generalModel.PhotographyList.length; k++) {\r\n if (scope.generalModel.PhotographyList[k].Id === \"Main\") {\r\n scope.generalModel.PhotographyList.splice(k, 1);\r\n }\r\n }\r\n\r\n $parse(scope.generalModel.ObjectToStoreImage).assign(scope, \"\");\r\n }\r\n\r\n scope.generalModel.CloseInsertImageDialog();\r\n }\r\n };\r\n\r\n scope.generalModel.Base64ToBlob = function (base64Data, contentType) {\r\n contentType = contentType || '';\r\n var sliceSize = 512;\r\n var byteCharacters = atob(base64Data);\r\n var byteArrays = [];\r\n\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n var blob = new Blob(byteArrays, { type: contentType });\r\n\r\n return blob;\r\n };\r\n\r\n scope.generalModel.ConvertImages = function (blobFile, key, list) {\r\n var deferred = $q.defer();\r\n var response;\r\n var base64data;\r\n var position;\r\n var reader = new window.FileReader();\r\n\r\n reader.readAsDataURL(blobFile);\r\n\r\n reader.onloadend = function () {\r\n base64data = reader.result;\r\n position = base64data.indexOf(',');\r\n response = { Photography: base64data.substr(position + 1), Key: key, List: list };\r\n deferred.resolve(response);\r\n };\r\n\r\n return deferred.promise;\r\n };\r\n\r\n scope.generalModel.ConvertAllFiles = function (blobFile) {\r\n var deferred = $q.defer();\r\n var response;\r\n var base64data;\r\n var position;\r\n var reader = new window.FileReader();\r\n\r\n reader.readAsDataURL(blobFile);\r\n\r\n reader.onloadend = function () {\r\n base64data = reader.result;\r\n position = base64data.indexOf(',');\r\n response = base64data.substr(position + 1);\r\n deferred.resolve(response);\r\n };\r\n\r\n return deferred.promise;\r\n };\r\n\r\n scope.generalModel.GetEditDataClean = function (grid) {\r\n var finalObject = [];\r\n var editData = Helpers.DevExtreme.Grid.GetEditData(grid);\r\n var editDataValid = editData.filter(where => where.type && (where.type !== 'undefined'));\r\n\r\n for (var g = 0; g < editDataValid.length; g++) {\r\n var editDataRow = editDataValid[g];\r\n\r\n finalObject.push(editDataRow);\r\n }\r\n\r\n return finalObject;\r\n };\r\n\r\n scope.generalModel.CreateBaseViewGridSelectElements = function (gridName, mainId, object, id, fieldShow, container, extraConnectionId, required, model, defaultSelectText) {\r\n var description = '';\r\n var tagIndex = 2;\r\n\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(defaultSelectText)) {\r\n defaultSelectText = '';\r\n }\r\n\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.GetObjectByString(object, id + \".\" + fieldShow))) {\r\n description = defaultSelectText;\r\n }\r\n else {\r\n description = (scope.generalModel.GetObjectByString(object, id + \".\" + fieldShow));\r\n }\r\n\r\n if (required || (description === defaultSelectText)) {\r\n tagIndex = 1;\r\n }\r\n\r\n $('').addClass(\"lnr lnr-list\").appendTo($('
').html('' + scope.generalModel.encodeHtml(description) + '').on('dxclick', function (event) {\r\n scope.generalModel.GenerateSelectObject(gridName, mainId, object, id, fieldShow, container, extraConnectionId, required, model, defaultSelectText, true);\r\n container[0].getElementsByTagName(\"a\")[tagIndex].getElementsByClassName(\"ParentContentWithMagnifier\")[0].click();\r\n event.stopPropagation();\r\n container[0].getElementsByTagName(\"a\")[0].style.display = \"none\";\r\n\r\n if (container[0].getElementsByTagName(\"a\")[0].parentElement.className.indexOf(\"dx-highlight-outline\") !== -1) {\r\n container[0].getElementsByTagName(\"a\")[0].parentElement.style.display = \"none\";\r\n }\r\n\r\n if (tagIndex !== 1) {\r\n container[0].getElementsByTagName(\"a\")[1].style.display = \"none\";\r\n }\r\n }).appendTo(container));\r\n\r\n if ((!required) && (description !== defaultSelectText)) {\r\n $('')\r\n .addClass('SelectIconClearBaseView')\r\n .html('').on('dxclick', function () {\r\n if (!object.Disabled && !angular.element(this).parent('td').hasClass('Disabled') && !object.NonEditable) {\r\n var index = scope.generalModel.FindIndex(this);\r\n scope.generalModel.ExtraConnectionId = extraConnectionId;\r\n\r\n if (defaultSelectText === '') {\r\n scope.SelectGridDropDownElement(id + '.' + fieldShow, null, null, mainId, index, gridName);\r\n }\r\n else {\r\n scope.SelectGridDropDownElement(id + '.' + fieldShow, null, defaultSelectText, mainId, index, gridName);\r\n }\r\n }\r\n }).appendTo(container);\r\n }\r\n };\r\n\r\n scope.generalModel.GenerateSelectObject = function (gridName, mainId, object, id, fieldShow, container, extraConnectionId, required, model, defaultSelectText, gridElementsLoaded) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(gridElementsLoaded) || (!scope.generalModel.IsUndefinedEmptyOrNull(gridName) && !gridElementsLoaded)) {\r\n scope.generalModel.CreateBaseViewGridSelectElements(gridName, mainId, object, id, fieldShow, container, extraConnectionId, required, model, defaultSelectText);\r\n\r\n return;\r\n }\r\n\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(defaultSelectText)) {\r\n defaultSelectText = '';\r\n }\r\n\r\n var objectLoadedByString = scope.generalModel.GetObjectByString(object, id);\r\n\r\n if ((objectLoadedByString === null) || (typeof objectLoadedByString === 'undefined')) {\r\n if (!object.hasOwnProperty('__KEY__')) {\r\n scope.generalModel.FillConcurrencyDataSource(gridName, model);\r\n\r\n var gridMainId = scope.generalModel.GetExtraConnection(extraConnectionId).MainId;\r\n var gridInstance = angular.element('#' + gridName).dxDataGrid('instance');\r\n\r\n if (typeof gridMainId === 'undefined') {\r\n gridMainId = scope.generalModel.GetMainIdFromKey(gridInstance);\r\n }\r\n\r\n var findNewObject;\r\n var editedObject;\r\n var edited = scope.generalModel.GetEditDataClean(gridInstance);\r\n var extraConnection = scope.generalModel.ExtraConnections.filter(where => where.ObjectPathName === id)[0];\r\n\r\n var index = extraConnection.Key;\r\n var innerId = extraConnection.InnerId;\r\n\r\n if (edited.length && !scope.generalModel.IsUndefinedEmptyOrNull(index)) {\r\n for (var e = 0; e < edited.length; e++) {\r\n var editedItem = edited[e];\r\n var editedItemOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(editedItem);\r\n\r\n if ((editedItem.type === 'update') && (editedItemOldData[gridMainId] === mainId) && !scope.generalModel.IsUndefinedEmptyOrNull(model.MainObjectPreviousSave[index]) && !scope.generalModel.IsUndefinedEmptyOrNull(model.MainObjectPreviousSave[index][e])) {\r\n if (editedItemOldData[innerId] === model.MainObjectPreviousSave[index][e][innerId]) {\r\n editedObject = model.MainObjectPreviousSave[index][e];\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(editedObject) && !scope.generalModel.IsUndefinedEmptyOrNull(model.MainObjectPreviousSave[index])) {\r\n var mainObjectPreviousSave = model.MainObjectPreviousSave[index].filter(where => where.ParentObjectId === mainId);\r\n\r\n if (mainObjectPreviousSave.length === 1) {\r\n editedObject = mainObjectPreviousSave[0];\r\n }\r\n }\r\n\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(editedObject)) {\r\n var filterCondition = {};\r\n\r\n filterCondition[gridMainId] = mainId;\r\n findNewObject = scope.generalModel.GetObjectByString($filter('filter')(gridInstance.getDataSource()._store._array, filterCondition, true)[0], id);\r\n }\r\n else {\r\n findNewObject = editedObject;\r\n }\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(findNewObject)) {\r\n if (id.indexOf(\".\") > 0) {\r\n var dividedId = id.split('.');\r\n\r\n object[dividedId[0]][dividedId[1]] = findNewObject;\r\n }\r\n else {\r\n object[id] = findNewObject;\r\n }\r\n }\r\n }\r\n\r\n $('')\r\n .html('' +\r\n '' + defaultSelectText + '' +\r\n '' +\r\n '')\r\n .on('dxclick', function () {\r\n if ((!object.Disabled) && (!angular.element(this).parent('td').hasClass('Disabled')) && (!object.NonEditable)) {\r\n var index = scope.generalModel.FindIndex(this);\r\n scope.generalModel.CallGridDropDownGeneral(mainId, index, extraConnectionId, false, gridName);\r\n }\r\n }).appendTo(container);\r\n }\r\n else {\r\n var description = \"\";\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.GetObjectByString(object, id + \".\" + fieldShow))) {\r\n description = (scope.generalModel.GetObjectByString(object, id + \".\" + fieldShow));\r\n }\r\n\r\n $('')\r\n .html('' +\r\n '' + (description === null ? '' : description) + '' +\r\n '' +\r\n '')\r\n .on('dxclick', function () {\r\n if ((!object.Disabled) && (!angular.element(this).parent('td').hasClass('Disabled')) && (!object.NonEditable)) {\r\n var index = scope.generalModel.FindIndex(this);\r\n scope.generalModel.CallGridDropDownGeneral(mainId, index, extraConnectionId, false, gridName);\r\n }\r\n }).appendTo(container);\r\n\r\n if (!required && (description !== defaultSelectText)) {\r\n $('')\r\n .addClass('SelectIconClear')\r\n .html('')\r\n .on('dxclick', function () {\r\n if ((!object.Disabled) && (!angular.element(this).parent('td').hasClass('Disabled')) && (!object.NonEditable)) {\r\n var index = scope.generalModel.FindIndex(this);\r\n scope.generalModel.ExtraConnectionId = extraConnectionId;\r\n if (defaultSelectText === '') {\r\n scope.SelectGridDropDownElement(id + '.' + fieldShow, null, null, mainId, index, gridName);\r\n }\r\n else {\r\n scope.SelectGridDropDownElement(id + '.' + fieldShow, null, defaultSelectText, mainId, index, gridName);\r\n }\r\n }\r\n }).appendTo(container);\r\n }\r\n }\r\n };\r\n\r\n scope.generalModel.CallGridDropDownGeneral = function (parentId, rowIndex, extraConnectionId, multipleSelect, gridName, index, pageSize) {\r\n scope.generalModel.FullPageLoading = true;\r\n\r\n if (multipleSelect) {\r\n scope.generalModel.DropDownGeneralDialogButton = true;\r\n angular.element('#GeneralDialogButtonArea').html('');\r\n $compile(angular.element('#GeneralDialogButtonArea'))(scope);\r\n }\r\n\r\n scope.generalModel.SelectedRow = parentId;\r\n scope.generalModel.ExtraConnectionId = extraConnectionId;\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(index)) {\r\n scope.generalModel.ExtraConnectionArrayIndex = index;\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataFieldAfterIndex'])) {\r\n scope.generalModel.SelectedRow = parentId + '[' + index + '].' + scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['InnerId'];\r\n }\r\n else {\r\n scope.generalModel.SelectedRow = parentId + '[' + index + ']';\r\n }\r\n }\r\n\r\n scope.generalModel.GridName = gridName;\r\n scope.generalModel.SelectedRowIndex = rowIndex;\r\n scope.generalModel.Controller = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['PathName'];\r\n\r\n if ((typeof scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['SpecificCall'] !== 'undefined') && (scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['SpecificCall'] !== '')) {\r\n scope.generalModel.DropDownAction = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['SpecificCall'];\r\n }\r\n else {\r\n scope.generalModel.DropDownAction = 'ListEnables';\r\n }\r\n\r\n scope.generalModel.ExtraConnectionsFinishedLoading = false;\r\n scope.generalModel.FirstTimeLoadingExtra = true;\r\n\r\n scope.generalModel.CallGridDropDownGeneralContent(pageSize);\r\n };\r\n\r\n scope.generalModel.CallGridDropDownGeneralContent = function (pageSize) {\r\n $q.when(GeneralModel.ListSearchGeneral()).then(function () {\r\n if (scope.generalModel.FirstTimeLoadingExtra) {\r\n scope.generalModel.DrawGridDropDownGeneral(pageSize);\r\n }\r\n else {\r\n angular.element(\"#GridDropDownGeneralDialog\").dxDataGrid(\"option\", \"dataSource\", scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Object']);\r\n }\r\n\r\n if (scope.generalModel.RefreshLoadExtra) {\r\n scope.generalModel.CallGridDropDownGeneralContent();\r\n scope.generalModel.FirstTimeLoadingExtra = false;\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n };\r\n\r\n scope.generalModel.DrawGridDropDownGeneral = function (pageSize) {\r\n var selectionState = false;\r\n var configurePageSize = false;\r\n\r\n if (scope.generalModel.DropDownGeneralDialogButton) {\r\n selectionState = { mode: \"multiple\" };\r\n }\r\n\r\n var caption = '';\r\n var extraConnection = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId);\r\n\r\n if (scope.generalModel.ExtraConnectionId !== '') {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(extraConnection['TranslationValue'])) {\r\n extraConnection['TranslationValue'] = Helpers.Translations[extraConnection['NameTranslation']];\r\n }\r\n\r\n caption = extraConnection['TranslationValue'];\r\n }\r\n\r\n var columnDataField = ''\r\n var indexOfName = -1;\r\n var arrayToPrint;\r\n\r\n if (scope.generalModel.ExtraConnectionId !== '') {\r\n columnDataField = extraConnection['Name'];\r\n\r\n indexOfName = columnDataField.indexOf(',');\r\n\r\n if (indexOfName > 0) {\r\n arrayToPrint = columnDataField.split(\",\");\r\n columnDataField = arrayToPrint[0];\r\n }\r\n }\r\n\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(pageSize)) {\r\n configurePageSize = true;\r\n pageSize = 20;\r\n }\r\n\r\n scope.GridDropDownGeneralDialog = {\r\n dataSource: extraConnection['Object'],\r\n paging: {\r\n pageSize: pageSize\r\n },\r\n \"export\": {\r\n enabled: false\r\n },\r\n height: (myApplication.projectType === myApplication.projectTypeWeb) ? 500 : '100%',\r\n showBorders: true,\r\n rowAlternationEnabled: true,\r\n sorting: true,\r\n groupPaging: true,\r\n grouping: true,\r\n summary: true,\r\n filterRow: {\r\n visible: true\r\n },\r\n headerFilter: {\r\n visible: true\r\n },\r\n selection: selectionState,\r\n allowColumnResizing: true,\r\n columnAutoWidth: true,\r\n columns: [{\r\n dataField: columnDataField,\r\n caption: caption,\r\n cellTemplate: function (container, options) {\r\n if (scope.generalModel.ExtraConnectionId === '') {\r\n return;\r\n }\r\n\r\n if (!scope.generalModel.DropDownGeneralDialogButton) {\r\n var nameToPrint = '';\r\n var nameToSend = '';\r\n var indexOfDataField = extraConnection['DataField'].indexOf(',');\r\n\r\n if ((indexOfName > 0) && (indexOfDataField !== 0)) {\r\n if (indexOfDataField < 0) {\r\n for (var a = 0; a < arrayToPrint.length; a++) {\r\n var itemToPrint = arrayToPrint[a];\r\n\r\n if (nameToPrint.length) {\r\n nameToPrint = nameToPrint + ' - ' + options.data[itemToPrint];\r\n nameToSend = nameToPrint;\r\n }\r\n else {\r\n nameToPrint = scope.generalModel.GetObjectByString(options.data, itemToPrint);\r\n }\r\n }\r\n }\r\n else {\r\n nameToPrint = scope.generalModel.GetObjectByString(options.data, arrayToPrint[0]);\r\n nameToSend = options.data;\r\n }\r\n }\r\n else {\r\n nameToPrint = scope.generalModel.GetObjectByString(options.data, extraConnection['Name']);\r\n nameToSend = nameToPrint;\r\n }\r\n\r\n options.value = nameToPrint;\r\n\r\n $('').addClass('dx-link')\r\n .text(nameToPrint)\r\n .on('dxclick', function () {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.ExtraConnectionId)) {\r\n var extraConnection = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId);\r\n var dataField = extraConnection['DataField'];\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.ExtraConnectionArrayIndex)) {\r\n var datafieldAfterIndex = extraConnection['DataFieldAfterIndex'];\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(datafieldAfterIndex)) {\r\n dataField = dataField + '[' + scope.generalModel.ExtraConnectionArrayIndex + '].' + datafieldAfterIndex;\r\n }\r\n else {\r\n dataField = dataField + '[' + scope.generalModel.ExtraConnectionArrayIndex + ']';\r\n }\r\n }\r\n\r\n scope.SelectGridDropDownElement(dataField, options.data[extraConnection['Id']], nameToSend, scope.generalModel.SelectedRow, scope.generalModel.SelectedRowIndex, scope.generalModel.GridName);\r\n }\r\n }).appendTo(container);\r\n }\r\n else {\r\n angular.element(container).append(options.data[scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Name']]);\r\n }\r\n },\r\n calculateCellValue: function (data) {\r\n var oldValue = data[columnDataField];\r\n\r\n if ((scope.generalModel.ExtraConnectionId === '') || scope.generalModel.DropDownGeneralDialogButton || (indexOfName <= 0)) {\r\n return oldValue;\r\n }\r\n\r\n var indexOfDataField = extraConnection['DataField'].indexOf(',');\r\n\r\n if (indexOfDataField >= 0) {\r\n return oldValue;\r\n }\r\n\r\n var newValue = \"\";\r\n\r\n for (var a = 0; a < arrayToPrint.length; a++) {\r\n var itemToPrint = arrayToPrint[a];\r\n\r\n if (newValue.length) {\r\n newValue += ' - ' + data[itemToPrint];\r\n }\r\n else {\r\n newValue = scope.generalModel.GetObjectByString(data, itemToPrint);\r\n }\r\n }\r\n\r\n return newValue;\r\n }\r\n }],\r\n noDataText: (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.NoDataFound : myApplication.getLanguageObject.selectedLanguage('basePageTexts', myApplication).noDataFound,\r\n font: myApplication.gridFont,\r\n onContentReady: function (e) {\r\n if (scope.generalModel.GridName !== '') {\r\n var rowsToSelect = [];\r\n var grid = angular.element(\"#\" + scope.generalModel.GridName + \"\").dxDataGrid('instance');\r\n var editData = scope.generalModel.GetEditDataClean(grid);\r\n var existingElements = '';\r\n\r\n if (editData.length) {\r\n for (var h = 0; h < editData.length; h++) {\r\n if (editData[h].type === 'update') {\r\n var itemEditDataOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(editData[h]);\r\n\r\n if (itemEditDataOldData[scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)] === scope.generalModel.SelectedRow) {\r\n if (typeof editData[h].data[scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['ObjectPathName']] !== 'undefined') {\r\n existingElements = editData[h].data[scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['ObjectPathName']];\r\n }\r\n }\r\n }\r\n else if (editData[h].type === 'insert') {\r\n if (editData[h].data.__KEY__ === scope.generalModel.SelectedRow) {\r\n if (typeof editData[h].data[scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['ObjectPathName']] !== 'undefined') {\r\n existingElements = editData[h].data[scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['ObjectPathName']];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (grid._controllers.data._dataSource._items.length) {\r\n for (var i = 0; i < grid._controllers.data._dataSource._items.length; i++) {\r\n if ((grid._controllers.data._dataSource._items[i][scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['MainId']] === scope.generalModel.SelectedRow) || (grid._controllers.data._dataSource._items[i][scope.generalModel.GetMainIdFromKey(grid)] === scope.generalModel.SelectedRow)) {\r\n if (typeof grid._controllers.data._dataSource._items[i][scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['ObjectPathName']] !== 'undefined') {\r\n existingElements = grid._controllers.data._dataSource._items[i][scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['ObjectPathName']];\r\n }\r\n }\r\n }\r\n }\r\n if ((existingElements !== null) && existingElements.length) {\r\n for (var l = 0; l < scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Object'].length; l++) {\r\n for (var j = 0; j < existingElements.length; j++) {\r\n if (scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Object'][l][scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Id']] === existingElements[j][scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Id']]) {\r\n rowsToSelect.push(l);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n e.component.clearSelection();\r\n }\r\n\r\n if (rowsToSelect.length) {\r\n e.component.selectRowsByIndexes(rowsToSelect);\r\n }\r\n }\r\n }\r\n };\r\n\r\n angular.element(\"#GridDropDownGeneralDialog\").dxDataGrid(scope.GridDropDownGeneralDialog);\r\n\r\n var gridInstance = angular.element(\"#GridDropDownGeneralDialog\").dxDataGrid('instance');\r\n\r\n if (scope.generalModel.DropDownGeneralDialogButton) {\r\n gridInstance.startSelectionWithCheckboxes();\r\n }\r\n\r\n if (configurePageSize && (myApplication.projectType === myApplication.projectTypeWeb)) {\r\n Helpers.DevExtreme.SetDataGridPageSize(gridInstance, 500);\r\n }\r\n\r\n gridInstance.refresh();\r\n\r\n $mdDialog.show({\r\n multiple: true,\r\n contentElement: '#DropDownGeneralDialog',\r\n parent: angular.element(document.body),\r\n targetEvent: window.event,\r\n clickOutsideToClose: false,\r\n onComplete: function () {\r\n scope.generalModel.GeneralModelIsOpened = true;\r\n angular.element(\"#GridDropDownGeneralDialog\").dxDataGrid('instance').refresh();\r\n }\r\n });\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n scope.SelectGridDropDownElement = function (element, data, dataContent, lineId, rowIndex, gridName) {\r\n if (rowIndex !== '') {\r\n var grid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n\r\n if (typeof scope.generalModel.DropdDownsEditedValues[gridName] === 'undefined') {\r\n scope.generalModel.DropdDownsEditedValues[gridName] = {};\r\n }\r\n\r\n if (typeof scope.generalModel.DropdDownsEditedValues[gridName][rowIndex] === 'undefined') {\r\n scope.generalModel.DropdDownsEditedValues[gridName][rowIndex] = {};\r\n }\r\n\r\n scope.generalModel.DropdDownsEditedValues[gridName][rowIndex][element] = grid.cellValue(rowIndex, element);\r\n var editData = scope.generalModel.GetEditDataClean(grid);\r\n var innerId = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['InnerId'];\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.ExtraConnectionArrayIndex)) {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataFieldAfterIndex'])) {\r\n innerId = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['InnerId'] + '[' + scope.generalModel.ExtraConnectionArrayIndex + '].' + scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataFieldAfterIndex'];\r\n }\r\n else {\r\n innerId = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['InnerId'] + '[' + scope.generalModel.ExtraConnectionArrayIndex + ']';\r\n }\r\n }\r\n\r\n if (!editData.length) {\r\n editData = grid.getDataSource()._store._array;\r\n\r\n for (var i = 0; i < editData.length; i++) {\r\n if (((editData[i][scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['MainId']] === lineId) || (editData[i][scope.generalModel.GetMainIdFromKey(grid)] === lineId)) || (editData[i].__KEY__ === lineId)) {\r\n if (innerId.indexOf('.') > 0) {\r\n scope.generalModel.SetObjectValueByString(editData[i], innerId, data);\r\n }\r\n else {\r\n editData[i][innerId] = data;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n else if (editData.length) {\r\n var fields;\r\n\r\n for (var t = 0; t < editData.length; t++) {\r\n if (editData[t].type === 'update') {\r\n var itemEditDataOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(editData[t]);\r\n\r\n if ((itemEditDataOldData[scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['MainId']] === lineId) || (itemEditDataOldData[scope.generalModel.GetMainIdFromKey(grid)] === lineId)) {\r\n if (innerId.indexOf('.') > 0) {\r\n fields = innerId.split('.');\r\n editData[t].data[fields[0]][fields[1]] = data;\r\n }\r\n else {\r\n editData[t].data[innerId] = data;\r\n }\r\n\r\n break;\r\n }\r\n else if ((itemEditDataOldData.hasOwnProperty('__KEY__')) && (itemEditDataOldData.__KEY__ === lineId)) {\r\n if (innerId.indexOf('.') > 0) {\r\n fields = innerId.split('.');\r\n editData[t].data[fields[0]][fields[1]] = data;\r\n }\r\n else {\r\n editData[t].data[innerId] = data;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n else if (editData[t].type === 'insert') {\r\n if (editData[t].data.__KEY__ === lineId) {\r\n if (innerId.indexOf('.') > 0) {\r\n fields = innerId.split('.');\r\n editData[t].data[fields[0]][fields[1]] = data;\r\n }\r\n else {\r\n editData[t].data[innerId] = data;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n var dataSource = grid.getDataSource();\r\n\r\n for (var k = 0; k < dataSource._store._array.length; k++) {\r\n if (dataSource._store._array[k].__KEY__ === lineId) {\r\n dataSource._store._array[k][innerId] = data;\r\n }\r\n }\r\n }\r\n\r\n grid.cellValue(rowIndex, innerId, data);\r\n grid.cellValue(rowIndex, element, dataContent);\r\n }\r\n else {\r\n var finalElement = $parse(lineId);\r\n finalElement.assign(scope, data);\r\n var fieldsInData;\r\n var name;\r\n var finalDataContent;\r\n var model = scope.generalModel.BaseModel;\r\n\r\n if (typeof scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Model'] !== 'undefined') {\r\n model = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Model'];\r\n }\r\n\r\n if (scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataField'].indexOf(',') > 0) {\r\n fieldsInData = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataField'].split(',');\r\n name = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Name'].split(',');\r\n\r\n for (var a = 0; a < fieldsInData.length; a++) {\r\n finalDataContent = scope.generalModel.GetObjectByString(dataContent, name[a]);\r\n\r\n if (fieldsInData[a].indexOf('.') > 0) {\r\n var insideFields = $parse(scope.generalModel.BaseModel + '.' + fieldsInData[a]);\r\n insideFields.assign(scope, finalDataContent);\r\n insideFields.assign(rootScope, finalDataContent);\r\n }\r\n else if (Array.isArray(rootScope[scope.generalModel.BaseModel][fieldsInData[a]]) && !Array.isArray(finalDataContent)) {\r\n rootScope[scope.generalModel.BaseModel][fieldsInData[a]].push(finalDataContent);\r\n scope[scope.generalModel.BaseModel][fieldsInData[a]].push(finalDataContent);\r\n }\r\n else {\r\n rootScope[scope.generalModel.BaseModel][fieldsInData[a]] = finalDataContent;\r\n scope[scope.generalModel.BaseModel][fieldsInData[a]] = finalDataContent;\r\n }\r\n }\r\n }\r\n else {\r\n var datafield = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataField'];\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.ExtraConnectionArrayIndex)) {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataFieldAfterIndex'])) {\r\n datafield = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataField'] + '[' + scope.generalModel.ExtraConnectionArrayIndex + '].' + scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataFieldAfterIndex'];\r\n }\r\n else {\r\n datafield = scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['DataField'] + '[' + scope.generalModel.ExtraConnectionArrayIndex + ']';\r\n }\r\n }\r\n\r\n var finalDataField = $parse(model + '.' + datafield);\r\n finalDataField.assign(scope, dataContent);\r\n finalDataField.assign(rootScope, dataContent);\r\n }\r\n }\r\n\r\n scope.CloseDialogGridDropDownGeneral();\r\n };\r\n\r\n scope.CloseDialogGridDropDownGeneral = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DropDownGeneralDialog'\r\n });\r\n\r\n if (typeof scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId) !== 'undefined') {\r\n scope.generalModel.GetExtraConnection(scope.generalModel.ExtraConnectionId)['Object'] = [];\r\n }\r\n\r\n scope.generalModel.ExtraConnectionArrayIndex = '';\r\n scope.generalModel.ExtraConnectionId = '';\r\n scope.generalModel.SelectedRow = '';\r\n scope.generalModel.GridName = '';\r\n scope.generalModel.Controller = '';\r\n scope.generalModel.DropDownGeneralDialogButton = false;\r\n };\r\n\r\n scope.generalModel.ClearDropDown = function (elements) {\r\n var elementsSeparated = elements.split(',');\r\n\r\n for (var e = 0; e < elementsSeparated.length; e++) {\r\n var object = $parse(elementsSeparated[e]);\r\n object.assign(scope, '');\r\n }\r\n };\r\n\r\n scope.generalModel.GenerateColorObject = function (gridName, container, object, id) {\r\n if ((typeof object[id] === 'undefined') || (object[id] === null) || (object[id] === \"\")) {\r\n $('')\r\n .html('')\r\n .on('dxclick', function () {\r\n if ((!object.Disabled) && (!angular.element(this).parent('td').hasClass('Disabled')) && (!object.NonEditable)) {\r\n var index = scope.generalModel.FindIndex(this);\r\n scope.generalModel.CallColorPicker('#ff0000', index, gridName, window.event);\r\n }\r\n }).appendTo(container);\r\n } else {\r\n var description = object[id];\r\n\r\n $('')\r\n .html('' + (description === null ? '' : description) + '')\r\n .on('dxclick', function () {\r\n if ((!object.Disabled) && (!angular.element(this).parent('td').hasClass('Disabled')) && (!object.NonEditable)) {\r\n var index = scope.generalModel.FindIndex(this);\r\n scope.generalModel.CallColorPicker(object.Color, index, gridName, window.event);\r\n }\r\n }).appendTo(container);\r\n }\r\n\r\n $compile(container)(scope);\r\n };\r\n\r\n scope.generalModel.CallColorPicker = function (rowContent, rowIndex, gridName, event) {\r\n scope.generalModel.NewColor = rowContent;\r\n scope.generalModel.GridNameColorPicker = gridName;\r\n\r\n var changeColor = null;\r\n\r\n angular.element('#ColorPicker').colorpicker({\r\n useAlpha: false,\r\n color: rowContent,\r\n format: \"hex\"\r\n }).on('changeColor',\r\n function () {\r\n if (changeColor !== null) {\r\n clearTimeout(changeColor);\r\n }\r\n\r\n changeColor = setTimeout(function () {\r\n scope.generalModel.NewColor = angular.element('#ColorPickerInput').val();\r\n }, 200);\r\n });\r\n\r\n angular.element('#ColorPicker').colorpicker('setValue', rowContent);\r\n scope.generalModel.SelectedRowIndex = rowIndex;\r\n\r\n $mdDialog.show({\r\n contentElement: '#ColorPickerDialog',\r\n parent: angular.element(document.body),\r\n clickOutsideToClose: false\r\n });\r\n };\r\n\r\n scope.generalModel.CloseDialogColorPicker = function () {\r\n $mdDialog.hide({\r\n contentElement: '#ColorPickerDialog'\r\n });\r\n\r\n scope.generalModel.GridNameColorPicker = '';\r\n scope.generalModel.SelectedRowIndex = '';\r\n scope.generalModel.NewColor = '#ff0000';\r\n };\r\n\r\n scope.generalModel.SaveColor = function () {\r\n if ((scope.generalModel.NewColor.length === 7) && (scope.generalModel.NewColor.substr(0, 1) === '#')) {\r\n scope.generalModel.SaveColorStatus = false;\r\n var grid = angular.element(\"#\" + scope.generalModel.GridNameColorPicker + \"\").dxDataGrid('instance');\r\n grid.cellValue(scope.generalModel.SelectedRowIndex, 'Color', scope.generalModel.NewColor);\r\n scope.generalModel.CloseDialogColorPicker();\r\n }\r\n else {\r\n scope.generalModel.SaveColorStatus = true;\r\n }\r\n };\r\n\r\n scope.generalModel.ClearColor = function () {\r\n scope.generalModel.NewColor = \"\";\r\n scope.generalModel.SaveColorStatus = false;\r\n var grid = angular.element(\"#\" + scope.generalModel.GridNameColorPicker + \"\").dxDataGrid('instance');\r\n grid.cellValue(scope.generalModel.SelectedRowIndex, 'color', scope.generalModel.NewColor);\r\n scope.generalModel.CloseDialogColorPicker();\r\n };\r\n\r\n scope.generalModel.GenerateTimeObject = function (gridName, container, object, id, interval, showSeconds, showQuantityDays) {\r\n scope.generalModel.GenerateTimeObjectWithLink(gridName, container, object, id, interval, showSeconds, showQuantityDays, true);\r\n };\r\n\r\n scope.generalModel.GenerateTimeObjectWithLink = function (gridName, container, object, id, interval, showSeconds, showQuantityDays, addLink) {\r\n var emptyTime = \"00:00\";\r\n var daysText = (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.Days : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).days;\r\n\r\n if (showQuantityDays) {\r\n if (showSeconds) {\r\n emptyTime = \"0 \" + daysText + \" 00h 00m 00s\";\r\n }\r\n else {\r\n emptyTime = \"0 \" + daysText + \" 00h 00m\";\r\n }\r\n }\r\n else if (showSeconds) {\r\n emptyTime = \"00:00:00\";\r\n }\r\n\r\n if ((typeof object[id] === 'undefined') || (object[id] === null) || (object[id] === \"\")) {\r\n if (addLink) {\r\n $('')\r\n .html('' + emptyTime + '')\r\n .on('dxclick', function () {\r\n if ((!object.Disabled) && (!angular.element(this).parent('td').hasClass('Disabled')) && (!object.NonEditable)) {\r\n var index = scope.generalModel.FindIndex(this);\r\n scope.generalModel.CallTimePicker(gridName, id, emptyTime, index, interval, showSeconds, showQuantityDays);\r\n }\r\n }).appendTo(container);\r\n } else {\r\n angular.element('' + emptyTime + '').appendTo(container);\r\n }\r\n } else {\r\n var description = object[id];\r\n\r\n if (!showSeconds) {\r\n description = object[id].substr(0, 5);\r\n }\r\n else if (description.length < 8) {\r\n description += ':00';\r\n }\r\n\r\n if (showQuantityDays) {\r\n var index = description.indexOf(\".\");\r\n\r\n if ((index < 0) || (index > description.indexOf(\":\"))) {\r\n description = \"0.\" + description;\r\n }\r\n description = description.substring(0, description.indexOf('.')) + \" \" + daysText + \" \" + description.substr(description.indexOf('.') + 1, 2) + \"h \" + description.substr(description.indexOf(':') + 1, 2) + \"m \" + description.substr(description.lastIndexOf(':') + 1, 2) + \"s\";\r\n }\r\n\r\n if (addLink) {\r\n $('')\r\n .html('' + (description === null ? '' : description) + '')\r\n .on('dxclick', function () {\r\n if ((!object.Disabled) && (!angular.element(this).parent('td').hasClass('Disabled')) && (!object.NonEditable)) {\r\n var index = scope.generalModel.FindIndex(this);\r\n scope.generalModel.CallTimePicker(gridName, id, description, index, interval, showSeconds, showQuantityDays);\r\n }\r\n }).appendTo(container);\r\n } else {\r\n angular.element('' + description + '').appendTo(container);\r\n }\r\n }\r\n\r\n $compile(container)(scope);\r\n };\r\n\r\n scope.generalModel.CallTimePicker = function (gridName, id, rowContent, rowIndex, interval, showSeconds, showQuantityDays) {\r\n var format = \"HH:mm\";\r\n var showSecondsInTime = false;\r\n var daysText = !scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Days : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).days;\r\n scope.generalModel.NewTime = rowContent;\r\n\r\n if (showSeconds) {\r\n format = \"HH:mm:ss\";\r\n showSecondsInTime = true;\r\n }\r\n\r\n if (showQuantityDays) {\r\n scope.generalModel.NewDays = parseInt(rowContent.substr(0, rowContent.indexOf(' ' + daysText + ' ')));\r\n scope.generalModel.NewTime = rowContent.substr(rowContent.indexOf(' ' + daysText + ' ') + (daysText.length + 2), 2) + \":\" + rowContent.substr(rowContent.indexOf('h ') + 2, 2) + \":\" + rowContent.substr(rowContent.indexOf('m ') + 2, 2);\r\n scope.generalModel.HasDaysPicker = true;\r\n }\r\n\r\n scope.generalModel.SelectedRowIndex = rowIndex;\r\n var clearTime = !scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.ClearTime : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).clearTime;\r\n var saveTime = !scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Save : myApplication.getLanguageObject.selectedLanguage('saveCancelButtonsTexts', myApplication).save;\r\n\r\n angular.element('#TimeDialogButtonArea').html('' +\r\n '');\r\n $compile(angular.element('#TimeDialogButtonArea'))(scope);\r\n\r\n angular.element('#TimePicker').timepicker({\r\n showSecond: showSecondsInTime,\r\n timeFormat: format,\r\n interval: interval,\r\n minTime: '00:00:00',\r\n maxTime: '23:59:59',\r\n defaultTime: scope.generalModel.NewTime,\r\n dynamic: false,\r\n dropdown: true\r\n });\r\n\r\n $mdDialog.show({\r\n contentElement: '#TimePickerDialog',\r\n parent: angular.element(document.body),\r\n clickOutsideToClose: false\r\n });\r\n };\r\n\r\n scope.generalModel.CloseDialogTimePicker = function () {\r\n $mdDialog.hide({\r\n contentElement: '#TimePickerDialog'\r\n });\r\n\r\n scope.generalModel.SelectedRowIndex = '';\r\n scope.generalModel.NewTime = '';\r\n };\r\n\r\n scope.generalModel.SaveTime = function (gridName, id) {\r\n angular.element('#TimePicker').trigger(\"change\");\r\n\r\n if (((scope.generalModel.NewTime.length === 5) && (scope.generalModel.NewTime.substr(2, 1) === ':')) || ((scope.generalModel.NewTime.length === 8) && (scope.generalModel.NewTime.substr(2, 1) === ':') && (scope.generalModel.NewTime.substr(5, 1) === ':'))) {\r\n scope.generalModel.SaveTimeStatus = false;\r\n var grid;\r\n\r\n if (angular.element('#' + gridName).hasClass('dx-treelist')) {\r\n grid = angular.element('#' + gridName).dxTreeList('instance');\r\n }\r\n else {\r\n grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n }\r\n\r\n if (scope.generalModel.HasDaysPicker) {\r\n grid.cellValue(scope.generalModel.SelectedRowIndex, id, scope.generalModel.NewDays + '.' + scope.generalModel.NewTime);\r\n scope.generalModel.HasDaysPicker = false;\r\n }\r\n else {\r\n grid.cellValue(scope.generalModel.SelectedRowIndex, id, scope.generalModel.NewTime);\r\n }\r\n\r\n scope.generalModel.CloseDialogTimePicker();\r\n }\r\n else {\r\n scope.generalModel.SaveTimeStatus = true;\r\n }\r\n };\r\n\r\n scope.generalModel.ClearTime = function (gridName, id, showSeconds) {\r\n scope.generalModel.NewDays = 0;\r\n\r\n if (showSeconds) {\r\n scope.generalModel.NewTime = \"00:00:00\";\r\n }\r\n else {\r\n scope.generalModel.NewTime = \"00:00\";\r\n }\r\n\r\n scope.generalModel.HasDaysPicker = false;\r\n scope.generalModel.SaveTimeStatus = false;\r\n\r\n var grid;\r\n\r\n if (angular.element('#' + gridName).hasClass('dx-treelist')) {\r\n grid = angular.element('#' + gridName).dxTreeList('instance');\r\n }\r\n else {\r\n grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n }\r\n\r\n grid.cellValue(scope.generalModel.SelectedRowIndex, id, scope.generalModel.NewTime);\r\n scope.generalModel.CloseDialogTimePicker();\r\n };\r\n\r\n scope.generalModel.AddBase64ToImage = function (image) {\r\n if ((image !== '') && (typeof image !== 'undefined') && (image.indexOf('data:image/gif;base64,') < 0)) {\r\n return 'data:image/gif;base64,' + image;\r\n }\r\n\r\n return image;\r\n };\r\n\r\n scope.generalModel.IsValidGuid = function (stringToTest) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(stringToTest)) {\r\n return;\r\n }\r\n\r\n if (stringToTest[0] === \"{\") {\r\n stringToTest = stringToTest.substring(1, stringToTest.length - 1);\r\n }\r\n\r\n var regexGuid = /^(\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1}$/gi;\r\n\r\n return regexGuid.test(stringToTest);\r\n };\r\n\r\n scope.generalModel.CheckIfThereAreEditedFields = function (model) {\r\n var thereAreChanges = false;\r\n var secondGrid;\r\n var secondGridEditData = [];\r\n var id;\r\n var grid;\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.MyForms) && Object.keys(scope.MyForms).length) {\r\n Object.keys(scope.MyForms).forEach(function (key) {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.MyForms[key]) && scope.MyForms[key].$dirty) {\r\n thereAreChanges = true;\r\n return;\r\n }\r\n });\r\n }\r\n\r\n if (!thereAreChanges) {\r\n for (var p = 0; p < model.ArrayGridObjects.length; p++) {\r\n if (angular.element(\"#\" + model.ArrayGridObjects[p].GridName + \"\").hasClass(\"dx-widget\")) {\r\n grid = angular.element(\"#\" + model.ArrayGridObjects[p].GridName + \"\").dxDataGrid('instance');\r\n\r\n if (typeof grid !== 'undefined') {\r\n var dataSource = grid.getDataSource();\r\n\r\n if (dataSource !== null) {\r\n for (var v = 0; v < dataSource._store._array.length; v++) {\r\n if (dataSource._store._array[v].hasOwnProperty('__KEY__')) {\r\n thereAreChanges = true;\r\n break;\r\n }\r\n\r\n else if (scope.generalModel.GetEditDataClean(grid).length) {\r\n thereAreChanges = true;\r\n break;\r\n }\r\n else if (model.ArrayGridObjects[p].SecondGrid !== '') {\r\n var mainId = model.ArrayGridObjects[p].MainId;\r\n\r\n if (typeof mainId === 'undefined') {\r\n mainId = scope.generalModel.GetMainIdFromKey(grid);\r\n }\r\n\r\n id = scope.generalModel.GetMainId(mainId, dataSource._store._array[v]);\r\n\r\n if (angular.element('#' + model.ArrayGridObjects[p].SecondGrid + id + '').length) {\r\n if (angular.element('#' + model.ArrayGridObjects[p].SecondGrid + id + '').hasClass(\"dx-widget\")) {\r\n secondGrid = angular.element('#' + model.ArrayGridObjects[p].SecondGrid + id).dxDataGrid('instance');\r\n secondGridEditData = scope.generalModel.GetEditDataClean(secondGrid);\r\n\r\n if (secondGridEditData.length) {\r\n thereAreChanges = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return thereAreChanges;\r\n };\r\n\r\n scope.generalModel.WatchInitializerFinished = scope.$watch('generalModel.InitializerFinished', function (value, oldValues, scope) {\r\n if ((scope.generalModel.InitializerFinished) && (typeof scope.generalModel.WatchInitializerFinished !== 'undefined')) {\r\n scope.generalModel.WatchInitializerFinished();\r\n }\r\n });\r\n\r\n scope.generalModel.encodeHtml = function (string) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(string)) {\r\n return string;\r\n }\r\n\r\n return string\r\n .replace(/&/g, '&')\r\n .replace(//g, '>')\r\n .replace(/\\\"/g, '"')\r\n .replace(/\\'/g, ''')\r\n .replace(/\\//g, '/');\r\n };\r\n\r\n scope.generalModel.CallCamera = function (requestCode) {\r\n window.createFileChooser.CallCamera(parseInt(requestCode));\r\n };\r\n\r\n scope.generalModel.RestoreClasses = function () {\r\n var applyLeft = $parse(scope.generalModel.BaseModel + '.ApplyLeft');\r\n applyLeft.assign(scope, false);\r\n\r\n var applyUp = $parse(scope.generalModel.BaseModel + '.ApplyUp');\r\n applyUp.assign(scope, false);\r\n\r\n var applyDown = $parse(scope.generalModel.BaseModel + '.ApplyDown');\r\n applyDown.assign(scope, false);\r\n\r\n var applyRight = $parse(scope.generalModel.BaseModel + '.ApplyRight');\r\n applyRight.assign(scope, false);\r\n };\r\n\r\n scope.generalModel.GetChooserImageOrVideo = function (path) {\r\n var rotationAndPath = path.split(\"~orientation:\");\r\n var ImageField = $parse(scope.generalModel.ImageField);\r\n ImageField.assign(scope, rotationAndPath[0]);\r\n\r\n scope.generalModel.RestoreClasses();\r\n var rotationDegrees;\r\n\r\n switch (rotationAndPath[1]) {\r\n case \"up\":\r\n var applyUp = $parse(scope.generalModel.BaseModel + '.ApplyUp');\r\n applyUp.assign(scope, true);\r\n rotationDegrees = $parse(scope.generalModel.BaseModel + '.RotationDegrees');\r\n rotationDegrees.assign(scope, 90);\r\n break;\r\n case \"left\":\r\n var applyLeft = $parse(scope.generalModel.BaseModel + '.ApplyLeft');\r\n applyLeft.assign(scope, true);\r\n rotationDegrees = $parse(scope.generalModel.BaseModel + '.RotationDegrees');\r\n rotationDegrees.assign(scope, 0);\r\n break;\r\n case \"down\":\r\n var applyDown = $parse(scope.generalModel.BaseModel + '.ApplyDown');\r\n applyDown.assign(scope, true);\r\n rotationDegrees = $parse(scope.generalModel.BaseModel + '.RotationDegrees');\r\n rotationDegrees.assign(scope, 270);\r\n break;\r\n case \"right\":\r\n var applyRight = $parse(scope.generalModel.BaseModel + '.ApplyRight');\r\n applyRight.assign(scope, true);\r\n rotationDegrees = $parse(scope.generalModel.BaseModel + '.RotationDegrees');\r\n rotationDegrees.assign(scope, 180);\r\n break;\r\n default:\r\n \"\";\r\n }\r\n\r\n scope.$apply();\r\n\r\n if (scope.generalModel.IsPhotography) {\r\n scope.generalModel.PhotographyList.push({ Photography: scope.generalModel.GetObjectByString(scope[scope.generalModel.BaseModel], \"Photography\"), Id: 'UserMain' });\r\n }\r\n };\r\n\r\n scope.generalModel.GetBase64Image = function (img, callback) {\r\n var canvas = document.createElement(\"canvas\");\r\n var context;\r\n var image = document.createElement(\"img\");\r\n var originalImage = document.getElementById(\"originalImage\");\r\n\r\n originalImage.onload = function () {\r\n this.height = img.height;\r\n this.width = img.width;\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n context = canvas.getContext(\"2d\");\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n context.drawImage(originalImage, 0, 0, originalImage.width, originalImage.height);\r\n var dataURL = canvas.toDataURL(\"image/jpeg\");\r\n image.src = dataURL;\r\n };\r\n\r\n originalImage.src = img.src;\r\n\r\n image.onload = function () {\r\n var rotationDegrees = scope.generalModel.GetObjectByString(scope[scope.generalModel.BaseModel], \"RotationDegrees\");\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (scope.generalModel.GetObjectByString(scope[scope.generalModel.BaseModel], \"ApplyUp\") || scope.generalModel.GetObjectByString(scope[scope.generalModel.BaseModel], \"ApplyDown\")) {\r\n canvas.width = img.height;\r\n canvas.height = img.width;\r\n }\r\n else {\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n }\r\n\r\n context = canvas.getContext(\"2d\");\r\n context.rotate(rotationDegrees * Math.PI / 180);\r\n\r\n if (rotationDegrees === 90) {\r\n context.drawImage(image, 0, -image.height);\r\n } else if (rotationDegrees === 180) {\r\n context.drawImage(image, -image.width, -image.height);\r\n } else if (rotationDegrees === 0) {\r\n context.drawImage(image, 0, 0);\r\n } else if (rotationDegrees === 270) {\r\n context.drawImage(image, -image.width, 0);\r\n }\r\n\r\n var dataURL = canvas.toDataURL(\"image/jpeg\");\r\n callback(dataURL.replace('data:image/jpeg;base64,', ''));\r\n };\r\n };\r\n\r\n scope.generalModel.CreateDateFilter = function (number, filterButtonName, inputDateStartId, inputDateEndId, filterFunction, filterAreaId, dateFormat) {\r\n var content;\r\n var button = '';\r\n var firstBlock = '
' + (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.FromFilter : myApplication.getLanguageObject.selectedLanguage('pivotGridTexts', myApplication).fromFilter) + '
';\r\n var secondBlock = '';\r\n\r\n if (number === 2) {\r\n secondBlock = '
' + (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.ToFilter : myApplication.getLanguageObject.selectedLanguage('pivotGridTexts', myApplication).toFilter) + '
';\r\n }\r\n\r\n content = button.concat(firstBlock, secondBlock);\r\n angular.element('#' + filterAreaId).append(content);\r\n };\r\n\r\n scope.generalModel.GetDatePartsByDate = function (date) {\r\n var newDate = new Date(date);\r\n\r\n return {\r\n year: newDate.getFullYear().toString(),\r\n month: newDate.getMonth() < 10 ? \"0\" + newDate.getMonth().toString() : newDate.getMonth().toString(),\r\n day: newDate.getDate() < 10 ? \"0\" + newDate.getDate().toString() : newDate.getDate().toString(),\r\n hour: newDate.getHours() < 10 ? \"0\" + newDate.getHours().toString() : newDate.getHours().toString(),\r\n minutes: newDate.getMinutes() < 10 ? \"0\" + newDate.getMinutes().toString() : newDate.getMinutes().toString(),\r\n seconds: newDate.getSeconds() < 10 ? \"0\" + newDate.getSeconds().toString() : newDate.getSeconds().toString()\r\n };\r\n };\r\n\r\n scope.generalModel.AngularCopy = function (object) {\r\n return GeneralModel.AngularCopy(object);\r\n };\r\n\r\n scope.generalModel.FieldSorter = function (fields) {\r\n return GeneralModel.FieldSorter(fields);\r\n };\r\n\r\n scope.generalModel.SetCookie = function (cookieName, cookieValue, expireDays) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (expireDays * 24 * 60 * 60 * 1000));\r\n var expires = \"expires=\" + date.toUTCString();\r\n document.cookie = cookieName + \"=\" + cookieValue + \";\" + expires + \";path=/\";\r\n };\r\n\r\n scope.generalModel.GetCookie = function (cookieName) {\r\n var name = cookieName + \"=\";\r\n var decodedCookie = decodeURIComponent(document.cookie);\r\n var cookieArray = decodedCookie.split(';');\r\n\r\n for (var i = 0; i < cookieArray.length; i++) {\r\n var cookieProperty = cookieArray[i];\r\n\r\n while (cookieProperty.charAt(0) === ' ') {\r\n cookieProperty = cookieProperty.substring(1);\r\n }\r\n\r\n if (cookieProperty.indexOf(name) === 0) {\r\n return cookieProperty.substring(name.length, cookieProperty.length);\r\n }\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n scope.generalModel.GetGridEditDataCleanBeforeSave = function (grid, id, arrayElement) {\r\n var editedData = scope.generalModel.GetEditDataClean(grid).map(function (edit) {\r\n return edit.key[id];\r\n });\r\n\r\n grid.saveEditData();\r\n\r\n return arrayElement.filter(function (el) {\r\n return (editedData.indexOf(el[id]) !== -1);\r\n });\r\n };\r\n\r\n scope.generalModel.GetMainIdFromKey = function (grid) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(grid.option('dataSource').store)) {\r\n return '__KEY__';\r\n }\r\n\r\n return grid.option('dataSource').store._key;\r\n };\r\n\r\n scope.generalModel.RecoverPassword = function (isValid) {\r\n scope.generalModel.SendRecoverClicked = true;\r\n\r\n if (!isValid) {\r\n return;\r\n }\r\n\r\n $q.when(GeneralModel.RecoverPassword()).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n\r\n scope.generalModel.RecoverUser = '';\r\n GeneralModel.ShowToast(myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).PasswordSentToYourEmail);\r\n scope.generalModel.CloseDialog('RecoverPasswordDialog');\r\n scope.generalModel.SendRecoverClicked = false;\r\n };\r\n\r\n scope.generalModel.GoToFirstPageCardView = function (model, numberOfItems) {\r\n model.CurrentPage = 1;\r\n scope.generalModel.FullPageLoading = false;\r\n $('#alt-style-pagination').pagination('selectPage', 1);\r\n\r\n if ($('#alt-style-pagination').length) {\r\n $('#alt-style-pagination').pagination('updateItems', numberOfItems);\r\n }\r\n\r\n if ($location.absUrl().substr(0, $location.absUrl().indexOf('#')) !== '') {\r\n window.history.pushState('', '', $location.absUrl().substr(0, $location.absUrl().indexOf('#')) + '#page-1');\r\n }\r\n };\r\n\r\n scope.generalModel.RefreshGridBase = function (dataSource) {\r\n $timeout(function () {\r\n var grid = angular.element('#GridBase').dxDataGrid('instance');\r\n grid.option('dataSource', dataSource);\r\n grid.refresh();\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n };\r\n\r\n scope.generalModel.SearchContainsSplitWildCard = function (textArray, expression) {\r\n if (expression === '') {\r\n return true;\r\n }\r\n\r\n var wordArray = [];\r\n\r\n if (expression.charAt(0) === '=') {\r\n wordArray = expression.split('=');\r\n } else {\r\n wordArray = expression.split('*');\r\n }\r\n\r\n for (var t = 0; t < textArray.length; t++) {\r\n var text = textArray[t];\r\n var isString = /[^A-Za-z0-9]/.test(text);\r\n\r\n if (isString) {\r\n text = textArray[t].toUpperCase();\r\n } else {\r\n text = text.toString();\r\n }\r\n\r\n for (var w = 0; w < wordArray.length; w++) {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(text)) {\r\n if (wordArray[w] !== '') {\r\n if (expression.charAt(0) === '=') {\r\n if (text === wordArray[w].toUpperCase()) {\r\n return true;\r\n }\r\n } else {\r\n if (text.indexOf(wordArray[w].toUpperCase()) !== -1) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n scope.generalModel.WildCardMatchRule = function (textArray, expression) {\r\n if (expression === '') {\r\n return true;\r\n }\r\n\r\n var equalExpression = false;\r\n\r\n if (expression.charAt(0) === '=') {\r\n equalExpression = true;\r\n }\r\n\r\n for (var t = 0; t < textArray.length; t++) {\r\n if (equalExpression) {\r\n if (textArray[t] === expression.substring(1, expression.length)) {\r\n return true;\r\n }\r\n } else {\r\n if (new RegExp(\"^\" + expression.split(\"*\").join(\".*\") + \"$\").test(textArray[t])) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n scope.generalModel.ApplySearchFilter = function (allField, expression, disabled) {\r\n if ((expression === '=') || (expression === '*')) {\r\n if ((!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.PreviousSearchWildCard) && ((scope.generalModel.PreviousSearchWildCard.charAt(0) === '=') || (scope.generalModel.PreviousSearchWildCard.charAt(0) === '*'))) || scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.PreviousSearchWildCard)) {\r\n return true;\r\n }\r\n }\r\n else if ((scope.generalModel.SearchContainsSplitWildCard(allField, expression)) && ((scope.baseModel.ShowDisabled) ? true : (disabled === false))) {\r\n scope.generalModel.PreviousSearchWildCard = expression;\r\n\r\n if ((scope.generalModel.SearchGridModeValue.indexOf('*') !== -1) || (scope.generalModel.SearchGridModeValue.charAt(0) === '=')) {\r\n return scope.generalModel.WildCardMatchRule(allField, expression);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n scope.generalModel.FormatValueByFieldType = function (value, fieldType) {\r\n return GeneralModel.FormatValueByFieldType(value, fieldType);\r\n };\r\n\r\n scope.generalModel.FormatSecondsToTimeSpanString = function (totalSeconds) {\r\n var valueInTimeFormat = '00:00:00';\r\n\r\n if (totalSeconds > 0) {\r\n var days = Math.floor(totalSeconds / (3600 * 24));\r\n var hours = Math.floor(totalSeconds % (3600 * 24) / 3600);\r\n var minutes = Math.floor(totalSeconds % 3600 / 60);\r\n var seconds = Math.floor(totalSeconds % 60);\r\n\r\n var daysToDisplay = days > 0 ? days + \".\" : \"\";\r\n var hoursToDisplay = hours > 0 ? ('0' + hours.toString()).slice(-2) + (\":\") : \"00:\";\r\n var minutesToDisplay = minutes > 0 ? ('0' + minutes.toString()).slice(-2) + (\":\") : \"00:\";\r\n var secondsToDisplay = seconds > 0 ? ('0' + seconds.toString()).slice(-2) : \"00\";\r\n valueInTimeFormat = daysToDisplay + hoursToDisplay + minutesToDisplay + secondsToDisplay;\r\n }\r\n\r\n return valueInTimeFormat;\r\n };\r\n\r\n scope.generalModel.GetChildrensPivotGridTotal = function (children, childrenDirection, completeChildrens) {\r\n for (var i = 0; i < children.length; i++) {\r\n var newLevel = children[i].children(childrenDirection);\r\n\r\n if (newLevel.length) {\r\n completeChildrens = completeChildrens.concat(newLevel);\r\n scope.generalModel.GetChildrensPivotGridTotal(newLevel, childrenDirection, completeChildrens);\r\n }\r\n else {\r\n completeChildrens = completeChildrens.concat(children[i]);\r\n }\r\n }\r\n\r\n return completeChildrens;\r\n };\r\n\r\n scope.generalModel.SetModules = function () {\r\n $sessionStorage.Modules = {};\r\n\r\n for (var m = 0; m < myApplication.modules.length; m++) {\r\n var moduleName = myApplication.modules[m];\r\n var modules = $sessionStorage.ParentMenus.filter(filter => (filter.Code === moduleName.Code)).length;\r\n\r\n if (!modules) {\r\n var find = false;\r\n $sessionStorage.ParentMenus.forEach(function (menu) {\r\n if (!find) {\r\n modules = menu.ChildrenMenus.filter(filter => (filter.Code === moduleName.Code)).length;\r\n\r\n if (modules) {\r\n $sessionStorage.Modules[moduleName.Name] = modules;\r\n find = true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n $sessionStorage.Modules[moduleName.Name] = modules;\r\n }\r\n };\r\n\r\n scope.generalModel.UploadAnnex = function (model, hasParent, id, index, parentList, idName) {\r\n scope.generalModel.FormUploadFileSubmitted = true;\r\n\r\n if (scope.generalModel.FilesAnnex.length && (scope.generalModel.FileUploadNameAnnex !== '')) {\r\n var formData = new FormData();\r\n formData.append(\"\", scope.generalModel.FilesAnnex[0]);\r\n var fileType = '';\r\n\r\n if (typeof scope.generalModel.FilesAnnex[0].$ngfName !== 'undefined') {\r\n fileType = scope.generalModel.FilesAnnex[0].$ngfName.substr(scope.generalModel.FilesAnnex[0].$ngfName.lastIndexOf('.'));\r\n }\r\n else {\r\n fileType = scope.generalModel.FilesAnnex[0].name.substr(scope.generalModel.FilesAnnex[0].name.lastIndexOf('.'));\r\n }\r\n\r\n var fileName = scope.generalModel.FileUploadNameAnnex;\r\n\r\n if (hasParent) {\r\n if (typeof model.AnnexesToAddList[index] === 'undefined') {\r\n model.AnnexesToAddList[index] = [];\r\n }\r\n\r\n model.AnnexesToAddList[index].push({ FormData: formData, FileType: fileType, FileName: fileName });\r\n }\r\n else {\r\n model.AnnexesToAddList.push({ FormData: formData, FileType: fileType, FileName: fileName });\r\n }\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(id) && (!hasParent || (hasParent && model.AnnexesToAddList[index].length))) {\r\n $q.when(scope.generalModel.ProcessUploadAnnexes(model, hasParent, parentList, idName)).then(function () {\r\n GeneralModel.ShowToast(Helpers.Translations.AnnexesSuccessfullyAdded);\r\n model.AnnexesToAddList[index] = [];\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n }\r\n else if (scope.generalModel.IsUndefinedEmptyOrNull(id)) {\r\n GeneralModel.ShowToast(Helpers.Translations.AttachmentAddedAvailableAfter);\r\n }\r\n\r\n scope.generalModel.FilesAnnex = [];\r\n scope.generalModel.FileUploadNameAnnex = '';\r\n scope.generalModel.FormUploadFilesAnnexSubmitted = false;\r\n }\r\n else {\r\n scope.generalModel.FormUploadFilesAnnexSubmitted = true;\r\n }\r\n };\r\n\r\n scope.generalModel.ProcessUploadAnnexes = function (model, hasParent, parentList, idName) {\r\n var defer = $q.defer();\r\n var success = 0;\r\n var id;\r\n var parameters;\r\n\r\n for (var a = 0; a < model.AnnexesToAddList.length; a++) {\r\n if (hasParent) {\r\n success = [];\r\n\r\n if (typeof model.AnnexesToAddList[a] !== 'undefined') {\r\n for (var p = 0; p < model.AnnexesToAddList[a].length; p++) {\r\n id = model[parentList][a][idName];\r\n model.AnnexesToAddList[a][p].FormData.append(\"newAnnex\", '{\\n\\\"RegisterId\\\":\\\"' + id + '\\\",\\n\\\"FileName\\\":\\\"' + model.AnnexesToAddList[a][p].FileName + '\\\",\\n\\\"FileType\\\":\\\"' + model.AnnexesToAddList[a][p].FileType + '\\\"\\n}');\r\n parameters = model.AnnexesToAddList[a][p].FormData;\r\n\r\n $q.when(GeneralModel.PostFiles(model, parameters, model.Documents, a)).then(function (result) {\r\n if (typeof success[result.Index] === 'undefined') {\r\n success[result.Index] = 0;\r\n }\r\n\r\n success[result.Index] += 1;\r\n\r\n if ((success.length === model.AnnexesToAddList.length) && (success[result.Index] === model.AnnexesToAddList[result.Index].length)) {\r\n defer.resolve();\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n defer.reject(reason);\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n id = model[idName];\r\n model.AnnexesToAddList[a].FormData.append(\"newAnnex\", '{\\n\\\"RegisterId\\\":\\\"' + id + '\\\",\\n\\\"FileName\\\":\\\"' + model.AnnexesToAddList[a].FileName + '\\\",\\n\\\"FileType\\\":\\\"' + model.AnnexesToAddList[a].FileType + '\\\"\\n}');\r\n parameters = model.AnnexesToAddList[a].FormData;\r\n\r\n $q.when(GeneralModel.PostFiles(model, parameters, model.Documents)).then(function () {\r\n success = success + 1;\r\n\r\n if (success === model.AnnexesToAddList.length) {\r\n defer.resolve();\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n defer.reject(reason);\r\n });\r\n }\r\n }\r\n\r\n return defer.promise;\r\n };\r\n\r\n scope.generalModel.DeleteAnnex = function (model, index) {\r\n scope.generalModel.FullPageLoading = true;\r\n model.AnnexId = model.Documents[index].AnnexId;\r\n\r\n $q.when(GeneralModel.DeleteAnnexes(model)).then(function () {\r\n model.Documents.splice(index, 1);\r\n model.AnnexId = '';\r\n GeneralModel.ShowToast(scope.generalModel.GeneralMessageInformation);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n };\r\n\r\n scope.generalModel.DownloadResultBlob = function (result) {\r\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveOrOpenBlob(result.BlobObject, result.FileName);\r\n } else {\r\n var a = document.createElement(\"a\");\r\n\r\n document.body.appendChild(a);\r\n a.style.display = \"none\";\r\n a.href = result.Blob;\r\n a.download = result.FileName;\r\n a.click();\r\n a.remove();\r\n }\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n scope.generalModel.DownloadAnnex = function (model, index) {\r\n scope.generalModel.FullPageLoading = true;\r\n model.AnnexId = model.Documents[index].AnnexId;\r\n\r\n $q.when(GeneralModel.PreviewAnnexes(model)).then(function (result) {\r\n scope.generalModel.DownloadResultBlob(result);\r\n model.ExportObjectName = '';\r\n model.ExportObject = '';\r\n model.ExportObjectType = '';\r\n model.AnnexId = '';\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n };\r\n\r\n scope.generalModel.LeftPadding = function (number) {\r\n return (((number < 10) && (number >= 0)) ? '0' : '') + number;\r\n };\r\n\r\n scope.generalModel.CountDecimals = function (number) {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(number) && ((number % 1) !== 0)) {\r\n return number.toString().split(\".\")[1].length;\r\n }\r\n\r\n return 0;\r\n };\r\n\r\n scope.generalModel.AngularCopy = function (object) {\r\n return GeneralModel.AngularCopy(object);\r\n };\r\n\r\n scope.generalModel.SetBreadCrumbs = function (link, linkParameters, name, edit) {\r\n var breadCrumb = new BreadCrumb(name, link, linkParameters);\r\n\r\n if (edit) {\r\n rootScope.$broadcast('editBreadCrumb', breadCrumb);\r\n }\r\n else {\r\n rootScope.$broadcast('addBreadCrumb', breadCrumb);\r\n }\r\n\r\n return GeneralModel.SetBreadCrumbs(link, linkParameters, name);\r\n };\r\n\r\n scope.generalModel.LoadAttachmentComponent = function () {\r\n scope.generalModel.ShowAttachmentsComponent = true;\r\n };\r\n\r\n scope.generalModel.HandleResultException = function (exception) {\r\n var message = exception;\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(exception.Message)) {\r\n message = exception.Message;\r\n }\r\n\r\n GeneralModel.ShowToastWarning(message);\r\n };\r\n\r\n }\r\n\r\n return GeneralFunctions;\r\n }]);\r\n\r\n myApp.filter(\"trust\", ['$sce', function ($sce) {\r\n return function (htmlCode) {\r\n return $sce.trustAsHtml(htmlCode);\r\n };\r\n }]);\r\n\r\n myApp.filter('Translations', function () {\r\n return function (code) {\r\n var text = Helpers.Translations[code];\r\n\r\n if (!text) {\r\n text = code;\r\n }\r\n\r\n return text;\r\n };\r\n });\r\n\r\n myApp.filter('SwebTranslation', function (GeneralModel, $filter) {\r\n return function (code, replaceObject) {\r\n var localWebTranslations;\r\n var localSharedTranslations;\r\n\r\n if (typeof replaceObject === \"undefined\") {\r\n replaceObject = {};\r\n }\r\n\r\n try {\r\n localWebTranslations = webTranslations;\r\n } catch (e) {\r\n if (e instanceof ReferenceError) {\r\n localWebTranslations = [];\r\n }\r\n }\r\n\r\n try {\r\n localSharedTranslations = sharedTranslations;\r\n } catch (e) {\r\n if (e instanceof ReferenceError) {\r\n localSharedTranslations = [];\r\n }\r\n }\r\n\r\n function ReplaceDynamicInformation(translation, replaceObject) {\r\n for (var key in replaceObject) {\r\n if (translation.indexOf('{' + key + '}') !== -1) {\r\n translation = translation.replace('{' + key + '}', replaceObject[key]);\r\n }\r\n }\r\n\r\n return translation;\r\n }\r\n\r\n if (!GeneralModel.model.IsUndefinedEmptyOrNull(Helpers.Translations) && !GeneralModel.model.IsUndefinedEmptyOrNull(Helpers.Translations[code])) {\r\n\r\n if (!angular.equals(replaceObject, {})) {\r\n return ReplaceDynamicInformation(Helpers.Translations[code], replaceObject);\r\n }\r\n\r\n return Helpers.Translations[code];\r\n }\r\n\r\n if (!GeneralModel.model.IsUndefinedEmptyOrNull($filter('filter')(localWebTranslations.concat(localSharedTranslations), { Code: code }, true)[0])) {\r\n if (!angular.equals(replaceObject, {})) {\r\n return ReplaceDynamicInformation($filter('filter')(localWebTranslations.concat(localSharedTranslations), { Code: code }, true)[0].OriginalText, replaceObject);\r\n }\r\n\r\n return $filter('filter')(localWebTranslations.concat(localSharedTranslations), { Code: code }, true)[0].OriginalText;\r\n }\r\n\r\n if (!GeneralModel.model.IsUndefinedEmptyOrNull($filter('filter')(localSharedTranslations, { Code: code }, true)[0])) {\r\n if (!angular.equals(replaceObject, {})) {\r\n return ReplaceDynamicInformation($filter('filter')(localSharedTranslations, { Code: code }, true)[0].OriginalText, replaceObject);\r\n }\r\n\r\n return $filter('filter')(localSharedTranslations, { Code: code }, true)[0].OriginalText;\r\n }\r\n\r\n try {\r\n var myApplicationBasePageTranslation = myApplication.getLanguageObject.selectedLanguage('basePageTexts', myApplication)[Object.keys(myApplication.getLanguageObject.selectedLanguage('basePageTexts', myApplication)).find(key => key.toLowerCase() === code.toLowerCase())];\r\n }\r\n catch (_exception) {\r\n throw code;\r\n }\r\n\r\n if (!GeneralModel.model.IsUndefinedEmptyOrNull(myApplicationBasePageTranslation)) {\r\n return myApplicationBasePageTranslation;\r\n }\r\n\r\n var myApplicationGeneralFunctionsTranslation = myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication)[Object.keys(myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication)).find(key => key.toLowerCase() === code.toLowerCase())];\r\n\r\n if (!GeneralModel.model.IsUndefinedEmptyOrNull(myApplicationGeneralFunctionsTranslation)) {\r\n return myApplicationGeneralFunctionsTranslation;\r\n }\r\n\r\n return code;\r\n };\r\n });\r\n\r\n myApp.directive('dynamicCtrlnv', ['$compile', function ($compile) {\r\n return {\r\n restrict: 'A',\r\n terminal: true,\r\n priority: 100000,\r\n link: function (scope, elem) {\r\n elem.removeAttr('dynamic-ctrlnv');\r\n elem.attr('ng-controller', ctrlName);\r\n $compile(elem)(scope);\r\n }\r\n };\r\n }]);\r\n\r\n myApp.config(['$translateProvider', function ($translateProvider) {\r\n $translateProvider.translations(myApplication.language, {}).preferredLanguage(myApplication.language);\r\n }]);\r\n\r\n myApp.run(function ($window, $rootScope, GeneralModel, Settings) {\r\n $rootScope.generalModel = GeneralModel.model;\r\n\r\n $window.addEventListener(\"offline\", function () {\r\n if ($rootScope.generalModel.IsOnline) {\r\n $rootScope.$apply(function () {\r\n $rootScope.generalModel.IsOnline = false;\r\n Settings.IsOnline = false;\r\n GeneralModel.ShowToastWarningNoHide((!$rootScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.Offline : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).offline);\r\n });\r\n }\r\n }, false);\r\n\r\n $window.addEventListener(\"online\", function () {\r\n if (!$rootScope.generalModel.IsOnline) {\r\n $rootScope.$apply(function () {\r\n $rootScope.generalModel.IsOnline = true;\r\n Settings.IsOnline = true;\r\n GeneralModel.ShowToast(!$rootScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).online);\r\n });\r\n }\r\n }, false);\r\n });\r\n\r\n myApp.directive('swebAccordion', ['$compile', function ($compile) {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n noteDate: '='\r\n },\r\n link: function (scope, element, attrs) {\r\n\r\n var listOfBlocks = angular.element(element).find('.SwebAccordionBlock');\r\n\r\n for (var l = 0; l < listOfBlocks.length; l++) {\r\n if (angular.element(listOfBlocks[l]).hasClass('SwebAccordionExpanded')) {\r\n angular.element(listOfBlocks[l]).find('.SwebAccordionBlockIcon').addClass('glyphicon-chevron-down');\r\n }\r\n else {\r\n angular.element(listOfBlocks[l]).find('.SwebAccordionBlockIcon').addClass('glyphicon-chevron-right');\r\n }\r\n }\r\n\r\n scope.$parent.AccordionExpand = function (event) {\r\n if (angular.element(event.currentTarget).parent('.SwebAccordionBlock').hasClass('SwebAccordionExpanded')) {\r\n angular.element(event.currentTarget).parent('.SwebAccordionBlock').removeClass('SwebAccordionExpanded');\r\n angular.element(event.currentTarget).find('.SwebAccordionBlockIcon').removeClass('glyphicon-chevron-down').addClass('glyphicon-chevron-right');\r\n }\r\n else {\r\n angular.element(event.currentTarget).parent('.SwebAccordionBlock').addClass('SwebAccordionExpanded');\r\n angular.element(event.currentTarget).find('.SwebAccordionBlockIcon').removeClass('glyphicon-chevron-right').addClass('glyphicon-chevron-down');\r\n }\r\n };\r\n }\r\n };\r\n }]);\r\n\r\n myApp.directive('formatNumber', [\"$parse\", \"$filter\", \"$timeout\", function ($parse, $filter, $timeout) {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n formatNumber: '=',\r\n angularCopyFunction: '&',\r\n required: \"=required\"\r\n },\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModel) {\r\n ngModel.$validators[attrs.name] = function (modelValue) {\r\n var formatContent = scope.angularCopyFunction()(angular.element(element).val())\r\n .replace(',', '.')\r\n .replace(/[^\\d.]/g, '')\r\n .replace(/(\\..*)\\./g, '$1');\r\n\r\n var object = $parse(attrs.ngModel);\r\n object.assign(scope, formatContent);\r\n var formatNumber = scope.$parent.$eval(attrs.formatNumber);\r\n if (typeof formatNumber === 'function') {\r\n formatNumber = formatNumber();\r\n }\r\n\r\n var minimum = formatNumber[1];\r\n if ((typeof minimum === 'undefined') || ((typeof minimum !== 'undefined')) && (parseFloat(formatContent) !== parseFloat(minimum))) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n\r\n angular.element('#' + attrs.id).bind('blur', function () {\r\n var content = angular.element(this).val();\r\n var object = $parse(attrs.ngModel);\r\n var formatNumber = scope.$parent.$eval(attrs.formatNumber);\r\n if (typeof formatNumber === 'function') {\r\n formatNumber = formatNumber();\r\n }\r\n var number = formatNumber[0];\r\n object.assign(scope, parseFloat(content).toFixed(number));\r\n angular.element(this).val($filter('number')(parseFloat(content).toFixed(number), number));\r\n });\r\n\r\n angular.element('#' + attrs.id).bind('focus', function () {\r\n var content = $parse(attrs.ngModel)(scope);\r\n angular.element(this).val(content);\r\n });\r\n\r\n angular.element('#' + attrs.id).change(function () {\r\n var content = $parse(attrs.ngModel)(scope);\r\n angular.element(this).val(content);\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n myApp.directive('formatNumberWithDecimals', function ($filter, $locale) {\r\n var decimalSep = $locale.NUMBER_FORMATS.DECIMAL_SEP;\r\n var toNumberRegex = new RegExp('[^0-9\\\\' + decimalSep + ']', 'g');\r\n\r\n var filterFunc = function (value, decimalPlaces) {\r\n if (typeof decimalPlaces === 'undefined') {\r\n decimalPlaces = 3;\r\n }\r\n\r\n return $filter('number')(value, decimalPlaces);\r\n };\r\n\r\n function getCaretPosition(input) {\r\n if (!input) {\r\n return 0;\r\n }\r\n\r\n if (input.selectionStart !== undefined) {\r\n return input.selectionStart;\r\n } else if (document.selection) {\r\n input.focus();\r\n var selection = document.selection.createRange();\r\n selection.moveStart('character', input.value ? -input.value.length : 0);\r\n\r\n return selection.text.length;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n function setCaretPosition(input, oldPos, newPos) {\r\n if (!input) {\r\n return 0;\r\n }\r\n\r\n if ((input.offsetWidth === 0) || (input.offsetHeight === 0)) {\r\n return;\r\n }\r\n\r\n if (oldPos === newPos) {\r\n return;\r\n }\r\n\r\n if (input.setSelectionRange) {\r\n input.setSelectionRange(newPos, newPos);\r\n }\r\n else if (input.createTextRange) {\r\n var range = input.createTextRange();\r\n range.collapse(true);\r\n range.moveEnd('character', newPos);\r\n range.moveStart('character', newPos);\r\n range.select();\r\n }\r\n }\r\n\r\n function toNumber(numberStr) {\r\n return parseFloat(numberStr.replace(toNumberRegex, ''), 10);\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function postLink(scope, elem, attrs, modelCtrl) {\r\n modelCtrl.$formatters.push(filterFunc);\r\n modelCtrl.$parsers.push(function (newViewValue) {\r\n var oldModelValue = modelCtrl.$modelValue;\r\n var newModelValue = toNumber(newViewValue);\r\n var decimalPlaces = attrs.formatNumberWithDecimals;\r\n\r\n modelCtrl.$viewValue = filterFunc(newModelValue, decimalPlaces);\r\n\r\n var oldPos = getCaretPosition(elem[0]);\r\n elem.val(modelCtrl.$viewValue);\r\n var newPos = oldPos + modelCtrl.$viewValue.length - newViewValue.length;\r\n\r\n if ((oldModelValue === undefined) || isNaN(oldModelValue)) {\r\n newPos -= 3;\r\n }\r\n\r\n setCaretPosition(elem[0], oldPos, newPos);\r\n\r\n return newModelValue;\r\n });\r\n }\r\n };\r\n });\r\n\r\n myApp.directive('selectOnClick', ['$window', function ($window) {\r\n return function (scope, element, attrs) {\r\n element.bind('click', function () {\r\n if (!$window.getSelection().toString()) {\r\n this.setSelectionRange(0, this.value.length);\r\n }\r\n });\r\n };\r\n }]);\r\n\r\n myApp.directive('draggableModal', ['$document', function ($document) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n var handle = element.find('.ModalHeader');\r\n var offsetX, offsetY, initialMouseX, initialMouseY;\r\n\r\n handle.bind('mousedown', function ($event) {\r\n offsetX = element.prop('offsetLeft');\r\n offsetY = element.prop('offsetTop');\r\n initialMouseX = $event.clientX;\r\n initialMouseY = $event.clientY;\r\n\r\n $document.bind('mousemove', mousemove);\r\n $document.bind('mouseup', mouseup);\r\n });\r\n\r\n function mousemove($event) {\r\n var mouseX = $event.clientX - initialMouseX;\r\n var mouseY = $event.clientY - initialMouseY;\r\n\r\n element.css({\r\n left: mouseX + offsetX + 'px',\r\n top: mouseY + offsetY + 'px'\r\n });\r\n }\r\n\r\n function mouseup() {\r\n $document.unbind('mousemove', mousemove);\r\n $document.unbind('mouseup', mouseup);\r\n }\r\n }\r\n }\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('SaveFunctions', [\"$q\", \"GeneralModel\", \"$filter\", \"$compile\", \"$parse\", \"NumberOperations\", function ($q, GeneralModel, $filter, $compile, $parse, NumberOperations) {\r\n\r\n function SaveFunctions(scope) {\r\n\r\n scope.generalModel.SavePage = function (model, formName, modelReference, mainObject, useDeprecated) {\r\n scope.generalModel.FullPageLoading = true;\r\n\r\n var id;\r\n var grid;\r\n var editData;\r\n var secondGrid;\r\n var invalidFields = false;\r\n var existsSecondGrid = false;\r\n model.SecondGridEditData = [];\r\n model.SaveButtonClicked = true;\r\n model.CancelSaveProcess = true;\r\n model.MainObjectPreviousSave = [];\r\n\r\n model.UpdatedData = scope.generalModel.AngularCopy(model[mainObject]);\r\n model.InsertedData = scope.generalModel.AngularCopy(model[mainObject]);\r\n\r\n if (typeof model.ArrayGridObjects !== 'undefined') {\r\n for (var g = 0; g < model.ArrayGridObjects.length; g++) {\r\n model[model.ArrayGridObjects[g].ObjectName] = scope.generalModel.AngularCopy(model[mainObject][model.ArrayGridObjects[g].ObjectName]);\r\n model[model.ArrayGridObjects[g].GridName + 'ValidState'] = 0;\r\n }\r\n }\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(formName)) {\r\n for (var i = 0; i < scope.MyForms[formName].$$controls.length; i++) {\r\n if (typeof scope.MyForms[formName].$$controls[i].$$attr.validations !== 'undefined') {\r\n scope.ValidateField(scope.MyForms[formName].$$controls[i].$$attr.validations, scope.MyForms[formName][scope.MyForms[formName].$$controls[i].$name]);\r\n\r\n if (scope.MyForms[formName][scope.MyForms[formName].$$controls[i].$name].$invalid) {\r\n invalidFields = true;\r\n }\r\n }\r\n else if (scope.MyForms[formName].$$controls[i].$invalid) {\r\n invalidFields = true;\r\n }\r\n\r\n if (typeof scope.MyForms[formName].$$controls[i].$$attr.formatNumber !== 'undefined') {\r\n var array = scope.MyForms[formName].$$controls[i].$$attr.ngModel.split('.');\r\n\r\n if ((array.length <= 3) && array.length) {\r\n var nameToObject = array[array.length - 1];\r\n\r\n if (!NumberOperations.CheckIfFloat(model.UpdatedData[nameToObject])) {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(model.ElementId)) {\r\n model.UpdatedData[nameToObject] = scope.generalModel.AngularCopy(model.UpdatedData[nameToObject]).replace(',', '.').replace(/[^\\d.]/g, '').replace(/(\\..*)\\./g, '$1');\r\n }\r\n else {\r\n model.InsertedData[nameToObject] = scope.generalModel.AngularCopy(model.InsertedData[nameToObject]).replace(',', '.').replace(/[^\\d.]/g, '').replace(/(\\..*)\\./g, '$1');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (invalidFields && !scope.generalModel.IsSettingStandards) {\r\n scope.generalModel.FullPageLoading = false;\r\n GeneralModel.ShowToastWarning(!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.InvalidFields : myApplication.getLanguageObject.selectedLanguage('saveFunctions', myApplication).invalidFields);\r\n return;\r\n }\r\n\r\n if (typeof model.ArrayGridObjects !== 'undefined') {\r\n for (var p = 0; p < model.ArrayGridObjects.length; p++) {\r\n if (model.ArrayGridObjects[p].SecondGrid !== '') {\r\n existsSecondGrid = true;\r\n grid = angular.element(\"#\" + model.ArrayGridObjects[p].GridName).dxDataGrid('instance');\r\n\r\n if (typeof grid !== 'undefined') {\r\n var dataSource = grid.getDataSource();\r\n\r\n if (dataSource !== null) {\r\n for (var v = 0; v < dataSource._store._array.length; v++) {\r\n id = scope.generalModel.GetMainId(model.ArrayGridObjects[p].MainId, dataSource._store._array[v]);\r\n\r\n if (id === scope.generalModel.GuidEmpty) {\r\n editData = scope.generalModel.GetEditDataClean(grid);\r\n var secondGridElementName = model.ArrayGridObjects[p].SecondGrid.substr(4);\r\n\r\n for (var a = 0; a < editData.length; a++) {\r\n if (editData[a].key.__KEY__ === dataSource._store._array[v].__KEY__) {\r\n scope.generalModel.CreateObjectsSecondGrid(editData[a].key[secondGridElementName], model, p, dataSource._store._array[v], model.ArrayGridObjects[p].ObjectName);\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n secondGrid = angular.element('#' + model.ArrayGridObjects[p].SecondGrid + id).dxDataGrid('instance');\r\n\r\n if (typeof secondGrid !== 'undefined') {\r\n editData = scope.generalModel.GetEditDataClean(secondGrid);\r\n\r\n if (editData.length) {\r\n model[model.ArrayGridObjects[p].SecondGrid + 'ValidState'][id] = 0;\r\n scope.generalModel.CreateObjectsSecondGrid(editData, model, p, dataSource._store._array[v], model.ArrayGridObjects[p].ObjectName);\r\n }\r\n secondGrid.saveEditData();\r\n\r\n if ((typeof model[model.ArrayGridObjects[p].SecondGrid + 'ValidState'][id] !== 'undefined') && (model[model.ArrayGridObjects[p].SecondGrid + 'ValidState'][id] !== 0) && (!scope.generalModel.IsSettingStandards)) {\r\n GeneralModel.ShowToastWarning(!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.InvalidFieldsOnTable : myApplication.getLanguageObject.selectedLanguage('saveFunctions', myApplication).invalidFieldsOnTable + model.ArrayGridObjects[p].DisplayName + \".\");\r\n scope.generalModel.FullPageLoading = false;\r\n\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var l = 0; l < model.ArrayGridObjects.length; l++) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(model.ArrayGridObjects[l].ParentArray)) {\r\n grid = angular.element(\"#\" + model.ArrayGridObjects[l].GridName + \"\").dxDataGrid('instance');\r\n\r\n if (typeof grid !== 'undefined') {\r\n editData = scope.generalModel.GetEditDataClean(grid);\r\n scope.generalModel.CreateObjectsParentGrid(editData, l, model, model.ArrayGridObjects[l].MainId, model.ArrayGridObjects[l].ObjectName);\r\n }\r\n }\r\n }\r\n\r\n for (var listGrids = 0; listGrids < model.ArrayGridObjects.length; listGrids++) {\r\n grid = angular.element(\"#\" + model.ArrayGridObjects[listGrids].GridName + \"\").dxDataGrid('instance');\r\n\r\n if (typeof grid !== 'undefined') {\r\n grid.saveEditData();\r\n }\r\n }\r\n\r\n if (!scope.generalModel.IsSettingStandards) {\r\n for (var m = 0; m < model.ArrayGridObjects.length; m++) {\r\n if (model[model.ArrayGridObjects[m].GridName + 'ValidState'] !== 0) {\r\n GeneralModel.ShowToastWarning(!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.InvalidFieldsTable : myApplication.getLanguageObject.selectedLanguage('saveFunctions', myApplication).invalidFieldsTable + model.ArrayGridObjects[m].DisplayName + \".\");\r\n scope.generalModel.FullPageLoading = false;\r\n\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(formName)) {\r\n for (var j = 0; j < scope.MyForms[formName].$$controls.length; j++) {\r\n if (typeof scope.MyForms[formName].$$controls !== 'undefined') {\r\n var newArray = scope.MyForms[formName].$$controls[j].$$attr.ngModel.split('.');\r\n if ((newArray.length <= 3) && newArray.length) {\r\n var objectName = newArray[newArray.length - 1];\r\n var elementToAdd = $parse(scope.MyForms[formName].$$controls[j].$$attr.ngModel)(scope);\r\n\r\n if (typeof elementToAdd !== 'undefined') {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(model.ElementId)) {\r\n model.UpdatedData[objectName] = elementToAdd;\r\n }\r\n else {\r\n model.InsertedData[objectName] = elementToAdd;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n scope.generalModel.ClearExtraConnectionsWithoutGrid(model);\r\n\r\n if ((typeof scope.generalModel.CheckIfThereAreEditedContacts !== 'undefined') && (scope.generalModel.CheckIfThereAreEditedContacts()) && (!scope.generalModel.IsSettingStandards)) {\r\n var object = \"UpdatedData\";\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(model.ElementId)) {\r\n object = \"InsertedData\";\r\n }\r\n\r\n $q.when(scope.generalModel.SavePageWithContacts(model[object])).then(function (result) {\r\n if (result !== '200') {\r\n GeneralModel.ShowToastWarning(!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.InvalidFieldsOnContacts : myApplication.getLanguageObject.selectedLanguage('saveFunctions', myApplication).invalidFieldsOnContacts);\r\n scope.generalModel.FullPageLoading = false;\r\n\r\n return;\r\n }\r\n\r\n scope.generalModel.FinalProcessSavePage(model, modelReference, existsSecondGrid, mainObject, useDeprecated);\r\n });\r\n }\r\n else {\r\n scope.generalModel.FinalProcessSavePage(model, modelReference, existsSecondGrid, mainObject, useDeprecated);\r\n }\r\n };\r\n\r\n scope.generalModel.FinalProcessSavePage = function (model, modelReference, existsSecondGrid, mainObject, useDeprecated) {\r\n if (scope.generalModel.PhotographyList.length && (scope.generalModel.PhotographyList !== '')) {\r\n for (var a = 0; a < scope.generalModel.PhotographyList.length; a++) {\r\n $q.when(scope.generalModel.ConvertImages(scope.generalModel.PhotographyList[a].Photography, a, '')).then(function (result) {\r\n if (scope.generalModel.PhotographyList[result.Key].Id === 'Main') {\r\n model.InsertedData.Photography = result.Photography;\r\n model.UpdatedData.Photography = result.Photography;\r\n }\r\n else {\r\n scope.generalModel.SetObjectValueByString(model.InsertedData, scope.generalModel.PhotographyList[result.Key].Id, result.Photography);\r\n scope.generalModel.SetObjectValueByString(model.UpdatedData, scope.generalModel.PhotographyList[result.Key].Id, result.Photography);\r\n }\r\n\r\n if (result.Key + 1 === scope.generalModel.PhotographyList.length) {\r\n scope.generalModel.ProcessSavePage(model, modelReference, existsSecondGrid, mainObject, useDeprecated);\r\n }\r\n });\r\n }\r\n }\r\n else if (!scope.generalModel.IsUndefinedEmptyOrNull(model.InsertedData.Photography) && (model.InsertedData.Photography.indexOf(\"data:image/gif;base64,\") >= 0)) {\r\n model.InsertedData.Photography = model.InsertedData.Photography.replace('data:image/gif;base64,', '');\r\n model.UpdatedData.Photography = model.UpdatedData.Photography.replace('data:image/gif;base64,', '');\r\n scope.generalModel.ProcessSavePage(model, modelReference, existsSecondGrid, mainObject, useDeprecated);\r\n }\r\n else {\r\n scope.generalModel.ProcessSavePage(model, modelReference, existsSecondGrid, mainObject, useDeprecated);\r\n }\r\n };\r\n\r\n scope.generalModel.ClearExtraConnectionsWithoutGrid = function (model) {\r\n for (var propertyName in model.InsertedData) {\r\n var extraConnections = $filter('filter')(scope.generalModel.ExtraConnections, { ObjectPathName: propertyName }, true);\r\n\r\n if (extraConnections.length) {\r\n delete model.InsertedData[propertyName];\r\n }\r\n }\r\n\r\n for (var propertyNameUpdate in model.UpdatedData) {\r\n var extraConnectionsUpdate = $filter('filter')(scope.generalModel.ExtraConnections, { ObjectPathName: propertyNameUpdate }, true);\r\n\r\n if (extraConnectionsUpdate.length) {\r\n delete model.UpdatedData[propertyNameUpdate];\r\n }\r\n }\r\n };\r\n\r\n scope.generalModel.ProcessSavePage = function (model, modelReference, existsSecondGrid, mainObject, useDeprecated) {\r\n scope.generalModel.ClearDeletedEditedObjects();\r\n scope.generalModel.FullPageLoading = true;\r\n\r\n if (scope.generalModel.IsSettingStandards) {\r\n $q.when(GeneralModel.SetStandardValues(model, model.MainController)).then(function () {\r\n model.SaveButtonClicked = false;\r\n scope.generalModel.SuccessSave();\r\n }).catch(function (exception) {\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n\r\n GeneralModel.ShowToastWarning(exception.Message);\r\n\r\n if (existsSecondGrid) {\r\n scope.generalModel.ResetSecondGridData(model);\r\n }\r\n\r\n if (exception.Code === '409') {\r\n scope.generalModel.ConcurrencyError = true;\r\n scope.generalModel.ValidateServerData(model, '', mainObject);\r\n }\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n else {\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(model.ElementId)) {\r\n if ((typeof useDeprecated !== \"undefined\") && (!useDeprecated)) {\r\n $q.when(GeneralModel.Put(model, modelReference)).then(function () {\r\n model.ServerData = {};\r\n scope.generalModel.ConcurrencyError = false;\r\n angular.element('#MainObjectServerConcurrency').html('');\r\n scope.generalModel.PhotographyList = [];\r\n scope.generalModel.SuccessSave();\r\n }).catch(function (exception) {\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n GeneralModel.ShowToastWarning(exception.Message);\r\n\r\n if (existsSecondGrid) {\r\n scope.generalModel.ResetSecondGridData(model);\r\n }\r\n if (exception.Code === '409') {\r\n scope.generalModel.ConcurrencyError = true;\r\n scope.generalModel.ValidateServerData(model, '', mainObject);\r\n }\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n else {\r\n $q.when(GeneralModel.PutDeprecatedObject(model, modelReference)).then(function (result) {\r\n if (result !== '200') {\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n GeneralModel.ShowToastWarning(scope.generalModel.GeneralMessageError);\r\n\r\n if (existsSecondGrid) {\r\n scope.generalModel.ResetSecondGridData(model);\r\n }\r\n\r\n if (result === '409') {\r\n scope.generalModel.ConcurrencyError = true;\r\n scope.generalModel.ValidateServerData(model, '', mainObject);\r\n }\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n\r\n return;\r\n }\r\n\r\n model.ServerData = {};\r\n scope.generalModel.ConcurrencyError = false;\r\n angular.element('#MainObjectServerConcurrency').html('');\r\n scope.generalModel.PhotographyList = [];\r\n scope.generalModel.SuccessSave();\r\n }).catch(function () {\r\n scope.generalModel.FullPageLoading = false;\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n GeneralModel.ShowToastWarning(scope.generalModel.GeneralMessageError);\r\n });\r\n }\r\n }\r\n else {\r\n if ((typeof useDeprecated !== \"undefined\") && (!useDeprecated)) {\r\n var sucess = false;\r\n var showMessage = true;\r\n\r\n $q.when(GeneralModel.Post(model, modelReference)).then(function (result) {\r\n sucess = true;\r\n\r\n if (typeof model.ElementId !== \"undefined\") {\r\n model.ElementId = result;\r\n }\r\n }).catch(function (exception) {\r\n if (exception.Code === '417') {\r\n GeneralModel.ShowToastAlert(exception.Message);\r\n showMessage = false;\r\n sucess = true;\r\n return;\r\n }\r\n\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n\r\n GeneralModel.ShowToastWarning(exception.Message);\r\n\r\n if (existsSecondGrid) {\r\n scope.generalModel.ResetSecondGridData(model);\r\n }\r\n\r\n if (exception.Code === '409') {\r\n scope.generalModel.ConcurrencyError = true;\r\n scope.generalModel.ValidateServerData(model, '', mainObject);\r\n }\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n }).finally(function () {\r\n if (!sucess) {\r\n return;\r\n }\r\n\r\n model.ServerData = {};\r\n\r\n scope.generalModel.ConcurrencyError = false;\r\n angular.element('#MainObjectServerConcurrency').html('');\r\n scope.generalModel.PhotographyList = [];\r\n scope.generalModel.SuccessSave(showMessage);\r\n scope.generalModel.SidebarOptions['State']['NewOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['ExportOption'] = true;\r\n });\r\n }\r\n else {\r\n $q.when(GeneralModel.PostDeprecatedObject(model, modelReference)).then(function (result) {\r\n var showMessage = true;\r\n if ((result !== '200') && (result !== '417')) {\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n GeneralModel.ShowToastWarning(scope.generalModel.GeneralMessageError);\r\n\r\n if (existsSecondGrid) {\r\n scope.generalModel.ResetSecondGridData(model);\r\n }\r\n\r\n if (result === '409') {\r\n scope.generalModel.ConcurrencyError = true;\r\n scope.generalModel.ValidateServerData(model, '', mainObject);\r\n }\r\n\r\n scope.generalModel.FullPageLoading = false;\r\n\r\n return;\r\n }\r\n\r\n if (result === '417') {\r\n GeneralModel.ShowToastAlert(scope.generalModel.GeneralMessageError);\r\n showMessage = false;\r\n }\r\n\r\n model.ServerData = {};\r\n scope.generalModel.ConcurrencyError = false;\r\n angular.element('#MainObjectServerConcurrency').html('');\r\n scope.generalModel.PhotographyList = [];\r\n scope.generalModel.SuccessSave(showMessage);\r\n scope.generalModel.SidebarOptions['State']['NewOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['ExportOption'] = true;\r\n }).catch(function () {\r\n scope.generalModel.FullPageLoading = false;\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n GeneralModel.ShowToastWarning(scope.generalModel.GeneralMessageError);\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n scope.generalModel.CreateObjects = function (devExtremeObject, model) {\r\n for (var i = 0; i < devExtremeObject.length; i++) {\r\n var name;\r\n var objectOldData;\r\n var extraConnection;\r\n var object = devExtremeObject[i];\r\n\r\n if (object.type === 'update') {\r\n var keys = [];\r\n var oldData = null;\r\n\r\n for (var k in object.data) {\r\n keys.push(k);\r\n }\r\n\r\n objectOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(object);\r\n oldData = scope.generalModel.AngularCopy(objectOldData);\r\n\r\n for (var y = 0; y < keys.length; y++) {\r\n var keyName = keys[y];\r\n oldData[keyName] = object.data[keyName];\r\n }\r\n\r\n for (var x = 0; x < scope.generalModel.ExtraConnections.length; x++) {\r\n extraConnection = scope.generalModel.ExtraConnections[x];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(oldData, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(oldData, name));\r\n\r\n if (!Array.isArray(scope.generalModel.GetObjectByString(oldData, name))) {\r\n scope.generalModel.SetObjectValueByString(oldData, name, null);\r\n }\r\n else {\r\n for (var f = 0; f < oldData[name].length; f++) {\r\n for (var key in oldData[name][f]) {\r\n if (typeof oldData[name][f][key] === 'object') {\r\n scope.generalModel.SetObjectValueByString(oldData, name + '[' + f + '].' + key, null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n model.UpdatedData.push(oldData);\r\n } else if (object.type === 'remove') {\r\n objectOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(object);\r\n\r\n var oldDataForDelete = scope.generalModel.AngularCopy(objectOldData);\r\n\r\n for (var extraDelete = 0; extraDelete < scope.generalModel.ExtraConnections.length; extraDelete++) {\r\n extraConnection = scope.generalModel.ExtraConnections[extraDelete];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(oldDataForDelete, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(oldDataForDelete, name));\r\n\r\n if (!Array.isArray(scope.generalModel.GetObjectByString(oldDataForDelete, name))) {\r\n scope.generalModel.SetObjectValueByString(oldDataForDelete, name, null);\r\n }\r\n else {\r\n for (var clearExtraDelete = 0; clearExtraDelete < oldDataForDelete[name].length; clearExtraDelete++) {\r\n for (var keyForDelete in oldDataForDelete[name][clearExtraDelete]) {\r\n if (typeof oldDataForDelete[name][clearExtraDelete][keyForDelete] === 'object') {\r\n scope.generalModel.SetObjectValueByString(oldDataForDelete, name + '[' + clearExtraDelete + '].' + keyForDelete, null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n model.DeletedData.push(oldDataForDelete);\r\n model.DeletedData[model.DeletedData.length - 1].Delete = true;\r\n } else if (object.type === 'insert') {\r\n var newData = scope.generalModel.AngularCopy(object.data);\r\n\r\n for (var z = 0; z < scope.generalModel.ExtraConnections.length; z++) {\r\n extraConnection = scope.generalModel.ExtraConnections[z];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(newData, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(newData, name));\r\n\r\n if (!Array.isArray(scope.generalModel.GetObjectByString(newData, name))) {\r\n scope.generalModel.SetObjectValueByString(newData, name, null);\r\n }\r\n else {\r\n for (var q = 0; q < newData[name].length; q++) {\r\n for (var keyNewData in newData[name][q]) {\r\n if (typeof newData[name][q][keyNewData] === 'object') {\r\n scope.generalModel.SetObjectValueByString(newData, name + '[' + q + '].' + keyNewData, null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n model.InsertedData.push(newData);\r\n }\r\n }\r\n };\r\n\r\n scope.generalModel.CreateObjectsParentGrid = function (devExtremeObject, arrayGridKey, model, mainId, parent) {\r\n var name;\r\n var element;\r\n var newData;\r\n var foundInner;\r\n var foundInsertion;\r\n var extraConnection;\r\n var objectsByString;\r\n var addedElements = [];\r\n var elementToInsert = [];\r\n var secondGridEditedData = [];\r\n var secondGridMainId = model.ArrayGridObjects[arrayGridKey].SecondGridMainId;\r\n var objectName = model.ArrayGridObjects[arrayGridKey].ObjectName + 'Element';\r\n var secondGridObjectName = model.ArrayGridObjects[arrayGridKey].SecondGrid.substr(4);\r\n\r\n if (parent !== '') {\r\n model.InsertedData[parent] = [];\r\n }\r\n\r\n for (var i = 0; i < devExtremeObject.length; i++) {\r\n var object = devExtremeObject[i];\r\n var objectOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(object);\r\n\r\n if (object.type === 'update') {\r\n var keys = [];\r\n var oldData = null;\r\n\r\n for (var k in object.data) {\r\n keys.push(k);\r\n }\r\n\r\n oldData = scope.generalModel.AngularCopy(objectOldData);\r\n\r\n for (var y = 0; y < keys.length; y++) {\r\n var keyName = keys[y];\r\n\r\n oldData[keyName] = object.data[keyName];\r\n }\r\n\r\n for (var x = 0; x < scope.generalModel.ExtraConnections.length; x++) {\r\n extraConnection = scope.generalModel.ExtraConnections[x];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(oldData, name) === 'undefined') {\r\n continue;\r\n }\r\n\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(oldData, name));\r\n\r\n if (!Array.isArray(oldData[name])) {\r\n scope.generalModel.SetObjectValueByString(oldData, name, null);\r\n\r\n continue;\r\n }\r\n\r\n for (var f = 0; f < oldData[name].length; f++) {\r\n var itemOldData = oldData[name][f];\r\n\r\n for (var key in itemOldData) {\r\n if (typeof itemOldData[key] === 'object') {\r\n scope.generalModel.SetObjectValueByString(oldData, name + '[' + f + '].' + key, null);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (typeof oldData.__KEY__ === 'undefined') {\r\n if (parent === '') {\r\n model.UpdatedData.push(oldData);\r\n }\r\n else {\r\n foundInner = false;\r\n objectsByString = scope.generalModel.GetObjectByString(model.UpdatedData, parent);\r\n\r\n for (var u = 0; u < objectsByString.length; u++) {\r\n var itemObjectsByString = objectsByString[u];\r\n\r\n if (itemObjectsByString[mainId] === null) {\r\n if (angular.equals(objectOldData, itemObjectsByString)) {\r\n foundInner = true;\r\n (objectsByString)[u] = scope.generalModel.AngularCopy(oldData);\r\n break;\r\n }\r\n } else if (itemObjectsByString[mainId] === objectOldData[mainId]) {\r\n foundInner = true;\r\n (objectsByString)[u] = scope.generalModel.AngularCopy(oldData);\r\n break;\r\n }\r\n }\r\n\r\n if (!foundInner) {\r\n (objectsByString).push(oldData);\r\n }\r\n }\r\n\r\n addedElements.push(objectOldData[mainId]);\r\n }\r\n else {\r\n var isInsertedData = false;\r\n\r\n for (var b = 0; b < model.InsertedData.length; b++) {\r\n var itemModelInsertedData = model.InsertedData[b];\r\n\r\n if (itemModelInsertedData.__KEY__ === oldData.__KEY__) {\r\n isInsertedData = true;\r\n model.InsertedData[b] = scope.generalModel.AngularCopy(oldData);\r\n addedElements.push(objectOldData[mainId]);\r\n }\r\n }\r\n\r\n if (!isInsertedData) {\r\n if (parent === '') {\r\n model.InsertedData.push(oldData);\r\n }\r\n else {\r\n (scope.generalModel.GetObjectByString(model.InsertedData, parent)).push(oldData);\r\n }\r\n\r\n addedElements.push(objectOldData.__KEY__);\r\n }\r\n }\r\n }\r\n else if (object.type === 'remove') {\r\n if (parent === '') {\r\n model.DeletedData.push(objectOldData);\r\n model.DeletedData[model.DeletedData.length - 1].Delete = true;\r\n addedElements.push(objectOldData[mainId]);\r\n }\r\n else {\r\n objectsByString = scope.generalModel.GetObjectByString(model.UpdatedData, parent);\r\n\r\n for (var o = objectsByString.length - 1; o >= 0; o--) {\r\n var itemObjectByString = objectsByString[o];\r\n\r\n if (itemObjectByString[mainId] === objectOldData[mainId]) {\r\n if (scope.generalModel.IsSettingStandards && angular.equals(objectOldData, itemObjectByString)) {\r\n model.UpdatedData[parent].splice(o, 1);\r\n } else {\r\n (objectsByString)[o].Delete = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (devExtremeObject[i].type === 'insert') {\r\n if ((parent !== '') && !scope.generalModel.IsUndefinedEmptyOrNull(model.ElementId)) {\r\n if (!$filter('filter')(scope.generalModel.DeletedElements, { Id: devExtremeObject[i].data[mainId] }, true).length) {\r\n newData = scope.generalModel.AngularCopy(devExtremeObject[i].data);\r\n\r\n for (var z = 0; z < scope.generalModel.ExtraConnections.length; z++) {\r\n extraConnection = scope.generalModel.ExtraConnections[z];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(newData, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(newData, name));\r\n\r\n if (Array.isArray(newData[name])) {\r\n for (var t = 0; t < newData[name].length; t++) {\r\n var itemNewData = newData[name][t];\r\n\r\n for (var keyNewDataInsert in itemNewData) {\r\n if (typeof itemNewData[keyNewDataInsert] === 'object') {\r\n scope.generalModel.SetObjectValueByString(newData, name + '[' + t + '].' + keyNewDataInsert, null);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n scope.generalModel.SetObjectValueByString(newData, name, null);\r\n }\r\n }\r\n }\r\n\r\n objectsByString = scope.generalModel.GetObjectByString(model.UpdatedData, parent);\r\n (objectsByString).push(newData);\r\n addedElements.push(newData.__KEY__);\r\n }\r\n }\r\n else {\r\n newData = scope.generalModel.AngularCopy(object.data);\r\n\r\n for (var h = 0; h < scope.generalModel.ExtraConnections.length; h++) {\r\n extraConnection = scope.generalModel.ExtraConnections[h];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(newData, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(newData, name));\r\n scope.generalModel.SetObjectValueByString(newData, name, null);\r\n }\r\n }\r\n if (parent === '') {\r\n model.InsertedData.push(newData);\r\n }\r\n else {\r\n (scope.generalModel.GetObjectByString(model.InsertedData, parent)).push(newData);\r\n }\r\n\r\n addedElements.push(newData.__KEY__);\r\n }\r\n }\r\n }\r\n\r\n for (var parentObject = 0; parentObject < model[objectName].length; parentObject++) {\r\n var objectWasAdded = false;\r\n\r\n for (var added = 0; added < addedElements.length; added++) {\r\n if ((addedElements[added] === model[objectName][parentObject][mainId]) || (addedElements[added] === model[objectName][parentObject].__KEY__)) {\r\n objectWasAdded = true;\r\n secondGridEditedData = [];\r\n\r\n for (var editedChild = 0; editedChild < model.SecondGridEditData.length; editedChild++) {\r\n var itemModelSecondGridEditData = model.SecondGridEditData[editedChild];\r\n\r\n for (var secondGridElement = 0; secondGridElement < itemModelSecondGridEditData.length; secondGridElement++) {\r\n var itemSecondGridElementModelSecondGridEditData = itemModelSecondGridEditData[secondGridElement];\r\n\r\n if (itemSecondGridElementModelSecondGridEditData[mainId] === addedElements[added]) {\r\n secondGridEditedData.push(scope.generalModel.AngularCopy(itemSecondGridElementModelSecondGridEditData));\r\n }\r\n }\r\n }\r\n\r\n if (secondGridEditedData.length) {\r\n if (addedElements[added] === model[objectName][parentObject][mainId]) {\r\n if (parent !== '') {\r\n objectsByString = scope.generalModel.GetObjectByString(model.UpdatedData, parent);\r\n\r\n for (var updated = 0; updated < objectsByString.length; updated++) {\r\n for (var secondGridParent = 0; secondGridParent < secondGridEditedData.length; secondGridParent++) {\r\n if (secondGridEditedData[secondGridParent][mainId] === (objectsByString)[updated][mainId]) {\r\n if ((secondGridEditedData[secondGridParent].hasOwnProperty('__KEY__')) && !$filter('filter')((objectsByString)[updated][secondGridObjectName], { __KEY__: secondGridEditedData[secondGridParent].__KEY__ }, true).length) {\r\n (objectsByString)[updated][secondGridObjectName].push(secondGridEditedData[secondGridParent]);\r\n } else {\r\n for (var secondGridUpdated = 0; secondGridUpdated < (objectsByString)[updated][secondGridObjectName].length; secondGridUpdated++) {\r\n if ((objectsByString)[updated][secondGridObjectName][secondGridUpdated][secondGridMainId] === secondGridEditedData[secondGridParent][secondGridMainId]) {\r\n\r\n if (secondGridEditedData[secondGridParent].hasOwnProperty('ToDelete')) {\r\n (objectsByString)[updated][secondGridObjectName][secondGridUpdated].Delete = true;\r\n }\r\n else {\r\n (objectsByString)[updated][secondGridObjectName][secondGridUpdated] = scope.generalModel.AngularCopy(secondGridEditedData[secondGridParent]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var updatedNoParent = 0; updatedNoParent < model.UpdatedData.length; updatedNoParent++) {\r\n for (var secondGridNoParent = 0; secondGridNoParent < secondGridEditedData.length; secondGridNoParent++) {\r\n if (secondGridEditedData[secondGridNoParent][mainId] === model.UpdatedData[updatedNoParent][mainId]) {\r\n if (secondGridEditedData[secondGridNoParent].hasOwnProperty('__KEY__')) {\r\n model.UpdatedData[updatedNoParent][secondGridObjectName].push(secondGridEditedData[secondGridNoParent]);\r\n } else {\r\n for (var secondGridUpdatedNoParent = 0; secondGridUpdatedNoParent < model.UpdatedData[updatedNoParent][secondGridObjectName].length; secondGridUpdatedNoParent++) {\r\n if (model.UpdatedData[updatedNoParent][secondGridObjectName][secondGridUpdatedNoParent][secondGridMainId] === secondGridEditedData[secondGridNoParent][secondGridMainId]) {\r\n\r\n if (secondGridEditedData[secondGridNoParent].hasOwnProperty('ToDelete')) {\r\n model.UpdatedData[updatedNoParent][secondGridObjectName][secondGridUpdatedNoParent].Delete = true;\r\n }\r\n else {\r\n model.UpdatedData[updatedNoParent][secondGridObjectName][secondGridUpdatedNoParent] = scope.generalModel.AngularCopy(secondGridEditedData[secondGridNoParent]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(model.ElementId)) {\r\n if (parent !== '') {\r\n for (var inserted = 0; inserted < scope.generalModel.GetObjectByString(model.InsertedData, parent).length; inserted++) {\r\n for (var secondGridEdited = 0; secondGridEdited < secondGridEditedData.length; secondGridEdited++) {\r\n if (secondGridEditedData[secondGridEdited][mainId] === scope.generalModel.GetObjectByString(model.InsertedData, parent)[inserted].__KEY__) {\r\n (scope.generalModel.GetObjectByString(model.InsertedData, parent))[inserted][secondGridObjectName].push(secondGridEditedData[secondGridEdited]);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var insertedOnEdited = 0; insertedOnEdited < model.InsertedData.length; insertedOnEdited++) {\r\n for (var secondGridInserted = 0; secondGridInserted < secondGridEditedData.length; secondGridInserted++) {\r\n if (secondGridEditedData[secondGridInserted][mainId] === model.InsertedData[insertedOnEdited].__KEY__) {\r\n model.InsertedData[insertedOnEdited][secondGridObjectName].push(secondGridEditedData[secondGridInserted]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (parent !== '') {\r\n objectsByString = scope.generalModel.GetObjectByString(model.UpdatedData, parent);\r\n\r\n for (var updatedOnEditedParent = 0; updatedOnEditedParent < objectsByString.length; updatedOnEditedParent++) {\r\n for (var secondGridEditWithParent = 0; secondGridEditWithParent < secondGridEditedData.length; secondGridEditWithParent++) {\r\n if (secondGridEditedData[secondGridEditWithParent][mainId] === objectsByString[updatedOnEditedParent].__KEY__) {\r\n (objectsByString)[updatedOnEditedParent][secondGridObjectName].push(secondGridEditedData[secondGridEditWithParent]);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var updatedOnEdited = 0; updatedOnEdited < model.UpdatedData.length; updatedOnEdited++) {\r\n for (var secondGridEditWithoutParent = 0; secondGridEditWithoutParent < secondGridEditedData.length; secondGridEditWithoutParent++) {\r\n if (secondGridEditedData[secondGridEditWithoutParent][mainId] === model.UpdatedData[updatedOnEdited].__KEY__) {\r\n model.UpdatedData[updatedOnEdited][secondGridObjectName].push(secondGridEditedData[secondGridEditWithoutParent]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!objectWasAdded) {\r\n if (model[objectName][parentObject].hasOwnProperty('__KEY__')) {\r\n element = scope.generalModel.AngularCopy(model[objectName][parentObject]);\r\n\r\n for (var editedChildAdded = 0; editedChildAdded < model.SecondGridEditData.length; editedChildAdded++) {\r\n for (var secondGridElementAdded = 0; secondGridElementAdded < model.SecondGridEditData[editedChildAdded].length; secondGridElementAdded++) {\r\n element[secondGridObjectName].push(scope.generalModel.AngularCopy(model.SecondGridEditData[editedChildAdded][secondGridElementAdded]));\r\n }\r\n }\r\n for (var connectionsAdded = 0; connectionsAdded < scope.generalModel.ExtraConnections.length; connectionsAdded++) {\r\n if (typeof model.MainObjectPreviousSave[scope.generalModel.ExtraConnections[connectionsAdded].Key] === 'undefined') {\r\n model.MainObjectPreviousSave[scope.generalModel.ExtraConnections[connectionsAdded].Key] = [];\r\n }\r\n\r\n name = scope.generalModel.ExtraConnections[connectionsAdded].BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = scope.generalModel.ExtraConnections[connectionsAdded].ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(element, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[scope.generalModel.ExtraConnections[connectionsAdded].Key].push(scope.generalModel.GetObjectByString(element, name));\r\n\r\n if (Array.isArray(element[name])) {\r\n for (var currentConnection = 0; currentConnection < element[name].length; currentConnection++) {\r\n for (var keyInConnection in element[name][currentConnection]) {\r\n if (typeof element[name][currentConnection][keyInConnection] === 'object') {\r\n scope.generalModel.SetObjectValueByString(element, name + '[' + currentConnection + '].' + keyInConnection, null);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n scope.generalModel.SetObjectValueByString(element, name, null);\r\n }\r\n }\r\n }\r\n\r\n if ((parent !== '') && (typeof model.ElementId !== 'undefined')) {\r\n foundInsertion = false;\r\n objectsByString = scope.generalModel.GetObjectByString(model.UpdatedData, parent);\r\n\r\n for (var objectWithParent = 0; objectWithParent < objectsByString.length; objectWithParent++) {\r\n if (objectsByString[objectWithParent][mainId] === element[mainId]) {\r\n foundInsertion = true;\r\n (objectsByString)[objectWithParent] = scope.generalModel.AngularCopy(element);\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (!foundInsertion) {\r\n (objectsByString).push(element);\r\n }\r\n }\r\n\r\n if (parent === '') {\r\n model.InsertedData.push(element);\r\n }\r\n else {\r\n foundInsertion = false;\r\n\r\n for (var objectWithParentInserted = 0; objectWithParentInserted < scope.generalModel.GetObjectByString(model.InsertedData, parent).length; objectWithParentInserted++) {\r\n if (scope.generalModel.GetObjectByString(model.InsertedData, parent)[objectWithParentInserted][mainId] === element[mainId]) {\r\n foundInsertion = true;\r\n (scope.generalModel.GetObjectByString(model.InsertedData, parent))[objectWithParentInserted] = scope.generalModel.AngularCopy(element);\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (!foundInsertion) {\r\n (scope.generalModel.GetObjectByString(model.InsertedData, parent)).push(element);\r\n }\r\n }\r\n }\r\n else {\r\n for (var editedChildNoKey = 0; editedChildNoKey < model.SecondGridEditData.length; editedChildNoKey++) {\r\n elementToInsert = [];\r\n element = scope.generalModel.AngularCopy(model[objectName][parentObject]);\r\n\r\n if (model.SecondGridEditData[editedChildNoKey].length && (model.SecondGridEditData[editedChildNoKey][0][mainId] === model[objectName][parentObject][mainId])) {\r\n for (var secondGridElementNoKey = 0; secondGridElementNoKey < model.SecondGridEditData[editedChildNoKey].length; secondGridElementNoKey++) {\r\n if (model.SecondGridEditData[editedChildNoKey][secondGridElementNoKey].hasOwnProperty(secondGridMainId)) {\r\n for (var originalSecondGridElement = 0; originalSecondGridElement < element[secondGridObjectName].length; originalSecondGridElement++) {\r\n if (element[secondGridObjectName][originalSecondGridElement][secondGridMainId] === model.SecondGridEditData[editedChildNoKey][secondGridElementNoKey][secondGridMainId]) {\r\n if (model.SecondGridEditData[editedChildNoKey][secondGridElementNoKey].hasOwnProperty('ToDelete')) {\r\n element[secondGridObjectName][originalSecondGridElement].Delete = true;\r\n }\r\n else {\r\n element[secondGridObjectName][originalSecondGridElement] = scope.generalModel.AngularCopy(model.SecondGridEditData[editedChildNoKey][secondGridElementNoKey]);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (model.SecondGridEditData[editedChildNoKey][secondGridElementNoKey][mainId] === element[mainId]) {\r\n elementToInsert.push(scope.generalModel.AngularCopy(model.SecondGridEditData[editedChildNoKey][secondGridElementNoKey]));\r\n }\r\n }\r\n }\r\n\r\n for (var insertInUpdate = 0; insertInUpdate < elementToInsert.length; insertInUpdate++) {\r\n element[secondGridObjectName].push(scope.generalModel.AngularCopy(elementToInsert[insertInUpdate]));\r\n }\r\n\r\n for (var connectionNoKey = 0; connectionNoKey < scope.generalModel.ExtraConnections.length; connectionNoKey++) {\r\n if (typeof model.MainObjectPreviousSave[scope.generalModel.ExtraConnections[connectionNoKey].Key] === 'undefined') {\r\n model.MainObjectPreviousSave[scope.generalModel.ExtraConnections[connectionNoKey].Key] = [];\r\n }\r\n\r\n name = scope.generalModel.ExtraConnections[connectionNoKey].BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = scope.generalModel.ExtraConnections[connectionNoKey].ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(element, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[scope.generalModel.ExtraConnections[connectionNoKey].Key].push(scope.generalModel.GetObjectByString(element, name));\r\n\r\n if (Array.isArray(element[name])) {\r\n for (var connectionSecondGrid = 0; connectionSecondGrid < element[name].length; connectionSecondGrid++) {\r\n for (var keyConnectionSecondGrid in element[name][connectionSecondGrid]) {\r\n if (typeof element[name][connectionSecondGrid][keyConnectionSecondGrid] === 'object') {\r\n scope.generalModel.SetObjectValueByString(element, name + '[' + connectionSecondGrid + '].' + keyConnectionSecondGrid, null);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n scope.generalModel.SetObjectValueByString(element, name, null);\r\n }\r\n }\r\n }\r\n\r\n if (parent === '') {\r\n model.UpdatedData.push(element);\r\n }\r\n else {\r\n foundInner = false;\r\n objectsByString = scope.generalModel.GetObjectByString(model.UpdatedData, parent);\r\n\r\n for (var updateWithParent = 0; updateWithParent < objectsByString.length; updateWithParent++) {\r\n if (objectsByString[updateWithParent][mainId] === element[mainId]) {\r\n foundInner = true;\r\n (objectsByString)[updateWithParent] = scope.generalModel.AngularCopy(element);\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (!foundInner) {\r\n (objectsByString).push(element);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n scope.generalModel.CreateObjectsSecondGrid = function (devExtremeObject, model, key, parentObject, parent) {\r\n var name;\r\n var serverData;\r\n var objectOldData;\r\n var extraConnection;\r\n var secondGridChild = [];\r\n var secondGridFullChild = [];\r\n var mainId = model.ArrayGridObjects[key].MainId;\r\n var gridElement = model.ArrayGridObjects[key].ObjectName;\r\n var secondGridIdName = model.ArrayGridObjects[key].SecondGridMainId;\r\n var secondGridElement = model.ArrayGridObjects[key].SecondGrid.substr(4);\r\n\r\n for (var i = 0; i < devExtremeObject.length; i++) {\r\n var object = devExtremeObject[i];\r\n\r\n if ((object.type === 'update') || (object.type === 'remove')) {\r\n var keys = [];\r\n var oldData = null;\r\n\r\n for (var k in object.data) {\r\n keys.push(k);\r\n }\r\n\r\n objectOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(object);\r\n oldData = scope.generalModel.AngularCopy(objectOldData);\r\n\r\n for (var y = 0; y < keys.length; y++) {\r\n var keyName = keys[y];\r\n oldData[keyName] = object.data[keyName];\r\n }\r\n\r\n if (object.type === 'remove') {\r\n oldData.ToDelete = true;\r\n oldData.Delete = true;\r\n }\r\n\r\n secondGridFullChild.push(scope.generalModel.AngularCopy(oldData));\r\n\r\n for (var x = 0; x < scope.generalModel.ExtraConnections.length; x++) {\r\n extraConnection = scope.generalModel.ExtraConnections[x];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(oldData, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(oldData, name));\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.GetObjectByString(oldData, name))) {\r\n model.MainObjectPreviousSave[extraConnection.Key][model.MainObjectPreviousSave[extraConnection.Key].length - 1].ParentObjectId = oldData[model.ArrayGridObjects[key].SecondGridMainId];\r\n }\r\n\r\n if (Array.isArray(oldData[name])) {\r\n for (var f = 0; f < oldData[name].length; f++) {\r\n for (var keyInConnection in oldData[name][f]) {\r\n if (typeof oldData[name][f][keyInConnection] === 'object') {\r\n scope.generalModel.SetObjectValueByString(oldData, name + '[' + f + '].' + keyInConnection, null);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n scope.generalModel.SetObjectValueByString(oldData, name, null);\r\n }\r\n }\r\n }\r\n\r\n secondGridChild.push(oldData);\r\n }\r\n else if (object.type === 'insert') {\r\n var newData = scope.generalModel.AngularCopy(object.data);\r\n secondGridFullChild.push(scope.generalModel.AngularCopy(newData));\r\n\r\n for (var z = 0; z < scope.generalModel.ExtraConnections.length; z++) {\r\n extraConnection = scope.generalModel.ExtraConnections[z];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof scope.generalModel.GetObjectByString(newData, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(newData, name));\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.GetObjectByString(newData, name))) {\r\n model.MainObjectPreviousSave[extraConnection.Key][model.MainObjectPreviousSave[extraConnection.Key].length - 1].ParentObjectId = newData[model.ArrayGridObjects[key].SecondGridMainId];\r\n }\r\n\r\n if (!Array.isArray(newData[name])) {\r\n newData[name] = null;\r\n scope.generalModel.SetObjectValueByString(newData, name, null);\r\n }\r\n else {\r\n for (var extraConnectionCounter = 0; extraConnectionCounter < newData[name].length; extraConnectionCounter++) {\r\n for (var keyExtraConnection in newData[name][extraConnectionCounter]) {\r\n if (typeof newData[name][extraConnectionCounter][keyExtraConnection] === 'object') {\r\n scope.generalModel.SetObjectValueByString(newData, name + '[' + extraConnectionCounter + '].' + keyExtraConnection, null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n secondGridChild.push(newData);\r\n }\r\n }\r\n\r\n if ((secondGridChild.length !== 1) || ((secondGridChild.length === 1) && ((secondGridChild[0].hasOwnProperty('__KEY__')) || (secondGridChild[0].hasOwnProperty(mainId))))) {\r\n for (var secondGrid = 0; secondGrid < secondGridChild.length; secondGrid++) {\r\n if (!secondGridChild[secondGrid].hasOwnProperty(mainId)) {\r\n if (parentObject.hasOwnProperty('__KEY__')) {\r\n secondGridChild[secondGrid][mainId] = parentObject.__KEY__;\r\n secondGridFullChild[secondGrid][mainId] = parentObject.__KEY__;\r\n }\r\n else {\r\n secondGridChild[secondGrid][mainId] = parentObject[mainId];\r\n secondGridFullChild[secondGrid][mainId] = parentObject[mainId];\r\n }\r\n }\r\n\r\n if ((parent !== '') && isNaN(model.ServerData.length)) {\r\n serverData = model.ServerData[gridElement];\r\n } else {\r\n serverData = model.ServerData;\r\n }\r\n\r\n for (var c = 0; c < serverData.length; c++) {\r\n if ((typeof serverData[c][secondGridElement] !== 'undefined') && (serverData[c][secondGridElement] !== null)) {\r\n for (var d = 0; d < serverData[c][secondGridElement].length; d++) {\r\n if (serverData[c][secondGridElement][d][secondGridIdName] === secondGridChild[secondGrid][secondGridIdName]) {\r\n scope.generalModel.ReplaceRowVersion(secondGridChild, secondGridIdName, serverData[c][secondGridElement][d][secondGridIdName], serverData[c][secondGridElement][d].RowVersion);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n model.SecondGridFullEditData.push(secondGridFullChild);\r\n model.SecondGridEditData.push(secondGridChild);\r\n }\r\n };\r\n\r\n scope.generalModel.ProcessSaveGridsPatchMode = function (model) {\r\n var id;\r\n var name;\r\n var grid;\r\n var reason;\r\n var editData;\r\n var dataSource;\r\n var secondGrid;\r\n var deferred = $q.defer();\r\n var noDataForEditFound = 0;\r\n var secondGridDataSource = [];\r\n\r\n model.MainObjectPreviousSave = [];\r\n model.SecondGridFullEditData = [];\r\n model.SecondGridEditData = [];\r\n\r\n for (var m = 0; m < model.ArrayGridObjects.length; m++) {\r\n var itemM = model.ArrayGridObjects[m];\r\n\r\n model[itemM.GridName + 'ValidState'] = 0;\r\n\r\n if (itemM.SecondGrid !== '') {\r\n grid = angular.element(\"#\" + itemM.GridName + \"\").dxDataGrid('instance');\r\n dataSource = grid.getDataSource();\r\n\r\n if (dataSource !== null) {\r\n if ((itemM.SecondGrid !== '') && itemM.SecondGridRequired) {\r\n for (var w = 0; w < dataSource._store._array.length; w++) {\r\n var itemDataSource = dataSource._store._array[w];\r\n\r\n id = scope.generalModel.GetMainId(itemM.MainId, itemDataSource);\r\n secondGrid = angular.element('#' + itemM.SecondGrid + id).dxDataGrid('instance');\r\n\r\n if (typeof secondGrid !== 'undefined') {\r\n secondGridDataSource = secondGrid.getDataSource();\r\n }\r\n\r\n var secondGridEditData = Helpers.DevExtreme.Grid.GetEditData(secondGrid);\r\n var secondGridEditDataToRemove = secondGridEditData.filter(where => where.type === \"remove\");\r\n\r\n if ((!itemDataSource.hasOwnProperty('__KEY__') && (\r\n ((typeof itemDataSource[itemM.SecondGrid.substr(4)] !== 'undefined') && !itemDataSource[itemM.SecondGrid.substr(4)].length) ||\r\n ((typeof secondGrid !== 'undefined') && secondGridEditData.length && (secondGridEditDataToRemove.length === secondGridDataSource._store._array.length))\r\n )) ||\r\n (itemDataSource.hasOwnProperty('__KEY__') && ((typeof secondGrid === 'undefined') || (!secondGridEditData.length && !secondGridDataSource._store._array.length)\r\n ))) {\r\n reason = (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.InternalTable : myApplication.getLanguageObject.selectedLanguage('saveFunctions', myApplication).internalTable) + itemM.DisplayName + ((!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.IsRequired : myApplication.getLanguageObject.selectedLanguage('saveFunctions', myApplication).isRequired);\r\n deferred.reject(reason);\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n }\r\n\r\n for (var v = 0; v < dataSource._store._array.length; v++) {\r\n id = scope.generalModel.GetMainId(itemM.MainId, dataSource._store._array[v]);\r\n\r\n if (typeof model[itemM.SecondGrid + 'ValidState'][id] !== 'undefined') {\r\n model[itemM.SecondGrid + 'ValidState'][id] = 0;\r\n }\r\n\r\n var secondGridData = dataSource._store._array[v][itemM.SecondGrid.substr(4)];\r\n\r\n for (var z = 0; z < scope.generalModel.ExtraConnections.length; z++) {\r\n var extraConnection = scope.generalModel.ExtraConnections[z];\r\n\r\n if (typeof model.MainObjectPreviousSave[extraConnection.Key] === 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key] = [];\r\n }\r\n\r\n name = extraConnection.BasicName;\r\n\r\n if (typeof name === 'undefined') {\r\n name = extraConnection.ObjectPathName;\r\n }\r\n\r\n if (typeof secondGridData !== 'undefined') {\r\n for (var x = 0; x < secondGridData.length; x++) {\r\n var itemSecondGridData = secondGridData[x];\r\n\r\n if (typeof scope.generalModel.GetObjectByString(itemSecondGridData, name) !== 'undefined') {\r\n model.MainObjectPreviousSave[extraConnection.Key].push(scope.generalModel.GetObjectByString(itemSecondGridData, name));\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(scope.generalModel.GetObjectByString(itemSecondGridData, name))) {\r\n model.MainObjectPreviousSave[extraConnection.Key][model.MainObjectPreviousSave[extraConnection.Key].length - 1].ParentObjectId = secondGridData[x][itemM.SecondGridMainId];\r\n }\r\n\r\n if (Array.isArray(itemSecondGridData[name])) {\r\n for (var f = 0; f < itemSecondGridData[name].length; f++) {\r\n for (var key in itemSecondGridData[name][f]) {\r\n if (typeof itemSecondGridData[name][f][key] === 'object') {\r\n scope.generalModel.SetObjectValueByString(itemSecondGridData, name + '[' + f + '].' + key, null);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n scope.generalModel.SetObjectValueByString(itemSecondGridData, name, null);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var n = 0; n < model.ArrayGridObjects.length; n++) {\r\n var itemN = model.ArrayGridObjects[n];\r\n\r\n grid = angular.element(\"#\" + itemN.GridName + \"\").dxDataGrid('instance');\r\n\r\n if (itemN.SecondGrid !== '') {\r\n dataSource = grid.getDataSource();\r\n\r\n if (dataSource !== null) {\r\n for (var arrayList = 0; arrayList < dataSource._store._array.length; arrayList++) {\r\n id = scope.generalModel.GetMainId(itemN.MainId, dataSource._store._array[arrayList]);\r\n\r\n if (id === scope.generalModel.GuidEmpty) {\r\n editData = scope.generalModel.GetEditDataClean(grid);\r\n var secondGridElementName = model.ArrayGridObjects[n].SecondGrid.substr(4);\r\n\r\n for (var a = 0; a < editData.length; a++) {\r\n if (editData[a].key.__KEY__ === dataSource._store._array[arrayList].__KEY__) {\r\n scope.generalModel.CreateObjectsSecondGrid(editData[a].key[secondGridElementName], model, n, dataSource._store._array[arrayList], '');\r\n\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n secondGrid = angular.element('#' + itemN.SecondGrid + id).dxDataGrid('instance');\r\n\r\n if (typeof secondGrid !== 'undefined') {\r\n editData = scope.generalModel.GetEditDataClean(secondGrid);\r\n\r\n if (editData.length) {\r\n scope.generalModel.CreateObjectsSecondGrid(editData, model, n, dataSource._store._array[arrayList], '');\r\n }\r\n\r\n secondGrid.saveEditData();\r\n\r\n if ((typeof model[itemN.SecondGrid + 'ValidState'][id] !== 'undefined') && (model[itemN.SecondGrid + 'ValidState'][id] !== 0)) {\r\n reason = ((!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.InvalidFieldsOnTable : myApplication.getLanguageObject.selectedLanguage('saveFunctions', myApplication).invalidFieldsOnTable) + model.ArrayGridObjects[n].DisplayName + \".\";\r\n deferred.reject(reason);\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n grid.saveEditData();\r\n\r\n for (var e = 0; e < scope.generalModel.DeletedElements.length; e++) {\r\n editData = scope.generalModel.GetEditDataClean(grid);\r\n for (var editDataInGrid = 0; editDataInGrid < editData.length; editDataInGrid++) {\r\n if (editData[editDataInGrid].key.__KEY__ === scope.generalModel.DeletedElements[e].Id) {\r\n editData[editDataInGrid].data = scope.generalModel.AngularCopy(editData[editDataInGrid].key);\r\n }\r\n }\r\n }\r\n\r\n if (model[itemN.GridName + 'ValidState'] !== 0) {\r\n reason = ((!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.InvalidFieldsTable : myApplication.getLanguageObject.selectedLanguage('saveFunctions', myApplication).invalidFieldsTable) + model.ArrayGridObjects[n].DisplayName + \".\";\r\n deferred.reject(reason);\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n\r\n model.ObjectPatch = [];\r\n model.UpdatedData = [];\r\n model.DeletedData = [];\r\n model.InsertedData = [];\r\n\r\n for (var l = 0; l < model.ArrayGridObjects.length; l++) {\r\n grid = angular.element(\"#\" + model.ArrayGridObjects[l].GridName + \"\").dxDataGrid('instance');\r\n editData = scope.generalModel.GetEditDataClean(grid);\r\n\r\n if ((model.ArrayGridObjects[l].SecondGrid !== '') || editData.length) {\r\n if (model.ArrayGridObjects[l].SecondGrid !== '') {\r\n scope.generalModel.CreateObjectsParentGrid(editData, l, model, model.ArrayGridObjects[l].MainId, '');\r\n }\r\n else {\r\n scope.generalModel.CreateObjects(editData, model, model.ArrayGridObjects[l].MainId);\r\n model.CancelSaveProcess = false;\r\n }\r\n\r\n if (model.InsertedData.length || model.UpdatedData.length || model.DeletedData.length) {\r\n scope.generalModel.ObjectPatch = model.InsertedData.concat(model.UpdatedData).concat(model.DeletedData);\r\n noDataForEditFound = 0;\r\n model.GridsToSave.push(model.ArrayGridObjects[l].ObjectName);\r\n scope.generalModel.deferredToSave = deferred;\r\n scope.generalModel.modelToSave = model;\r\n scope.generalModel.positionToSave = l;\r\n scope.generalModel.ValidatePhotographies(model);\r\n }\r\n else {\r\n noDataForEditFound = noDataForEditFound + 1;\r\n break;\r\n }\r\n }\r\n else if (scope.generalModel.ConcurrencyError || (noDataForEditFound === 0)) {\r\n // Isto aqui faz sentido? Não estamos a enviar um resolve por iteração?\r\n deferred.resolve();\r\n }\r\n }\r\n\r\n if (noDataForEditFound > 0) {\r\n deferred.resolve();\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n\r\n scope.generalModel.ValidatePhotographies = function (model) {\r\n if (scope.generalModel.PhotographyList.length && (scope.generalModel.PhotographyList !== '')) {\r\n for (var a = 0; a < scope.generalModel.PhotographyList.length; a++) {\r\n $q.when(scope.generalModel.ConvertImages(scope.generalModel.PhotographyList[a].Photography, a, '')).then(function (result) {\r\n if (scope.generalModel.PhotographyList[result.Key].Id !== 'Main') {\r\n var id = scope.generalModel.PhotographyList[result.Key].Id.substr(11);\r\n var objectForFilter = {};\r\n objectForFilter[model.ArrayGridObjects[scope.generalModel.positionToSave].MainId] = id;\r\n\r\n if ($filter('filter')(model.InsertedData, { __KEY__: id }, true).length) {\r\n $filter('filter')(model.InsertedData, { __KEY__: id }, true)[0].Photography = result.Photography;\r\n }\r\n else if ($filter('filter')(model.UpdatedData, objectForFilter, true).length) {\r\n $filter('filter')(model.UpdatedData, objectForFilter, true)[0].Photography = result.Photography;\r\n }\r\n else if ($filter('filter')(model.UpdatedData, { __KEY__: id }, true).length) {\r\n $filter('filter')(model.UpdatedData, { __KEY__: id }, true)[0].Photography = result.Photography;\r\n }\r\n }\r\n if (result.Key + 1 === scope.generalModel.PhotographyList.length) {\r\n if (model.DeletedData.length) {\r\n scope.generalModel.ConfirmDeleteData();\r\n }\r\n else {\r\n scope.generalModel.CallProcessFinalSaveGridsPatchMode();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n if (model.DeletedData.length) {\r\n scope.generalModel.ConfirmDeleteData();\r\n }\r\n else {\r\n scope.generalModel.CallProcessFinalSaveGridsPatchMode();\r\n }\r\n }\r\n };\r\n\r\n scope.generalModel.ConfirmDeleteData = function () {\r\n angular.element('#DialogConfirmDelete .HalfWidthWithPadding:first').html('');\r\n angular.element('#DialogConfirmDelete #DialogButtonConfirm').attr('ng-click', 'generalModel.CallProcessFinalSaveGridsPatchMode(); generalModel.CloseDialogConfirmDelete()');\r\n $compile(angular.element('#DialogConfirmDelete #DialogButtonConfirmDelete'))(scope);\r\n scope.generalModel.FullPageLoading = false;\r\n scope.generalModel.ShowDialogConfirmDelete();\r\n };\r\n\r\n scope.generalModel.CallProcessFinalSaveGridsPatchMode = function () {\r\n var deferred = scope.generalModel.deferredToSave;\r\n var model = scope.generalModel.modelToSave;\r\n var l = scope.generalModel.positionToSave;\r\n\r\n $q.when(scope.generalModel.ProcessFinalSaveGridsPatchMode(model, l)).then(function () {\r\n if (model.LastSavedGrid === model.GridsToSave[model.GridsToSave.length - 1]) {\r\n deferred.resolve();\r\n }\r\n }).catch(function (reason) {\r\n deferred.reject(reason);\r\n });\r\n };\r\n\r\n scope.generalModel.ProcessFinalSaveGridsPatchMode = function (model, l) {\r\n var deferred = $q.defer();\r\n\r\n $q.when(scope.generalModel.SaveGridPatchMode(model.ArrayGridObjects[l].ObjectName, l, model)).then(function () {\r\n if (model.LastSavedGrid === model.GridsToSave[model.GridsToSave.length - 1]) {\r\n deferred.resolve();\r\n }\r\n }).catch(function (exception) {\r\n if (exception.Code === '500') {\r\n exception = (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.ThereWasError : myApplication.warningMessages.thereWasError();\r\n }\r\n\r\n deferred.reject(exception);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n scope.generalModel.SaveGridPatchMode = function (gridObjectName, key, model) {\r\n var deferred = $q.defer();\r\n var grid;\r\n\r\n if ((typeof model.ContentLoading === 'object') && model.ContentLoading.hasOwnProperty(gridObjectName)) {\r\n model.ContentLoading[gridObjectName] = true;\r\n }\r\n else {\r\n model.ContentLoading = true;\r\n }\r\n\r\n if (typeof model.MainController === 'undefined') {\r\n model.MainController = model.ArrayGridObjects[key].ObjectName;\r\n }\r\n\r\n scope.generalModel.ArrayPosition = '';\r\n scope.generalModel.EditedElements = [];\r\n scope.generalModel.DeletedElements = [];\r\n scope.generalModel.FullPageLoading = true;\r\n\r\n $q.when(GeneralModel.Patch(model)).then(function () {\r\n scope.generalModel.ConcurrencyError = false;\r\n grid = angular.element(\"#\" + model.ArrayGridObjects[key].GridName + \"\").dxDataGrid('instance');\r\n Helpers.DevExtreme.Grid.RemoveEditData(grid, true, false);\r\n model.LastSavedGrid = gridObjectName;\r\n model.ServerData = [];\r\n\r\n if ((typeof model.ContentLoading === 'object') && model.ContentLoading.hasOwnProperty(gridObjectName)) {\r\n model.ContentLoading[gridObjectName] = false;\r\n }\r\n else {\r\n model.ContentLoading = false;\r\n }\r\n\r\n deferred.resolve();\r\n }).catch(function (exception) {\r\n if (typeof model['' + model.ArrayGridObjects[key].ObjectName + 'ToolsState'] !== 'undefined') {\r\n model['' + model.ArrayGridObjects[key].ObjectName + 'ToolsState'] = true;\r\n }\r\n else {\r\n model.ToolsState = true;\r\n }\r\n\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n\r\n if ((typeof model.ContentLoading === 'object') && model.ContentLoading.hasOwnProperty(gridObjectName)) {\r\n model.ContentLoading[gridObjectName] = false;\r\n }\r\n else {\r\n model.ContentLoading = false;\r\n }\r\n\r\n if (model.ArrayGridObjects[key].SecondGrid !== '') {\r\n scope.generalModel.ResetSecondGridData(model);\r\n }\r\n\r\n if (exception.Code === '409') {\r\n scope.generalModel.ValidateServerData(model, key, '');\r\n }\r\n\r\n deferred.reject(exception);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n scope.generalModel.ResetSecondGridData = function (model) {\r\n if (!model.SecondGridFullEditData.length) {\r\n return\r\n }\r\n\r\n var grid;\r\n var secondGrid;\r\n var editData;\r\n var secondEditData;\r\n var elementWasFound;\r\n var dataSource;\r\n var secondDataSource;\r\n var rowIndex;\r\n\r\n for (var a = 0; a < model.SecondGridFullEditData.length; a++) {\r\n for (var l = 0; l < model.ArrayGridObjects.length; l++) {\r\n if (model.SecondGridFullEditData[a][0].hasOwnProperty(model.ArrayGridObjects[l].MainId)) {\r\n grid = angular.element(\"#\" + model.ArrayGridObjects[l].GridName + \"\").dxDataGrid('instance');\r\n dataSource = grid.getDataSource();\r\n editData = scope.generalModel.GetEditDataClean(grid);\r\n\r\n for (var s = 0; s < model.SecondGridFullEditData[a].length; s++) {\r\n elementWasFound = false;\r\n\r\n for (var m = 0; m < editData.length; m++) {\r\n if (editData[m][model.ArrayGridObjects[l].MainId] === model.SecondGridFullEditData[a][s][model.ArrayGridObjects[l].MainId]) {\r\n elementWasFound = true;\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (!elementWasFound) {\r\n for (var f = 0; f < dataSource._store._array.length; f++) {\r\n if (dataSource._store._array[f][model.ArrayGridObjects[l].MainId] === model.SecondGridFullEditData[a][s][model.ArrayGridObjects[l].MainId]) {\r\n secondGrid = angular.element(\"#\" + model.ArrayGridObjects[l].SecondGrid + dataSource._store._array[f][model.ArrayGridObjects[l].MainId] + \"\").dxDataGrid('instance');\r\n\r\n if (model.SecondGridFullEditData[a][s].hasOwnProperty('__KEY__')) {\r\n secondGrid.addRow();\r\n secondEditData = scope.generalModel.GetEditDataClean(secondGrid);\r\n angular.forEach(model.SecondGridFullEditData[a][s], function (value, dataField) {\r\n if ((dataField !== 'Disabled') || ((dataField !== 'Disabled') && (value !== model.SecondGridFullEditData[a][s][dataField]))) {\r\n secondEditData[secondEditData.length - 1].data[dataField] = value;\r\n }\r\n });\r\n secondGrid.refresh();\r\n }\r\n else {\r\n secondDataSource = secondGrid.getDataSource();\r\n\r\n for (var r = 0; r < secondDataSource._store._array.length; r++) {\r\n if (secondDataSource._store._array[r][model.ArrayGridObjects[l].SecondGridMainId] === model.SecondGridFullEditData[a][s][model.ArrayGridObjects[l].SecondGridMainId]) {\r\n rowIndex = secondGrid.getRowIndexByKey(secondDataSource._store._array[r]);\r\n\r\n if (model.SecondGridFullEditData[a][s].hasOwnProperty('ToDelete')) {\r\n secondGrid.deleteRow(rowIndex);\r\n }\r\n else {\r\n angular.forEach(model.SecondGridFullEditData[a][s], function (value, dataField) {\r\n if ((dataField !== 'Disabled') || ((dataField !== 'Disabled') && (value !== model.SecondGridFullEditData[a][s][dataField]))) {\r\n if (typeof model.SecondGridFullEditData[a][s][dataField] === \"object\") {\r\n\r\n angular.forEach(model.SecondGridFullEditData[a][s][dataField], function (insideValue, insideDataField) {\r\n for (var x = 0; x < scope.generalModel.ExtraConnections.length; x++) {\r\n\r\n if (dataField + '.' + insideDataField === scope.generalModel.ExtraConnections[x].DataField) {\r\n secondGrid.cellValue(rowIndex, dataField + '.' + insideDataField, insideValue);\r\n\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n secondGrid.cellValue(rowIndex, dataField, value);\r\n }\r\n }\r\n });\r\n secondEditData = scope.generalModel.GetEditDataClean(secondGrid);\r\n angular.forEach(model.SecondGridFullEditData[a][s], function (value, dataField) {\r\n if ((dataField !== 'Disabled') || ((dataField !== 'Disabled') && (value !== model.SecondGridFullEditData[a][s][dataField]))) {\r\n secondEditData[secondEditData.length - 1].data[dataField] = value;\r\n }\r\n });\r\n }\r\n\r\n secondGrid.refresh();\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n return SaveFunctions;\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n angular.module(myApplication.appName).service('GeneralLoadData', [\"$q\", \"$http\", \"GetIp\", \"Validations\", \"$sessionStorage\", function ($q, $http, GetIp, Validations, $sessionStorage) {\r\n\r\n this.GeneralGetDeprecated = function (controller, action, parameters, token, specificApiName, controlledDefer) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n if ((typeof controlledDefer !== \"undefined\") && controlledDefer) {\r\n defer.Controlled = true;\r\n }\r\n\r\n $http.get(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralGet = function (controller, action, parameters, token, specificApiName, controlledDefer, ignoreSessionStorageToken) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token || ignoreSessionStorageToken) {\r\n tokenToSend = token;\r\n }\r\n\r\n if ((typeof controlledDefer !== \"undefined\") && controlledDefer) {\r\n defer.Controlled = true;\r\n }\r\n\r\n $http.get(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.PreviewFilesDeprecated = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n var params = '';\r\n var paramIndex = 0;\r\n\r\n for (var property in parameters) {\r\n var propertyValue = parameters[property];\r\n\r\n if (paramIndex !== 0) {\r\n params += \"&\" + property + \"=\" + propertyValue;\r\n }\r\n else {\r\n params += property + \"=\" + propertyValue;\r\n }\r\n\r\n paramIndex++;\r\n }\r\n\r\n var req = new XMLHttpRequest();\r\n req.open(\"GET\", GetIp(specificApiName) + '/api/' + controller + '/' + action + '?' + params, true);\r\n req.responseType = \"blob\";\r\n req.setRequestHeader(\"Authorization\", tokenToSend);\r\n\r\n req.onreadystatechange = function () {\r\n if ((req.readyState === 4) && (req.status === 200)) {\r\n var newAnnex = {};\r\n var fileInformation = req.getResponseHeader(\"Content-Disposition\");\r\n var blob = req.response;\r\n newAnnex.FileName = fileInformation.split(\"attachment; filename=\")[1].replace(/['\"]+/g, '');\r\n newAnnex.FileType = newAnnex.FileName.split(\".\")[1];\r\n newAnnex.Blob = window.URL.createObjectURL(blob);\r\n newAnnex.BlobObject = blob;\r\n\r\n return defer.resolve(newAnnex);\r\n }\r\n else if (req.status === 400) {\r\n return defer.resolve(\"400\");\r\n }\r\n };\r\n\r\n req.send();\r\n\r\n return defer.promise;\r\n };\r\n\r\n this.PreviewFiles = function (controller, action, parameters, token, specificApiName, blobType) {\r\n var defer = $q.defer();\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n var params = '';\r\n var paramIndex = 0;\r\n\r\n for (var property in parameters) {\r\n var propertyValue = parameters[property];\r\n\r\n if (paramIndex !== 0) {\r\n params += \"&\" + property + \"=\" + propertyValue;\r\n }\r\n else {\r\n params += property + \"=\" + propertyValue;\r\n }\r\n\r\n paramIndex++;\r\n }\r\n\r\n var req = new XMLHttpRequest();\r\n req.open(\"GET\", GetIp(specificApiName) + '/api/' + controller + '/' + action + '?' + params, true);\r\n req.responseType = \"blob\";\r\n req.setRequestHeader(\"Authorization\", tokenToSend);\r\n\r\n req.onreadystatechange = function () {\r\n if ((req.readyState === 4) && (req.status === 200)) {\r\n var newAnnex = {};\r\n var fileInformation = req.getResponseHeader(\"Content-Disposition\");\r\n var blob = req.response;\r\n newAnnex.FileName = fileInformation.split(\"attachment; filename=\")[1].replace(/['\"]+/g, '');\r\n newAnnex.FileType = newAnnex.FileName.split(\".\")[1];\r\n\r\n if (blobType) {\r\n blob = new Blob([blob], { type: blobType });\r\n }\r\n\r\n newAnnex.Blob = window.URL.createObjectURL(blob);\r\n newAnnex.BlobObject = blob;\r\n\r\n return defer.resolve(newAnnex);\r\n }\r\n else if (req.status !== 200) {\r\n return defer.reject();\r\n }\r\n };\r\n\r\n req.send();\r\n\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralPostDeprecated = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.post(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', data, { headers: { \"Authorization\": tokenToSend }, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralPost = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.post(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', data, { headers: { \"Authorization\": tokenToSend }, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.PostFilesDeprecated = function (controller, action, data, token, specificApiName) {\r\n var defer = $q.defer();\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n var settings = {\r\n \"cache\": false,\r\n \"method\": 'POST',\r\n headers: { \"Authorization\": tokenToSend, \"Content-Type\": undefined },\r\n cancel: defer\r\n };\r\n\r\n $http.post(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', data, settings).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n\r\n return defer.promise;\r\n };\r\n\r\n this.PostFiles = function (controller, action, data, token, specificApiName) {\r\n var defer = $q.defer();\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n var settings = {\r\n \"cache\": false,\r\n \"method\": 'POST',\r\n headers: { \"Authorization\": tokenToSend, \"Content-Type\": undefined },\r\n cancel: defer\r\n };\r\n\r\n $http.post(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', data, settings).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralPostWithParametersInUrlDeprecated = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.post(GetIp(specificApiName) + '/api/' + controller + '/' + action, null, { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralPostWithParametersInUrl = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.post(GetIp(specificApiName) + '/api/' + controller + '/' + action, null, { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralPutDeprecated = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = JSON.stringify(Validations.ValidationsParameters(parameters));\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.put(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', data, { headers: { \"Authorization\": tokenToSend }, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralPut = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = JSON.stringify(Validations.ValidationsParameters(parameters));\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.put(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', data, { headers: { \"Authorization\": tokenToSend }, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralPutWithParametersInUrlDeprecated = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.put(GetIp(specificApiName) + '/api/' + controller + '/' + action, null, { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralPutWithParametersInUrl = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.put(GetIp(specificApiName) + '/api/' + controller + '/' + action, null, { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralDeleteDeprecated = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.delete(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GeneralDelete = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.delete(GetIp(specificApiName) + '/api/' + controller + '/' + action + '', { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.ExportToXmlDeprecated = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.get(GetIp(specificApiName) + '/api/' + controller + '/' + action, { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer, responseType: \"arraybuffer\" }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.ExportToXml = function (controller, action, parameters, token, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n var tokenToSend = $sessionStorage.Token;\r\n\r\n if (token) {\r\n tokenToSend = token;\r\n }\r\n\r\n $http.get(GetIp(specificApiName) + '/api/' + controller + '/' + action, { headers: { \"Authorization\": tokenToSend }, params: data, cancel: defer, responseType: \"arraybuffer\" }).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsGeneral(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GetTokenDeprecated = function (parameters, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n $.post(GetIp(specificApiName) + '/api/Token', data).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.resolve(Validations.ValidationsLogin(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n\r\n this.GetToken = function (parameters, specificApiName) {\r\n var defer = $q.defer();\r\n var data = Validations.ValidationsParameters(parameters);\r\n $.post(GetIp(specificApiName) + '/api/Token', data).then(\r\n function (result) {\r\n return defer.resolve(result);\r\n }, function (xhr, ajaxOptions, thrownError) {\r\n return defer.reject(Validations.ValidationsLogin(xhr, ajaxOptions, thrownError));\r\n }\r\n );\r\n return defer.promise;\r\n };\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('DateOperations', function () {\r\n\r\n function DateOperations(scope) {\r\n scope.generalModel.ParseMinutesToTime = function (time) {\r\n var hours = Math.floor(time / 60);\r\n var minutes = scope.generalModel.LeftPadding(time % 60);\r\n\r\n return hours + \".\" + minutes;\r\n };\r\n\r\n scope.generalModel.ValidateDayInMonth = function (day, month) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(day) || scope.generalModel.IsUndefinedEmptyOrNull(month)) {\r\n return true;\r\n }\r\n\r\n switch (month) {\r\n case 2:\r\n if (day > 29) {\r\n return false;\r\n }\r\n break;\r\n case 4:\r\n case 6:\r\n case 9:\r\n case 11:\r\n if (day > 30) {\r\n return false;\r\n }\r\n break;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n scope.generalModel.CheckUniqueDateInColumn = function (model, options, gridName, nameOfField) {\r\n var grid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n var duplicate = 0;\r\n var index = grid.getRowIndexByKey(options.data);\r\n var mainKey = grid.getKeyByRowIndex(index);\r\n var fromDate;\r\n var editData = scope.generalModel.GetEditDataClean(grid);\r\n var dataSource = grid.getDataSource()._store._array;\r\n var mainId;\r\n\r\n for (var a = 0; a < model.ArrayGridObjects.length; a++) {\r\n var gridObject = model.ArrayGridObjects[a];\r\n\r\n if (gridObject.GridName === gridName) {\r\n mainId = gridObject.MainId;\r\n break;\r\n }\r\n }\r\n\r\n if ((options.value === null) || (options.value === \"\")) {\r\n options.rule.message = (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.FieldRequired : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).FieldRequired);\r\n return false;\r\n }\r\n else {\r\n for (var e = 0; e < dataSource.length; e++) {\r\n if ((options.data.hasOwnProperty('__KEY__') && dataSource[e].hasOwnProperty('__KEY__') && (options.data.__KEY__ !== dataSource[e].__KEY__)) || (options.data.hasOwnProperty('__KEY__') && !dataSource[e].hasOwnProperty('__KEY__')) || (options.data.hasOwnProperty(mainId) && dataSource[e].hasOwnProperty(mainId) && (options.data[mainId] !== dataSource[e][mainId]))) {\r\n if (new Date(options.value).getTime() === new Date(dataSource[e][nameOfField]).getTime()) {\r\n duplicate = 2;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if ((duplicate === 0) && editData.length) {\r\n for (var d = 0; d < editData.length; d++) {\r\n var item = editData[d];\r\n var itemOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(item);\r\n\r\n if (((item.type === 'insert') || (item.type === 'update')) && (typeof item.data !== 'undefined')) {\r\n fromDate = '';\r\n\r\n if (item.data.hasOwnProperty(nameOfField)) {\r\n fromDate = item.data[nameOfField];\r\n }\r\n else if ((typeof itemOldData !== 'undefined') && itemOldData.hasOwnProperty(nameOfField)) {\r\n if ((typeof mainKey === 'undefined') || ((typeof mainKey !== 'undefined') && (itemOldData.WageDefinitionId !== mainKey.WageDefinitionId))) {\r\n fromDate = itemOldData[nameOfField];\r\n }\r\n }\r\n\r\n if ((fromDate !== '') && (new Date(options.value).getTime() === new Date(fromDate).getTime())) {\r\n duplicate = duplicate + 1;\r\n\r\n if (duplicate > 1) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (duplicate > 1) {\r\n options.rule.message = (!scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.DateMustBeUnique : myApplication.getLanguageObject.selectedLanguage('generalFunctionsTexts', myApplication).DateMustBeUnique);\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n };\r\n\r\n scope.generalModel.CheckDateBiggerThan = function (options, firstDateName, currentDateName) {\r\n if (scope.generalModel.IsUndefinedEmptyOrNull(options.data[firstDateName]) || scope.generalModel.IsUndefinedEmptyOrNull(options.data[currentDateName])) {\r\n return true;\r\n }\r\n\r\n var startDate = new Date(options.data[firstDateName]).getTime();\r\n var endDate = new Date(options.data[currentDateName]).getTime();\r\n\r\n if (endDate > startDate) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n }\r\n\r\n return DateOperations;\r\n });\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.service('NumberOperations', function () {\r\n this.CheckIfInt = function (value) {\r\n if (/^(\\-|\\+)?([0-9]+|Infinity)$/.test(value)) {\r\n return !isNaN(Number(value));\r\n }\r\n\r\n return false;\r\n };\r\n\r\n this.CheckIfFloat = function (value) {\r\n if (/^\\-?[0-9]+(e[0-9]+)?(\\.[0-9]+)?$/.test(value)) {\r\n return !isNaN(Number(value));\r\n }\r\n\r\n return false;\r\n };\r\n });\r\n\r\n Number.prototype.round = function (places) {\r\n return +(Math.round(this + \"e+\" + places) + \"e-\" + places);\r\n }\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.service('ProductionOperations', function () {\r\n this.CalculateServiceTax = function (done, planned, tolerance, allowExceedProduction) {\r\n if (done === planned) {\r\n return 1;\r\n }\r\n\r\n if ((done === 0) || (planned === 0)) {\r\n return 0;\r\n }\r\n\r\n if (typeof allowExceedProduction === undefined) {\r\n allowExceedProduction = false;\r\n }\r\n\r\n if (allowExceedProduction && (done > planned)) {\r\n return 1;\r\n }\r\n\r\n if (done >= (2 * planned)) {\r\n return 0;\r\n }\r\n\r\n if ((done > planned) && (done <= (planned + tolerance))) {\r\n return 1;\r\n }\r\n\r\n if ((done < planned) && ((done + tolerance) >= planned)) {\r\n return 1;\r\n }\r\n\r\n return 1 - Math.abs((done - planned) / planned);\r\n };\r\n });\r\n})();\r\n(function () {\r\n \"use strict\";\r\n angular.module(myApplication.appName).service('HistoryModel', [\"$q\", \"$sessionStorage\", \"GeneralLoadData\", \"GeneralModel\", function ($q, $sessionStorage, GeneralLoadData, GeneralModel) {\r\n\r\n var _model = {\r\n Token: $sessionStorage.Token,\r\n HistoryId: '',\r\n ListHistory: [],\r\n GridHistory: '',\r\n HistoryIdName: '',\r\n CreationUserId: '',\r\n CreationDatetime: ''\r\n };\r\n\r\n var _ListHistory = function () {\r\n var defer = $q.defer();\r\n var parameters = { 'registerId': _model.HistoryId, 'creationUserId': _model.CreationUserId, 'creationDatetime': _model.CreationDatetime };\r\n $q.when(GeneralLoadData.GeneralGet('History', 'ListByRegisterId', parameters, _model.Token)).then(function (result) {\r\n _model.ListHistory = GeneralModel.AngularCopy(result.data);\r\n defer.resolve();\r\n }, function (reason) {\r\n defer.reject(reason);\r\n });\r\n\r\n return defer.promise;\r\n };\r\n\r\n return {\r\n model: _model,\r\n ListHistory: function () {\r\n return _ListHistory();\r\n }\r\n };\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('ConcurrencyData', [\"$q\", \"GeneralModel\", \"$window\", \"$compile\", \"$timeout\", \"$filter\", \"$parse\", function ($q, GeneralModel, $window, $compile, $timeout, $filter, $parse) {\r\n\r\n function ConcurrencyData(pageScope) {\r\n\r\n pageScope.ArrayFunctions = {\r\n FindInObject: function (object, property, propertyValue) {\r\n var objectLine = null;\r\n\r\n for (var i = 0; i < object.length; i++) {\r\n var item = object[i];\r\n\r\n if (item[property] === propertyValue) {\r\n objectLine = item;\r\n }\r\n }\r\n\r\n return objectLine;\r\n }\r\n };\r\n\r\n pageScope.generalModel.ValidateServerData = function (model, key, parent) {\r\n model.ServerData = [];\r\n model.DifferentLines = [];\r\n\r\n if ((model.MainObjectId === undefined) || pageScope.generalModel.IsUndefinedEmptyOrNull(pageScope.generalModel.GetObjectByString(model, model.MainObjectId))) {\r\n return;\r\n }\r\n\r\n if (parent !== '') {\r\n $q.when(GeneralModel.ListFromServerById(model)).then(function () {\r\n\r\n pageScope.generalModel.FullPageLoading = false;\r\n\r\n if ((typeof model.ArrayGridObjects !== 'undefined') && model.ArrayGridObjects.length) {\r\n for (var a = 0; a < model.ArrayGridObjects.length; a++) {\r\n pageScope.generalModel.CompareServerData(model, a, parent);\r\n }\r\n\r\n if (pageScope.generalModel.HasObjectKeys(pageScope.generalModel.ObjectDataForConcurrency)) {\r\n pageScope.generalModel.CallConcurrencyByObject(parent, key, model);\r\n }\r\n }\r\n else if (typeof model.ArrayScheduleObjects !== 'undefined') {\r\n pageScope.generalModel.CompareServerDataInSchedule(model, parent);\r\n }\r\n\r\n if ((typeof model.ArrayGridObjects === 'undefined') || ((typeof model.ArrayGridObjects !== 'undefined') && !model.ArrayGridObjects.length)) {\r\n pageScope.generalModel.ConcurrencyParentWithoutTables(parent, model, false);\r\n if (pageScope.generalModel.HasObjectKeys(pageScope.generalModel.ObjectDataForConcurrency)) {\r\n pageScope.generalModel.CallConcurrencyByObject(parent, key, model);\r\n }\r\n }\r\n }).catch(function (exception) {\r\n if (exception.Code === '409') {\r\n pageScope.generalModel.FullPageLoading = false;\r\n pageScope.generalModel.ConcurrencyParentWithoutTables(parent, model, true);\r\n }\r\n else {\r\n GeneralModel.ShowToastWarning(exception.Message);\r\n }\r\n });\r\n }\r\n else {\r\n $q.when(GeneralModel.ListFromServer(model)).then(function () {\r\n if (pageScope.generalModel.HasObjectKeys(pageScope.generalModel.ObjectDataForConcurrency)) {\r\n pageScope.generalModel.CallConcurrencyByObject('', key, model);\r\n }\r\n\r\n pageScope.generalModel.CompareServerData(model, key, '');\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n pageScope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n };\r\n\r\n pageScope.generalModel.ConcurrencyParentWithoutTables = function (parent, model, deleted) {\r\n if (deleted) {\r\n if (!angular.element('#MainObjectServerConcurrency').find('.InfoTextServer').length) {\r\n delete model[parent].CreationDatetime;\r\n delete model[parent].CreationUser;\r\n delete model[parent].CreationUserId;\r\n delete model[parent].RowVersion;\r\n delete model[parent].User;\r\n delete model[parent][model.MainObjectId];\r\n model[model.MainObjectId] = null;\r\n model.ElementId = null;\r\n var deletedText = (!pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.DeletedRegister : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).deletedRegister;\r\n angular.element('#MainObjectServerConcurrency').prepend(' ' + deletedText + '');\r\n }\r\n }\r\n else {\r\n if ((model[parent] !== null) && (typeof model[parent] !== 'undefined')) {\r\n var insideObject = pageScope.generalModel.CheckInnerObjectRowVersion(model[parent], model.ServerData, model);\r\n\r\n if ((model.ServerData.RowVersion !== model[parent].RowVersion) || insideObject.length) {\r\n pageScope.generalModel.ReplaceRowVersion(model[parent], model.MainObjectId, model.ServerData[model.MainObjectId], model.ServerData.RowVersion, insideObject);\r\n if (!angular.element('#MainObjectServerConcurrency').find('.InfoTextServer').length) {\r\n pageScope.generalModel.ShowServerData('#MainObjectServerConcurrency', angular.element('#MainObjectServerConcurrency'), '', model, '', '', parent);\r\n }\r\n }\r\n\r\n for (var propertyName in model[parent]) {\r\n var innerObject = pageScope.generalModel.GetObjectByString(model[parent], propertyName);\r\n var innerObjectServerData = pageScope.generalModel.GetObjectByString(model.ServerData, propertyName);\r\n\r\n if (!angular.isArray(innerObject)) {\r\n continue;\r\n }\r\n\r\n for (var o = 0; o < innerObject.length; o++) {\r\n var item = innerObject[o];\r\n\r\n var property = model.InnerObjectId;\r\n var propertyId = pageScope.generalModel.AngularCopy(pageScope.generalModel.GetObjectByString(item, property));\r\n var serverObject = [];\r\n\r\n for (var s = 0; s < innerObjectServerData.length; s++) {\r\n if (pageScope.generalModel.GetObjectByString(innerObjectServerData[s], model.InnerObjectId) === propertyId) {\r\n serverObject.push(innerObjectServerData[s]);\r\n }\r\n }\r\n if (serverObject.length) {\r\n item.RowVersion = pageScope.generalModel.AngularCopy(serverObject[0].RowVersion);\r\n }\r\n else {\r\n delete item[model.InnerObjectId];\r\n delete item.CreationDatetime;\r\n delete item.CreationUser;\r\n delete item.CreationUserId;\r\n delete item.RowVersion;\r\n delete item[model.MainObjectId];\r\n }\r\n }\r\n }\r\n\r\n if (!angular.element('#MainObjectServerConcurrency').find('.InfoTextServer').length) {\r\n pageScope.generalModel.ShowServerData('#MainObjectServerConcurrency', angular.element('#MainObjectServerConcurrency'), '', model, '', '', parent);\r\n }\r\n }\r\n }\r\n angular.element('.InfoTextServer').off('mouseover').mouseover(function (e) {\r\n if (angular.element(this).parents('md-tab-content').length) {\r\n angular.element('.PopUp', this).css({ 'top': angular.element(this)[0].getBoundingClientRect().top - angular.element(this).parents('md-tab-content')[0].getBoundingClientRect().top, 'right': angular.element(this)[0].getBoundingClientRect().left - angular.element(this).parents('md-tab-content')[0].getBoundingClientRect().width });\r\n }\r\n else {\r\n angular.element('.PopUp', this).css({ 'top': e.pageY, 'right': $window.innerWidth - e.pageX });\r\n }\r\n angular.element('.PopUp', this).removeClass('DisplayNone');\r\n });\r\n angular.element('.InfoTextServer').off('mouseout').mouseout(function () {\r\n angular.element('.PopUp', this).addClass('DisplayNone');\r\n });\r\n };\r\n\r\n pageScope.generalModel.CallConcurrency = function (pageScope, e, model, gridKey, key, modelReference, parent, deleteVisible) {\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(model.ArrayGridObjects[gridKey])) {\r\n var id;\r\n var element;\r\n var toolStateItem\r\n var idName = model.ArrayGridObjects[gridKey].MainId;\r\n var gridName = model.ArrayGridObjects[gridKey].GridName;\r\n var grid = angular.element(e.element).dxDataGrid('instance');\r\n var columns = grid.getVisibleColumns();\r\n var twoLevels = false;\r\n var rowIndex;\r\n\r\n if (typeof parent === 'undefined') {\r\n parent = '';\r\n }\r\n\r\n if (key !== '') {\r\n gridName = model.ArrayGridObjects[gridKey].SecondGrid + key[model.ArrayGridObjects[gridKey].MainId];\r\n idName = model.ArrayGridObjects[gridKey].SecondGridMainId;\r\n twoLevels = true;\r\n }\r\n\r\n if (twoLevels) {\r\n var insertedRows = [];\r\n var hasChanges = (pageScope.generalModel.EditedElements.length || pageScope.generalModel.DeletedElements.length);\r\n\r\n if (!hasChanges) {\r\n insertedRows = Helpers.DevExtreme.Grid.GetEditData(null, e, [\"insert\"]);\r\n }\r\n\r\n if (hasChanges || ((e.component.hasEditData() && (e.component.getDataSource() !== null) && (e.component.getDataSource()._store._array.length)) || pageScope.generalModel.ParentRowInserted.length || insertedRows.length)) {\r\n $timeout(function () {\r\n pageScope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n pageScope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n });\r\n\r\n for (var d = 0; d < model.ToolsStateItems.length; d++) {\r\n toolStateItem = model.ToolsStateItems[d];\r\n\r\n if (toolStateItem.Id === key[idName]) {\r\n toolStateItem.State = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if (!pageScope.generalModel.CheckIfThereAreEditedFields(model)) {\r\n $timeout(function () {\r\n model.ToolsState = false;\r\n pageScope.generalModel.SidebarOptions['State']['SaveOption'] = false;\r\n pageScope.generalModel.SidebarOptions['State']['CancelOption'] = false;\r\n });\r\n\r\n for (var tool = 0; tool < model.ToolsStateItems.length; tool++) {\r\n toolStateItem = model.ToolsStateItems[tool];\r\n\r\n if (toolStateItem.Id === key[idName]) {\r\n toolStateItem.State = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(model.ToolsStateItems)) {\r\n var myActualGrid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n\r\n if ((pageScope.generalModel.EditedElements.length || pageScope.generalModel.DeletedElements.length) || (e.component.hasEditData() && pageScope.generalModel.GetEditDataClean(myActualGrid).length) || (e.component.hasEditData() && (e.component.getDataSource() !== null) && e.component.getDataSource()._store._array.length || pageScope.generalModel.ParentRowInserted.length)) {\r\n model.ToolsStateItems[gridKey] = true;\r\n }\r\n else {\r\n model.ToolsStateItems[gridKey] = false;\r\n }\r\n }\r\n if ((pageScope.generalModel.EditedElements.length || pageScope.generalModel.DeletedElements.length) || (e.component.hasEditData() && pageScope.generalModel.GetEditDataClean(grid).length) || (e.component.hasEditData() && (e.component.getDataSource() !== null) && e.component.getDataSource()._store._array.length || pageScope.generalModel.ParentRowInserted.length)) {\r\n $timeout(function () {\r\n model.ToolsState = true;\r\n pageScope.generalModel.SidebarOptions['State']['SaveOption'] = true;\r\n pageScope.generalModel.SidebarOptions['State']['CancelOption'] = true;\r\n });\r\n }\r\n else if (pageScope.generalModel.IsUndefinedEmptyOrNull(parent)) {\r\n var editData = Helpers.DevExtreme.Grid.GetEditData(null, e);\r\n var validEditData = editData.find(find => (find.type !== 'undefined'));\r\n\r\n if (!validEditData) {\r\n $timeout(function () {\r\n model.ToolsState = false;\r\n if (!pageScope.generalModel.CheckIfThereAreEditedFields(model)) {\r\n pageScope.generalModel.SidebarOptions['State']['SaveOption'] = false;\r\n pageScope.generalModel.SidebarOptions['State']['CancelOption'] = false;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n var toDelete = false;\r\n\r\n if ((model.ShowDeleteIcon) && ((typeof model.AllowRemoval === 'undefined') || ((typeof model.AllowRemoval !== 'undefined') && (model.AllowRemoval)))) {\r\n toDelete = true;\r\n }\r\n\r\n angular.element(\".dx-datagrid .dx-link.dx-link-delete\").each(function (index) {\r\n angular.element(this).removeAttr('href');\r\n if (angular.element(\".dx-row.dx-data-row.dx-column-lines\").eq(index).find('.' + idName + '') && angular.element(\".dx-row.dx-data-row.dx-column-lines\").eq(index).find('.' + idName + '').text() !== 'undefined') {\r\n id = angular.element(\".dx-row.dx-data-row.dx-column-lines\").eq(index).find('.' + idName + '').text();\r\n }\r\n else {\r\n id = '';\r\n }\r\n\r\n element = angular.element(this);\r\n if (!angular.element(this).hasClass('dx-command-edit')) {\r\n element = angular.element(this).parent('.dx-command-edit');\r\n }\r\n\r\n id = angular.element(this).closest('tr').find('.' + idName + '').text();\r\n\r\n if (pageScope.generalModel.ConcurrencyError) {\r\n if (pageScope.ArrayFunctions.FindInObject(pageScope.generalModel.EditedElements, \"Id\", id) !== null) {\r\n var trLine = angular.element('.' + idName + ':contains(\"' + id + '\")').closest('tr');\r\n if (!angular.element(trLine).find('.dx-cell-modified').length) {\r\n var columns = grid.getVisibleColumns();\r\n var rowIndex = pageScope.generalModel.FindIndex(trLine);\r\n angular.element('td', trLine).each(function (index) {\r\n pageScope.generalModel.IsUpdating = true;\r\n if (typeof columns[index].dataField !== 'undefined') {\r\n var dataCell = grid.cellValue(rowIndex, columns[index].dataField);\r\n\r\n if (pageScope.generalModel.ValidateDate(dataCell)) {\r\n dataCell = $filter('date')(dataCell, myApplication.dateFormat);\r\n }\r\n\r\n if (columns[index].dataField === 'Disabled') {\r\n if (dataCell === 'Disabled') {\r\n dataCell = true;\r\n }\r\n else {\r\n dataCell = false;\r\n }\r\n }\r\n\r\n if (dataCell === null) {\r\n dataCell = \"\";\r\n }\r\n\r\n if (typeof dataCell !== 'undefined') {\r\n grid.cellValue(rowIndex, columns[index].dataField, dataCell);\r\n }\r\n angular.element(this).removeClass('dx-datagrid-invalid');\r\n }\r\n if (index === angular.element('td', trLine).length - 1) {\r\n pageScope.generalModel.IsUpdating = false;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n element = angular.element(\".dx-datagrid .dx-link.dx-link-delete\").eq(index);\r\n\r\n if ((typeof pageScope.generalModel.EditedElements !== 'undefined') && (pageScope.ArrayFunctions.FindInObject(pageScope.generalModel.EditedElements, \"Id\", id) !== null)) {\r\n if (!angular.element(element).find('.InfoTextServer').length) {\r\n if (pageScope.generalModel.SecondLevelUpdate.length) {\r\n for (var u = 0; u < pageScope.generalModel.SecondLevelUpdate.length; u++) {\r\n for (var c = 0; c < pageScope.generalModel.SecondLevelUpdate[u].Content.length; c++) {\r\n var content = pageScope.generalModel.SecondLevelUpdate[u].Content[c];\r\n var contentOldData = Helpers.DevExtreme.Grid.GetOldDataEditedRow(content);\r\n\r\n if (((typeof contentOldData !== 'undefined') && (contentOldData[idName] === id)) || (content.key[idName] === id)) {\r\n if (typeof contentOldData === 'undefined') {\r\n rowIndex = grid.getRowIndexByKey(content.key);\r\n }\r\n else {\r\n rowIndex = grid.getRowIndexByKey(contentOldData);\r\n }\r\n\r\n for (var k in content.data) {\r\n if (content.data.hasOwnProperty(k)) {\r\n content = pageScope.generalModel.AngularCopy(content.data[k]);\r\n\r\n delete content.data[k];\r\n\r\n if (pageScope.generalModel.ValidateDate(content)) {\r\n content = $filter('date')(content, myApplication.dateFormat);\r\n }\r\n\r\n grid.cellValue(rowIndex, k, content);\r\n }\r\n }\r\n\r\n pageScope.generalModel.SecondLevelUpdate.splice(u, 1);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n pageScope.generalModel.ShowServerData(this, element, columns, model, id, gridKey, parent);\r\n }\r\n }\r\n }\r\n if ((id !== '') && (typeof pageScope.generalModel.DeletedElements !== 'undefined') && (pageScope.ArrayFunctions.FindInObject(pageScope.generalModel.DeletedElements, \"Id\", id) !== null)) {\r\n if (!angular.element(element).find('.InfoTextServer').length) {\r\n var deletedText = (!pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations)) ? Helpers.Translations.DeletedRegister : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).deletedRegister;\r\n angular.element(element).prepend(' ' + deletedText + '');\r\n $compile(angular.element(element))(pageScope);\r\n }\r\n\r\n if (deleteVisible && !angular.element(element).has(\"span.lnr-trash\").length) {\r\n angular.element(element).attr('ng-click', 'generalModel.DeleteRowDeleted(' + modelReference + ', \\'0\\', \\'' + id + '\\')');\r\n angular.element(element).append('');\r\n $compile(angular.element(element))(pageScope);\r\n }\r\n }\r\n else if (deleteVisible && !angular.element(element).has(\"span.lnr-trash\").length && !angular.element(element).hasClass(\"LinkDisabled\")) {\r\n angular.element(element).attr('ng-click', 'CallFunction(\\'delete\\')');\r\n angular.element(element).append('');\r\n }\r\n\r\n if (!angular.element(element).parent('.dx-command-edit').find(\"span.lnr-undo\").length && (id !== '')) {\r\n var elementInner = angular.element(element);\r\n\r\n if (!angular.element(elementInner).hasClass('dx-command-edit')) {\r\n elementInner = angular.element(elementInner).parent('.dx-command-edit');\r\n }\r\n\r\n if (!angular.element(elementInner).find('.ButtonUpdateRow').length) {\r\n angular.element(elementInner).prepend('
');\r\n angular.element(elementInner).find(\"a.ButtonUpdateRow\").attr('ng-class', '{\\'Disable\\' : \\'' + id + '\\' === \\'\\'}').attr('ng-click', 'generalModel.UpdateRow(' + modelReference + ', \\'' + gridKey + '\\', \\'' + id + '\\', ' + twoLevels + ', \\'' + parent + '\\'); $event.stopPropagation();');\r\n angular.element(elementInner).find(\"a.ButtonUpdateRow .lnr-undo\").attr('ng-class', '{\\'Disable\\' : \\'' + id + '\\' === \\'\\'}');\r\n $compile(angular.element(elementInner).find('a.ButtonUpdateRow'))(pageScope);\r\n }\r\n }\r\n });\r\n\r\n angular.element(\".dx-datagrid .dx-link.dx-link-undelete\").each(function () {\r\n angular.element(this).removeAttr('href');\r\n id = angular.element(this).closest('tr').find('.' + idName + '').text();\r\n if ((typeof pageScope.generalModel.EditedElements !== 'undefined') && (pageScope.ArrayFunctions.FindInObject(pageScope.generalModel.EditedElements, \"Id\", id) !== null)) {\r\n element = angular.element(this);\r\n if (!angular.element(this).hasClass('dx-command-edit')) {\r\n element = angular.element(this).parent('.dx-command-edit');\r\n }\r\n\r\n if (!angular.element(element).find('.InfoTextServer').length) {\r\n pageScope.generalModel.ShowServerData(this, element, columns, model, id, gridKey, parent);\r\n }\r\n }\r\n if (!angular.element(this).has(\"span.lnr-undo\").length) {\r\n angular.element(this).attr('ng-click', 'CallFunction(\\'undelete\\')');\r\n angular.element(this).append('');\r\n }\r\n });\r\n\r\n angular.element(\".dx-data-row .dx-command-edit\").each(function (index) {\r\n if (angular.element(\".dx-row.dx-data-row.dx-column-lines\").eq(index).find('.' + idName + '') && angular.element(\".dx-row.dx-data-row.dx-column-lines\").eq(index).find('.' + idName + '').text() !== 'undefined') {\r\n id = angular.element(\".dx-row.dx-data-row.dx-column-lines\").eq(index).find('.' + idName + '').text();\r\n }\r\n else {\r\n id = '';\r\n }\r\n var myActualGrid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n var myActualDataSource = \"\";\r\n var myLineObject = \"\";\r\n if (typeof myActualGrid !== 'undefined') {\r\n myActualDataSource = myActualGrid.getDataSource();\r\n if (myActualDataSource !== null) {\r\n var objectForFilter = {};\r\n objectForFilter[idName] = id;\r\n myLineObject = $filter('filter')(myActualDataSource._store._array, objectForFilter, true)[0];\r\n }\r\n }\r\n\r\n if (!angular.element(this).has(\"span.lnr-history\").length && (id !== '') && !pageScope.generalModel.IsUndefinedEmptyOrNull(myLineObject) && (myLineObject.CreationUser !== myApplication.guidEmpty)) {\r\n var content = '';\r\n angular.element(content).appendTo(this);\r\n angular.element(this).find(\"a.HistoryButton\").attr('ng-class', '{\\'Disabled\\' : \\'' + id + '\\' === \\'\\'}').attr('ng-click', 'generalModel.LoadHistory(\\'' + id + '\\', \\'' + gridName + '\\', \\'' + idName + '\\', \\'' + myLineObject.CreationUser + '\\', \\'' + myLineObject.CreationDatetime + '\\');');\r\n angular.element(this).find(\"span.lnr-history\").attr('ng-class', '{\\'Disabled\\' : \\'' + id + '\\' === \\'\\'}');\r\n $compile(angular.element(this).find('a.HistoryButton'))(pageScope);\r\n }\r\n });\r\n\r\n if (angular.element('.dx-cell-modified').length) {\r\n angular.element('.dx-cell-modified').each(function (index) {\r\n id = angular.element(this).closest('tr').find('.' + idName + '').text();\r\n if ((id !== 'undefined') && (id !== '') && (id !== pageScope.generalModel.GuidEmpty) && ((typeof pageScope.generalModel.DeletedElements === 'undefined') || ((typeof pageScope.generalModel.DeletedElements !== 'undefined') && pageScope.ArrayFunctions.FindInObject(pageScope.generalModel.DeletedElements, \"Id\", id) === null))) {\r\n angular.element(this).closest('tr').find('.ButtonUpdateRow').removeClass('DisplayNone');\r\n }\r\n });\r\n }\r\n\r\n angular.element('.InfoTextServer').off('mouseover').mouseover(function (e) {\r\n if (angular.element(this).parents('md-tab-content').length) {\r\n angular.element('.PopUp', this).css({ 'top': angular.element(this)[0].getBoundingClientRect().top - angular.element(this).parents('md-tab-content')[0].getBoundingClientRect().top, 'right': angular.element(this)[0].getBoundingClientRect().left - angular.element(this).parents('md-tab-content')[0].getBoundingClientRect().width });\r\n }\r\n else {\r\n angular.element('.PopUp', this).css({ 'top': e.pageY, 'right': $window.innerWidth - e.pageX });\r\n angular.element('.PopUp', this).removeClass('DisplayNone');\r\n }\r\n });\r\n angular.element('.InfoTextServer').off('mouseout').mouseout(function () {\r\n angular.element('.PopUp', this).addClass('DisplayNone');\r\n });\r\n }\r\n };\r\n\r\n pageScope.generalModel.CallConcurrencyByObject = function (parent, arrayKey, model) {\r\n var mainObject;\r\n var serverData;\r\n var newData;\r\n var objectForFilter;\r\n if (parent !== '') {\r\n mainObject = model[parent];\r\n serverData = model.ServerData;\r\n }\r\n else {\r\n mainObject = model.ArrayGridObjects[arrayKey].ObjectName + 'Element';\r\n serverData = model.ServerData[model.ArrayGridObjects[arrayKey].ObjectName];\r\n }\r\n\r\n for (var key in pageScope.generalModel.ObjectDataForConcurrency) {\r\n if (angular.isArray(serverData)) {\r\n for (var u = 0; u < serverData.length; u++) {\r\n if (serverData[u].hasOwnProperty(key)) {\r\n newData = $parse(pageScope.generalModel.ObjectDataForConcurrency[key].OriginalObjectName);\r\n newData.assign(pageScope, serverData[u][key]);\r\n pageScope.generalModel.ReplaceObjectRowVersion(key, serverData[u][key], pageScope.generalModel.ObjectDataForConcurrency[key].IdName);\r\n pageScope.generalModel.ConcurrencyObjectChangeElement(key, mainObject, serverData);\r\n }\r\n }\r\n }\r\n else {\r\n if (serverData.hasOwnProperty(key)) {\r\n newData = $parse(pageScope.generalModel.ObjectDataForConcurrency[key].OriginalObjectName);\r\n newData.assign(pageScope, serverData[key]);\r\n pageScope.generalModel.ReplaceObjectRowVersion(key, serverData[key], pageScope.generalModel.ObjectDataForConcurrency[key].IdName);\r\n pageScope.generalModel.ConcurrencyObjectChangeElement(key, mainObject, serverData);\r\n }\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.ConcurrencyObjectChangeElement = function (object, mainObject, serverData) {\r\n var idName = pageScope.generalModel.ObjectDataForConcurrency[object].IdName;\r\n var textServerDataContent;\r\n var caption;\r\n\r\n for (var q = 0; q < mainObject[object].length; q++) {\r\n var itemQ = mainObject[object][q];\r\n\r\n objectForFilter = {};\r\n objectForFilter[idName] = itemQ[idName];\r\n\r\n if (typeof $filter('filter')(serverData[object], objectForFilter, true) === 'undefined') {\r\n continue;\r\n }\r\n\r\n var completeServerData = \"\";\r\n var finalServerData = \"\";\r\n var serverDataContent = \"\";\r\n var mainObjectDataContent = \"\";\r\n var image = \"\";\r\n\r\n if ($filter('filter')(pageScope.generalModel.EditedElements, { Id: itemQ[idName] }, true).length) {\r\n for (var f = 0; f < pageScope.generalModel.ObjectDataForConcurrency[object].Fields.length; f++) {\r\n var field = pageScope.generalModel.ObjectDataForConcurrency[object].Fields[f];\r\n objectForFilter = {};\r\n objectForFilter[idName] = itemQ[idName];\r\n\r\n if (typeof $filter('filter')($filter('filter')(serverData[object], objectForFilter, true), objectForFilter, true)[0][field.DataField] !== 'undefined') {\r\n serverDataContent = pageScope.generalModel.GetObjectByString($filter('filter')(serverData[object], objectForFilter, true)[0], field.DataField);\r\n\r\n image = '';\r\n\r\n function isImage() {\r\n try {\r\n return btoa(atob(serverDataContent)) === serverDataContent;\r\n }\r\n catch (_exception) {\r\n return false;\r\n }\r\n }\r\n\r\n if (isNaN(serverDataContent) && isImage()) {\r\n image = serverDataContent;\r\n\r\n if (serverDataContent.indexOf(\"data:image/gif;base64,\") < 0) {\r\n serverDataContent = \"data:image/gif;base64,\" + image;\r\n }\r\n\r\n serverDataContent = '';\r\n }\r\n\r\n if (typeof serverDataContent === 'undefined') {\r\n serverDataContent = '';\r\n }\r\n else if (pageScope.generalModel.ValidateDate(serverDataContent)) {\r\n serverDataContent = $filter('date')(serverDataContent, myApplication.dateFormat);\r\n }\r\n\r\n if ((serverDataContent === null) || (typeof serverDataContent === 'undefined')) {\r\n serverDataContent = \"\";\r\n }\r\n\r\n if (typeof $filter('filter')(serverData[object], objectForFilter, true)[0][field.DataField] !== 'undefined') {\r\n completeServerData = completeServerData + '

' + field.Caption + ': ' + serverDataContent + '

';\r\n }\r\n }\r\n }\r\n\r\n finalServerData = \"\" + !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.ServerData : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).serverData + \"
\";\r\n\r\n for (var p = 0; p < pageScope.generalModel.ObjectDataForConcurrency[object].Lists.length; p++) {\r\n var itemP = pageScope.generalModel.ObjectDataForConcurrency[object].Lists[p];\r\n var objectForFilter = {};\r\n objectForFilter[idName] = itemQ[idName];\r\n\r\n if (typeof $filter('filter')(serverData[object], objectForFilter, true)[0][itemP.List] !== 'undefined') {\r\n serverDataContent = pageScope.generalModel.GetObjectByString($filter('filter')(serverData[object], objectForFilter, true)[0], item.List);\r\n mainObjectDataContent = itemQ[itemP.List];\r\n\r\n textServerDataContent = \"\";\r\n var caption = \"\";\r\n\r\n if (typeof serverDataContent === 'undefined') {\r\n serverDataContent = '';\r\n }\r\n else if (serverDataContent.length) {\r\n var objectDescription = \"\";\r\n textServerDataContent = itemP.Caption;\r\n completeServerData = completeServerData + '

' + textServerDataContent + ': ' + objectDescription + '

';\r\n }\r\n }\r\n }\r\n\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(pageScope.generalModel.ObjectDataForConcurrency[object].CloseOpenArea)) {\r\n if (!pageScope.generalModel.ObjectDataForConcurrency[object].CloseOpenArea) {\r\n pageScope.generalModel.FillObjectConcurrencyCloud('' + pageScope.generalModel.ObjectDataForConcurrency[object].DrawnIdName + q + '', finalServerData, completeServerData, true);\r\n $('').insertAfter(angular.element('#CardBigOpenArea').find('.InfoTextServer'));\r\n $compile(angular.element(\"#CardBigOpenArea\").find(\"#GoBackMainObject\"))(pageScope);\r\n }\r\n else {\r\n pageScope.generalModel.FillObjectConcurrencyCloud('' + pageScope.generalModel.ObjectDataForConcurrency[object].DrawnIdName + q + '', finalServerData, completeServerData, false);\r\n }\r\n }\r\n }\r\n else if ($filter('filter')(pageScope.generalModel.DeletedElements, { Id: itemQ[idName] }, true).length) {\r\n finalServerData = \"\" + !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.DeletedRegister : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).deletedRegister + \"\";\r\n\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(pageScope.generalModel.ObjectDataForConcurrency[object].CloseOpenArea)) {\r\n if (!pageScope.generalModel.ObjectDataForConcurrency[object].CloseOpenArea) {\r\n pageScope.generalModel.FillObjectConcurrencyCloud('' + pageScope.generalModel.ObjectDataForConcurrency[object].DrawnIdName + q + '', finalServerData, \"\", true);\r\n $('').insertAfter(angular.element('#CardBigOpenArea').find('.InfoTextServer'));\r\n $compile(angular.element(\"#CardBigOpenArea\").find(\"#GoBackMainObject\"))(pageScope);\r\n }\r\n else {\r\n pageScope.generalModel.FillObjectConcurrencyCloud('' + pageScope.generalModel.ObjectDataForConcurrency[object].DrawnIdName + q + '', finalServerData, \"\", false);\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < pageScope.generalModel.ObjectDataForConcurrency[object].Lists.length; p++) {\r\n var itemP = pageScope.generalModel.ObjectDataForConcurrency[object].Lists[p];\r\n objectForFilter = {};\r\n objectForFilter[idName] = itemQ[idName];\r\n\r\n if (typeof $filter('filter')(serverData[object], objectForFilter, true)[0][itemP.List] !== 'undefined') {\r\n serverDataContent = pageScope.generalModel.GetObjectByString($filter('filter')(serverData[object], objectForFilter, true)[0], itemP.List);\r\n mainObjectDataContent = itemQ[itemP.List];\r\n\r\n textServerDataContent = \"\";\r\n caption = \"\";\r\n\r\n if (typeof serverDataContent === 'undefined') {\r\n serverDataContent = '';\r\n }\r\n else if (serverDataContent.length) {\r\n for (var m = 0; m < serverDataContent.length; m++) {\r\n\r\n if ($filter('filter')(pageScope.generalModel.EditedElements, { Id: serverDataContent[m][itemP.ListId] }, true).length) {\r\n caption = pageScope.generalModel.GetObjectByString(serverDataContent[m], itemP.Caption);\r\n textServerDataContent = serverDataContent[m][itemP.Field];\r\n completeServerData = completeServerData + '

' + caption + ': ' + textServerDataContent + '

';\r\n }\r\n }\r\n }\r\n\r\n if (serverDataContent.length < mainObjectDataContent.length) {\r\n for (var v = 0; v < mainObjectDataContent.length; v++) {\r\n if ($filter('filter')(pageScope.generalModel.DeletedElements, { Id: mainObjectDataContent[v][itemP.ListId] }, true).length) {\r\n caption = pageScope.generalModel.GetObjectByString(mainObjectDataContent[v], itemP.Caption);\r\n completeServerData = completeServerData + '

' + caption + ': ' + !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.DeletedRegister : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).deletedRegister + '

';\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ((finalServerData === \"\") && (completeServerData !== \"\")) {\r\n finalServerData = \"\" + !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.ServerData : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).serverData + \"
\";\r\n }\r\n }\r\n if (completeServerData !== \"\") {\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(pageScope.generalModel.ObjectDataForConcurrency[object].CloseOpenArea)) {\r\n if (!pageScope.generalModel.ObjectDataForConcurrency[object].CloseOpenArea) {\r\n pageScope.generalModel.FillObjectConcurrencyCloud('' + pageScope.generalModel.ObjectDataForConcurrency[object].DrawnIdName + q + '', finalServerData, \"\", true);\r\n $('').insertAfter(angular.element('#CardBigOpenArea').find('.InfoTextServer'));\r\n $compile(angular.element(\"#CardBigOpenArea\").find(\"#GoBackMainObject\"))(pageScope);\r\n }\r\n else {\r\n pageScope.generalModel.FillObjectConcurrencyCloud('' + pageScope.generalModel.ObjectDataForConcurrency[object].DrawnIdName + q + '', finalServerData, \"\", false);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n angular.element('.ObjectWithConcurrency .InfoTextServer').off('mouseover').mouseover(function (e) {\r\n if (angular.element(this).parents('section.gridContent').length) {\r\n angular.element('.PopUp', this).css({ 'top': '75px', 'right': '55px', 'left': 'auto', 'bottom': 'auto' });\r\n }\r\n else if (angular.element(this).parents('#CardBigOpenArea').length) {\r\n angular.element('.PopUp', this).css({ 'top': '0px', 'right': '30px', 'left': 'auto', 'bottom': 'auto' });\r\n }\r\n else if (angular.element(this).parents('.CardButtonsArea').length) {\r\n angular.element('.PopUp', this).css({ 'top': '10px', 'position': 'fixed' });\r\n }\r\n else {\r\n angular.element('.PopUp', this).css({ 'bottom': '10px', 'left': '0px' });\r\n }\r\n angular.element('.PopUp', this).removeClass('DisplayNone');\r\n });\r\n\r\n angular.element('.ObjectWithConcurrency .InfoTextServer').off('mouseout').mouseout(function () {\r\n angular.element('.PopUp', this).addClass('DisplayNone');\r\n });\r\n };\r\n\r\n pageScope.generalModel.FillObjectConcurrencyCloud = function (id, text, content, displayInOpenArea) {\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(text)) {\r\n if (displayInOpenArea) {\r\n angular.element('#CardBigOpenArea').find('.InfoTextServer').html(' ' + text + content + '');\r\n }\r\n angular.element('#' + id).find('.InfoTextServer').html(' ' + text + content + '');\r\n }\r\n };\r\n\r\n pageScope.generalModel.ConcurrencyObjectElement = function (objectName, parent, arrayKey) {\r\n $timeout(function () {\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(pageScope.generalModel.ConcurrencyModel)) {\r\n var mainObject;\r\n var serverData;\r\n if (parent !== '') {\r\n mainObject = pageScope.$eval(pageScope.generalModel.ConcurrencyModel)[parent];\r\n serverData = pageScope.$eval(pageScope.generalModel.ConcurrencyModel).ServerData;\r\n }\r\n else {\r\n mainObject = pageScope.$eval(pageScope.generalModel.ConcurrencyModel).ArrayGridObjects[arrayKey].ObjectName + 'Element';\r\n serverData = pageScope.$eval(pageScope.generalModel.ConcurrencyModel).ServerData[model.ArrayGridObjects[arrayKey].ObjectName];\r\n }\r\n\r\n if (pageScope.generalModel.ObjectDataForConcurrency.length) {\r\n pageScope.generalModel.ConcurrencyObjectChangeElement(objectName, mainObject, serverData);\r\n }\r\n }\r\n });\r\n };\r\n\r\n pageScope.generalModel.ShowServerData = function (thisElement, element, columns, model, id, gridKey, parent) {\r\n var completeServerData = '';\r\n var serverDataContent;\r\n\r\n if (thisElement === '#MainObjectServerConcurrency') {\r\n if ((typeof model.MainObjectListOfFields !== 'undefined') && model.MainObjectListOfFields.length) {\r\n for (var e = 0; e < model.MainObjectListOfFields.length; e++) {\r\n var field = model.MainObjectListOfFields[e];\r\n\r\n if (field.caption !== '') {\r\n var dataField = field.dataField;\r\n\r\n if (angular.isArray(pageScope.generalModel.GetObjectByString(model.ServerData, dataField))) {\r\n serverDataContent = [];\r\n\r\n for (var i = 0; i < pageScope.generalModel.GetObjectByString(model.ServerData, dataField).length; i++) {\r\n if ((typeof field.dataFieldToShow !== 'undefined') && (field.dataFieldToShow !== '')) {\r\n serverDataContent.push(pageScope.generalModel.GetObjectByString(pageScope.generalModel.GetObjectByString(model.ServerData, dataField)[i], field.dataFieldToShow));\r\n }\r\n }\r\n }\r\n else {\r\n if ((typeof field.dataFieldToShow !== 'undefined') && (field.dataFieldToShow !== '')) {\r\n dataField = field.dataFieldToShow;\r\n }\r\n\r\n serverDataContent = pageScope.generalModel.GetObjectByString(model.ServerData, dataField);\r\n }\r\n\r\n var image = '';\r\n\r\n function isImage() {\r\n try {\r\n return btoa(atob(serverDataContent)) === serverDataContent;\r\n }\r\n catch (_exception) {\r\n return false;\r\n }\r\n }\r\n\r\n if (isNaN(serverDataContent) && isImage()) {\r\n image = serverDataContent;\r\n\r\n if (serverDataContent.indexOf(\"data:image/gif;base64,\") < 0) {\r\n serverDataContent = \"data:image/gif;base64,\" + image;\r\n }\r\n\r\n serverDataContent = '';\r\n }\r\n\r\n if ((serverDataContent === null) || (typeof serverDataContent === \"undefined\")) {\r\n serverDataContent = '';\r\n }\r\n else if (pageScope.generalModel.ValidateDate(serverDataContent)) {\r\n serverDataContent = $filter('date')(serverDataContent, myApplication.dateFormat);\r\n }\r\n\r\n if (dataField === 'Disabled') {\r\n if (serverDataContent) {\r\n serverDataContent = !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Disabled : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).disabled;\r\n }\r\n else {\r\n serverDataContent = !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Enabled : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).enabled;\r\n }\r\n }\r\n\r\n if (angular.isArray(serverDataContent)) {\r\n if (serverDataContent.length) {\r\n var object = \"\";\r\n serverDataContent = object;\r\n completeServerData = completeServerData + '

' + field.caption + ': ' + serverDataContent + '

';\r\n }\r\n } else if ((serverDataContent !== '') && (typeof serverDataContent !== 'undefined')) {\r\n completeServerData = completeServerData + '

' + field.caption + ': ' + serverDataContent + '

';\r\n }\r\n }\r\n }\r\n }\r\n\r\n angular.element(element).prepend(' {{:refresh: !generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.ServerData : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).serverData}}
' + completeServerData + '
' + '');\r\n\r\n $compile(angular.element(element))(pageScope);\r\n }\r\n else {\r\n var trLine = angular.element(thisElement).closest('tr');\r\n var idName = model.ArrayGridObjects[gridKey].MainId;\r\n var gridName = model.ArrayGridObjects[gridKey].GridName;\r\n var secondGridName;\r\n var secondGridElementName;\r\n var secondIdName;\r\n var grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n var secondGrid;\r\n var columns = grid.getVisibleColumns();\r\n var secondColumns;\r\n var twoLevels = false;\r\n var objectName = model.ArrayGridObjects[gridKey].ObjectName;\r\n var serverData;\r\n\r\n if (model.ArrayGridObjects[gridKey].SecondGridName !== '') {\r\n secondGridName = model.ArrayGridObjects[gridKey].SecondGrid;\r\n secondIdName = model.ArrayGridObjects[gridKey].SecondGridMainId;\r\n secondGridElementName = model.ArrayGridObjects[gridKey].SecondGrid.substr(4);\r\n twoLevels = true;\r\n }\r\n\r\n if (parent !== '') {\r\n serverData = model.ServerData[objectName];\r\n }\r\n else {\r\n serverData = model.ServerData;\r\n }\r\n\r\n if (typeof serverData === 'undefined') {\r\n return;\r\n }\r\n\r\n for (var n = 0; n < serverData.length; n++) {\r\n var serverDataItem = serverData[n];\r\n\r\n if (serverDataItem[idName] === id) {\r\n angular.element('td', trLine).each(function (index) {\r\n if (typeof columns[index].dataField !== 'undefined') {\r\n serverDataContent = pageScope.generalModel.GetObjectByString(serverDataItem, columns[index].dataField);\r\n var image = \"\";\r\n\r\n function isImage() {\r\n try {\r\n return btoa(atob(serverDataContent)) === serverDataContent;\r\n }\r\n catch (_exception) {\r\n return false;\r\n }\r\n }\r\n\r\n if ((isNaN(serverDataContent)) && (isImage())) {\r\n image = serverDataContent;\r\n if (serverDataContent.indexOf(\"data:image/gif;base64,\") < 0) {\r\n serverDataContent = \"data:image/gif;base64,\" + image;\r\n }\r\n\r\n serverDataContent = '';\r\n }\r\n\r\n if ((serverDataContent === null) || (typeof serverDataContent === 'undefined')) {\r\n serverDataContent = \"\";\r\n }\r\n\r\n if (columns[index].dataField === 'Disabled') {\r\n if (serverDataContent) {\r\n serverDataContent = !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Disabled : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).disabled;\r\n }\r\n else {\r\n serverDataContent = !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Enabled : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).enabled;\r\n }\r\n }\r\n\r\n if (typeof serverDataContent === 'undefined') {\r\n serverDataContent = '';\r\n }\r\n else if (pageScope.generalModel.ValidateDate(serverDataContent)) {\r\n serverDataContent = $filter('date')(serverDataContent, myApplication.dateFormat);\r\n }\r\n\r\n if (typeof columns[index].caption !== 'undefined') {\r\n completeServerData = completeServerData + '

' + columns[index].caption + ': ' + serverDataContent + '

';\r\n }\r\n }\r\n });\r\n\r\n angular.element(element).prepend(' {{:refresh: !generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.ServerData : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).serverData}}
' + completeServerData + '
');\r\n $compile(angular.element(element))(pageScope);\r\n\r\n break;\r\n }\r\n else if (twoLevels) {\r\n secondGrid = angular.element('#' + secondGridName + serverDataItem[idName]).dxDataGrid('instance');\r\n\r\n if (typeof secondGrid !== 'undefined') {\r\n secondColumns = secondGrid.getVisibleColumns();\r\n\r\n for (var s = 0; s < serverDataItem[secondGridElementName].length; s++) {\r\n if (serverDataItem[secondGridElementName][s][secondIdName] === id) {\r\n angular.element('td', trLine).each(function (index) {\r\n if (typeof secondColumns[index].dataField !== 'undefined') {\r\n var serverDataContent = pageScope.generalModel.GetObjectByString(serverDataItem[secondGridElementName][s], secondColumns[index].dataField);\r\n if (secondColumns[index].dataField === 'Disabled') {\r\n if (serverDataContent) {\r\n serverDataContent = !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Disabled : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).disabled;\r\n\r\n }\r\n else {\r\n serverDataContent = !pageScope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.Enabled : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).enabled;\r\n\r\n }\r\n }\r\n\r\n if ((typeof serverDataContent === 'undefined') || (serverDataContent === null)) {\r\n\r\n serverDataContent = '';\r\n }\r\n else if (pageScope.generalModel.ValidateDate(serverDataContent)) {\r\n serverDataContent = $filter('date')(serverDataContent, myApplication.dateFormat);\r\n }\r\n\r\n if (typeof secondColumns[index].caption !== 'undefined') {\r\n completeServerData = completeServerData + '

' + secondColumns[index].caption + ': ' + serverDataContent + '

';\r\n }\r\n }\r\n });\r\n angular.element(element).prepend(' {{:refresh: !generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations) ? Helpers.Translations.ServerData : myApplication.getLanguageObject.selectedLanguage(\"concurrencyDataTexts\", myApplication).serverData}}
' + completeServerData + '
');\r\n $compile(angular.element(element))(pageScope);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.FormatServerEditView = function (key, model, twoLevels, mainElementLine, deleted, parent) {\r\n var gridName;\r\n var idName;\r\n var grid;\r\n var rowIndex;\r\n var trLine = '';\r\n var columns = '';\r\n var gridElement;\r\n if (twoLevels) {\r\n idName = model.ArrayGridObjects[key].SecondGridMainId;\r\n gridName = model.ArrayGridObjects[key].SecondGrid + mainElementLine[model.ArrayGridObjects[key].MainId];\r\n grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n gridElement = model.ArrayGridObjects[key].SecondGrid.substr(4);\r\n }\r\n else {\r\n idName = model.ArrayGridObjects[key].MainId;\r\n gridName = model.ArrayGridObjects[key].GridName;\r\n grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n gridElement = model.ArrayGridObjects[key].ObjectName;\r\n }\r\n if (deleted) {\r\n pageScope.generalModel.DeletedElements.push({ \"Id\": mainElementLine[idName], \"Cell\": trLine });\r\n }\r\n else if ((parent !== '') && (typeof model[parent][model.MainObjectId] !== 'undefined') && (model[parent][model.MainObjectId] === mainElementLine[model.MainObjectId]) && (mainElementLine.hasOwnProperty(gridElement))) {\r\n pageScope.generalModel.EditedElements.push({ \"Id\": mainElementLine[model.MainObjectId] });\r\n }\r\n else {\r\n pageScope.generalModel.EditedElements.push({ \"Id\": mainElementLine[idName] });\r\n }\r\n\r\n if ((parent !== '') && (typeof model[parent][model.MainObjectId] !== 'undefined') && (model[parent][model.MainObjectId] === mainElementLine[model.MainObjectId]) && (mainElementLine.hasOwnProperty(gridElement))) {\r\n if (!angular.element('#MainObjectServerConcurrency').find('.InfoTextServer').length) {\r\n pageScope.generalModel.ShowServerData('#MainObjectServerConcurrency', angular.element('#MainObjectServerConcurrency'), '', model, '', '', parent);\r\n }\r\n }\r\n else {\r\n if (typeof grid !== 'undefined') {\r\n columns = grid.getVisibleColumns();\r\n pageScope.generalModel.ConcurrencyError = true;\r\n trLine = angular.element('.' + idName + ':contains(\"' + mainElementLine[idName] + '\")').closest('tr');\r\n if ((typeof pageScope.generalModel.DeletedElements[pageScope.generalModel.DeletedElements.length - 1] !== 'undefined') && (pageScope.generalModel.DeletedElements[pageScope.generalModel.DeletedElements.length - 1].Id === mainElementLine[idName])) {\r\n pageScope.generalModel.DeletedElements[pageScope.generalModel.DeletedElements.length - 1].Cell = angular.copy(trLine);\r\n }\r\n rowIndex = pageScope.generalModel.FindIndex(trLine);\r\n angular.element(trLine).find('td').each(function (index) {\r\n if (typeof columns[index].dataField !== 'undefined') {\r\n var dataCell = grid.cellValue(rowIndex, columns[index].dataField);\r\n if (typeof dataCell !== 'undefined') {\r\n if (columns[index].dataField === 'Disabled') {\r\n if (dataCell === 'Disabled') {\r\n dataCell = true;\r\n }\r\n else {\r\n dataCell = false;\r\n }\r\n }\r\n\r\n if (dataCell === null) {\r\n dataCell = \"\";\r\n }\r\n\r\n grid.cellValue(rowIndex, columns[index].dataField, dataCell);\r\n }\r\n angular.element(this).removeClass('dx-datagrid-invalid');\r\n }\r\n });\r\n pageScope.generalModel.FillConcurrencyDataSource(gridName, model);\r\n }\r\n else if ((twoLevels) && (typeof grid === 'undefined')) {\r\n grid = angular.element('#' + model.ArrayGridObjects[key].GridName).dxDataGrid('instance');\r\n columns = grid.getVisibleColumns();\r\n trLine = angular.element('.' + model.ArrayGridObjects[key].MainId + ':contains(\"' + mainElementLine[model.ArrayGridObjects[key].MainId] + '\")').closest('tr');\r\n rowIndex = pageScope.generalModel.FindIndex(trLine);\r\n angular.element(trLine).find('td').each(function (index) {\r\n if (typeof columns[index].dataField !== 'undefined') {\r\n var dataCell = grid.cellValue(rowIndex, columns[index].dataField);\r\n if (typeof dataCell !== 'undefined') {\r\n if (columns[index].dataField === 'Disabled') {\r\n if (dataCell === 'Disabled') {\r\n dataCell = true;\r\n }\r\n else {\r\n dataCell = false;\r\n }\r\n }\r\n grid.cellValue(rowIndex, columns[index].dataField, dataCell);\r\n }\r\n\r\n if (dataCell === null) {\r\n dataCell = \"\";\r\n }\r\n\r\n angular.element(this).removeClass('dx-datagrid-invalid');\r\n }\r\n });\r\n pageScope.generalModel.FillConcurrencyDataSource(model.ArrayGridObjects[key].GridName, model);\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.CompareServerData = function (model, key, parent) {\r\n if (key !== \"\") {\r\n var elementName = model.ArrayGridObjects[key].ObjectName + 'Element';\r\n var serverDataToCompare = pageScope.generalModel.AngularCopy(model[elementName]);\r\n var idName = model.ArrayGridObjects[key].MainId;\r\n var mainElementLine;\r\n var secondElementName = '';\r\n var secondGridIdName = '';\r\n var twoLevels = false;\r\n var insideObject;\r\n var objectName = model.ArrayGridObjects[key].ObjectName;\r\n var serverData;\r\n pageScope.generalModel.ClearDeletedEditedObjects();\r\n if (model.ArrayGridObjects[key].SecondGrid !== '') {\r\n twoLevels = true;\r\n secondGridIdName = model.ArrayGridObjects[key].SecondGridMainId;\r\n secondElementName = model.ArrayGridObjects[key].SecondGrid.substr(4);\r\n }\r\n if (parent !== '') {\r\n serverData = model.ServerData[objectName];\r\n }\r\n else {\r\n serverData = model.ServerData;\r\n }\r\n }\r\n else {\r\n serverData = model.ServerData;\r\n }\r\n\r\n for (var x = 0; x < serverData.length; x++) {\r\n var serverDataItem = serverData[x];\r\n\r\n if (parent !== '') {\r\n mainElementLine = model[parent];\r\n\r\n if ((mainElementLine !== null) && (typeof mainElementLine !== 'undefined')) {\r\n insideObject = pageScope.generalModel.CheckInnerObjectRowVersion(mainElementLine, model.ServerData, model);\r\n\r\n if ((model.ServerData.RowVersion !== mainElementLine.RowVersion) || insideObject.length) {\r\n pageScope.generalModel.ReplaceRowVersion(model[parent], model.MainObjectId, model.ServerData[model.MainObjectId], model.ServerData.RowVersion, insideObject);\r\n pageScope.generalModel.FormatServerEditView(key, model, false, mainElementLine, false, parent);\r\n }\r\n }\r\n }\r\n\r\n mainElementLine = pageScope.ArrayFunctions.FindInObject(model[elementName], idName, serverDataItem[idName]);\r\n\r\n if (mainElementLine !== null) {\r\n insideObject = pageScope.generalModel.CheckInnerObjectRowVersion(mainElementLine, serverDataItem, model);\r\n if ((serverDataItem.RowVersion !== mainElementLine.RowVersion) || insideObject.length) {\r\n pageScope.generalModel.ReplaceRowVersion(model[elementName], idName, serverDataItem[idName], serverDataItem.RowVersion, insideObject, serverData);\r\n pageScope.generalModel.FormatServerEditView(key, model, false, mainElementLine, false, parent);\r\n }\r\n\r\n if (twoLevels) {\r\n for (var a = 0; a < serverDataItem[secondElementName].length; a++) {\r\n var secondElementNameItem = serverDataItem[secondElementName][a];\r\n\r\n mainElementLine = pageScope.ArrayFunctions.FindInObject(model[elementName][x][secondElementName], secondGridIdName, secondElementNameItem[secondGridIdName], secondElementNameItem);\r\n\r\n if (mainElementLine !== null) {\r\n insideObject = pageScope.generalModel.CheckInnerObjectRowVersion(mainElementLine, secondElementNameItem, model);\r\n if ((secondElementNameItem.RowVersion !== mainElementLine.RowVersion) || insideObject.length) {\r\n pageScope.generalModel.ReplaceRowVersion(model[elementName][x][secondElementName], secondGridIdName, secondElementNameItem[secondGridIdName], secondElementNameItem.RowVersion, insideObject, secondElementNameItem);\r\n pageScope.generalModel.FormatServerEditView(key, model, true, mainElementLine, false, parent);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ((parent !== '') && !serverData.length) {\r\n mainElementLine = model[parent];\r\n\r\n if ((mainElementLine !== null) && (typeof mainElementLine !== 'undefined')) {\r\n insideObject = pageScope.generalModel.CheckInnerObjectRowVersion(mainElementLine, model.ServerData, model);\r\n\r\n if ((model.ServerData.RowVersion !== mainElementLine.RowVersion) || insideObject.length) {\r\n pageScope.generalModel.ReplaceRowVersion(model[parent], model.MainObjectId, model.ServerData[model.MainObjectId], model.ServerData.RowVersion, insideObject, serverData);\r\n pageScope.generalModel.FormatServerEditView(key, model, false, mainElementLine, false, parent);\r\n }\r\n }\r\n }\r\n\r\n for (var c = model[elementName].length - 1; c >= 0; c--) {\r\n var object = [];\r\n\r\n if (pageScope.ArrayFunctions.FindInObject(serverData, idName, model[elementName][c][idName]) !== null) {\r\n if (twoLevels) {\r\n for (var a = model[elementName][c][secondElementName].length - 1; a >= 0; a--) {\r\n for (var x = 0; x < serverData.length; x++) {\r\n for (var b = 0; b < serverData[x][secondElementName].length; b++) {\r\n object = [];\r\n object[0] = serverData[x][secondElementName][b];\r\n if (pageScope.ArrayFunctions.FindInObject(object, secondGridIdName, model[elementName][c][secondElementName][a][secondGridIdName]) !== null) {\r\n serverDataToCompare[c][secondElementName].splice(a, 1);\r\n }\r\n }\r\n }\r\n }\r\n if (!serverDataToCompare[c][secondElementName].length && (pageScope.ArrayFunctions.FindInObject(serverData, idName, serverDataToCompare[c][idName]) !== null)) {\r\n serverDataToCompare.splice(c, 1);\r\n }\r\n else if (serverDataToCompare[c][secondElementName].length && (pageScope.ArrayFunctions.FindInObject(serverData, idName, serverDataToCompare[c][idName]) === null)) {\r\n var newObject = pageScope.generalModel.AngularCopy(serverDataToCompare[c]);\r\n newObject[secondElementName] = [];\r\n serverDataToCompare.push(newObject);\r\n }\r\n }\r\n else {\r\n serverDataToCompare.splice(c, 1);\r\n }\r\n }\r\n else {\r\n serverDataToCompare[c][secondElementName] = [];\r\n }\r\n }\r\n\r\n for (var r = 0; r < serverDataToCompare.length; r++) {\r\n var serverDataToCompareItem = serverDataToCompare[r];\r\n\r\n if (!serverDataToCompareItem[secondElementName].length) {\r\n pageScope.generalModel.FormatServerEditView(key, model, false, serverDataToCompareItem, true, parent);\r\n }\r\n else {\r\n for (var a = 0; a < serverDataToCompareItem[secondElementName].length; a++) {\r\n pageScope.generalModel.FormatServerEditView(key, model, true, serverDataToCompareItem[secondElementName][a], true, parent);\r\n }\r\n }\r\n }\r\n\r\n angular.element('.InfoTextServer').off('mouseover').mouseover(function (e) {\r\n if (angular.element(this).parents('md-tab-content').length) {\r\n angular.element('.PopUp', this).css({ 'top': angular.element(this)[0].getBoundingClientRect().top - angular.element(this).parents('md-tab-content')[0].getBoundingClientRect().top, 'right': angular.element(this)[0].getBoundingClientRect().left - angular.element(this).parents('md-tab-content')[0].getBoundingClientRect().width });\r\n }\r\n else {\r\n angular.element('.PopUp', this).css({ 'top': ((e.pageY - angular.element(this).offsetTop) + 20), 'right': ($window.innerWidth - e.pageX) - (angular.element('#SideBar').width() + 50) });\r\n }\r\n angular.element('.PopUp', this).removeClass('DisplayNone');\r\n });\r\n angular.element('.InfoTextServer').off('mouseout').mouseout(function () {\r\n angular.element('.PopUp', this).addClass('DisplayNone');\r\n });\r\n };\r\n\r\n pageScope.generalModel.ConcurrencyBeforeSave = function (model) {\r\n if (!pageScope.generalModel.DeletedElements.length) {\r\n return;\r\n }\r\n\r\n for (var v = 0; v < model.ArrayGridObjects.length; v++) {\r\n var gridObject = model.ArrayGridObjects[v];\r\n\r\n var elementName = gridObject.ObjectName + 'Element';\r\n var gridName = gridObject.GridName;\r\n var idName = gridObject.MainId;\r\n var grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n var editData = Helpers.DevExtreme.Grid.GetEditData(grid);\r\n var twoLevels = false;\r\n var secondGridElementName;\r\n var secondGridId;\r\n var secondGrid;\r\n var secondGridName;\r\n var editDataSecondGrid;\r\n var listsToUnite;\r\n var joinedData;\r\n\r\n if (gridObject.SecondGrid !== '') {\r\n twoLevels = true;\r\n secondGridId = gridObject.SecondGridMainId;\r\n secondGridName = gridObject.SecondGrid;\r\n secondGridElementName = gridObject.SecondGrid.substr(4);\r\n }\r\n\r\n if (editData.length) {\r\n for (var l = editData.length - 1; l >= 0; l--) {\r\n var itemL = editData[l];\r\n\r\n if (itemL.type !== 'insert') {\r\n for (var k = 0; k < pageScope.generalModel.DeletedElements.length; k++) {\r\n if ((itemL.key[idName] === pageScope.generalModel.DeletedElements[k].Id) && (pageScope.generalModel.DeletedElements[k].Id !== pageScope.generalModel.GuidEmpty)) {\r\n listsToUnite = [itemL.key, itemL.data];\r\n joinedData = listsToUnite.reduce(function (r, o) {\r\n Object.keys(o).forEach(function (k) {\r\n r[k] = o[k];\r\n });\r\n\r\n return r;\r\n }, {});\r\n\r\n itemL.data = joinedData;\r\n\r\n if (itemL.oldData) {\r\n itemL.oldData.__KEY__ = pageScope.generalModel.AngularCopy(itemL.key[idName]);\r\n itemL.oldData[idName] = pageScope.generalModel.GuidEmpty;\r\n itemL.key = joinedData;\r\n itemL.key.__KEY__ = pageScope.generalModel.AngularCopy(itemL.key[idName]);\r\n itemL.key[idName] = pageScope.generalModel.GuidEmpty;\r\n\r\n delete itemL.key.User;\r\n } else {\r\n itemL.data.__KEY__ = pageScope.generalModel.AngularCopy(itemL.key[idName]);\r\n itemL.key = pageScope.generalModel.AngularCopy(itemL.key[idName]);\r\n }\r\n\r\n itemL.type = 'insert';\r\n\r\n delete itemL.data.CreationDatetime;\r\n delete itemL.data.CreationUser;\r\n delete itemL.data.Disabled;\r\n delete itemL.data.RowVersion;\r\n delete itemL.data.User;\r\n }\r\n else if (twoLevels) {\r\n for (var j = 0; j < itemL.key[secondGridElementName].length; j++) {\r\n if ((itemL.key[secondGridElementName][j][secondGridId] === pageScope.generalModel.DeletedElements[k].Id) && (pageScope.generalModel.DeletedElements[k].Id !== pageScope.generalModel.GuidEmpty)) {\r\n if (itemL.key.hasOwnProperty('__KEY__')) {\r\n itemL.key[secondGridElementName][j][idName] = pageScope.generalModel.AngularCopy(itemL.key.__KEY__);\r\n }\r\n else {\r\n itemL.key[secondGridElementName][j][idName] = pageScope.generalModel.AngularCopy(itemL.key[idName]);\r\n }\r\n\r\n itemL.key[secondGridElementName][j].__KEY__ = pageScope.generalModel.AngularCopy(itemL.key[secondGridElementName][j][secondGridId]);\r\n itemL.key[secondGridElementName][j][secondGridId] = pageScope.generalModel.GuidEmpty;\r\n\r\n if (itemL.oldData) {\r\n itemL.oldData[secondGridElementName][j].__KEY__ = pageScope.generalModel.AngularCopy(itemL.key[secondGridElementName][j][secondGridId]);\r\n itemL.oldData[secondGridElementName][j][secondGridId] = pageScope.generalModel.GuidEmpty;\r\n }\r\n\r\n if (itemL.type !== 'insert') {\r\n itemL.type = 'update';\r\n }\r\n\r\n if (itemL.key[secondGridElementName].length) {\r\n delete itemL.key[secondGridElementName][j].CreationDatetime;\r\n delete itemL.key[secondGridElementName][j].CreationUser;\r\n delete itemL.key[secondGridElementName][j].Disabled;\r\n delete itemL.key[secondGridElementName][j].RowVersion;\r\n delete itemL.key[secondGridElementName][j].User;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (twoLevels) {\r\n for (var k = 0; k < pageScope.generalModel.DeletedElements.length; k++) {\r\n for (var t = 0; t < model[elementName].length; t++) {\r\n secondGrid = angular.element('#' + secondGridName + model[elementName][t][idName]).dxDataGrid('instance');\r\n if (typeof secondGrid !== 'undefined') {\r\n editDataSecondGrid = Helpers.DevExtreme.Grid.GetEditData(secondGrid);\r\n\r\n for (var f = 0; f < editDataSecondGrid.length; f++) {\r\n var id = editDataSecondGrid[f].key[idName];\r\n var objectForFilter = {};\r\n\r\n objectForFilter[idName] = id;\r\n\r\n var gridChanges = Helpers.DevExtreme.Grid.GetEditData(grid);\r\n\r\n if (!gridChanges.length || !$filter('filter')(gridChanges, objectForFilter[idName], true).length) {\r\n var columns = grid.getVisibleColumns();\r\n var nextRow = true;\r\n angular.element('#' + gridName).find('.' + idName).each(function () {\r\n if ((angular.element(this).text() === id) && (nextRow)) {\r\n var trLine = angular.element(this).closest('tr');\r\n var rowIndex = pageScope.generalModel.FindIndex(trLine);\r\n\r\n angular.element(trLine).find('td').each(function (index) {\r\n\r\n if (typeof columns[index].dataField !== 'undefined') {\r\n var dataCell = grid.cellValue(rowIndex, columns[index].dataField);\r\n\r\n if (typeof dataCell !== 'undefined') {\r\n if (columns[index].dataField === 'Disabled') {\r\n if (dataCell === 'Disabled') {\r\n dataCell = true;\r\n }\r\n else {\r\n dataCell = false;\r\n }\r\n }\r\n\r\n if (dataCell === null) {\r\n dataCell = \"\";\r\n }\r\n\r\n grid.cellValue(rowIndex, columns[index].dataField, dataCell);\r\n }\r\n angular.element(this).removeClass('dx-datagrid-invalid');\r\n }\r\n });\r\n nextRow = false;\r\n }\r\n });\r\n }\r\n listsToUnite = [editDataSecondGrid[l].key, editDataSecondGrid[l].data];\r\n\r\n joinedData = editDataSecondGrid[f].data.reduce(function (r, o) {\r\n Object.keys(o).forEach(function (k) {\r\n r[k] = o[k];\r\n });\r\n\r\n return r;\r\n\r\n }, {});\r\n \r\n editDataSecondGrid[f].data = joinedData;\r\n\r\n if (editDataSecondGrid[f].oldData) {\r\n editDataSecondGrid[f].oldData.__KEY__ = pageScope.generalModel.AngularCopy(editDataSecondGrid[f].key[secondGridId]);\r\n editDataSecondGrid[f].oldData[secondGridId] = pageScope.generalModel.GuidEmpty;\r\n editDataSecondGrid[f].key.__KEY__ = pageScope.generalModel.AngularCopy(editDataSecondGrid[f].key[secondGridId]);\r\n editDataSecondGrid[f].key[secondGridId] = pageScope.generalModel.GuidEmpty;\r\n\r\n delete editDataSecondGrid[f].key.User;\r\n } else {\r\n editDataSecondGrid[f].data.__KEY__ = pageScope.generalModel.AngularCopy(editDataSecondGrid[f].key[secondGridId]);\r\n editDataSecondGrid[f].key = pageScope.generalModel.AngularCopy(editDataSecondGrid[f].key[secondGridId]);\r\n }\r\n\r\n editDataSecondGrid[f].type = 'insert';\r\n\r\n delete editDataSecondGrid[f].data.CreationDatetime;\r\n delete editDataSecondGrid[f].data.CreationUser;\r\n delete editDataSecondGrid[f].data.Disabled;\r\n delete editDataSecondGrid[f].data.RowVersion;\r\n delete editDataSecondGrid[f].data.User;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.ReplaceObjectRowVersion = function (object, serverData, idName) {\r\n var objectName = pageScope.generalModel.ObjectDataForConcurrency[object].ObjectName;\r\n\r\n for (var r = 0; r < pageScope.$eval(objectName).length; r++) {\r\n var objectNameItem = pageScope.$eval(objectName)[r];\r\n var objectForFilter = {};\r\n objectForFilter[idName] = objectNameItem[idName];\r\n var findObjectsForFilter = $filter('filter')(serverData, objectForFilter, true);\r\n\r\n if ((typeof findObjectsForFilter !== 'undefined') && findObjectsForFilter.length) {\r\n var findObjectForFilter = findObjectsForFilter[0];\r\n\r\n if (objectNameItem.RowVersion !== findObjectForFilter.RowVersion) {\r\n pageScope.generalModel.EditedElements.push({ 'Id': objectNameItem[idName] });\r\n objectNameItem.RowVersion = findObjectForFilter.RowVersion;\r\n }\r\n }\r\n else {\r\n pageScope.generalModel.DeletedElements.push({ 'Id': objectNameItem[idName] });\r\n objectNameItem.New = objectNameItem[idName];\r\n delete objectNameItem.CreationDatetime;\r\n delete objectNameItem.CreationUser;\r\n delete objectNameItem.Disabled;\r\n delete objectNameItem.RowVersion;\r\n delete objectNameItem.User;\r\n delete objectNameItem[idName];\r\n }\r\n\r\n for (var t = 0; t < pageScope.generalModel.ObjectDataForConcurrency[object].Lists.length; t++) {\r\n var secondObjectForFilter = {};\r\n var listItem = pageScope.generalModel.ObjectDataForConcurrency[object].Lists[t];\r\n\r\n for (var h = 0; h < objectNameItem[listItem.List].length; h++) {\r\n var secondListItem = objectNameItem[listItem.List][h];\r\n secondObjectForFilter[listItem.ListId] = secondListItem[listItem.ListId];\r\n\r\n var findObjects = $filter('filter')(findObjectForFilter[listItem.List], secondObjectForFilter, true);\r\n\r\n if ((typeof findObjects !== 'undefined') && findObjects.length) {\r\n var findObject = findObjects[0];\r\n\r\n if (secondListItem.RowVersion !== findObject.RowVersion) {\r\n pageScope.generalModel.EditedElements.push({ 'Id': secondListItem[listItem.ListId] });\r\n secondListItem.RowVersion = findObject.RowVersion;\r\n\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(listItem.InformationField)) {\r\n secondListItem[listItem.InformationField] = findObject[listItem.InformationField];\r\n }\r\n }\r\n }\r\n else {\r\n pageScope.generalModel.DeletedElements.push({ 'Id': secondListItem[listItem.ListId] });\r\n\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(pageScope.generalModel.ObjectDataForConcurrency[object].CloseOpenArea)) {\r\n if (!pageScope.generalModel.ObjectDataForConcurrency[object].CloseOpenArea) {\r\n pageScope.generalModel.EditedElements.push({ 'Id': secondListItem[pageScope.generalModel.ObjectDataForConcurrency[object].IdName] });\r\n }\r\n }\r\n\r\n objectNameItem.New = secondListItem[listItem.ListId];\r\n\r\n delete secondListItem.CreationDatetime;\r\n delete secondListItem.CreationUser;\r\n delete secondListItem.Disabled;\r\n delete secondListItem.RowVersion;\r\n delete secondListItem.User;\r\n delete secondListItem[listItem.ListId];\r\n\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(listItem.InformationField) && findObjects.length) {\r\n var findObject = findObjects[0];\r\n\r\n secondListItem[listItem.InformationField] = findObject[listItem.InformationField];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.ReplaceRowVersion = function (object, idName, id, rowVersion, insideObject, serverData) {\r\n if (!pageScope.generalModel.IsUndefinedEmptyOrNull(insideObject) && insideObject.length && (typeof serverData !== 'undefined') && ((angular.isArray(serverData) && serverData.length) || (angular.isObject(serverData) && (serverData === {})))) {\r\n if (isNaN(object.length) && (object[idName] === id)) {\r\n for (var n = 0; n < insideObject.length; n++) {\r\n object[insideObject[n]].RowVersion = pageScope.generalModel.AngularCopy(serverData[insideObject[n]].RowVersion);\r\n }\r\n }\r\n else {\r\n for (var e = 0; object.length; e++) {\r\n if (object[e][idName] === id) {\r\n for (var m = 0; m < insideObject.length; m++) {\r\n if (Array.isArray(object[e][insideObject[m]])) {\r\n object[e][insideObject[m]][0].RowVersion = pageScope.generalModel.AngularCopy(serverData[e][insideObject[m]][0].RowVersion);\r\n }\r\n else {\r\n object[e][insideObject[m]].RowVersion = pageScope.generalModel.AngularCopy(serverData[e][insideObject[m]].RowVersion);\r\n }\r\n }\r\n object[e].RowVersion = pageScope.generalModel.AngularCopy(serverData[e].RowVersion);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (isNaN(object.length) && (object[idName] === id)) {\r\n object.RowVersion = pageScope.generalModel.AngularCopy(rowVersion);\r\n }\r\n else {\r\n for (var replaceRow = 0; replaceRow < object.length; replaceRow++) {\r\n if (object[replaceRow][idName] === id) {\r\n object[replaceRow].RowVersion = pageScope.generalModel.AngularCopy(rowVersion);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.UpdateRow = function (model, key, elementId, twoLevels, parent) {\r\n var serverData;\r\n var secondGrid;\r\n var secondEditData = [];\r\n var positionsResolved = [];\r\n var positionsResolvedSecondLevel = [];\r\n var elementName = model.ArrayGridObjects[key].ObjectName + 'Element';\r\n var gridName = model.ArrayGridObjects[key].GridName;\r\n var idName = model.ArrayGridObjects[key].MainId;\r\n var grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n var editData = Helpers.DevExtreme.Grid.GetEditData(grid);\r\n var secondGridIdName = model.ArrayGridObjects[key].SecondGridMainId;\r\n var secondElementName = model.ArrayGridObjects[key].SecondGrid.substr(4);\r\n var objectName = model.ArrayGridObjects[key].ObjectName;\r\n\r\n if ((secondGridIdName !== '') && !twoLevels) {\r\n secondGrid = angular.element('#' + model.ArrayGridObjects[key].SecondGrid + elementId).dxDataGrid('instance');\r\n\r\n if (typeof secondGrid !== 'undefined') {\r\n secondEditData = Helpers.DevExtreme.Grid.GetEditData(secondGrid);\r\n }\r\n }\r\n else if ((secondGridIdName !== '') && (twoLevels)) {\r\n for (var a = 0; a < model[elementName].length; a++) {\r\n for (var b = 0; b < model[elementName][a][secondElementName].length; b++) {\r\n if (model[elementName][a][secondElementName][b][secondGridIdName] === elementId) {\r\n secondGrid = angular.element('#' + model.ArrayGridObjects[key].SecondGrid + model[elementName][a][idName]).dxDataGrid('instance');\r\n secondEditData = Helpers.DevExtreme.Grid.GetEditData(secondGrid);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (twoLevels) {\r\n for (var i = 0; i < secondEditData.length; i++) {\r\n if (elementId === secondEditData[i].key[secondGridIdName]) {\r\n pageScope.generalModel.RowBackExtraConnections(model.ArrayGridObjects[key].SecondGrid + secondEditData[i].key[idName], secondEditData[i]);\r\n secondEditData.splice(i, 1);\r\n }\r\n }\r\n }\r\n else {\r\n for (var w = 0; w < editData.length; w++) {\r\n if (elementId === editData[w].key[idName]) {\r\n pageScope.generalModel.RowBackExtraConnections(gridName, editData[w]);\r\n editData.splice(w, 1);\r\n }\r\n }\r\n }\r\n\r\n for (var u = 0; u < pageScope.generalModel.SecondLevelUpdate.length; u++) {\r\n if (pageScope.generalModel.SecondLevelUpdate[u].Id === elementId) {\r\n pageScope.generalModel.SecondLevelUpdate.splice(u, 1);\r\n }\r\n }\r\n\r\n if ((parent !== '') && (!angular.equals(model.ServerData, {}))) {\r\n serverData = model.ServerData[objectName];\r\n }\r\n else {\r\n serverData = model.ServerData;\r\n }\r\n\r\n for (var v = 0; v < serverData.length; v++) {\r\n for (var y = 0; y < model[elementName].length; y++) {\r\n if ((!twoLevels) && (elementId === serverData[v][idName]) && (elementId === model[elementName][y][idName])) {\r\n var newServerData = pageScope.generalModel.AngularCopy(serverData);\r\n if (secondGridIdName !== '') {\r\n newServerData[v][secondElementName] = pageScope.generalModel.AngularCopy(model[elementName][y][secondElementName]);\r\n }\r\n model[elementName][y] = pageScope.generalModel.AngularCopy(newServerData[v]);\r\n positionsResolved.push(v);\r\n if ((secondGridIdName !== '') && (!twoLevels)) {\r\n pageScope.generalModel.SecondLevelUpdate.push({ Grid: model.ArrayGridObjects[key].SecondGrid + elementId, Id: elementId, Content: secondEditData })\r\n }\r\n }\r\n else if (twoLevels) {\r\n for (var a = 0; a < serverData[v][secondElementName].length; a++) {\r\n for (var b = 0; b < model[elementName][y][secondElementName].length; b++) {\r\n if ((elementId === serverData[v][secondElementName][a][secondGridIdName]) && (elementId === model[elementName][y][secondElementName][b][secondGridIdName])) {\r\n model[elementName][y][secondElementName][b] = pageScope.generalModel.AngularCopy(serverData[v][secondElementName][a]);\r\n positionsResolvedSecondLevel.push(v + '-' + a);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var e = 0; e < pageScope.generalModel.EditedElements.length; e++) {\r\n if (pageScope.generalModel.EditedElements[e].Id === elementId) {\r\n pageScope.generalModel.EditedElements.splice(e, 1);\r\n }\r\n }\r\n for (var p = positionsResolved.length - 1; p >= 0; p--) {\r\n if ((secondGridIdName !== '') && serverData[positionsResolved[p]][secondElementName].length) {\r\n var found = false;\r\n for (var q = 0; q < serverData[positionsResolved[p]][secondElementName].length; q++) {\r\n if (pageScope.ArrayFunctions.FindInObject(pageScope.generalModel.EditedElements, \"Id\", serverData[positionsResolved[p]][secondElementName][q][secondGridIdName]) !== null) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n serverData.splice(positionsResolved[p], 1);\r\n }\r\n }\r\n else {\r\n serverData.splice(positionsResolved[p], 1);\r\n }\r\n }\r\n for (var p = positionsResolvedSecondLevel.length - 1; p >= 0; p--) {\r\n var first = positionsResolvedSecondLevel[p].split('-')[0];\r\n var second = positionsResolvedSecondLevel[p].split('-')[1];\r\n serverData[first][secondElementName].splice(second, 1);\r\n if (!serverData[first][secondElementName].length && (pageScope.ArrayFunctions.FindInObject(pageScope.generalModel.EditedElements, \"Id\", serverData[first][idName]) === null)) {\r\n serverData.splice(first, 1);\r\n }\r\n }\r\n if (!twoLevels) {\r\n grid.refresh();\r\n }\r\n else {\r\n secondGrid.refresh();\r\n }\r\n if (pageScope.generalModel.CheckIfThereAreEditedFields(model)) {\r\n $timeout(function () {\r\n pageScope.generalModel.SidebarOptions['State']['SaveOption'] = false;\r\n pageScope.generalModel.SidebarOptions['State']['CancelOption'] = false;\r\n });\r\n\r\n for (var l = 0; l < model.ArrayGridObjects.length; l++) {\r\n if (typeof model[model.ArrayGridObjects[l].ObjectName + \"ToolsState\"] !== 'undefined') {\r\n model[model.ArrayGridObjects[l].ObjectName + \"ToolsState\"] = false;\r\n }\r\n }\r\n\r\n if (typeof model.ToolsStateItems !== 'undefined') {\r\n for (var d = 0; d < model.ToolsStateItems.length; d++) {\r\n if (model.ToolsStateItems[d].Id === key[idName]) {\r\n model.ToolsStateItems[d].State = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (typeof model.ToolsState !== 'undefined') {\r\n model.ToolsState = false;\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.RowBackExtraConnections = function (gridName, editedData) {\r\n var grid = angular.element(\"#\" + gridName + \"\").dxDataGrid(\"instance\");\r\n var rowIndex = grid.getRowIndexByKey(editedData.key);\r\n for (var p = 0; p < pageScope.generalModel.ExtraConnections.length; p++) {\r\n if (editedData.data.hasOwnProperty(pageScope.generalModel.ExtraConnections[p].ObjectPathName)) {\r\n if ((typeof pageScope.generalModel.DropdDownsEditedValues[gridName] !== 'undefined') && (typeof pageScope.generalModel.DropdDownsEditedValues[gridName][rowIndex] !== 'undefined')) {\r\n var data = pageScope.generalModel.DropdDownsEditedValues[gridName][rowIndex][pageScope.generalModel.ExtraConnections[p].DataField];\r\n grid.cellValue(rowIndex, pageScope.generalModel.ExtraConnections[p].DataField, data);\r\n }\r\n }\r\n }\r\n if ((typeof pageScope.generalModel.DropdDownsEditedValues[gridName] !== 'undefined') && (typeof pageScope.generalModel.DropdDownsEditedValues[gridName][rowIndex] !== 'undefined')) {\r\n delete pageScope.generalModel.DropdDownsEditedValues[gridName][rowIndex];\r\n }\r\n };\r\n\r\n pageScope.generalModel.DeleteRowDeleted = function (model, key, id) {\r\n var twoLevels = false;\r\n var gridElementName = model.ArrayGridObjects[key].ObjectName + 'Element';\r\n var secondGridElementName;\r\n var secondGridId;\r\n var gridName = model.ArrayGridObjects[key].GridName;\r\n var secondGridName;\r\n var grid;\r\n var idName = model.ArrayGridObjects[key].MainId;\r\n if (model.ArrayGridObjects[key].SecondGrid !== '') {\r\n twoLevels = true;\r\n secondGridName = model.ArrayGridObjects[key].SecondGrid;\r\n secondGridId = model.ArrayGridObjects[key].SecondGridMainId;\r\n secondGridElementName = model.ArrayGridObjects[key].SecondGrid.substr(4);\r\n }\r\n for (var f = 0; f < model[gridElementName].length; f++) {\r\n if (model[gridElementName][f][model.ArrayGridObjects[key].MainId] === id) {\r\n model[gridElementName].splice(f, 1);\r\n pageScope.generalModel.IsUpdating = false;\r\n grid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n grid.option('dataSource', model[gridElementName]);\r\n grid.refresh();\r\n break;\r\n }\r\n else if (twoLevels) {\r\n for (var h = 0; h < model[gridElementName][f][secondGridElementName].length; h++) {\r\n if (model[gridElementName][f][secondGridElementName][h][secondGridId] === id) {\r\n model[gridElementName][f][secondGridElementName].splice(h, 1);\r\n pageScope.generalModel.IsUpdating = false;\r\n grid = angular.element(\"#\" + secondGridName + model[gridElementName][f][idName] + \"\").dxDataGrid('instance');\r\n grid.option('dataSource', model[gridElementName][f][secondGridElementName]);\r\n grid.refresh();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var g = 0; g < pageScope.generalModel.DeletedElements.length; g++) {\r\n if (pageScope.generalModel.DeletedElements[g].Id === id) {\r\n pageScope.generalModel.DeletedElements.splice(g, 1);\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.DeleteRowWithServer = function (model, key, twoLevels, id, index, parent) {\r\n var idName = model.ArrayGridObjects[key].MainId;\r\n var elementName = model.ArrayGridObjects[key].ObjectName + 'Element';\r\n var mainElementLine = pageScope.ArrayFunctions.FindInObject(model[elementName], idName, id);\r\n var objectName = model.ArrayGridObjects[key.ObjectName];\r\n var secondElementName;\r\n var serverData;\r\n var secondGrid;\r\n if (twoLevels) {\r\n idName = model.ArrayGridObjects[key].SecondGridMainId;\r\n secondGrid = angular.element('#' + model.ArrayGridObjects[key].SecondGrid).dxDataGrid('instance');\r\n secondElementName = model.ArrayGridObjects[key].SecondGrid.substr(4);\r\n }\r\n if (parent !== '') {\r\n serverData = model.ServerData[objectName];\r\n }\r\n else {\r\n serverData = model.ServerData;\r\n }\r\n\r\n for (var x = 0; x < serverData.length; x++) {\r\n if (!twoLevels) {\r\n if (serverData[x][idName] === id) {\r\n pageScope.generalModel.FormatServerEditView(key, model, twoLevels, mainElementLine, false, parent);\r\n }\r\n }\r\n else {\r\n for (var a = 0; a < serverData[x][secondElementName].length; a++) {\r\n pageScope.generalModel.FormatServerEditView(key, model, twoLevels, mainElementLine, false, parent);\r\n }\r\n }\r\n }\r\n };\r\n\r\n pageScope.generalModel.FillConcurrencyEditedObject = function (model, object) {\r\n var extraConnection = '';\r\n for (var a = 0; a < pageScope.generalModel.ExtraConnections.length; a++) {\r\n extraConnection = pageScope.generalModel.ExtraConnections[a].DataField;\r\n if (pageScope.generalModel.ExtraConnections[a].DataField.indexOf('.') > 0) {\r\n extraConnection = pageScope.generalModel.ExtraConnections[a].DataField.substr(0, pageScope.generalModel.ExtraConnections[a].DataField.indexOf('.'));\r\n }\r\n\r\n if ((object.hasOwnProperty(extraConnection)) && (object[extraConnection] === null)) {\r\n if (model.MainObjectPreviousSave.length) {\r\n for (var m = 0; m < model.MainObjectPreviousSave[a].length; m++) {\r\n if ((model.MainObjectPreviousSave[a][m] !== null) && (object[pageScope.generalModel.ExtraConnections[a].InnerId] === model.MainObjectPreviousSave[a][m][pageScope.generalModel.ExtraConnections[a].InnerId])) {\r\n if (object[extraConnection] === null) {\r\n object[extraConnection] = {};\r\n }\r\n object[extraConnection] = pageScope.generalModel.AngularCopy(model.MainObjectPreviousSave[a][m]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return object;\r\n };\r\n\r\n pageScope.generalModel.FillConcurrencyDataSource = function (gridName, model) {\r\n var grid = angular.element('#' + gridName).dxDataGrid('instance');\r\n var dataSource = grid.getDataSource();\r\n\r\n for (var v = 0; v < dataSource._store._array.length; v++) {\r\n dataSource._store._array[v] = pageScope.generalModel.FillConcurrencyEditedObject(model, dataSource._store._array[v]);\r\n }\r\n };\r\n\r\n pageScope.generalModel.GoBackMainObject = function (model, parent) {\r\n for (var a = 0; a < model.MainObjectListOfFields.length; a++) {\r\n var image;\r\n function isImage() {\r\n try {\r\n return btoa(atob(pageScope.generalModel.GetObjectByString(model.ServerData, model.MainObjectListOfFields[a].dataField))) === model.ServerData[model.MainObjectListOfFields[a].dataField];\r\n }\r\n catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n if (isImage()) {\r\n image = pageScope.generalModel.GetObjectByString(model.ServerData, model.MainObjectListOfFields[a].dataField);\r\n if (pageScope.generalModel.GetObjectByString(model.ServerData, model.MainObjectListOfFields[a].dataField).indexOf(\"data:image/gif;base64,\") < 0) {\r\n pageScope.generalModel.SetObjectValueByString(model.ServerData, model.MainObjectListOfFields[a].dataField, \"data:image/gif;base64,\" + image);\r\n }\r\n }\r\n\r\n if (pageScope.generalModel.ValidateDate(pageScope.generalModel.GetObjectByString(model.ServerData, model.MainObjectListOfFields[a].dataField))) {\r\n pageScope.generalModel.SetObjectValueByString(model.ServerData, model.MainObjectListOfFields[a].dataField, $filter('date')(model.ServerData[model.MainObjectListOfFields[a].dataField], myApplication.dateFormat));\r\n }\r\n\r\n pageScope.generalModel.SetObjectValueByString(model[parent], model.MainObjectListOfFields[a].dataField, pageScope.generalModel.GetObjectByString(model.ServerData, model.MainObjectListOfFields[a].dataField));\r\n pageScope.generalModel.SetObjectValueByString(model.OriginalElements[parent], model.MainObjectListOfFields[a].dataField, pageScope.generalModel.GetObjectByString(model.ServerData, model.MainObjectListOfFields[a].dataField));\r\n\r\n }\r\n if (typeof model.ArrayScheduleObjects !== 'undefined') {\r\n model[model.ArrayScheduleObjects[0].ObjectNameInSchedule] = [];\r\n model[model.ArrayScheduleObjects[0].ObjectName] = model.ServerData[model.ArrayScheduleObjects[0].ScheduleObject];\r\n model.OriginalElements[model.ArrayScheduleObjects[0].ObjectName] = model.ServerData[model.ArrayScheduleObjects[0].ScheduleObject];\r\n pageScope.$eval(model.ArrayScheduleObjects[0].Convertion)(model.ServerData[model.ArrayScheduleObjects[0].ScheduleObject], false);\r\n }\r\n\r\n if (pageScope.generalModel.SpecificCheckIfThereAreEditedFields()) {\r\n pageScope.generalModel.SidebarOptions['State']['SaveOption'] = false;\r\n pageScope.generalModel.SidebarOptions['State']['CancelOption'] = false;\r\n }\r\n pageScope.generalModel.ClearDeletedEditedObjects();\r\n angular.element('#MainObjectServerConcurrency').html('');\r\n };\r\n\r\n pageScope.generalModel.CompareServerDataInSchedule = function (model, parent) {\r\n var mainElement;\r\n var elementName = model.ArrayScheduleObjects[0].ObjectName;\r\n var elementNameInSchedule = model.ArrayScheduleObjects[0].ObjectNameInSchedule;\r\n var editedIdName = model.ArrayScheduleObjects[0].EditedScheduleId;\r\n var mainIdName = model.ArrayScheduleObjects[0].ScheduleId;\r\n var idName = model.ArrayScheduleObjects[0].ScheduleId;\r\n var serverData = model.ServerData[model.ArrayScheduleObjects[0].ScheduleObject];\r\n var action = model.ArrayScheduleObjects[0].Convertion;\r\n var concurrencyObject = [];\r\n var number = 1;\r\n var objectToSend = [];\r\n\r\n model.OriginalElements[parent] = pageScope.generalModel.AngularCopy(model.ServerData);\r\n model.OriginalElements[model.ArrayScheduleObjects[0].ObjectName] = pageScope.generalModel.AngularCopy(serverData);\r\n\r\n pageScope.generalModel.ReplaceRowVersion(model[parent], mainIdName, model.ServerData[mainIdName], model.ServerData.RowVersion);\r\n\r\n for (var s = 0; s < serverData.length; s++) {\r\n mainElement = pageScope.ArrayFunctions.FindInObject(model[elementNameInSchedule], editedIdName, serverData[s][idName]);\r\n if (mainElement.rowVersion !== serverData[s].RowVersion) {\r\n for (var e = 0; model[elementNameInSchedule].length; e++) {\r\n if (model[elementNameInSchedule][e][editedIdName] === serverData[s][idName]) {\r\n model[elementName][e].rowVersion = serverData[s].RowVersion;\r\n model[elementNameInSchedule][e].rowVersion = serverData[s].RowVersion;\r\n model[elementName][e].number = number;\r\n model[elementNameInSchedule][e].number = number;\r\n objectToSend.push(serverData[s]);\r\n objectToSend[objectToSend.length - 1].number = number;\r\n number++;\r\n break;\r\n }\r\n }\r\n concurrencyObject = concurrencyObject.concat(pageScope.generalModel.AngularCopy(objectToSend));\r\n concurrencyObject[concurrencyObject.length - 1].Concurrency = true;\r\n }\r\n }\r\n\r\n for (var r = 0; r < model[elementNameInSchedule].length; r++) {\r\n mainElement = pageScope.ArrayFunctions.FindInObject(serverData, idName, model[elementNameInSchedule][r][editedIdName]);\r\n if (mainElement === null) {\r\n model[elementNameInSchedule][r].concurrencyToDelete = true;\r\n }\r\n }\r\n\r\n pageScope.$eval(action)(concurrencyObject, true);\r\n\r\n if (!angular.element('#MainObjectServerConcurrency').find('.InfoTextServer').length) {\r\n pageScope.generalModel.ShowServerData('#MainObjectServerConcurrency', angular.element('#MainObjectServerConcurrency'), '', model, '', '', parent);\r\n }\r\n\r\n angular.element('.InfoTextServer').off('mouseover').mouseover(function (e) {\r\n if (angular.element(this).parents('md-tab-content').length) {\r\n angular.element('.PopUp', this).css({ 'top': angular.element(this)[0].getBoundingClientRect().top - angular.element(this).parents('md-tab-content')[0].getBoundingClientRect().top, 'right': angular.element(this)[0].getBoundingClientRect().left - angular.element(this).parents('md-tab-content')[0].getBoundingClientRect().width });\r\n }\r\n else {\r\n angular.element('.PopUp', this).css({ 'top': e.pageY, 'right': $window.innerWidth - e.pageX });\r\n }\r\n angular.element('.PopUp', this).removeClass('DisplayNone');\r\n });\r\n angular.element('.InfoTextServer').off('mouseout').mouseout(function () {\r\n angular.element('.PopUp', this).addClass('DisplayNone');\r\n });\r\n };\r\n\r\n pageScope.generalModel.ClearDeletedEditedObjects = function () {\r\n pageScope.generalModel.DeletedElements = [];\r\n pageScope.generalModel.EditedElements = [];\r\n };\r\n\r\n pageScope.generalModel.CheckInnerObjectRowVersion = function (object, serverData, model) {\r\n var keys = Object.keys(object);\r\n var finalContent = [];\r\n for (var k = 0; k < keys.length; k++) {\r\n if ((((typeof pageScope.generalModel.ExtraConnections !== 'undefined') && ((typeof object[keys[k]] === 'object') && !$filter('filter')(pageScope.generalModel.ExtraConnections, { PathName: keys[k] }, true).length)) || (typeof pageScope.generalModel.ExtraConnections === 'undefined')) && ((typeof model.ArrayGridObjects === 'undefined') || (typeof model.ArrayGridObjects !== 'undefined') && !$filter('filter')(model.ArrayGridObjects, { SecondGrid: 'Grid' + keys[k] }, true).length)) {\r\n if ((object[keys[k]] !== null) && (((Array.isArray(object[keys[k]])) && (typeof object[keys[k]][0] !== 'undefined') && (object[keys[k]][0].hasOwnProperty('RowVersion')) && !pageScope.generalModel.IsUndefinedEmptyOrNull(serverData[keys[k]][0]) && (object[keys[k]][0].RowVersion !== serverData[keys[k]][0].RowVersion)) || ((!Array.isArray(object[keys[k]])) && (typeof object[keys[k]] !== 'undefined') && (object[keys[k]].hasOwnProperty('RowVersion')) && !pageScope.generalModel.IsUndefinedEmptyOrNull(serverData[keys[k]]) && (object[keys[k]].RowVersion !== serverData[keys[k]].RowVersion)))) {\r\n finalContent.push(keys[k]);\r\n }\r\n }\r\n }\r\n return finalContent\r\n };\r\n }\r\n return ConcurrencyData;\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('GetIp', [\"$location\", function ($location) {\r\n\r\n function GetIp(specificApiName) {\r\n var port = \"\";\r\n var protocol = \"http\";\r\n var api = myApplication.apiName;\r\n\r\n if ((typeof specificApiName !== 'undefined') && (specificApiName !== null) && (specificApiName !== '')) {\r\n api = specificApiName;\r\n }\r\n\r\n if (myApplication.projectType === myApplication.projectTypeWeb) {\r\n if ($location.port() !== '') {\r\n port = ':' + $location.port();\r\n }\r\n\r\n if (($location.protocol() !== '') && (myApplication.projectType === myApplication.projectTypeWeb)) {\r\n protocol = $location.protocol();\r\n }\r\n\r\n let apiLink = protocol + '://' + $location.host() + port + '/' + api;\r\n\r\n return apiLink;\r\n }\r\n else {\r\n if (myApplication.apiMobileServerPort) {\r\n port = ':' + myApplication.apiMobileServerPort;\r\n }\r\n\r\n let apiLink = myApplication.protocol + '://' + myApplication.apiMobileServerLink + port + '/' + api;\r\n\r\n return apiLink;\r\n }\r\n };\r\n\r\n return GetIp;\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('HistoryService', [\"GeneralModel\", \"HistoryModel\", \"$q\", \"$filter\", \"$sessionStorage\", function (GeneralModel, HistoryModel, $q, $filter, $sessionStorage) {\r\n\r\n function History(pageScope) {\r\n var scope = pageScope;\r\n scope.historyModel = HistoryModel.model;\r\n scope.generalModel = GeneralModel.model;\r\n\r\n scope.generalModel.LoadHistory = function (elementId, gridName, idName, creationUserId, creationDatetime) {\r\n if (scope.generalModel.IsHistoryOpen) {\r\n return;\r\n }\r\n\r\n scope.generalModel.IsHistoryOpen = true;\r\n scope.historyModel.Token = $sessionStorage.Token;\r\n scope.historyModel.HistoryId = elementId;\r\n scope.historyModel.CreationUserId = creationUserId;\r\n scope.historyModel.CreationDatetime = creationDatetime;\r\n scope.historyModel.HistoryIdName = idName;\r\n scope.historyModel.ListHistory = [];\r\n\r\n $q.when(HistoryModel.ListHistory()).then(function () {\r\n if (gridName !== \"\") {\r\n var grid = angular.element(\"#\" + gridName + \"\").dxDataGrid('instance');\r\n var dataSource = grid.getDataSource();\r\n var objectForFilter = {};\r\n objectForFilter[scope.historyModel.HistoryIdName] = scope.historyModel.HistoryId;\r\n var rowData = $filter('filter')(dataSource._store._array, objectForFilter, true)[0];\r\n }\r\n\r\n var existTranslation = !scope.generalModel.IsUndefinedEmptyOrNullObject(Helpers.Translations);\r\n var selectedLanguage = myApplication.getLanguageObject.selectedLanguage('historyTexts', myApplication);\r\n\r\n scope.historyModel.GridHistory = {\r\n bindingOptions: {\r\n dataSource: 'historyModel.ListHistory'\r\n },\r\n filterRow: {\r\n visible: true,\r\n applyFilter: \"auto\"\r\n },\r\n headerFilter: {\r\n visible: true\r\n },\r\n paging: {\r\n pageSize: 15\r\n },\r\n showBorders: true,\r\n columns: [{\r\n dataField: \"Field\",\r\n caption: existTranslation ? Helpers.Translations.HistoriesField : selectedLanguage.field,\r\n alignment: 'left'\r\n }, {\r\n dataField: \"OldValue\",\r\n caption: existTranslation ? Helpers.Translations.HistoriesOldValue : selectedLanguage.oldRegister,\r\n alignment: 'left'\r\n }, {\r\n dataField: \"NewValue\",\r\n caption: existTranslation ? Helpers.Translations.HistoriesNewValue : selectedLanguage.newRegister,\r\n alignment: 'left'\r\n }, {\r\n dataField: \"CreationUserName\",\r\n caption: existTranslation ? Helpers.Translations.UsersName : selectedLanguage.user,\r\n alignment: 'left'\r\n }, {\r\n dataField: \"CreationDatetime\",\r\n caption: existTranslation ? Helpers.Translations.HistoriesAlterationDate : selectedLanguage.alterationDate,\r\n dataType: \"datetime\",\r\n format: myApplication.dateTimeFormat,\r\n sortOrder: 'desc',\r\n alignment: 'center'\r\n }],\r\n noDataText: existTranslation ? Helpers.Translations.NoDataFound : selectedLanguage.noDataFound,\r\n customizeColumns: function (columns) {\r\n $.each(columns, function (_, element) {\r\n element.headerCellTemplate = function (header, info) {\r\n $(header)\r\n .html(info.column.caption)\r\n .addClass('DataGridHeaderCellCenter');\r\n $('.dx-column-indicators')\r\n .addClass('DataGridHeaderCellIndicatorLeft');\r\n };\r\n });\r\n }\r\n };\r\n\r\n scope.generalModel.OpenDialog('DialogHistory');\r\n }).catch(function (exception) {\r\n scope.generalModel.HandleResultException(exception);\r\n });\r\n };\r\n }\r\n\r\n return History;\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.directive('resizable', [\"$window\", function ($window) {\r\n var toCall;\r\n var previousPositionX;\r\n var previousPositionY;\r\n function throttle(fun) {\r\n if (toCall === undefined) {\r\n toCall = fun;\r\n setTimeout(function () {\r\n toCall();\r\n toCall = undefined;\r\n }, 100);\r\n } else {\r\n toCall = fun;\r\n }\r\n }\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n rDirections: '=',\r\n rCenteredX: '=',\r\n rCenteredY: '=',\r\n rWidth: '=',\r\n rHeight: '=',\r\n rFlex: '=',\r\n rGrabber: '@',\r\n rDisabled: '@'\r\n },\r\n link: function (scope, element, attr) {\r\n var previousElement = angular.element(element).prev('div');\r\n var flexBasis = 'flexBasis' in document.documentElement.style ? 'flexBasis' :\r\n 'webkitFlexBasis' in document.documentElement.style ? 'webkitFlexBasis' :\r\n 'msFlexPreferredSize' in document.documentElement.style ? 'msFlexPreferredSize' : 'flexBasis';\r\n\r\n scope.$watch('rWidth', function (value) {\r\n element[0].style.width = scope.rWidth + 'px';\r\n });\r\n scope.$watch('rHeight', function (value) {\r\n element[0].style.height = scope.rHeight + 'px';\r\n });\r\n\r\n element.addClass('resizable');\r\n\r\n var style = window.getComputedStyle(element[0], null),\r\n w,\r\n h,\r\n dir = scope.rDirections,\r\n vx = scope.rCenteredX ? 2 : 1,\r\n vy = scope.rCenteredY ? 2 : 1,\r\n inner = scope.rGrabber ? scope.rGrabber : '',\r\n start,\r\n dragDir,\r\n axis,\r\n info = {};\r\n\r\n var updateInfo = function (e) {\r\n info.width = false; info.height = false;\r\n if (axis === 'x') {\r\n info.width = parseInt(element[0].style[scope.rFlex ? flexBasis : 'width']);\r\n if (!isNaN(info.width)) {\r\n var ScreenWidth = $window.innerWidth;\r\n angular.element(previousElement).css('width', '' + ScreenWidth - info.width + 'px');\r\n }\r\n }\r\n else {\r\n info.height = parseInt(element[0].style[scope.rFlex ? flexBasis : 'height']);\r\n }\r\n info.id = element[0].id;\r\n info.evt = e;\r\n };\r\n\r\n var dragging = function (e) {\r\n var prop, offset = axis === 'x' ? start - e.clientX : start - e.clientY;\r\n switch (dragDir) {\r\n case 'top':\r\n prop = scope.rFlex ? flexBasis : 'height';\r\n element[0].style[prop] = h + (offset * vy) + 'px';\r\n break;\r\n case 'bottom':\r\n prop = scope.rFlex ? flexBasis : 'height';\r\n element[0].style[prop] = h - (offset * vy) + 'px';\r\n break;\r\n case 'right':\r\n prop = scope.rFlex ? flexBasis : 'width';\r\n element[0].style[prop] = w - (offset * vx) + 'px';\r\n break;\r\n case 'left':\r\n prop = scope.rFlex ? flexBasis : 'width';\r\n element[0].style[prop] = w + (offset * vx) + 'px';\r\n break;\r\n }\r\n updateInfo(e);\r\n throttle(function () { scope.$emit('angular-resizable.resizing', info); });\r\n };\r\n var dragEnd = function (e) {\r\n if (previousPositionX === e.clientX && previousPositionY === e.clientY) {\r\n previousPositionX = '';\r\n previousPositionY = '';\r\n if (angular.element(e.target).parents('.resizable').hasClass('Closed')) {\r\n angular.element(e.target).parents('.resizable').removeClass('Closed');\r\n angular.element(e.target).parents('.resizable').width('200px');\r\n }\r\n else {\r\n angular.element(e.target).parents('.resizable').addClass('Closed');\r\n angular.element(e.target).parents('.resizable').width('2px');\r\n }\r\n }\r\n updateInfo();\r\n scope.$emit('angular-resizable.resizeEnd', info);\r\n scope.$apply();\r\n document.removeEventListener('mouseup', dragEnd, false);\r\n document.removeEventListener('mousemove', dragging, false);\r\n element.removeClass('no-transition');\r\n };\r\n var dragStart = function (e, direction) {\r\n dragDir = direction;\r\n axis = dragDir === 'left' || dragDir === 'right' ? 'x' : 'y';\r\n start = axis === 'x' ? e.clientX : e.clientY;\r\n w = parseInt(style.getPropertyValue('width'));\r\n h = parseInt(style.getPropertyValue('height'));\r\n\r\n element.addClass('no-transition');\r\n\r\n document.addEventListener('mouseup', dragEnd, false);\r\n document.addEventListener('mousemove', dragging, false);\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n\r\n updateInfo(e);\r\n scope.$emit('angular-resizable.resizeStart', info);\r\n scope.$apply();\r\n };\r\n\r\n dir.forEach(function (direction) {\r\n var grabber = document.createElement('div');\r\n\r\n grabber.setAttribute('class', 'rg-' + direction);\r\n grabber.innerHTML = inner;\r\n element[0].appendChild(grabber);\r\n grabber.ondragstart = function () { return false; };\r\n grabber.addEventListener('mousedown', function (e) {\r\n previousPositionX = e.clientX;\r\n previousPositionY = e.clientY;\r\n var disabled = (scope.rDisabled === 'true');\r\n if (!disabled && e.which === 1) {\r\n dragStart(e, direction);\r\n }\r\n }, false);\r\n });\r\n }\r\n };\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('Validations', [\"$state\", function ($state) {\r\n var validations = {\r\n ValidationsGeneral: function CustomValidations(xhr, ajaxOptions, thrownError) {\r\n var errorMessage = \"\";\r\n if ((xhr.status === 401) && (angular.element('body').scope().generalModel.Expired !== true)) {\r\n if (myApplication.projectType === myApplication.projectTypeWeb) {\r\n angular.element('body').scope().generalModel.Expired = true;\r\n if (myApplication.differentLoginPages.length && (myApplication.differentLoginPages.indexOf($state.current.name) > -1)) {\r\n $state.go(myApplication.differentLogin);\r\n }\r\n else {\r\n $state.go('Login');\r\n }\r\n }\r\n else {\r\n angular.element('body').scope().generalModel.Expired = true;\r\n window.location.href = '../ApplicationControl/index.1739284541000.html';\r\n }\r\n }\r\n else if (xhr.status === 403) {\r\n errorMessage = ' - ' + myApplication.getLanguageObject.selectedLanguage('validationsTexts', myApplication).notAllowed;\r\n }\r\n else if ((xhr.data !== null) && (typeof xhr.data !== 'undefined')) {\r\n if (typeof xhr.data === \"object\") {\r\n errorMessage = \" - \" + xhr.data.Message;\r\n }\r\n else {\r\n errorMessage = \" - \" + xhr.data;\r\n }\r\n }\r\n else if (typeof xhr.statusText !== 'undefined') {\r\n errorMessage = \" - \" + xhr.statusText;\r\n }\r\n return myApplication.getLanguageObject.selectedLanguage('validationsTexts', myApplication).error + \" (\" + xhr.status + \")\" + errorMessage;\r\n },\r\n ValidationsLogin: function CustomValidationsLoginFunction(xhr, ajaxOptions, thrownError) {\r\n var errorMessage = \"\";\r\n if (xhr.status === 400) {\r\n errorMessage = \"400 - \" + xhr.responseJSON.error;\r\n }\r\n else {\r\n errorMessage = xhr.status + \" - \" + \"Invalid Login.\";\r\n }\r\n return errorMessage;\r\n },\r\n ValidationsParameters: function ParametersValidationsFunction(originalObject) {\r\n var newObject;\r\n if ((originalObject === null) || (typeof originalObject === \"undefined\")) {\r\n newObject = originalObject;\r\n }\r\n else {\r\n newObject = JSON.parse(JSON.stringify(originalObject));\r\n }\r\n\r\n (function filter(originalObject) {\r\n $.each(originalObject, function (key, value) {\r\n if (value === \"\" || value === null) {\r\n delete originalObject[key];\r\n } else if (Object.prototype.toString.call(value) === '[object Object]') {\r\n filter(value);\r\n } else if ($.isArray(value)) {\r\n var indexToRemove = [];\r\n $.each(value, function (k, v) {\r\n if ((v === \"\") || (v === null)) {\r\n indexToRemove.push(k);\r\n } else if (typeof v === \"object\") {\r\n filter(v);\r\n }\r\n });\r\n if (indexToRemove.length) {\r\n originalObject[key] = value.filter(function (v, index) {\r\n return (indexToRemove.indexOf(index) < 0);\r\n });\r\n }\r\n }\r\n });\r\n })(newObject);\r\n\r\n return newObject;\r\n }\r\n }\r\n return validations;\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('SaveCancelButtons', [\"$q\", \"GeneralModel\", function ($q, GeneralModel) {\r\n\r\n function CreateButtons(scope, model, validationGroup) {\r\n\r\n angular.element(\"#SideBarSaveButton\").dxButton({\r\n validationGroup: validationGroup,\r\n onClick: function () {\r\n if (scope.generalModel.SidebarOptions['State']['SaveOption']) {\r\n model.SecondGridEditData = [];\r\n scope.generalModel.FullPageLoading = true;\r\n model.CancelSaveProcess = true;\r\n model.LastSavedGrid = '';\r\n scope.generalModel.ConcurrencyBeforeSave(model);\r\n\r\n $q.when(scope.generalModel.ProcessSaveGridsPatchMode(model)).then(function () {\r\n GeneralModel.ShowToast(myApplication.getLanguageObject.selectedLanguage('saveCancelButtonsTexts', myApplication).successfullSave);\r\n scope.ReloadPage();\r\n }).catch(function (reason) {\r\n if (reason.Code === '409') {\r\n scope.generalModel.ConcurrencyError = true;\r\n }\r\n\r\n if (reason.Message) {\r\n reason = reason.Message;\r\n }\r\n\r\n GeneralModel.ShowToastWarning(reason);\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n }\r\n });\r\n\r\n angular.element(\"#SideBarCancelButton\").dxButton({\r\n onClick: function () {\r\n if (scope.generalModel.SidebarOptions['State']['CancelOption']) {\r\n scope.generalModel.FullPageLoading = true;\r\n scope.generalModel.ParentRowInserted = [];\r\n scope.generalModel.ClearDeletedEditedObjects();\r\n\r\n for (var k = 0; k < model.ArrayGridObjects.length; k++) {\r\n var grid = angular.element(\"#\" + model.ArrayGridObjects[k].GridName + \"\").dxDataGrid('instance');\r\n\r\n Helpers.DevExtreme.Grid.RemoveEditData(grid, true, true);\r\n\r\n if (typeof model[model.ArrayGridObjects[k].ObjectName + \"ToolsState\"] !== 'undefined') {\r\n model[model.ArrayGridObjects[k].ObjectName + \"ToolsState\"] = false;\r\n }\r\n\r\n if (scope.generalModel.ConcurrencyError) {\r\n model[model.ArrayGridObjects[k].ObjectName + 'Element'] = scope.generalModel.AngularCopy(model.ServerData);\r\n }\r\n else {\r\n model[model.ArrayGridObjects[k].ObjectName + 'Element'] = scope.generalModel.AngularCopy(model.OriginalElements[model.ArrayGridObjects[k].ObjectName + 'Element']);\r\n }\r\n\r\n if (model.ArrayGridObjects[k].SecondGrid !== '') {\r\n grid.collapseAll(-1);\r\n }\r\n\r\n grid.option('dataSource', model[model.ArrayGridObjects[k].ObjectName + 'Element']);\r\n grid.refresh();\r\n }\r\n\r\n if (typeof model.ToolsStateItems !== 'undefined') {\r\n model.ToolsStateItems = [];\r\n }\r\n\r\n if (typeof model.ToolsState !== 'undefined') {\r\n model.ToolsState = false;\r\n }\r\n\r\n scope.generalModel.SidebarOptions['State']['SaveOption'] = false;\r\n scope.generalModel.SidebarOptions['State']['CancelOption'] = false;\r\n scope.generalModel.FullPageLoading = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return CreateButtons;\r\n }]);\r\n})();\r\n(function () {\r\n \"use strict\";\r\n myApp.factory('SwebModal', [\"$timeout\", function ($timeout) {\r\n\r\n function SwebModal(scope) {\r\n scope.generalModel.OpenSwebModal = function (data) {\r\n if (typeof data === 'string') {\r\n data = { Element: data };\r\n }\r\n var id = data.Element;\r\n if (angular.element(\"#\" + id).length) {\r\n $timeout(function () {\r\n var number = 0;\r\n\r\n if (angular.element(\".SwebActiveModal\").length) {\r\n angular.element(\".SwebActiveModal\").each(function () {\r\n if (parseInt(angular.element(this).attr('data-target').substr(9)) >= number) {\r\n number = parseInt(angular.element(this).attr('data-target').substr(9)) + 1;\r\n }\r\n });\r\n }\r\n\r\n angular.element(\"#\" + id).removeClass(\"animated fadeOut\");\r\n angular.element(\"#\" + id).addClass(\"SwebActiveModal animated fadeIn\");\r\n angular.element(\"#\" + id).attr(\"data-target\", \"SwebModal\" + number + \"\");\r\n\r\n if (data.Width) {\r\n angular.element(\"#\" + id).css('width', data.Width);\r\n }\r\n\r\n if (data.Height) {\r\n angular.element(\"#\" + id).css('height', data.Height);\r\n }\r\n\r\n angular.element(\"body\").append(\"
\");\r\n angular.element(\".BackgroundSwebModal\").last().attr(\"data-target\", \"SwebBackgroundModal\" + number + \"\");\r\n\r\n if (number > 0) {\r\n angular.element(\"#\" + id).css('z-index', (parseInt(angular.element(\".SwebActiveModal[data-target=\\\"SwebModal\" + (number - 1) + \"\\\"]\").css('z-index')) + 20));\r\n angular.element(\".BackgroundSwebModal[data-target=\\\"SwebBackgroundModal\" + number + \"\\\"]\").css('z-index', (parseInt(angular.element(\".BackgroundSwebModal[data-target=\\\"SwebBackgroundModal\" + (number - 1) + \"\\\"]\").css('z-index')) + 20));\r\n }\r\n\r\n if (data.ClickOutsideToClose) {\r\n angular.element(\".BackgroundSwebModal[data-target=\\\"SwebBackgroundModal\" + number + \"\\\"]\").on('click', function () {\r\n scope.generalModel.CloseSwebModal(id);\r\n });\r\n }\r\n }, 200);\r\n }\r\n\r\n if (data.OnComplete) {\r\n data.OnComplete();\r\n\r\n var pageHeight = angular.element(window).height();\r\n var height = ((80 * pageHeight) / 100);\r\n\r\n for (var a = 0; a < angular.element('.ModalContent').length; a++) {\r\n if (!angular.element(angular.element('.ModalContent')[a]).parents('#TicketDialog').length) {\r\n angular.element('.ModalContent.scroll-wrapper').css('max-height', height - 90 + \"px\");\r\n\r\n $timeout(function () {\r\n angular.element('.ModalContent.scroll-content').css('max-height', height - 130 + \"px\");\r\n }, 200);\r\n }\r\n }\r\n }\r\n };\r\n\r\n scope.generalModel.CloseSwebModal = function (data) {\r\n if (typeof data === 'string') {\r\n data = { Element: data };\r\n }\r\n\r\n var id = data.Element;\r\n\r\n angular.element(\"#\" + id).addClass(\"animated fadeOut\");\r\n\r\n if (typeof angular.element(\"#\" + id).attr('data-target') !== 'undefined') {\r\n var number = angular.element(\"#\" + id).attr('data-target').substr(9);\r\n angular.element(\".BackgroundSwebModal[data-target=\\\"SwebBackgroundModal\" + number + \"\\\"]\").addClass(\"animated fadeOut\");\r\n $timeout(function () {\r\n angular.element(\"#\" + id).removeClass(\"SwebActiveModal\");\r\n angular.element(\".BackgroundSwebModal[data-target=\\\"SwebBackgroundModal\" + number + \"\\\"]\").remove();\r\n angular.element(\"#\" + id).attr(\"data-target\", \"\");\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(data.OnComplete)) {\r\n data.OnComplete();\r\n }\r\n }, 500);\r\n }\r\n };\r\n }\r\n return SwebModal;\r\n }]);\r\n})();\n(function () {\r\n \"use strict\";\r\n myApp.controller(myApplication.generalCtrl, function ($scope, $rootScope, $locale, GeneralModel, GeneralFunctions) {\r\n $scope.generalModel = GeneralModel.model;\r\n GeneralFunctions($scope, $rootScope);\r\n $scope.generalModel.SetMyForms();\r\n });\r\n})();\nvar webTranslations = [\r\n {\r\n Language: 'PT',\r\n Translations: [\r\n { Code: \"PageName\", OriginalText: \"4Lean Configurador de Soluções\" },\r\n { Code: \"BuilderPageName\", OriginalText: \"4Lean Gerador de Configurador de Estruturas\" },\r\n { Code: \"ServicePageName\", OriginalText: \"4Lean Gerador de Configurador de Serviços\" },\r\n { Code: \"GeneralGuide\", OriginalText: \"Guia Geral\" },\r\n { Code: \"MakeListLeanProject\", OriginalText: \"Faça uma Lista/Projeto Lean\" },\r\n { Code: \"MakeList\", OriginalText: \"Faça uma Lista\" },\r\n { Code: \"Search\", OriginalText: \"Pesquisa...\" },\r\n { Code: \"Help\", OriginalText: \"Ajuda\" },\r\n { Code: \"Filters\", OriginalText: \"Filtros\" },\r\n { Code: \"ImportCsv\", OriginalText: \"Importar CSV\" },\r\n { Code: \"SelectFileAndDrag\", OriginalText: \"Selecione o arquivo ou arraste-o para aqui\" },\r\n { Code: \"List\", OriginalText: \"Lista\" },\r\n { Code: \"Area\", OriginalText: \"Área\" },\r\n { Code: \"Options\", OriginalText: \"Opções\" },\r\n { Code: \"Duplicate\", OriginalText: \"Duplicar\" },\r\n { Code: \"DuplicateMultiple\", OriginalText: \"Duplicar x\" },\r\n { Code: \"Remove\", OriginalText: \"Remover\" },\r\n { Code: \"PleaseChooseOption\", OriginalText: \"Por favor, escolha uma opção…\" },\r\n { Code: \"Notes\", OriginalText: \"Notas\" },\r\n { Code: \"LeanProject\", OriginalText: \"Projeto Lean\" },\r\n { Code: \"Next\", OriginalText: \"Seguinte\" },\r\n { Code: \"ProjectInformation\", OriginalText: \"Informações do Projeto\" },\r\n { Code: \"ProjectName\", OriginalText: \"Nome do Projeto\" },\r\n { Code: \"CoordinatorName\", OriginalText: \"Nome do Coordenador\" },\r\n { Code: \"CompanyName\", OriginalText: \"Nome da Empresa\" },\r\n { Code: \"ContactName\", OriginalText: \"Nome do Contacto\" },\r\n { Code: \"City\", OriginalText: \"Cidade\" },\r\n { Code: \"Country\", OriginalText: \"País\" },\r\n { Code: \"PhoneNumber\", OriginalText: \"Número de Telefone\" },\r\n { Code: \"PleaseContactMe\", OriginalText: \"Por favor Contate-me\" },\r\n { Code: \"Email\", OriginalText: \"E-mail\" },\r\n { Code: \"Submit\", OriginalText: \"Submeter\" },\r\n { Code: \"Copy\", OriginalText: \"Copiar\" },\r\n { Code: \"CopyAll\", OriginalText: \"Copiar Tudo\" },\r\n { Code: \"Quantity\", OriginalText: \"Quantidade\" },\r\n { Code: \"SolutionDetailTitle\", OriginalText: \"Vista Individual\" },\r\n { Code: \"Back\", OriginalText: \"Voltar\" },\r\n { Code: \"Previous\", OriginalText: \"Anterior\" },\r\n { Code: \"Import\", OriginalText: \"Importar\" },\r\n { Code: \"ImportCsvAllowedFiles\", OriginalText: \"Somente arquivos .csv são permitidos.\" },\r\n { Code: \"InvalidFile\", OriginalText: \"Ficheiro Inválido:\" },\r\n { Code: \"ProjectSubmited\", OriginalText: \"Projeto Enviado\" },\r\n { Code: \"NoSolutionsWereFound\", OriginalText: \"Nenhuma solução foi encontrada.\" },\r\n { Code: \"ProjectSubmitedSuccess\", OriginalText: \"O Seu Projeto Foi Enviado Com Sucesso.\" },\r\n { Code: \"CheckYourEmail\", OriginalText: \"Por favor, verifique o seu e-mail para mais detalhes.\" },\r\n { Code: \"Copied\", OriginalText: \"Copiado\" },\r\n { Code: \"Files\", OriginalText: \"Ficheiros\" },\r\n { Code: \"NoFiles\", OriginalText: \"Sem Ficheiros...\" },\r\n { Code: \"Specifications\", OriginalText: \"Especificações\" },\r\n { Code: \"NoSpecificationsAvailable\", OriginalText: \"Não há Especificações disponíveis.\" },\r\n { Code: \"NoFilesAvailable\", OriginalText: \"Não há Ficheiros disponíveis.\" },\r\n { Code: \"NoLinksAvailable\", OriginalText: \"Não há Links disponíveis.\" },\r\n { Code: \"Menus\", OriginalText: \"Menu\" },\r\n { Code: \"Restart\", OriginalText: \"Recomeçar\" },\r\n { Code: \"MoreInfo\", OriginalText: \"+Info\" },\r\n { Code: \"Structures\", OriginalText: \"Structures\" },\r\n { Code: \"OpenStructures\", OriginalText: \"Abrir Structures\" },\r\n { Code: \"IndividualUrlCopied\", OriginalText: \"Link individual copiado com sucesso.\" },\r\n { Code: \"CopyGeneralLink\", OriginalText: \"Copiar link geral\" },\r\n { Code: \"UrlMaxLengthReached\", OriginalText: \"Não foi possível copiar o link porque o tamanho máximo foi atingido.\" },\r\n { Code: \"GeneralUrlCopied\", OriginalText: \"Link geral copiado com sucesso.\" },\r\n { Code: \"Topic\", OriginalText: \"Tópico\" },\r\n { Code: \"Type\", OriginalText: \"Tipo\" },\r\n { Code: \"ExternalWidth\", OriginalText: \"Largura Externa [mm]\" },\r\n { Code: \"InternalWidth\", OriginalText: \"Largura Interna [mm]\" },\r\n { Code: \"ExternalDepth\", OriginalText: \"Profundidade Externa [mm]\" },\r\n { Code: \"InternalDepth\", OriginalText: \"Profundidade Interna [mm]\" },\r\n { Code: \"HeightThickness\", OriginalText: \"Altura / Espessura [mm]\" },\r\n { Code: \"Weight\", OriginalText: \"Peso [kg]\" },\r\n { Code: \"Orientation\", OriginalText: \"Orientação\" },\r\n { Code: \"DepthHu\", OriginalText: \"Qtd. Profundidade HU [un]\" },\r\n { Code: \"Slope\", OriginalText: \"Inclinação\" },\r\n { Code: \"SlopeDirection\", OriginalText: \"Direção da Inclinação\" },\r\n { Code: \"FreeSpace\", OriginalText: \"Espaço Livre [mm]\" },\r\n { Code: \"HUSupportType\", OriginalText: \"Tipo de Suporte HU\" },\r\n { Code: \"HUSupport\", OriginalText: \"Suporte HU\" },\r\n { Code: \"RollJoints\", OriginalText: \"Rolamentos\" },\r\n { Code: \"GuideType\", OriginalText: \"Tipo de Guia\" },\r\n { Code: \"ProfileSupportQuantity\", OriginalText: \"Quantidade de Suporte de Perfil\" },\r\n { Code: \"Annotations\", OriginalText: \"Anotações\" },\r\n { Code: \"UploadPhoto\", OriginalText: \"Upload Foto\" },\r\n { Code: \"ClearPhoto\", OriginalText: \"Limpar Foto\" },\r\n { Code: \"AddColumn\", OriginalText: \"Adicionar Coluna\" },\r\n { Code: \"InvalidStructurePosition\", OriginalText: \"Posição de Estrutura Inválida\" },\r\n { Code: \"VisitDetails\", OriginalText: \"Detalhes da Visita\" },\r\n { Code: \"ContactType\", OriginalText: \"Tipo de Contacto\" },\r\n { Code: \"CustomerDetails\", OriginalText: \"Detalhes do Cliente\" },\r\n { Code: \"Customer\", OriginalText: \"Cliente\" },\r\n { Code: \"Location\", OriginalText: \"Localização\" },\r\n { Code: \"Address\", OriginalText: \"Endereço\" },\r\n { Code: \"ContactName\", OriginalText: \"Nome do Contato\" },\r\n { Code: \"ContactEmail\", OriginalText: \"Email do Contato\" },\r\n { Code: \"SalesPerson\", OriginalText: \"Comercial\" },\r\n { Code: \"Market\", OriginalText: \"Mercado\" },\r\n { Code: \"RequestDetails\", OriginalText: \"Detalhes do Pedido\" },\r\n { Code: \"RequestsToOpen\", OriginalText: \"Pedidos para Abrir\" },\r\n { Code: \"RequestType\", OriginalText: \"Tipo de Pedido\" },\r\n { Code: \"FromPreviousRequest\", OriginalText: \"De Pedido Anterior\" },\r\n { Code: \"GlobalProposal\", OriginalText: \"Proposta Global\" },\r\n { Code: \"GlobalProposalRequestNumber\", OriginalText: \"Número Global do Pedido Proposta\" },\r\n { Code: \"ProjectDetails\", OriginalText: \"Detalhes do Projeto\" },\r\n { Code: \"AssemblyType\", OriginalText: \"Tipo de Montagem\" },\r\n { Code: \"IncludeTransport\", OriginalText: \"Incluir Transporte\" },\r\n { Code: \"SolutionCode\", OriginalText: \"Código da Solução\" },\r\n { Code: \"ProjectApplication\", OriginalText: \"Aplicação do Projeto\" },\r\n { Code: \"PreviousProcess\", OriginalText: \"Processo Anterior\" },\r\n { Code: \"NextProcess\", OriginalText: \"Próximo Processo\" },\r\n { Code: \"InternalOrExternalMeasures\", OriginalText: \"Medidas Internas / Externas\" },\r\n { Code: \"SubmissionType\", OriginalText: \"Tipo de Submissão\" },\r\n { Code: \"Draft\", OriginalText: \"Rascunho\" },\r\n { Code: \"AssemblyCuttingList\", OriginalText: \"Lista de Corte da Montagem\" },\r\n { Code: \"ProposalRequest\", OriginalText: \"Pedido de Proposta\" },\r\n { Code: \"Photos\", OriginalText: \"Fotografias\" },\r\n { Code: \"LocateInMakeAList\", OriginalText: \"Localizar na Lista\" },\r\n { Code: \"LocateInServiceRequestList\", OriginalText: \"Localizar na Lista de Pedidos de Serviços\" },\r\n { Code: \"LocateInServiceList\", OriginalText: \"Localizar na Lista de Serviços\" },\r\n { Code: \"ServiceList\", OriginalText: \"Lista de Serviços\" },\r\n { Code: \"ServiceRequestList\", OriginalText: \"Lista de Pedidos de Serviços\" },\r\n { Code: \"Location\", OriginalText: \"Localização\" },\r\n { Code: \"DojoRental\", OriginalText: \"Aluguer de DOJO\" },\r\n { Code: \"CoffeeBreakIncluded\", OriginalText: \"Pausa para Café Incluída\" },\r\n { Code: \"LunchIncluded\", OriginalText: \"Almoço Incluído\" },\r\n { Code: \"ParticipantsList\", OriginalText: \"Lista de Participantes\" },\r\n { Code: \"ParticipantsNumber\", OriginalText: \"# Participantes\" },\r\n { Code: \"ExpensesIncluded\", OriginalText: \"Despesas Incluídas\" },\r\n { Code: \"SafetyEquipmentIncluded\", OriginalText: \"Equipamento de Segurança Incluído\" },\r\n { Code: \"SafetyTrainingIncluded\", OriginalText: \"Formação em Segurança Incluída\" },\r\n { Code: \"AtYourPlace\", OriginalText: \"No seu Lugar\" },\r\n { Code: \"ServiceProviderEmail\", OriginalText: \"Email do Prestador de Serviço\" },\r\n { Code: \"ServiceRequesterEmail\", OriginalText: \"Email do Requerente de Serviço\" },\r\n { Code: \"LinksToSend\", OriginalText: \"# Links para Enviar\" },\r\n { Code: \"Login\", OriginalText: \"Iniciar Sessão\" },\r\n { Code: \"Logout\", OriginalText: \"Sair\" },\r\n { Code: \"User\", OriginalText: \"Utilizador\" },\r\n { Code: \"Password\", OriginalText: \"Palavra-Passe\" },\r\n { Code: \"InvalidLogin\", OriginalText: \"Informações para login inválidas.\" },\r\n { Code: \"Services\", OriginalText: \"Serviços\" },\r\n { Code: \"FilterCode\", OriginalText: \"Código Filtro\" },\r\n { Code: \"SetFilterCode\", OriginalText: \"Definir Código Filtro\" },\r\n { Code: \"Save\", OriginalText: \"Guardar\" },\r\n ]\r\n },\r\n {\r\n Language: 'EN',\r\n Translations: [\r\n { Code: \"PageName\", OriginalText: \"4Lean Solution Configurator\" },\r\n { Code: \"BuilderPageName\", OriginalText: \"4Lean Structure Builder Configurator\" },\r\n { Code: \"ServicePageName\", OriginalText: \"4Lean Service Configurator\" },\r\n { Code: \"GeneralGuide\", OriginalText: \"General Guide\" },\r\n { Code: \"MakeListLeanProject\", OriginalText: \"Make a List / LeanProject\" },\r\n { Code: \"MakeList\", OriginalText: \"Make a List\" },\r\n { Code: \"Search\", OriginalText: \"Search...\" },\r\n { Code: \"Help\", OriginalText: \"Help\" },\r\n { Code: \"Filters\", OriginalText: \"Filters\" },\r\n { Code: \"ImportCsv\", OriginalText: \"Import CSV\" },\r\n { Code: \"SelectFileAndDrag\", OriginalText: \"Select your file or drag it here.\" },\r\n { Code: \"List\", OriginalText: \"List\" },\r\n { Code: \"Area\", OriginalText: \"Area\" },\r\n { Code: \"Options\", OriginalText: \"Options\" },\r\n { Code: \"Duplicate\", OriginalText: \"Duplicate\" },\r\n { Code: \"DuplicateMultiple\", OriginalText: \"Duplicate x\" },\r\n { Code: \"Remove\", OriginalText: \"Remove\" },\r\n { Code: \"PleaseChooseOption\", OriginalText: \"Please choose one option...\" },\r\n { Code: \"Notes\", OriginalText: \"Notes\" },\r\n { Code: \"LeanProject\", OriginalText: \"Lean Project\" },\r\n { Code: \"Next\", OriginalText: \"Next\" },\r\n { Code: \"ProjectInformation\", OriginalText: \"Project Information\" },\r\n { Code: \"ProjectName\", OriginalText: \"Project Name\" },\r\n { Code: \"CoordinatorName\", OriginalText: \"Coordinator Name\" },\r\n { Code: \"CompanyName\", OriginalText: \"Company Name\" },\r\n { Code: \"ContactName\", OriginalText: \"Contact Name\" },\r\n { Code: \"City\", OriginalText: \"City\" },\r\n { Code: \"Country\", OriginalText: \"Country\" },\r\n { Code: \"PhoneNumber\", OriginalText: \"Phone Number\" },\r\n { Code: \"PleaseContactMe\", OriginalText: \"Please Contact Me\" },\r\n { Code: \"Email\", OriginalText: \"Email\" },\r\n { Code: \"Submit\", OriginalText: \"Submit\" },\r\n { Code: \"Copy\", OriginalText: \"Copy\" },\r\n { Code: \"CopyAll\", OriginalText: \"Copy All\" },\r\n { Code: \"Quantity\", OriginalText: \"Quantity\" },\r\n { Code: \"SolutionDetailTitle\", OriginalText: \"Individual View\" },\r\n { Code: \"Back\", OriginalText: \"Back\" },\r\n { Code: \"Previous\", OriginalText: \"Previous\" },\r\n { Code: \"Import\", OriginalText: \"Import\" },\r\n { Code: \"ImportCsvAllowedFiles\", OriginalText: \"Only .csv file is allowed.\" },\r\n { Code: \"InvalidFile\", OriginalText: \"Invalid File:\" },\r\n { Code: \"ProjectSubmited\", OriginalText: \"Project Submited\" },\r\n { Code: \"NoSolutionsWereFound\", OriginalText: \"No solutions where found.\" },\r\n { Code: \"ProjectSubmitedSuccess\", OriginalText: \"Your Project Was Submited Successfully.\" },\r\n { Code: \"CheckYourEmail\", OriginalText: \"Please check your email for more details.\" },\r\n { Code: \"Copied\", OriginalText: \"Copied\" },\r\n { Code: \"Files\", OriginalText: \"Files\" },\r\n { Code: \"NoFiles\", OriginalText: \"No Files...\" },\r\n { Code: \"Specifications\", OriginalText: \"Specifications\" },\r\n { Code: \"NoSpecificationsAvailable\", OriginalText: \"There are no Specifications available.\" },\r\n { Code: \"NoFilesAvailable\", OriginalText: \"There are no Files available.\" },\r\n { Code: \"NoLinksAvailable\", OriginalText: \"There are no Links available.\" },\r\n { Code: \"Menus\", OriginalText: \"Menu\" },\r\n { Code: \"Restart\", OriginalText: \"Restart\" },\r\n { Code: \"MoreInfo\", OriginalText: \"+Info\" },\r\n { Code: \"Structures\", OriginalText: \"Structures\" },\r\n { Code: \"OpenStructures\", OriginalText: \"Open Structures\" },\r\n { Code: \"IndividualUrlCopied\", OriginalText: \"Individual link successfully copied.\" },\r\n { Code: \"CopyGeneralLink\", OriginalText: \"Copy general link\" },\r\n { Code: \"UrlMaxLengthReached\", OriginalText: \"Unable to copy link because the maximum size was reached.\" },\r\n { Code: \"GeneralUrlCopied\", OriginalText: \"General link successfully copied.\" },\r\n { Code: \"Topic\", OriginalText: \"Topic\" },\r\n { Code: \"Type\", OriginalText: \"Type\" },\r\n { Code: \"ExternalWidth\", OriginalText: \"External Width [mm]\" },\r\n { Code: \"InternalWidth\", OriginalText: \"Internal Width [mm]\" },\r\n { Code: \"ExternalDepth\", OriginalText: \"External Depth [mm]\" },\r\n { Code: \"InternalDepth\", OriginalText: \"Internal Depth [mm]\" },\r\n { Code: \"HeightThickness\", OriginalText: \"Height / Thickness [mm]\" },\r\n { Code: \"Weight\", OriginalText: \"Weight [kg]\" },\r\n { Code: \"Orientation\", OriginalText: \"Orientation\" },\r\n { Code: \"DepthHu\", OriginalText: \"Depth Hu Qty [un]\" },\r\n { Code: \"Slope\", OriginalText: \"Slope\" },\r\n { Code: \"SlopeDirection\", OriginalText: \"Slope Direction\" },\r\n { Code: \"FreeSpace\", OriginalText: \"Free Space [mm]\" },\r\n { Code: \"HUSupportType\", OriginalText: \"HU Support Type\" },\r\n { Code: \"HUSupport\", OriginalText: \"HU Support\" },\r\n { Code: \"RollJoints\", OriginalText: \"Rolls Joints\" },\r\n { Code: \"GuideType\", OriginalText: \"Guide Type\" },\r\n { Code: \"ProfileSupportQuantity\", OriginalText: \"Profile Support Quantity\" },\r\n { Code: \"Annotations\", OriginalText: \"Annotations\" },\r\n { Code: \"UploadPhoto\", OriginalText: \"Upload Photo\" },\r\n { Code: \"ClearPhoto\", OriginalText: \"Clean Foto\" },\r\n { Code: \"AddColumn\", OriginalText: \"Add Column\" },\r\n { Code: \"InvalidStructurePosition\", OriginalText: \"Invalid Structure Position\" },\r\n { Code: \"VisitDetails\", OriginalText: \"Visit Details\" },\r\n { Code: \"ContactType\", OriginalText: \"Contact Type\" },\r\n { Code: \"CustomerDetails\", OriginalText: \"Customer Details\" },\r\n { Code: \"Customer\", OriginalText: \"Customer\" },\r\n { Code: \"Location\", OriginalText: \"Location\" },\r\n { Code: \"Address\", OriginalText: \"Address\" },\r\n { Code: \"ContactName\", OriginalText: \"Contact Name\" },\r\n { Code: \"ContactEmail\", OriginalText: \"Contact Email\" },\r\n { Code: \"SalesPerson\", OriginalText: \"Sales Person\" },\r\n { Code: \"Market\", OriginalText: \"Market\" },\r\n { Code: \"RequestDetails\", OriginalText: \"Request Details\" },\r\n { Code: \"RequestsToOpen\", OriginalText: \"Requests to Open\" },\r\n { Code: \"RequestType\", OriginalText: \"Request Type\" },\r\n { Code: \"FromPreviousRequest\", OriginalText: \"From Previous Request\" },\r\n { Code: \"GlobalProposal\", OriginalText: \"Global Proposal\" },\r\n { Code: \"GlobalProposalRequestNumber\", OriginalText: \"Global Proposal Request Number\" },\r\n { Code: \"ProjectDetails\", OriginalText: \"Project Details\" },\r\n { Code: \"AssemblyType\", OriginalText: \"Assembly Type\" },\r\n { Code: \"IncludeTransport\", OriginalText: \"Include Transport\" },\r\n { Code: \"SolutionCode\", OriginalText: \"Solution Code\" },\r\n { Code: \"ProjectApplication\", OriginalText: \"Project Application\" },\r\n { Code: \"PreviousProcess\", OriginalText: \"Previous Process\" },\r\n { Code: \"NextProcess\", OriginalText: \"Next Process\" },\r\n { Code: \"InternalOrExternalMeasures\", OriginalText: \"Internal / External Measures\" },\r\n { Code: \"SubmissionType\", OriginalText: \"Submission Type\" },\r\n { Code: \"Draft\", OriginalText: \"Draft\" },\r\n { Code: \"AssemblyCuttingList\", OriginalText: \"Assembly Cutting List\" },\r\n { Code: \"ProposalRequest\", OriginalText: \"Proposal Request\" },\r\n { Code: \"Photos\", OriginalText: \"Photos\" },\r\n { Code: \"LocateInMakeAList\", OriginalText: \"Locate in Make a List\" },\r\n { Code: \"LocateInServiceRequestList\", OriginalText: \"Locate in Service Request List\" },\r\n { Code: \"LocateInServiceList\", OriginalText: \"Locate in Service List\" },\r\n { Code: \"ServiceList\", OriginalText: \"Service List\" },\r\n { Code: \"ServiceRequestList\", OriginalText: \"Service Request List\" },\r\n { Code: \"Location\", OriginalText: \"Location\" },\r\n { Code: \"DojoRental\", OriginalText: \"DOJO Rental\" },\r\n { Code: \"CoffeeBreakIncluded\", OriginalText: \"Coffee Break Included\" },\r\n { Code: \"LunchIncluded\", OriginalText: \"Lunch Included\" },\r\n { Code: \"ParticipantsList\", OriginalText: \"Participants list\" },\r\n { Code: \"ParticipantsNumber\", OriginalText: \"# Participants\" },\r\n { Code: \"ExpensesIncluded\", OriginalText: \"Expenses Included\" },\r\n { Code: \"SafetyEquipmentIncluded\", OriginalText: \"Safety Equipment Included\" },\r\n { Code: \"SafetyTrainingIncluded\", OriginalText: \"Safety Training Included\" },\r\n { Code: \"AtYourPlace\", OriginalText: \"At your Place\" },\r\n { Code: \"ServiceProviderEmail\", OriginalText: \"Service Provider Email\" },\r\n { Code: \"ServiceRequesterEmail\", OriginalText: \"Service Requester Email\" },\r\n { Code: \"LinksToSend\", OriginalText: \"# Links to Send\" },\r\n { Code: \"Login\", OriginalText: \"Login\" },\r\n { Code: \"Logout\", OriginalText: \"Logout\" },\r\n { Code: \"User\", OriginalText: \"User\" },\r\n { Code: \"Password\", OriginalText: \"Password\" },\r\n { Code: \"InvalidLogin\", OriginalText: \"Invalid login information.\" },\r\n { Code: \"Services\", OriginalText: \"Services\" },\r\n { Code: \"FilterCode\", OriginalText: \"Filter Code\" },\r\n { Code: \"SetFilterCode\", OriginalText: \"Set Filter Code\" },\r\n { Code: \"Save\", OriginalText: \"Save\" },\r\n ]\r\n },\r\n {\r\n Language: 'FR',\r\n Translations: [\r\n { Code: \"PageName\", OriginalText: \"4Lean Configurateur de Solution\" },\r\n { Code: \"BuilderPageName\", OriginalText: \"4Lean Configurateur de Constructeur de Structures\" },\r\n { Code: \"ServicePageName\", OriginalText: \"4Lean Configurateur de Services\" },\r\n { Code: \"GeneralGuide\", OriginalText: \"Guide Général\" },\r\n { Code: \"MakeListLeanProject\", OriginalText: \"Faire une Liste/Projet Lean\" },\r\n { Code: \"MakeList\", OriginalText: \"Faire une Liste\" },\r\n { Code: \"Search\", OriginalText: \"Chercher...\" },\r\n { Code: \"Help\", OriginalText: \"Aide\" },\r\n { Code: \"Filters\", OriginalText: \"Filtres\" },\r\n { Code: \"ImportCsv\", OriginalText: \"Importer CSV\" },\r\n { Code: \"SelectFileAndDrag\", OriginalText: \"Sélectionnez votre fichier ou faites-le glisser ici.\" },\r\n { Code: \"List\", OriginalText: \"Liste\" },\r\n { Code: \"Area\", OriginalText: \"Domaine\" },\r\n { Code: \"Options\", OriginalText: \"Options\" },\r\n { Code: \"Duplicate\", OriginalText: \"Dupliquer\" },\r\n { Code: \"DuplicateMultiple\", OriginalText: \"Dupliquer x\" },\r\n { Code: \"Remove\", OriginalText: \"Retirer\" },\r\n { Code: \"PleaseChooseOption\", OriginalText: \"S'il vous plait, choisissez une option...\" },\r\n { Code: \"Notes\", OriginalText: \"Notes\" },\r\n { Code: \"LeanProject\", OriginalText: \"Projet Lean\" },\r\n { Code: \"Next\", OriginalText: \"Suivant\" },\r\n { Code: \"ProjectInformation\", OriginalText: \"Renseignements sur le Projet\" },\r\n { Code: \"ProjectName\", OriginalText: \"Nom du Projet\" },\r\n { Code: \"CoordinatorName\", OriginalText: \"Nom du Coordinateur\" },\r\n { Code: \"CompanyName\", OriginalText: \"Nom de l‘Entreprise\" },\r\n { Code: \"ContactName\", OriginalText: \"Nom du Contact\" },\r\n { Code: \"City\", OriginalText: \"Ville\" },\r\n { Code: \"Country\", OriginalText: \"Pays\" },\r\n { Code: \"PhoneNumber\", OriginalText: \"Numéro de Téléphone\" },\r\n { Code: \"PleaseContactMe\", OriginalText: \"S'il vous plait Contactez moi\" },\r\n { Code: \"Email\", OriginalText: \"E-mail\" },\r\n { Code: \"Submit\", OriginalText: \"Soumettre\" },\r\n { Code: \"Copy\", OriginalText: \"Copie\" },\r\n { Code: \"CopyAll\", OriginalText: \"Tout Copier\" },\r\n { Code: \"Quantity\", OriginalText: \"Quantité\" },\r\n { Code: \"SolutionDetailTitle\", OriginalText: \"Vue Individuelle\" },\r\n { Code: \"Back\", OriginalText: \"Retour\" },\r\n { Code: \"Previous\", OriginalText: \"Précédent\" },\r\n { Code: \"Import\", OriginalText: \"Importer\" },\r\n { Code: \"ImportCsvAllowedFiles\", OriginalText: \"Seul le fichier .csv est autorisé.\" },\r\n { Code: \"InvalidFile\", OriginalText: \"Fichier Non Valide:\" },\r\n { Code: \"ProjectSubmited\", OriginalText: \"Projet Soumis\" },\r\n { Code: \"NoSolutionsWereFound\", OriginalText: \"Aucune solution n'a été trouvée.\" },\r\n { Code: \"ProjectSubmitedSuccess\", OriginalText: \"Votre Projet A Été Soumis Avec Succès.\" },\r\n { Code: \"CheckYourEmail\", OriginalText: \"Veuillez vérifier votre email pour plus de détails.\" },\r\n { Code: \"Copied\", OriginalText: \"Copié\" },\r\n { Code: \"Files\", OriginalText: \"Fichiers\" },\r\n { Code: \"NoFiles\", OriginalText: \"Sans Fichiers...\" },\r\n { Code: \"Specifications\", OriginalText: \"Spécifications\" },\r\n { Code: \"NoSpecificationsAvailable\", OriginalText: \"Il n'y a pas de Spécifications disponibles.\" },\r\n { Code: \"NoFilesAvailable\", OriginalText: \"Il n'y a pas de Fichiers disponibles.\" },\r\n { Code: \"NoLinksAvailable\", OriginalText: \"Il n'y a pas de Links disponibles.\" },\r\n { Code: \"Menus\", OriginalText: \"Menu\" },\r\n { Code: \"Restart\", OriginalText: \"Recommencer\" },\r\n { Code: \"MoreInfo\", OriginalText: \"+Info\" },\r\n { Code: \"Structures\", OriginalText: \"Structures\" },\r\n { Code: \"OpenStructures\", OriginalText: \"Ouvrir Structures\" },\r\n { Code: \"IndividualUrlCopied\", OriginalText: \"Lien individuel copié avec succès.\" },\r\n { Code: \"CopyGeneralLink\", OriginalText: \"Copier le lien général\" },\r\n { Code: \"UrlMaxLengthReached\", OriginalText: \"Le lien n'a pas pu être copié car la taille maximale a été atteinte.\" },\r\n { Code: \"GeneralUrlCopied\", OriginalText: \"Lien général copié avec succès.\" },\r\n { Code: \"Topic\", OriginalText: \"Sujet\" },\r\n { Code: \"Type\", OriginalText: \"Type\" },\r\n { Code: \"ExternalWidth\", OriginalText: \"Largeur Externe [mm]\" },\r\n { Code: \"InternalWidth\", OriginalText: \"Largeur Interne [mm]\" },\r\n { Code: \"ExternalDepth\", OriginalText: \"Profondeur Externe [mm]\" },\r\n { Code: \"InternalDepth\", OriginalText: \"Profondeur Interne [mm]\" },\r\n { Code: \"HeightThickness\", OriginalText: \"Hauteur / Épaisseur [mm]\" },\r\n { Code: \"Weight\", OriginalText: \"Poids [kg]\" },\r\n { Code: \"Orientation\", OriginalText: \"Orientation\" },\r\n { Code: \"DepthHu\", OriginalText: \"Qtt. Profondeur HU [un]\" },\r\n { Code: \"Slope\", OriginalText: \"Pente\" },\r\n { Code: \"SlopeDirection\", OriginalText: \"Direction de Pente\" },\r\n { Code: \"FreeSpace\", OriginalText: \"Espace Libre [mm]\" },\r\n { Code: \"HUSupportType\", OriginalText: \"Type de Support HU\" },\r\n { Code: \"HUSupport\", OriginalText: \"Support HU\" },\r\n { Code: \"RollJoints\", OriginalText: \"Joints à Rouleaux\" },\r\n { Code: \"GuideType\", OriginalText: \"Type de Guide\" },\r\n { Code: \"ProfileSupportQuantity\", OriginalText: \"Quantité de Support de Profil\" },\r\n { Code: \"Annotations\", OriginalText: \"Annotations\" },\r\n { Code: \"UploadPhoto\", OriginalText: \"Téléchargement de Photos\" },\r\n { Code: \"ClearPhoto\", OriginalText: \"Photo Propre\" },\r\n { Code: \"AddColumn\", OriginalText: \"Ajouter Colonne\" },\r\n { Code: \"InvalidStructurePosition\", OriginalText: \"Position Structure Invalide\" },\r\n { Code: \"VisitDetails\", OriginalText: \"Détails De La Visite\" },\r\n { Code: \"ContactType\", OriginalText: \"Type de Contact\" },\r\n { Code: \"CustomerDetails\", OriginalText: \"Détails du Client\" },\r\n { Code: \"Customer\", OriginalText: \"Client\" },\r\n { Code: \"Location\", OriginalText: \"Emplacement\" },\r\n { Code: \"Address\", OriginalText: \"Adresse\" },\r\n { Code: \"ContactName\", OriginalText: \"Nom du Contact\" },\r\n { Code: \"ContactEmail\", OriginalText: \"Email du Contact\" },\r\n { Code: \"SalesPerson\", OriginalText: \"Commercial\" },\r\n { Code: \"Market\", OriginalText: \"Marché\" },\r\n { Code: \"RequestDetails\", OriginalText: \"Détails de La Demande\" },\r\n { Code: \"RequestsToOpen\", OriginalText: \"Demandes à Ouvrir\" },\r\n { Code: \"RequestType\", OriginalText: \"Type de Demande\" },\r\n { Code: \"FromPreviousRequest\", OriginalText: \"De Demande Précédente\" },\r\n { Code: \"GlobalProposal\", OriginalText: \"Proposition Mondiale\" },\r\n { Code: \"GlobalProposalRequestNumber\", OriginalText: \"Numéro Global de Demande de Proposition\" },\r\n { Code: \"ProjectDetails\", OriginalText: \"Détails du Projet\" },\r\n { Code: \"AssemblyType\", OriginalText: \"Type d'Assemblage\" },\r\n { Code: \"IncludeTransport\", OriginalText: \"Inclure le Transport\" },\r\n { Code: \"SolutionCode\", OriginalText: \"Code de la Solution\" },\r\n { Code: \"ProjectApplication\", OriginalText: \"Application du Projet\" },\r\n { Code: \"PreviousProcess\", OriginalText: \"Processus Précédent\" },\r\n { Code: \"NextProcess\", OriginalText: \"Processus Suivant\" },\r\n { Code: \"InternalOrExternalMeasures\", OriginalText: \"Mesures Internes / Externes\" },\r\n { Code: \"SubmissionType\", OriginalText: \"Type de Soumission\" },\r\n { Code: \"Draft\", OriginalText: \"Brouillon\" },\r\n { Code: \"AssemblyCuttingList\", OriginalText: \"Liste de Découpe de l'Assemblage\" },\r\n { Code: \"ProposalRequest\", OriginalText: \"Demande de Proposition\" },\r\n { Code: \"Photos\", OriginalText: \"Photos\" },\r\n { Code: \"LocateInMakeAList\", OriginalText: \"Localiser dans Faire une Liste\" },\r\n { Code: \"LocateInServiceRequestList\", OriginalText: \"Localiser dans Liste de Demandes de Service\" },\r\n { Code: \"LocateInServiceList\", OriginalText: \"Localiser dans Liste de Services\" },\r\n { Code: \"ServiceList\", OriginalText: \"Liste de Services\" },\r\n { Code: \"ServiceRequestList\", OriginalText: \"Liste de Demandes de Service\" },\r\n { Code: \"Location\", OriginalText: \"Emplacement\" },\r\n { Code: \"DojoRental\", OriginalText: \"Location du DOJO\" },\r\n { Code: \"CoffeeBreakIncluded\", OriginalText: \"Pause Café Incluse\" },\r\n { Code: \"LunchIncluded\", OriginalText: \"Déjeuner Inclus\" },\r\n { Code: \"ParticipantsList\", OriginalText: \"Liste de Participants\" },\r\n { Code: \"ParticipantsNumber\", OriginalText: \"# Participants\" },\r\n { Code: \"ExpensesIncluded\", OriginalText: \"Frais Inclus\" },\r\n { Code: \"SafetyEquipmentIncluded\", OriginalText: \"Équipement de Sécurité Inclus\" },\r\n { Code: \"SafetyTrainingIncluded\", OriginalText: \"Formation de Sécurité Incluse\" },\r\n { Code: \"AtYourPlace\", OriginalText: \"Chez vous\" },\r\n { Code: \"ServiceProviderEmail\", OriginalText: \"Email du Fourniseur de Service\" },\r\n { Code: \"ServiceRequesterEmail\", OriginalText: \"Email du Demandeur de Service\" },\r\n { Code: \"LinksToSend\", OriginalText: \"# Liens à Envoyer\" },\r\n { Code: \"Login\", OriginalText: \"Se Connecter\" },\r\n { Code: \"Logout\", OriginalText: \"Se Déconnecter\" },\r\n { Code: \"User\", OriginalText: \"Utilisateur\" },\r\n { Code: \"Password\", OriginalText: \"Mot de Passe\" },\r\n { Code: \"InvalidLogin\", OriginalText: \"Informations de connexion invalides.\" },\r\n { Code: \"Services\", OriginalText: \"Services\" },\r\n { Code: \"FilterCode\", OriginalText: \"Code Filtre\" },\r\n { Code: \"SetFilterCode\", OriginalText: \"Définir Code Filtre\" },\r\n { Code: \"Save\", OriginalText: \"Enregister\" },\r\n ]\r\n },\r\n {\r\n Language: 'ES',\r\n Translations: [\r\n { Code: \"PageName\", OriginalText: \"4Lean Configurador de Soluciones\" },\r\n { Code: \"BuilderPageName\", OriginalText: \"4Lean Configurador de Constructor de Estructuras\" },\r\n { Code: \"ServicePageName\", OriginalText: \"4Lean Configurador de Servicios\" },\r\n { Code: \"GeneralGuide\", OriginalText: \"Guía General\" },\r\n { Code: \"MakeListLeanProject\", OriginalText: \"Crear una Lista/Proyecto Lean\" },\r\n { Code: \"MakeList\", OriginalText: \"Crear una Lista\" },\r\n { Code: \"Search\", OriginalText: \"Buscar...\" },\r\n { Code: \"Help\", OriginalText: \"Ayuda\" },\r\n { Code: \"Filters\", OriginalText: \"Filtros\" },\r\n { Code: \"ImportCsv\", OriginalText: \"Importar CSV\" },\r\n { Code: \"SelectFileAndDrag\", OriginalText: \"Seleccione su archivo o arrástrelo aquí.\" },\r\n { Code: \"List\", OriginalText: \"Lista\" },\r\n { Code: \"Area\", OriginalText: \"Área\" },\r\n { Code: \"Options\", OriginalText: \"Opciones\" },\r\n { Code: \"Duplicate\", OriginalText: \"Duplicar\" },\r\n { Code: \"DuplicateMultiple\", OriginalText: \"Duplicar x\" },\r\n { Code: \"Remove\", OriginalText: \"Eliminar\" },\r\n { Code: \"PleaseChooseOption\", OriginalText: \"Por favor, elija una opción...\" },\r\n { Code: \"Notes\", OriginalText: \"Notas\" },\r\n { Code: \"LeanProject\", OriginalText: \"Proyecto Lean\" },\r\n { Code: \"Next\", OriginalText: \"Siguiente\" },\r\n { Code: \"ProjectInformation\", OriginalText: \"Información del Proyecto\" },\r\n { Code: \"ProjectName\", OriginalText: \"Nombre del Proyecto\" },\r\n { Code: \"CoordinatorName\", OriginalText: \"Nombre del Coordinador\" },\r\n { Code: \"CompanyName\", OriginalText: \"Nombre de la Empresa\" },\r\n { Code: \"ContactName\", OriginalText: \"Nombre de Contacto\" },\r\n { Code: \"City\", OriginalText: \"Ciudad\" },\r\n { Code: \"Country\", OriginalText: \"País\" },\r\n { Code: \"PhoneNumber\", OriginalText: \"Número de Teléfono\" },\r\n { Code: \"PleaseContactMe\", OriginalText: \"Por favor Contáctame\" },\r\n { Code: \"Email\", OriginalText: \"E-mail\" },\r\n { Code: \"Submit\", OriginalText: \"Enviar\" },\r\n { Code: \"Copy\", OriginalText: \"Copiar\" },\r\n { Code: \"CopyAll\", OriginalText: \"Copie Todo\" },\r\n { Code: \"Quantity\", OriginalText: \"Cantidad\" },\r\n { Code: \"SolutionDetailTitle\", OriginalText: \"Vista Individual\" },\r\n { Code: \"Back\", OriginalText: \"Volver\" },\r\n { Code: \"Previous\", OriginalText: \"Previo\" },\r\n { Code: \"Import\", OriginalText: \"Importar\" },\r\n { Code: \"ImportCsvAllowedFiles\", OriginalText: \"Sólo se permiten archivos .csv.\" },\r\n { Code: \"InvalidFile\", OriginalText: \"Archivo Inválido:\" },\r\n { Code: \"ProjectSubmited\", OriginalText: \"Proyecto Enviado\" },\r\n { Code: \"NoSolutionsWereFound\", OriginalText: \"No se encontraron soluciones.\" },\r\n { Code: \"ProjectSubmitedSuccess\", OriginalText: \"Su Proyecto Fue Enviado Correctamente.\" },\r\n { Code: \"CheckYourEmail\", OriginalText: \"Consulte su correo electrónico para obtener más detalles.\" },\r\n { Code: \"Copied\", OriginalText: \"Copiado\" },\r\n { Code: \"Files\", OriginalText: \"Archivos\" },\r\n { Code: \"NoFiles\", OriginalText: \"Sin Archivos...\" },\r\n { Code: \"Specifications\", OriginalText: \"Especificaciones\" },\r\n { Code: \"NoSpecificationsAvailable\", OriginalText: \"No hay Especificaciones disponibles.\" },\r\n { Code: \"NoFilesAvailable\", OriginalText: \"No hay Archivos disponibles.\" },\r\n { Code: \"NoLinksAvailable\", OriginalText: \"No hay Links disponibles.\" },\r\n { Code: \"Menus\", OriginalText: \"Menú\" },\r\n { Code: \"Restart\", OriginalText: \"Reanudar\" },\r\n { Code: \"MoreInfo\", OriginalText: \"+Info\" },\r\n { Code: \"Structures\", OriginalText: \"Structures\" },\r\n { Code: \"OpenStructures\", OriginalText: \"Abrir Structures\" },\r\n { Code: \"IndividualUrlCopied\", OriginalText: \"Enlace individual copiado con éxito.\" },\r\n { Code: \"CopyGeneralLink\", OriginalText: \"Copiar enlace general\" },\r\n { Code: \"UrlMaxLengthReached\", OriginalText: \"No se pudo copiar el enlace porque se alcanzó el tamaño máximo.\" },\r\n { Code: \"GeneralUrlCopied\", OriginalText: \"Enlace general copiado con éxito.\" },\r\n { Code: \"Topic\", OriginalText: \"Tema\" },\r\n { Code: \"Type\", OriginalText: \"Tipo\" },\r\n { Code: \"ExternalWidth\", OriginalText: \"Ancho Externo [mm]\" },\r\n { Code: \"InternalWidth\", OriginalText: \"Ancho Interno [mm]\" },\r\n { Code: \"ExternalDepth\", OriginalText: \"Profundidad Externa [mm]\" },\r\n { Code: \"InternalDepth\", OriginalText: \"Profundidad Interna [mm]\" },\r\n { Code: \"HeightThickness\", OriginalText: \"Altura / Grosor [mm]\" },\r\n { Code: \"Weight\", OriginalText: \"Peso [kg]\" },\r\n { Code: \"Orientation\", OriginalText: \"Orientación\" },\r\n { Code: \"DepthHu\", OriginalText: \"Ctd. Profundidad HU [un]\" },\r\n { Code: \"Slope\", OriginalText: \"Pendiente\" },\r\n { Code: \"SlopeDirection\", OriginalText: \"Dirección de Pendiente\" },\r\n { Code: \"FreeSpace\", OriginalText: \"Espacio Libre [mm]\" },\r\n { Code: \"HUSupportType\", OriginalText: \"Tipo de Soporte HU\" },\r\n { Code: \"HUSupport\", OriginalText: \"Soporte HU\" },\r\n { Code: \"RollJoints\", OriginalText: \"Uniones Rodantes\" },\r\n { Code: \"GuideType\", OriginalText: \"Tipo de Guía\" },\r\n { Code: \"ProfileSupportQuantity\", OriginalText: \"Cantidad de Soporte de Perfil\" },\r\n { Code: \"Annotations\", OriginalText: \"Anotaciones\" },\r\n { Code: \"UploadPhoto\", OriginalText: \"Subir Foto\" },\r\n { Code: \"ClearPhoto\", OriginalText: \"Photo Limpia\" },\r\n { Code: \"AddColumn\", OriginalText: \"Agregar Columna\" },\r\n { Code: \"InvalidStructurePosition\", OriginalText: \"Posición Estructura Inválida\" },\r\n { Code: \"VisitDetails\", OriginalText: \"Detalles de La Visita\" },\r\n { Code: \"ContactType\", OriginalText: \"Tipo de Contacto\" },\r\n { Code: \"CustomerDetails\", OriginalText: \"Detalles del Cliente\" },\r\n { Code: \"Customer\", OriginalText: \"Cliente\" },\r\n { Code: \"Location\", OriginalText: \"Ubicación\" },\r\n { Code: \"Address\", OriginalText: \"Dirección\" },\r\n { Code: \"ContactName\", OriginalText: \"Nombre de Contacto\" },\r\n { Code: \"ContactEmail\", OriginalText: \"Correo Electrónico del Contacto\" },\r\n { Code: \"SalesPerson\", OriginalText: \"Vendedor\" },\r\n { Code: \"Market\", OriginalText: \"Mercado\" },\r\n { Code: \"RequestDetails\", OriginalText: \"Detalles de la Solicitud\" },\r\n { Code: \"RequestsToOpen\", OriginalText: \"Solicitudes para Abrir\" },\r\n { Code: \"RequestType\", OriginalText: \"Tipo de Solicitud\" },\r\n { Code: \"FromPreviousRequest\", OriginalText: \"De Solicitud Anterior\" },\r\n { Code: \"GlobalProposal\", OriginalText: \"Propuesta Global\" },\r\n { Code: \"GlobalProposalRequestNumber\", OriginalText: \"Número Global de Solicitud de Propuesta\" },\r\n { Code: \"ProjectDetails\", OriginalText: \"Detalles del Proyecto\" },\r\n { Code: \"AssemblyType\", OriginalText: \"Tipo de Ensamblaje\" },\r\n { Code: \"IncludeTransport\", OriginalText: \"Incluir Transporte\" },\r\n { Code: \"SolutionCode\", OriginalText: \"Código de Solución\" },\r\n { Code: \"ProjectApplication\", OriginalText: \"Aplicación del Proyecto\" },\r\n { Code: \"PreviousProcess\", OriginalText: \"Proceso Anterior\" },\r\n { Code: \"NextProcess\", OriginalText: \"Siguiente Proceso\" },\r\n { Code: \"InternalOrExternalMeasures\", OriginalText: \"Medidas Internas / Externas\" },\r\n { Code: \"SubmissionType\", OriginalText: \"Tipo de Presentación\" },\r\n { Code: \"Draft\", OriginalText: \"Borrador\" },\r\n { Code: \"AssemblyCuttingList\", OriginalText: \"Lista de Corte del Ensamblaje\" },\r\n { Code: \"ProposalRequest\", OriginalText: \"Solicitud de Propuesta\" },\r\n { Code: \"Photos\", OriginalText: \"Fotos\" },\r\n { Code: \"LocateInMakeAList\", OriginalText: \"Localizar en Hacer una Lista\" },\r\n { Code: \"LocateInServiceRequestList\", OriginalText: \"Localizar en Lista de Solicitudes de Servicio\" },\r\n { Code: \"LocateInServiceList\", OriginalText: \"Localizar en Lista de Servicio\" },\r\n { Code: \"ServiceList\", OriginalText: \"Lista de Servicio\" },\r\n { Code: \"ServiceRequestList\", OriginalText: \"Lista de Solicitudes de Servicio\" },\r\n { Code: \"Location\", OriginalText: \"Ubicación\" },\r\n { Code: \"DojoRental\", OriginalText: \"Alquiler de DOJO\" },\r\n { Code: \"CoffeeBreakIncluded\", OriginalText: \"Pausa para el Café Incluida\" },\r\n { Code: \"LunchIncluded\", OriginalText: \"Almuerzo Incluido\" },\r\n { Code: \"ParticipantsList\", OriginalText: \"Lista de Participantes\" },\r\n { Code: \"ParticipantsNumber\", OriginalText: \"# Participantes\" },\r\n { Code: \"ExpensesIncluded\", OriginalText: \"Gastos Incluidos\" },\r\n { Code: \"SafetyEquipmentIncluded\", OriginalText: \"Equipo de Seguridad Incluido\" },\r\n { Code: \"SafetyTrainingIncluded\", OriginalText: \"Formación en Seguridad Incluido\" },\r\n { Code: \"AtYourPlace\", OriginalText: \"En tu Lugar\" },\r\n { Code: \"ServiceProviderEmail\", OriginalText: \"Correo Electrónico del Proveedor de Servicios\" },\r\n { Code: \"ServiceRequesterEmail\", OriginalText: \"Correo Electrónico el Solicitante de Servicios\" },\r\n { Code: \"LinksToSend\", OriginalText: \"# Enlaces para Enviar\" },\r\n { Code: \"Login\", OriginalText: \"Acceso\" },\r\n { Code: \"Logout\", OriginalText: \"Logout\" },\r\n { Code: \"User\", OriginalText: \"Usuario\" },\r\n { Code: \"Password\", OriginalText: \"Contraseña\" },\r\n { Code: \"InvalidLogin\", OriginalText: \"Información de inicio de sesión no válida.\" },\r\n { Code: \"Services\", OriginalText: \"Servicios\" },\r\n { Code: \"FilterCode\", OriginalText: \"Código Filtro\" },\r\n { Code: \"SetFilterCode\", OriginalText: \"Establecer Código Filtro\" },\r\n { Code: \"Save\", OriginalText: \"Guardar\" },\r\n ]\r\n },\r\n {\r\n Language: 'IT',\r\n Translations: [\r\n { Code: \"PageName\", OriginalText: \"4Lean Configuratore di Soluzioni\" },\r\n { Code: \"BuilderPageName\", OriginalText: \"4Lean Configuratore del Generatore di Strutture\" },\r\n { Code: \"ServicePageName\", OriginalText: \"4Lean Configuratore di Servizi\" },\r\n { Code: \"GeneralGuide\", OriginalText: \"Guida Generale\" },\r\n { Code: \"MakeListLeanProject\", OriginalText: \"Creare una Lista/Progetto Lean\" },\r\n { Code: \"MakeList\", OriginalText: \"Creare una Lista\" },\r\n { Code: \"Search\", OriginalText: \"Ricerca...\" },\r\n { Code: \"Help\", OriginalText: \"Aiuto\" },\r\n { Code: \"Filters\", OriginalText: \"Filtri\" },\r\n { Code: \"ImportCsv\", OriginalText: \"Importare CSV\" },\r\n { Code: \"SelectFileAndDrag\", OriginalText: \"Seleziona il tuo file o trascinalo qui.\" },\r\n { Code: \"List\", OriginalText: \"Lista\" },\r\n { Code: \"Area\", OriginalText: \"Area\" },\r\n { Code: \"Options\", OriginalText: \"Opzioni\" },\r\n { Code: \"Duplicate\", OriginalText: \"Duplicare\" },\r\n { Code: \"DuplicateMultiple\", OriginalText: \"Duplicare x\" },\r\n { Code: \"Remove\", OriginalText: \"Rimuovere\" },\r\n { Code: \"PleaseChooseOption\", OriginalText: \"Per favore, scegli un'opzione...\" },\r\n { Code: \"Notes\", OriginalText: \"Annotazioni\" },\r\n { Code: \"LeanProject\", OriginalText: \"Progetto Lean\" },\r\n { Code: \"Next\", OriginalText: \"Seguente\" },\r\n { Code: \"ProjectInformation\", OriginalText: \"Informazioni del Progetto\" },\r\n { Code: \"ProjectName\", OriginalText: \"Nome del Progetto\" },\r\n { Code: \"CoordinatorName\", OriginalText: \"Nome Coordinatore\" },\r\n { Code: \"CompanyName\", OriginalText: \"Nome della Ditta\" },\r\n { Code: \"ContactName\", OriginalText: \"Nome del Contatto\" },\r\n { Code: \"City\", OriginalText: \"Città\" },\r\n { Code: \"Country\", OriginalText: \"Paese\" },\r\n { Code: \"PhoneNumber\", OriginalText: \"Numero di Telefono\" },\r\n { Code: \"PleaseContactMe\", OriginalText: \"Contattami\" },\r\n { Code: \"Email\", OriginalText: \"E-mail\" },\r\n { Code: \"Submit\", OriginalText: \"Inviare\" },\r\n { Code: \"Copy\", OriginalText: \"Copiare\" },\r\n { Code: \"CopyAll\", OriginalText: \"Copia Tutto\" },\r\n { Code: \"Quantity\", OriginalText: \"Quantità\" },\r\n { Code: \"SolutionDetailTitle\", OriginalText: \"Visualizzazione Individuale\" },\r\n { Code: \"Back\", OriginalText: \"Ritorno\" },\r\n { Code: \"Previous\", OriginalText: \"Precedente\" },\r\n { Code: \"Import\", OriginalText: \"Importare\" },\r\n { Code: \"ImportCsvAllowedFiles\", OriginalText: \"È consentito solo il file .csv.\" },\r\n { Code: \"InvalidFile\", OriginalText: \"File Non Valido:\" },\r\n { Code: \"ProjectSubmited\", OriginalText: \"Progetto Inviato\" },\r\n { Code: \"NoSolutionsWereFound\", OriginalText: \"Nessuna soluzione è stata trovata.\" },\r\n { Code: \"ProjectSubmitedSuccess\", OriginalText: \"Il Tuo Progetto È Stato Inviato Con Successo.\" },\r\n { Code: \"CheckYourEmail\", OriginalText: \"Per favore verifica la tua email per maggiori dettagli.\" },\r\n { Code: \"Copied\", OriginalText: \"Copiato\" },\r\n { Code: \"Files\", OriginalText: \"File\" },\r\n { Code: \"NoFiles\", OriginalText: \"Nessun File...\" },\r\n { Code: \"Specifications\", OriginalText: \"Specifiche\" },\r\n { Code: \"NoSpecificationsAvailable\", OriginalText: \"Non ci sono Specifiche disponibili.\" },\r\n { Code: \"NoFilesAvailable\", OriginalText: \"Non ci sono File disponibili.\" },\r\n { Code: \"NoLinksAvailable\", OriginalText: \"Non ci sono Collegamenti disponibili.\" },\r\n { Code: \"Menus\", OriginalText: \"Menu\" },\r\n { Code: \"Restart\", OriginalText: \"Ricomincia\" },\r\n { Code: \"MoreInfo\", OriginalText: \"+Info\" },\r\n { Code: \"Structures\", OriginalText: \"Structures\" },\r\n { Code: \"OpenStructures\", OriginalText: \"Structures Aperte\" },\r\n { Code: \"IndividualUrlCopied\", OriginalText: \"Link individuale copiato correttamente.\" },\r\n { Code: \"CopyGeneralLink\", OriginalText: \"Copia il link generale\" },\r\n { Code: \"UrlMaxLengthReached\", OriginalText: \"Impossibile copiare il link perché è stata raggiunta la dimsensione massima.\" },\r\n { Code: \"GeneralUrlCopied\", OriginalText: \"Link generale copiato correttamente.\" },\r\n { Code: \"Topic\", OriginalText: \"Argomento\" },\r\n { Code: \"Type\", OriginalText: \"Tipo\" },\r\n { Code: \"ExternalWidth\", OriginalText: \"Larghezza Esterna [mm]\" },\r\n { Code: \"InternalWidth\", OriginalText: \"Larghezza Interna [mm]\" },\r\n { Code: \"ExternalDepth\", OriginalText: \"Profondità Esterna [mm]\" },\r\n { Code: \"InternalDepth\", OriginalText: \"Profondità Interna [mm]\" },\r\n { Code: \"HeightThickness\", OriginalText: \"Altezza / Spessore [mm]\" },\r\n { Code: \"Weight\", OriginalText: \"Peso [kg]\" },\r\n { Code: \"Orientation\", OriginalText: \"Orientamento\" },\r\n { Code: \"DepthHu\", OriginalText: \"Quantità Profondità HU [un]\" },\r\n { Code: \"Slope\", OriginalText: \"Pendenza\" },\r\n { Code: \"SlopeDirection\", OriginalText: \"Direzione Pendenza\" },\r\n { Code: \"FreeSpace\", OriginalText: \"Spazio Libero [mm]\" },\r\n { Code: \"HUSupportType\", OriginalText: \"Tipo di Supporto HU\" },\r\n { Code: \"HUSupport\", OriginalText: \"Supporto HU\" },\r\n { Code: \"RollJoints\", OriginalText: \"Giunti a Rulli\" },\r\n { Code: \"GuideType\", OriginalText: \"Tipo di Guida\" },\r\n { Code: \"ProfileSupportQuantity\", OriginalText: \"Quantità di Supporto del Profilo\" },\r\n { Code: \"Annotations\", OriginalText: \"Annotazioni\" },\r\n { Code: \"UploadPhoto\", OriginalText: \"Caricamento di Foto\" },\r\n { Code: \"ClearPhoto\", OriginalText: \"Foto Pulita\" },\r\n { Code: \"AddColumn\", OriginalText: \"Aggiungi Colonna\" },\r\n { Code: \"InvalidStructurePosition\", OriginalText: \"Posizione Di Struttura Non Valida\" },\r\n { Code: \"VisitDetails\", OriginalText: \"Dettagli Della Visita\" },\r\n { Code: \"ContactType\", OriginalText: \"Tipo di Contatto\" },\r\n { Code: \"CustomerDetails\", OriginalText: \"Dettagli del Cliente\" },\r\n { Code: \"Customer\", OriginalText: \"Cliente\" },\r\n { Code: \"Location\", OriginalText: \"Posizione\" },\r\n { Code: \"Address\", OriginalText: \"Indirizzo\" },\r\n { Code: \"ContactName\", OriginalText: \"Nome del Contatto\" },\r\n { Code: \"ContactEmail\", OriginalText: \"Email del Contatto\" },\r\n { Code: \"SalesPerson\", OriginalText: \"Venditore\" },\r\n { Code: \"Market\", OriginalText: \"Mercato\" },\r\n { Code: \"RequestDetails\", OriginalText: \"Dettagli Della Richiesta\" },\r\n { Code: \"RequestsToOpen\", OriginalText: \"Richieste di Apertura\" },\r\n { Code: \"RequestType\", OriginalText: \"Tipo di Richiesta\" },\r\n { Code: \"FromPreviousRequest\", OriginalText: \"Da Richiesta Precedente\" },\r\n { Code: \"GlobalProposal\", OriginalText: \"Proposta Globale\" },\r\n { Code: \"GlobalProposalRequestNumber\", OriginalText: \"Numero Globale di Richiesta di Proposta\" },\r\n { Code: \"ProjectDetails\", OriginalText: \"Dettagli del Progetto\" },\r\n { Code: \"AssemblyType\", OriginalText: \"Tipo di Assemblaggio\" },\r\n { Code: \"IncludeTransport\", OriginalText: \"Includere il Trasporto\" },\r\n { Code: \"SolutionCode\", OriginalText: \"Codice della Soluzione\" },\r\n { Code: \"ProjectApplication\", OriginalText: \"Applicazione del Progetto\" },\r\n { Code: \"PreviousProcess\", OriginalText: \"Processo Precedente\" },\r\n { Code: \"NextProcess\", OriginalText: \"Prossimo Processo\" },\r\n { Code: \"InternalOrExternalMeasures\", OriginalText: \"Misure Interne / Esterne\" },\r\n { Code: \"SubmissionType\", OriginalText: \"Tipo di Presentazione\" },\r\n { Code: \"Draft\", OriginalText: \"Bozza\" },\r\n { Code: \"AssemblyCuttingList\", OriginalText: \"Lista di Taglio dell'Assemblaggio\" },\r\n { Code: \"ProposalRequest\", OriginalText: \"Richiesta di Proposta\" },\r\n { Code: \"Photos\", OriginalText: \"Foto\" },\r\n { Code: \"LocateInMakeAList\", OriginalText: \"Individuare in Fare una Lista\" },\r\n { Code: \"LocateInServiceRequestList\", OriginalText: \"Individuare in Elenco delle Richieste di Servizio\" },\r\n { Code: \"LocateInServiceList\", OriginalText: \"Individuare in Elenco di Servizio\" },\r\n { Code: \"ServiceList\", OriginalText: \"Elenco di Servizio\" },\r\n { Code: \"ServiceRequestList\", OriginalText: \"Elenco delle Richieste di Servizio\" },\r\n { Code: \"Location\", OriginalText: \"Posizione\" },\r\n { Code: \"DojoRental\", OriginalText: \"Noleggio DOJO\" },\r\n { Code: \"CoffeeBreakIncluded\", OriginalText: \"Pausa Caffè Inclusa\" },\r\n { Code: \"LunchIncluded\", OriginalText: \"Pranzo Incluso\" },\r\n { Code: \"ParticipantsList\", OriginalText: \"Elenco dei Participanti\" },\r\n { Code: \"ParticipantsNumber\", OriginalText: \"# Participanti\" },\r\n { Code: \"ExpensesIncluded\", OriginalText: \"Spese Incluse\" },\r\n { Code: \"SafetyEquipmentIncluded\", OriginalText: \"Attrezzatura di Sicurezza Inclusa\" },\r\n { Code: \"SafetyTrainingIncluded\", OriginalText: \"Formazione sulla Sicurezza Inclusa\" },\r\n { Code: \"AtYourPlace\", OriginalText: \"Al tu Posto\" },\r\n { Code: \"ServiceProviderEmail\", OriginalText: \"Email del Fornitore di Servizi\" },\r\n { Code: \"ServiceRequesterEmail\", OriginalText: \"Email del Richiedente di Servizi\" },\r\n { Code: \"LinksToSend\", OriginalText: \"# Link da Inviare\" },\r\n { Code: \"Login\", OriginalText: \"Login\" },\r\n { Code: \"Logout\", OriginalText: \"Sair\" },\r\n { Code: \"User\", OriginalText: \"Utilizzatore\" },\r\n { Code: \"Password\", OriginalText: \"Password\" },\r\n { Code: \"InvalidLogin\", OriginalText: \"Informazioni di accesso non valide.\" },\r\n { Code: \"Services\", OriginalText: \"Servizi\" },\r\n { Code: \"FilterCode\", OriginalText: \"Codice Filtro\" },\r\n { Code: \"SetFilterCode\", OriginalText: \"Imposta Codice Filtro\" },\r\n { Code: \"Save\", OriginalText: \"Salva\" },\r\n ]\r\n }\r\n];\n\"use strict\"\r\n\r\nvar codes = {\r\n //#region Application\r\n Application: {\r\n Solutions: \"01\",\r\n Builder: \"04\",\r\n Services: \"05\"\r\n },\r\n ProjectType: {\r\n ServiceList: \"01\",\r\n ServiceRequestList: \"02\"\r\n }\r\n //#endregion\r\n};\n(function () {\r\n \"use strict\";\r\n\r\n myApp.controller('ServiceGuideAppController', function ($scope, GeneralLoadData, GeneralModel, $q, $timeout, $compile, $mdDialog, GetIp, $http, $mdConstant, $sessionStorage, $sce, $location, $stateParams) {\r\n var delayTimer, delayHelpFilter, originalValue, userToken;\r\n var zoomObject;\r\n var lastSolutionId = 0;\r\n\r\n $scope.Project = {\r\n Solutions: [],\r\n Details: {}\r\n };\r\n\r\n $scope.Menus = [];\r\n $scope.SearchValues = [];\r\n $scope.HelpSearchValues = [];\r\n $scope.separatorKeysForEmails = [$mdConstant.KEY_CODE.ENTER, $mdConstant.KEY_CODE.COMMA, $mdConstant.KEY_CODE.SPACE, $mdConstant.KEY_CODE.SEMICOLO];\r\n $scope.ItemsPerPage = 60;\r\n $scope.CurrentPage = 1;\r\n $scope.ShowInfoPages = false;\r\n $scope.HasHelp = false;\r\n $scope.HasLogin = true;\r\n $scope.Codes = codes;\r\n\r\n CleanSolutionDetail();\r\n CleanSequencer();\r\n SetSEO();\r\n\r\n var urlParameters = null;\r\n\r\n this.$onInit = function () {\r\n $scope.generalModel = GeneralModel.model;\r\n $scope.Helpers = Helpers;\r\n\r\n $scope.Logout();\r\n SetParameters();\r\n SetLanguages();\r\n SetApplication();\r\n };\r\n\r\n function SetParameters() {\r\n if ($stateParams.P) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.P = parseInt($stateParams.P);\r\n }\r\n\r\n if ($stateParams.C) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.C = $stateParams.C.split(\",\");\r\n }\r\n\r\n if ($stateParams.S) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.S = $stateParams.S.split(\",\");\r\n }\r\n\r\n if ($stateParams.O) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.O = ($stateParams.O.toUpperCase() === \"TRUE\");\r\n }\r\n }\r\n\r\n function SetLanguages() {\r\n $scope.LanguageSelected = localStorage.getItem(\"languageSelected\");\r\n\r\n if (!$scope.LanguageSelected) {\r\n $scope.LanguageSelected = \"EN\";\r\n }\r\n\r\n $scope.Languages = [\"EN\", \"ES\", \"FR\", \"IT\", \"PT\"].reverse();\r\n\r\n SetTranslations();\r\n }\r\n\r\n $scope.ChangeLanguage = function (language) {\r\n $scope.LanguageSelected = language;\r\n\r\n localStorage.setItem(\"languageSelected\", language);\r\n\r\n SetTranslations();\r\n SetApplication();\r\n }\r\n\r\n $scope.ApplyFilter = function () {\r\n clearTimeout(delayTimer);\r\n\r\n delayTimer = setTimeout(function () {\r\n Filter()\r\n }, 250);\r\n }\r\n\r\n function SetApplication() {\r\n $scope.generalModel.FullPageLoading = true;\r\n $scope.HasHelp = false;\r\n var promises = [];\r\n var openMenu = !urlParameters;\r\n\r\n var parameters = {\r\n applicationCode: codes.Application.Services,\r\n languageId: $scope.LanguageSelected\r\n };\r\n\r\n promises.push(GeneralLoadData.GeneralGet(\"Menu\", \"Get\", parameters, null));\r\n\r\n delete parameters.applicationCode;\r\n\r\n promises.push(GeneralLoadData.GeneralGet(\"ServiceGuide\", \"Get\", parameters, null));\r\n\r\n parameters = { applicationCode: codes.Application.Services };\r\n promises.push(GeneralLoadData.GeneralGet(\"Document\", \"CheckIfExists\", parameters, null));\r\n\r\n $q.all(promises).then(function (result) {\r\n SetMenus(result[0], openMenu);\r\n SetSolutions(result[1]);\r\n SetHelp(result[2]);\r\n\r\n SetFilters();\r\n SetSolutionPages();\r\n SetSolutionQrCodes();\r\n\r\n SetSearchValuesFromRoute();\r\n SetCharacteristicsFromRoute();\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n OpenSolutionDetailFromSearchValues();\r\n SetActivePageFromRoute();\r\n InitializeFilterCodeMask();\r\n\r\n if (!$scope.Menus.length) {\r\n $scope.generalModel.FullPageLoading = false;\r\n }\r\n\r\n urlParameters = null;\r\n });\r\n }\r\n\r\n function SetSolutions(result) {\r\n $scope.Solutions = result.data.Solutions;\r\n $scope.SolutionsFiltered = result.data.Solutions;\r\n $scope.Characteristics = result.data.Characteristics;\r\n }\r\n\r\n function SetHelp(result) {\r\n $scope.HasHelp = result.data;\r\n }\r\n\r\n function SetFilters() {\r\n $scope.FilterDescriptionLength = ($scope.Characteristics.length - 1) * 3;\r\n $scope.FilterCodeLength = Math.max.apply(Math, $scope.Characteristics.map(function (characteristic) { return characteristic.StartIndex; })) + 2;\r\n $scope.FilterCode = ''.padEnd($scope.FilterCodeLength, '_');\r\n $scope.FilterDescription = ''.padEnd($scope.FilterDescriptionLength, ' | ');\r\n\r\n $scope.SearchValues = [];\r\n }\r\n\r\n //#region Individual View\r\n function CleanSolutionDetail() {\r\n $scope.SolutionDetail = {};\r\n $scope.SolutionDetail.Photographies = [];\r\n $scope.SolutionDetail.Links = [];\r\n $scope.SolutionDetail.Files = [];\r\n $scope.SolutionDetail.Specifications = [];\r\n $scope.SolutionDetail.StartPhotographyIndex = -1;\r\n $scope.SolutionDetail.SelectedPhotographyIndex = -1;\r\n }\r\n\r\n $scope.OpenSolutionDetail = function (solution) {\r\n $scope.SolutionSelected = solution;\r\n\r\n SetSolutionDetail();\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogSolutionDetail',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false,\r\n onComplete: function () {\r\n SetProjectQuantity();\r\n }\r\n });\r\n }\r\n\r\n function SetSolutionDetail() {\r\n GetDetails($scope.SolutionSelected);\r\n\r\n SetSolutionDetailQrCode(\"QrSolutionDetail\");\r\n }\r\n\r\n function GetDetails(solution) {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var specifications = solution.Specifications.filter(filter => filter.Show);\r\n var parameters = { solutionId: solution.Code };\r\n\r\n CleanSolutionDetail();\r\n\r\n GeneralLoadData.GeneralGet(\"ServiceGuide\", \"GetDetails\", parameters, null).then(function (result) {\r\n $scope.SolutionDetail.Links = result.data.Links;\r\n $scope.SolutionDetail.Files = result.data.Files;\r\n $scope.SolutionDetail.Specifications = specifications;\r\n $scope.SetPhotographies(result.data.SolutionDetailPhotographies);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n $scope.SetPhotographies = function (photographies) {\r\n if (!photographies) {\r\n return;\r\n }\r\n\r\n $scope.SolutionDetail.StartPhotographyIndex = 0;\r\n $scope.SolutionDetail.SelectedPhotographyIndex = 0;\r\n\r\n photographies.forEach(photography => {\r\n var newPhotographyImage = $scope.GetPhotography(photography.Photography);\r\n\r\n var newPhotography = {\r\n Photography: newPhotographyImage\r\n }\r\n\r\n $scope.SolutionDetail.Photographies.push(newPhotography);\r\n });\r\n }\r\n\r\n function SetSolutionDetailQrCode() {\r\n $timeout(function () {\r\n SetQrCode(\"QrSolutionDetail\", $scope.SolutionSelected);\r\n });\r\n }\r\n\r\n function SetProjectQuantity() {\r\n if (!$scope.SolutionSelected.ProjectQuantity) {\r\n $scope.SolutionSelected.ProjectQuantity = 0;\r\n }\r\n\r\n $timeout(() => {\r\n var element = document.getElementById('selectedSolutionQuantity');\r\n\r\n element.focus();\r\n element.select();\r\n }, 0)\r\n }\r\n\r\n $scope.SetFiltersToSolution = function () {\r\n let solutionSelectedCode = $scope.SolutionSelected.Code;\r\n\r\n SetSolutionFilters(solutionSelectedCode); \r\n }\r\n\r\n function SetSolutionFilters(code) {\r\n $scope.SearchValues = [];\r\n $scope.FilterClear();\r\n\r\n $scope.Characteristics.forEach((characteristic) => {\r\n var optionCodeToSelect = code.substr(0, 2);\r\n var characteristicOption = characteristic.CharacteristicOptions.find(find => (find.Code === optionCodeToSelect));\r\n\r\n code = code.slice(2);\r\n\r\n if (!characteristicOption) {\r\n return;\r\n }\r\n\r\n characteristicOption.Selected = true;\r\n });\r\n }\r\n\r\n $scope.CloseSolutionDetail = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogSolutionDetail'\r\n });\r\n\r\n CleanSolutionDetail();\r\n }\r\n\r\n $scope.GetIndexSolutionSelected = function () {\r\n if ($scope.SolutionsFiltered === undefined) {\r\n return null;\r\n }\r\n\r\n var indexSolutionSelected = $scope.SolutionsFiltered.indexOf($scope.SolutionSelected);\r\n\r\n return indexSolutionSelected;\r\n }\r\n\r\n $scope.ShowPreviousSolutionDetail = function () {\r\n if ($scope.SolutionsFiltered === undefined) {\r\n return false;\r\n }\r\n\r\n var indexSolutionSelected = $scope.GetIndexSolutionSelected();\r\n var show = (indexSolutionSelected !== 0);\r\n\r\n return show;\r\n }\r\n\r\n $scope.GetSelectedSolutionPhotography = function (index) {\r\n var photography;\r\n\r\n if (!$scope.SolutionSelected) {\r\n return;\r\n }\r\n\r\n if (!$scope.SolutionSelected.HasDetails && $scope.SolutionSelected.SeoInformation && $scope.SolutionSelected.SeoInformation.PhotographyName) {\r\n photography = $scope.GetPhotography($scope.SolutionSelected.SeoInformation.PhotographyName);\r\n }\r\n else {\r\n if (!$scope.SolutionDetail.Photographies.length) {\r\n return;\r\n }\r\n\r\n photography = $scope.SolutionDetail.Photographies[index].Photography;\r\n }\r\n\r\n return photography;\r\n }\r\n\r\n $scope.GetSolutionDescription = function (solution) {\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n if (!solution.SeoInformation || !solution.SeoInformation.Description) {\r\n var description = solution.Description;\r\n\r\n return description;\r\n }\r\n\r\n return solution.SeoInformation.Description;\r\n }\r\n\r\n $scope.PreviousSolutionDetail = function () {\r\n var indexSolutionSelected = $scope.GetIndexSolutionSelected();\r\n $scope.SolutionSelected = $scope.SolutionsFiltered[indexSolutionSelected - 1];\r\n\r\n SetSolutionDetail();\r\n SetProjectQuantity();\r\n }\r\n\r\n $scope.ShowNextSolutionDetail = function () {\r\n if ($scope.SolutionsFiltered === undefined) {\r\n return false;\r\n }\r\n\r\n var indexSolutionSelected = $scope.GetIndexSolutionSelected();\r\n var show = (indexSolutionSelected !== ($scope.SolutionsFiltered.length - 1));\r\n\r\n return show;\r\n }\r\n\r\n $scope.NextSolutionDetail = function () {\r\n var indexSolutionSelected = $scope.GetIndexSolutionSelected();\r\n $scope.SolutionSelected = $scope.SolutionsFiltered[indexSolutionSelected + 1];\r\n\r\n SetSolutionDetail();\r\n SetProjectQuantity();\r\n }\r\n\r\n function OpenSolutionDetailFromSearchValues() {\r\n if (!urlParameters || (urlParameters.O !== true) || !urlParameters.S) {\r\n return;\r\n }\r\n\r\n if (urlParameters.S.length !== 1) {\r\n return;\r\n }\r\n\r\n var searchValue = urlParameters.S[0];\r\n var solution = $scope.Solutions.find(find => (find.Code === searchValue));\r\n\r\n if (solution) {\r\n $scope.OpenSolutionDetail(solution);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region SEO\r\n function SetSEO() {\r\n var titleTag = angular.element('title');\r\n var canonicalLinkTag = document.querySelector('link[rel=\"canonical\"]')\r\n var metaDescription = angular.element('meta[name=\"description\"]');\r\n var metaKeywords = angular.element('meta[name=\"keywords\"]');\r\n\r\n titleTag[0].innerText = \"4Lean Service Guide Configurator\";\r\n canonicalLinkTag.setAttribute('href', \"https://customer.4lean.net/solutionConfigurator/BuilderStructureConfigurator\");\r\n metaDescription.attr('content', \"The Structure Builder Configurator has thousands of configurations. You can see videos/images, pick a standard structure and reconfigure to your own structure, get bill of materials to get a proposal.\");\r\n metaKeywords.attr('content', \"lean manufacturing,Lean,kaizen,kaizen video,lean manufacturing video,lean manufacturing examples,logistics,logistic train,lean system,Solutions,Workstation,Production,Waste Reduction,Lean Thinking,Industry 4.0,How to,How to make,Mizusumashi,Process,manufacturing,karakuri, configurator\");\r\n }\r\n //#endregion\r\n\r\n //#region Make a List\r\n $scope.HasSelectedSolutions = function () {\r\n if (!$scope.Solutions) {\r\n return false;\r\n }\r\n\r\n var selectedSolution = $scope.Solutions.find(single => single.ProjectQuantity && (single.ProjectQuantity > 0))\r\n\r\n return selectedSolution;\r\n }\r\n\r\n $scope.OpenServiceRequestListDialog = function (projectTypeCode) {\r\n $scope.StepProjectServiceRequest = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n $scope.SendSequencer = false;\r\n\r\n $scope.Project.Details.ProjectType = projectTypeCode;\r\n\r\n var solutionsToAdd = $scope.Solutions.filter(filter => (filter.ProjectQuantity && (filter.ProjectQuantity > 0)));\r\n\r\n solutionsToAdd.forEach(solution => {\r\n solution.MinimumQuantity = solution.ProjectQuantity;\r\n\r\n var solutionsInProject = $scope.Project.Solutions.filter(where => (where.Code === solution.Code));\r\n var quantityInProject = solutionsInProject.sum('ProjectQuantity');\r\n var quantityToAdd = solution.ProjectQuantity - quantityInProject;\r\n\r\n if (quantityToAdd > 0) {\r\n var solutionToAdd;\r\n\r\n if (solutionsInProject.length) {\r\n solutionToAdd = angular.copy(solutionsInProject[0]);\r\n } else {\r\n solutionToAdd = angular.copy(solution);\r\n\r\n SetSolutionToAdd(solutionToAdd);\r\n }\r\n\r\n solutionToAdd.ProjectQuantity = quantityToAdd;\r\n\r\n $scope.Project.Solutions.push(solutionToAdd);\r\n\r\n AddInSequencer(solutionToAdd);\r\n }\r\n });\r\n\r\n if (!$scope.Project.Solutions.length) {\r\n GeneralModel.ShowToastWarning(\"Please select at least one solution to complete the project.\");\r\n\r\n return;\r\n }\r\n\r\n $scope.StepProjectServiceRequest = true;\r\n\r\n var parentElement = angular.element(document.body);\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogProject',\r\n parent: parentElement,\r\n multiple: false,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n function SetSolutionToAdd(solution) {\r\n delete solution.DrawingNumber;\r\n delete solution.HasBuilderCsv;\r\n delete solution.HasDetails;\r\n delete solution.MinimumQuantity;\r\n delete solution.SolutionNumber;\r\n delete solution.SeoInformation;\r\n\r\n var solutionSpecifications = solution.Specifications.filter(filter => filter.Show);\r\n\r\n solution.Id = ++lastSolutionId;\r\n solution.Specifications = solutionSpecifications;\r\n solution.ParticipantsQuantity = 0;\r\n solution.Participants = [];\r\n solution.QuantityToDuplicate = 1;\r\n\r\n solution.LinksToSendQuantity = (solution.Links) ? solution.Links.length : 0;\r\n solution.LinksToSend = [];\r\n\r\n if (solution.Links) {\r\n solution.Links.forEach(link => {\r\n solution.LinksToSend.push(link.Description);\r\n });\r\n }\r\n\r\n solution.Files = [];\r\n }\r\n\r\n $scope.CloseProject = function () {\r\n $scope.StepProjectServiceRequest = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n\r\n $mdDialog.hide({\r\n contentElement: '#DialogProject'\r\n });\r\n }\r\n\r\n $scope.OnLocationChange = function (solution) {\r\n if (solution.IsAtYourSite) {\r\n solution.IsDojoRentalIncluded = false;\r\n solution.IsCoffeeBreakIncluded = false;\r\n solution.IsLunchIncluded = false;\r\n }\r\n else {\r\n solution.Address = null;\r\n }\r\n\r\n $scope.ReplicateValue(solution, 'IsAtYourSite');\r\n };\r\n\r\n $scope.SetOriginalValue = function (valueToSet) {\r\n originalValue = valueToSet;\r\n }\r\n\r\n $scope.ReplicateValue = function (solution, property) {\r\n if (!solution || Helpers.Object.IsUndefinedEmptyOrNull(solution[property])) {\r\n return;\r\n }\r\n\r\n if (solution[property] === originalValue) {\r\n return;\r\n }\r\n\r\n var solutionsToUpdate;\r\n\r\n if (property === 'Address') {\r\n solutionsToUpdate = $scope.Project.Solutions.filter(filter => (!filter[property] && filter.IsAtYourSite));\r\n }\r\n else {\r\n solutionsToUpdate = $scope.Project.Solutions.filter(filter => Helpers.Object.IsUndefinedEmptyNullOrZero(filter[property]));\r\n }\r\n\r\n solutionsToUpdate.forEach(solutionToUpdate => {\r\n solutionToUpdate[property] = solution[property];\r\n\r\n if (!solutionToUpdate.Participants.length && (property === 'ParticipantsQuantity')) {\r\n solutionToUpdate.Participants = angular.copy(solution.Participants);\r\n }\r\n\r\n if (!solutionToUpdate.LinksToSend.length && (property === 'LinksToSendQuantity')) {\r\n solutionToUpdate.LinksToSend = angular.copy(solution.LinksToSend);\r\n }\r\n });\r\n }\r\n\r\n $scope.ReplicateArrayItemValue = function (solution, property, index) {\r\n if (!solution || !solution[property][index]) {\r\n return;\r\n }\r\n\r\n var solutionsToUpdate = $scope.Project.Solutions.filter(filter => (!filter[property][index] && (index <= (filter[property].length - 1))))\r\n\r\n solutionsToUpdate.forEach(solutionToUpdate => {\r\n solutionToUpdate[property][index] = solution[property][index];\r\n });\r\n }\r\n //#endregion\r\n\r\n function GetSolutionByCode(solutions, code) {\r\n var solution = solutions.find(first => (first.Code === code));\r\n\r\n return solution;\r\n }\r\n\r\n $scope.OpenCloseFilter = function (e) {\r\n var content = e.target.nextElementSibling;\r\n\r\n e.target.classList.toggle(\"active\");\r\n\r\n if (content.style.maxHeight) {\r\n content.style.maxHeight = null;\r\n content.parentElement.style.paddingBottom = null;\r\n } else {\r\n CalculateMaxHeight(content);\r\n }\r\n }\r\n\r\n $(window).resize(function () {\r\n var characteristicsOptionsElements = document.getElementsByClassName(\"CharacteristicOptions\");\r\n var characteristicsOptionsElementsLength = characteristicsOptionsElements.length;\r\n\r\n for (var i = 0; i < characteristicsOptionsElementsLength; i++) {\r\n var characteristicsOptionsElement = characteristicsOptionsElements[i];\r\n\r\n if (characteristicsOptionsElement.style.maxHeight) {\r\n CalculateMaxHeight(characteristicsOptionsElement);\r\n }\r\n }\r\n });\r\n\r\n function CalculateMaxHeight(characteristicsOptionsElement) {\r\n characteristicsOptionsElement.style.maxHeight = characteristicsOptionsElement.scrollHeight + \"px\";\r\n characteristicsOptionsElement.parentElement.style.paddingBottom = \"15px\";\r\n }\r\n\r\n $scope.FilterClearShow = function () {\r\n if (!$scope.Characteristics) {\r\n return false;\r\n }\r\n\r\n var show = $scope.Characteristics.filter(where => where.CharacteristicOptions.filter(secondWhere => secondWhere.Selected).length).length;\r\n\r\n return show;\r\n }\r\n\r\n $scope.FilterClear = function () {\r\n var characteristics = $scope.Characteristics.filter(where => where.CharacteristicOptions.filter(secondWhere => secondWhere.Selected).length);\r\n var characteristicsLength = characteristics.length;\r\n\r\n for (var i = 0; i < characteristicsLength; i++) {\r\n var characteristic = characteristics[i];\r\n var characteristicOptions = characteristic.CharacteristicOptions.filter(where => where.Selected);\r\n var characteristicOptionsLength = characteristicOptions.length;\r\n\r\n for (var j = 0; j < characteristicOptionsLength; j++) {\r\n var characteristicOption = characteristicOptions[j];\r\n\r\n characteristicOption.Selected = false;\r\n }\r\n }\r\n\r\n $scope.FilterCode = ''.padEnd($scope.FilterCodeLength, '_');\r\n $scope.FilterDescription = ''.padEnd($scope.FilterDescriptionLength, ' | ');\r\n }\r\n\r\n $scope.GetCharacteristicOptionCount = function (characteristic, characteristicOption) {\r\n var count = $scope.SolutionsFiltered.filter(where => (where.Code.substr(characteristic.StartIndex, 2) === characteristicOption.Code)).length;\r\n\r\n return count;\r\n }\r\n\r\n $scope.GetCheckBoxEditor = function () {\r\n this.characteristicOption.Selected = this.characteristicOption.Selected || false;\r\n\r\n var checkBoxEditor = {\r\n bindingOptions: {\r\n value: \"characteristicOption.Selected\"\r\n },\r\n elementAttr: {\r\n class: \"CharacteristicOptionCheckBox\"\r\n },\r\n onValueChanged: function () {\r\n clearTimeout(delayTimer);\r\n\r\n delayTimer = setTimeout(function () {\r\n FilterCharacteristicOption();\r\n }, 250);\r\n }\r\n };\r\n\r\n return checkBoxEditor;\r\n }\r\n\r\n function FilterCharacteristicOption() {\r\n for (var i = 0; i < $scope.Characteristics.length; i++) {\r\n var characteristic = $scope.Characteristics[i];\r\n\r\n SetFilter(characteristic);\r\n }\r\n\r\n Filter();\r\n };\r\n\r\n function SetFilter(characteristic) {\r\n var characteristicOptionCode = \"__\";\r\n var characteristicOptionDescription = \"\";\r\n var characteristicOptionsSelected = characteristic.CharacteristicOptions.filter(where => (where.Selected));\r\n\r\n if (characteristicOptionsSelected.length === 1) {\r\n characteristicOptionCode = characteristicOptionsSelected[0].Code;\r\n characteristicOptionDescription = characteristicOptionsSelected[0].Description;\r\n }\r\n\r\n $scope.FilterCode = $scope.FilterCode.substr(0, characteristic.StartIndex) + characteristicOptionCode + $scope.FilterCode.substr(characteristic.StartIndex + 2);\r\n\r\n var characteristicIndex = $scope.Characteristics.indexOf(characteristic);\r\n var filterDescriptionSplited = $scope.FilterDescription.split(' | ');\r\n $scope.FilterDescription = \"\";\r\n\r\n for (var i = 0; i < filterDescriptionSplited.length; i++) {\r\n if (i === characteristicIndex) {\r\n $scope.FilterDescription += characteristicOptionDescription;\r\n }\r\n else {\r\n $scope.FilterDescription += filterDescriptionSplited[i];\r\n }\r\n\r\n if (i !== (filterDescriptionSplited.length - 1)) {\r\n $scope.FilterDescription += \" | \";\r\n }\r\n }\r\n }\r\n\r\n function Filter() {\r\n var i;\r\n var solutionsFiltered = [];\r\n\r\n if ($scope.SearchValues.length) {\r\n for (i = 0; i < $scope.Solutions.length; i++) {\r\n var solutionToAnalyse = $scope.Solutions[i];\r\n\r\n for (var j = 0; j < $scope.SearchValues.length; j++) {\r\n var searchValue = $scope.SearchValues[j];\r\n\r\n if (searchValue) {\r\n searchValue = searchValue.toLowerCase().trim();\r\n\r\n if (solutionToAnalyse.Code.toLowerCase().trim().includes(searchValue) || solutionToAnalyse.Description.toLowerCase().trim().includes(searchValue)) {\r\n solutionsFiltered.push(solutionToAnalyse);\r\n break;\r\n }\r\n\r\n var existsInSpecifications = solutionToAnalyse.Specifications.some(some => some.Description.toLowerCase().includes(searchValue));\r\n\r\n if (existsInSpecifications) {\r\n solutionsFiltered.push(solutionToAnalyse);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n solutionsFiltered = $scope.Solutions;\r\n }\r\n\r\n if (solutionsFiltered.length) {\r\n for (i = 0; i < $scope.Characteristics.length; i++) {\r\n var characteristicsItem = $scope.Characteristics[i];\r\n var characteristicOptionCodes = characteristicsItem.CharacteristicOptions.filter(where => (where.Selected)).map(function (characteristicOption) { return characteristicOption.Code; });\r\n\r\n if (!characteristicOptionCodes.length || (characteristicOptionCodes.length === characteristicsItem.CharacteristicOptions.length)) {\r\n continue;\r\n }\r\n\r\n solutionsFiltered = solutionsFiltered.filter(where => characteristicOptionCodes.includes(where.Code.substr(characteristicsItem.StartIndex, 2)));\r\n\r\n if (!solutionsFiltered.length) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n //SetDefaultSolution(solutionsFiltered);\r\n\r\n $timeout(function () {\r\n $scope.SolutionsFiltered = solutionsFiltered;\r\n SetSolutionQrCodes();\r\n SetSolutionPages();\r\n });\r\n }\r\n\r\n //function SetDefaultSolution(solutionsFiltered) {\r\n // var defaultSolution = $scope.Solutions.find(find => (find.Code === \"999999999999999999\"))\r\n\r\n // if (!defaultSolution) {\r\n // return;\r\n // }\r\n\r\n // var defaultSolutionInFilter = solutionsFiltered.find(find => (find.Code === \"999999999999999999\"))\r\n\r\n // if (!defaultSolutionInFilter) {\r\n // solutionsFiltered.push(defaultSolution);\r\n // }\r\n //}\r\n\r\n function SetSolutionQrCodes() {\r\n $timeout(function () {\r\n for (var i = 0; i < $scope.SolutionsFiltered.length; i++) {\r\n var solution = $scope.SolutionsFiltered[i];\r\n\r\n SetQrCode(\"Qr\", solution);\r\n }\r\n });\r\n }\r\n\r\n function SetQrCode(id, solution) {\r\n $(\"#\" + id + solution.Code).ClassyQR({\r\n size: 90,\r\n type: 'text',\r\n text: solution.Code\r\n });\r\n }\r\n\r\n //#region Photography\r\n $scope.GetPhotography = function (photography) {\r\n if ($scope.generalModel.IsUndefinedEmptyOrNull(photography)) {\r\n photography = 'images/FallBackImage.1739284541000.png';\r\n }\r\n else {\r\n if (photography.endsWith(\".png\")) {\r\n photography = GetBaseUrl(true) + photography;\r\n }\r\n else {\r\n photography = 'data:image/jpg;base64,' + photography;\r\n }\r\n }\r\n\r\n return photography;\r\n };\r\n\r\n $scope.GetSolutionPhotography = function (solution) {\r\n var photography;\r\n\r\n if (!solution) {\r\n photography = $scope.GetPhotography(null);\r\n\r\n return photography;\r\n }\r\n\r\n if (solution.SeoInformation && solution.SeoInformation.PhotographyName) {\r\n photography = $scope.GetPhotography(solution.SeoInformation.PhotographyName);\r\n\r\n return photography;\r\n }\r\n\r\n if (solution.Photography) {\r\n photography = $scope.GetPhotography(solution.Photography);\r\n\r\n return photography;\r\n }\r\n\r\n GetSolutionPhotographyFromServer(solution.Code);\r\n\r\n photography = $scope.GetPhotography(null);\r\n\r\n return photography;\r\n };\r\n\r\n function GetSolutionPhotographyFromServer(solutionCode, specificSolution) {\r\n var solutionCodeToGet;\r\n\r\n if (solutionCode) {\r\n solutionCodeToGet = solutionCode;\r\n } else {\r\n solutionCodeToGet = specificSolution.Code;\r\n }\r\n\r\n var solutionFiltered = GetSolutionByCode($scope.SolutionsFiltered, solutionCodeToGet);\r\n var solution = GetSolutionByCode($scope.Solutions, solutionCodeToGet);\r\n\r\n solution.Photography = \" \";\r\n solutionFiltered.Photography = \" \";\r\n\r\n var parameters = {\r\n solutionId: solutionCodeToGet\r\n };\r\n\r\n GeneralLoadData.GeneralGet(\"ServiceGuide\", \"GetSolutionPhotography\", parameters, null).then(function (result) {\r\n solution.Photography = result.data;\r\n solutionFiltered.Photography = result.data;\r\n\r\n if (specificSolution) {\r\n specificSolution.Photography = result.data;\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n }\r\n //#endregion\r\n\r\n $scope.GetLanguagePhotography = function (flag) {\r\n var photography = \"images/flags/\" + flag.toLowerCase() + \".1739284541000.png\";\r\n\r\n var findElement = $(\"#Language\" + flag);\r\n findElement.attr(\"alt\", flag);\r\n findElement.attr(\"title\", flag);\r\n\r\n return photography;\r\n }\r\n\r\n $scope.ScrollbarOptions = {\r\n \"onScroll\": function (y) {\r\n var buttonTopVisibility = (y.scroll > 100);\r\n\r\n if (buttonTopVisibility !== $scope.ButtonTopVisibility) {\r\n $timeout(function () {\r\n $scope.ButtonTopVisibility = buttonTopVisibility;\r\n });\r\n }\r\n }\r\n };\r\n\r\n $scope.ScrollToTop = function (elementId) {\r\n angular.element(elementId).animate({ scrollTop: 0 }, 400);\r\n };\r\n\r\n $scope.Copy = function (elementId, event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n var element = document.getElementById(elementId);\r\n var selection = window.getSelection();\r\n var range = document.createRange();\r\n\r\n range.selectNodeContents(element);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n document.execCommand(\"Copy\");\r\n\r\n GeneralModel.ShowToastWarning(Helpers.Translations.Copied + \": \" + element.innerHTML);\r\n }\r\n\r\n $scope.CopyWithWhitespaces = function (elementId, event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n let element = document.getElementById(elementId);\r\n let textToCopy = element.innerHTML.replace(/_/g, ' ');\r\n let tempElement = document.createElement(\"textarea\");\r\n\r\n document.body.appendChild(tempElement);\r\n tempElement.value = textToCopy;\r\n\r\n tempElement.select();\r\n document.execCommand(\"copy\");\r\n\r\n document.body.removeChild(tempElement);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.Copied + \": \" + textToCopy);\r\n };\r\n\r\n $scope.CopyAll = function (code, description) {\r\n var valueToCopy = code + '\\n' + description;\r\n var elementToCopy = document.createElement('textarea');\r\n\r\n elementToCopy.value = valueToCopy;\r\n\r\n document.body.appendChild(elementToCopy);\r\n elementToCopy.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(elementToCopy);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.Copied + \": \" + valueToCopy);\r\n }\r\n\r\n $scope.DeleteSolution = function (solutionToDelete) {\r\n $scope.Project.Solutions.remove(solutionToDelete);\r\n\r\n RemoveInSequencer(solutionToDelete);\r\n\r\n var solution = $scope.Solutions.find(find => (find.Code === solutionToDelete.Code));\r\n\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n solution.ProjectQuantity -= solutionToDelete.ProjectQuantity;\r\n solution.MinimumQuantity = solution.ProjectQuantity;\r\n\r\n if (!$scope.Project.Solutions.length) {\r\n $scope.CloseProject();\r\n }\r\n }\r\n\r\n $scope.DuplicateSolution = function (solutionToDuplicate, ignoreAddColumn) {\r\n var positionToInsert = $scope.Project.Solutions.indexOf(solutionToDuplicate);\r\n\r\n if (positionToInsert < 0) {\r\n return;\r\n }\r\n\r\n var solution = $scope.Solutions.find(find => (find.Code === solutionToDuplicate.Code));\r\n\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n var numberOfSolutionsToDuplicate = solutionToDuplicate.QuantityToDuplicate;\r\n\r\n solutionToDuplicate.QuantityToDuplicate = 1;\r\n\r\n solution.ProjectQuantity += (numberOfSolutionsToDuplicate * solutionToDuplicate.ProjectQuantity);\r\n solution.MinimumQuantity = solution.ProjectQuantity;\r\n positionToInsert++\r\n\r\n for (let i = 0; i < numberOfSolutionsToDuplicate; i++) {\r\n solutionToDuplicate = angular.copy(solutionToDuplicate);\r\n\r\n solutionToDuplicate.Id = ++lastSolutionId;\r\n $scope.Project.Solutions.splice(positionToInsert, 0, solutionToDuplicate);\r\n AddInSequencer(solutionToDuplicate, ignoreAddColumn);\r\n }\r\n }\r\n\r\n $scope.ShowProjectSolutions = function () {\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n $scope.SendSequencer = false;\r\n $scope.StepProjectServiceRequest = true;\r\n }\r\n\r\n function GetSolutionToSetQuantity(solutionCode) {\r\n var solutionFiltered = GetSolutionByCode($scope.Solutions, solutionCode);\r\n\r\n if (!solutionFiltered) {\r\n return solutionFiltered;\r\n }\r\n\r\n if (!solutionFiltered.ProjectQuantity) {\r\n solutionFiltered.ProjectQuantity = 0;\r\n }\r\n\r\n return solutionFiltered;\r\n };\r\n\r\n function SetSolutionQuantity(solution, quantity) {\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n solution.ProjectQuantity += quantity;\r\n\r\n var solutionOutsideProject = GetSolutionToSetQuantity(solution.Code);\r\n\r\n if (!solutionOutsideProject) {\r\n return;\r\n }\r\n\r\n solutionOutsideProject.ProjectQuantity += quantity;\r\n solutionOutsideProject.MinimumQuantity = solutionOutsideProject.ProjectQuantity;\r\n };\r\n\r\n $scope.IncreaseProjectQuantityInRequestList = function (solution) {\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n SetSolutionQuantity(solution, 1);\r\n };\r\n\r\n $scope.DecreaseProjectQuantityInRequestList = function (solution) {\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n if (solution.ProjectQuantity === 1) {\r\n return;\r\n }\r\n\r\n SetSolutionQuantity(solution, -1);\r\n };\r\n\r\n $scope.IncreaseProjectQuantity = function (solutionCode) {\r\n var solution = GetSolutionToSetQuantity(solutionCode);\r\n\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n solution.ProjectQuantity++;\r\n };\r\n\r\n $scope.DecreaseProjectQuantity = function (solutionCode) {\r\n var solution = GetSolutionToSetQuantity(solutionCode);\r\n\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n var minimumQuantity = $scope.GetMinimumQuantity(solution);\r\n\r\n if (solution.ProjectQuantity === minimumQuantity) {\r\n return;\r\n }\r\n\r\n if (solution.ProjectQuantity === 0) {\r\n return;\r\n }\r\n\r\n solution.ProjectQuantity--;\r\n };\r\n\r\n $scope.GetMinimumQuantity = function (solutionCode) {\r\n if (!solutionCode) {\r\n return 0;\r\n }\r\n\r\n var minimumQuantity = solutionCode.MinimumQuantity || 0;\r\n\r\n return minimumQuantity;\r\n }\r\n\r\n $scope.OnParticipantsQuantityChange = function (solution) {\r\n SetParticipantsList(solution);\r\n $scope.ReplicateValue(solution, 'ParticipantsQuantity');\r\n }\r\n\r\n $scope.OnDeleteParticipant = function (solution, index) {\r\n if (!solution || !solution.Participants || ((solution.Participants.length - 1) < index)) {\r\n return;\r\n }\r\n\r\n solution.Participants.splice(index, 1);\r\n solution.ParticipantsQuantity--;\r\n }\r\n\r\n function SetParticipantsList(solution) {\r\n var quantityToUpdate = (solution.ParticipantsQuantity - solution.Participants.length);\r\n\r\n if (quantityToUpdate > 0) {\r\n for (let i = 0; i < quantityToUpdate; i++) {\r\n solution.Participants.push('');\r\n }\r\n }\r\n else if (quantityToUpdate < 0) {\r\n solution.Participants = solution.Participants.slice(0, solution.ParticipantsQuantity);\r\n }\r\n }\r\n\r\n $scope.OnLinksToSendQuantityQuantityChange = function (solution) {\r\n SetLinksToSendList(solution);\r\n $scope.ReplicateValue(solution, 'LinksToSendQuantity');\r\n }\r\n\r\n $scope.OnDeleteLinkToSend = function (solution, index) {\r\n if (!solution || !solution.LinksToSend || ((solution.LinksToSend.length - 1) < index)) {\r\n return;\r\n }\r\n\r\n solution.LinksToSend.splice(index, 1);\r\n solution.LinksToSendQuantity--;\r\n }\r\n\r\n function SetLinksToSendList(solution) {\r\n var quantityToUpdate = (solution.LinksToSendQuantity - solution.LinksToSend.length);\r\n\r\n if (quantityToUpdate > 0) {\r\n for (let i = 0; i < quantityToUpdate; i++) {\r\n solution.LinksToSend.push('');\r\n }\r\n }\r\n else if (quantityToUpdate < 0) {\r\n solution.LinksToSend = solution.LinksToSend.slice(0, solution.LinksToSendQuantity);\r\n }\r\n }\r\n\r\n $scope.ShowProjectDetails = function () {\r\n var isFormValid = IsFormValid();\r\n\r\n if (!isFormValid) {\r\n $scope.ShowProjectDetailsInvalidFields = true;\r\n\r\n return;\r\n }\r\n\r\n SetProjectDetails();\r\n\r\n $scope.SendSequencer = $scope.StepProjectSequencer;\r\n $scope.StepProjectServiceRequest = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = true;\r\n $scope.StepProjectSubmitted = false;\r\n $scope.ShowProjectDetailsInvalidFields = false;\r\n }\r\n\r\n function SetProjectDetails() {\r\n var details = localStorage.getItem(\"ServiceProject.Details\");\r\n var projectType = $scope.Project.Details.ProjectType;\r\n\r\n if (details) {\r\n $scope.Project.Details = JSON.parse(details);\r\n }\r\n\r\n if ($scope.Project.Details) {\r\n if ($scope.Project.Details.ServiceProviderEmail) {\r\n $scope.Project.Details.ServiceProviderEmails = [];\r\n $scope.Project.Details.ServiceRequesterEmails = [];\r\n\r\n var emailsToAdd = $scope.Project.Details.ServiceProviderEmail.split(';');\r\n\r\n for (var i = 0; i < emailsToAdd.length; i++) {\r\n var emailToAdd = emailsToAdd[i];\r\n\r\n if (!emailToAdd.length) {\r\n continue;\r\n }\r\n\r\n $scope.Project.Details.ServiceProviderEmails.push(emailToAdd);\r\n }\r\n\r\n delete $scope.Project.Details.ServiceProviderEmail;\r\n }\r\n }\r\n else {\r\n $scope.Project.Details = {};\r\n }\r\n\r\n if (!$scope.Project.Details.ServiceProviderEmails) {\r\n $scope.Project.Details.ServiceProviderEmails = [];\r\n }\r\n\r\n if (!$scope.Project.Details.ServiceRequesterEmails) {\r\n $scope.Project.Details.ServiceRequesterEmails = [];\r\n }\r\n\r\n $scope.Project.Details.ProjectType = projectType;\r\n }\r\n\r\n function IsFormValid() {\r\n var solutionWithInvalidLocation = $scope.Project.Solutions.find(find => Helpers.Object.IsUndefinedEmptyOrNull(find.IsAtYourSite));\r\n\r\n if (solutionWithInvalidLocation) {\r\n Helpers.HTML.ScrollToElement(`solution_${solutionWithInvalidLocation.Id}`);\r\n\r\n GeneralModel.ShowToastWarning(\"Location is required!\");\r\n\r\n return false;\r\n }\r\n\r\n var solutionWithInvalidAddress = $scope.Project.Solutions.find(find => !find.Address && find.IsAtYourSite);\r\n\r\n if (solutionWithInvalidAddress) {\r\n Helpers.HTML.ScrollToElement(`solution_${solutionWithInvalidAddress.Id}`);\r\n Helpers.HTML.FocusElement(`Address_${solutionWithInvalidAddress.Id}`);\r\n\r\n GeneralModel.ShowToastWarning(\"Address is required!\");\r\n\r\n return false;\r\n }\r\n\r\n var solutionWithInvalidParticipantsQuantity = $scope.Project.Solutions.find(find => (Helpers.Object.IsUndefinedEmptyOrNull(find.ParticipantsQuantity) || (find.ParticipantsQuantity < 0)))\r\n\r\n if (solutionWithInvalidParticipantsQuantity) {\r\n Helpers.HTML.ScrollToElement(`solution_${solutionWithInvalidParticipantsQuantity.Id}`);\r\n Helpers.HTML.FocusElement(`ParticipantsQuantity_${solutionWithInvalidParticipantsQuantity.Id}`);\r\n\r\n GeneralModel.ShowToastWarning(\"Invalid participants quantity!\");\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n $scope.ProjectSubmit = function () {\r\n var isFormValid = IsProjectSubmitFormValid();\r\n\r\n if (isFormValid) {\r\n SendProject();\r\n\r\n return;\r\n }\r\n\r\n $scope.ShowProjectDetailsInvalidFields = true;\r\n }\r\n\r\n function IsProjectSubmitFormValid() {\r\n if (!$scope.Project.Details.ServiceRequesterEmails.length) {\r\n GeneralModel.ShowToastWarning(\"At least one Service Requester Email is required!\");\r\n\r\n return false;\r\n }\r\n\r\n var areEmailsValid = (ValidateEmails($scope.Project.Details.ServiceProviderEmails, false) && ValidateEmails($scope.Project.Details.ServiceRequesterEmails, true));\r\n\r\n if (areEmailsValid) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n $scope.ProjectComplete = function () {\r\n $scope.Project.Solutions = [];\r\n\r\n var solutionsToUpdate = $scope.Solutions.filter(filter => (filter.ProjectQuantity > 0));\r\n\r\n solutionsToUpdate.forEach(solutionToUpdate => {\r\n solutionToUpdate.ProjectQuantity = 0;\r\n solutionToUpdate.MinimumQuantity = 0;\r\n });\r\n\r\n $mdDialog.hide({\r\n contentElement: '#DialogProject'\r\n });\r\n }\r\n\r\n function ValidateEmails(emailsToValidate, required) {\r\n var existValidEmail = false;\r\n\r\n if (!emailsToValidate) {\r\n return !required;\r\n }\r\n\r\n for (var i = 0; i < emailsToValidate.length; i++) {\r\n var emailToValidate = emailsToValidate[i];\r\n\r\n if (!emailToValidate.length) {\r\n continue;\r\n }\r\n\r\n var emailValid = ValidateEmail(emailToValidate, true);\r\n\r\n if (!emailValid) {\r\n return false;\r\n }\r\n\r\n existValidEmail = true;\r\n }\r\n\r\n if (!existValidEmail && required) {\r\n GeneralModel.ShowToastWarning(\"You must insert at least one valid email.\");\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function ValidateEmail(emailToValidate, showErrorMessage) {\r\n if (/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(emailToValidate)) {\r\n return true;\r\n }\r\n\r\n if (showErrorMessage) {\r\n GeneralModel.ShowToastWarning(\"Email '\" + emailToValidate + \"' is invalid.\");\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function SendProject() {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var solutionsToSend = [];\r\n\r\n $scope.Project.Solutions.forEach(solution => {\r\n let solutionToSend = angular.copy(solution);\r\n\r\n delete solutionToSend.Characteristics;\r\n delete solutionToSend.Description;\r\n delete solutionToSend.Id;\r\n delete solutionToSend.QuantityToDuplicate;\r\n delete solutionToSend.Photography;\r\n\r\n solutionsToSend.push(solutionToSend);\r\n });\r\n\r\n if (!$scope.User) {\r\n delete $scope.Project.Details.ServiceProviderEmails;\r\n }\r\n\r\n var parameters = {\r\n Solutions: solutionsToSend,\r\n ProjectDetail: $scope.Project.Details,\r\n Language: $scope.LanguageSelected,\r\n SendSequencer: $scope.SendSequencer\r\n };\r\n\r\n $q.when(GeneralLoadData.GeneralPost(\"ServiceGuide\", \"Send\", parameters, userToken)).then(function () {\r\n localStorage.setItem(\"ServiceProject.Details\", JSON.stringify($scope.Project.Details));\r\n\r\n $scope.Project.Solutions = []\r\n $scope.StepProjectSolutions = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = true;\r\n\r\n CleanSequencer();\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n //#region CSV\r\n $scope.OpenImportCsvDialog = function () {\r\n $scope.File = '';\r\n $scope.generalModel.FullPageLoading = true;\r\n $scope.UploadBox = { Multiple: false, Pattern: '.csv', Accept: '.csv', Capture: 'camera', Validate: { size: { max: '1MB', min: '1B' }, height: { max: 12000 }, width: { max: 12000 } }, DragOverClass: { accept: 'dragover', reject: 'dragover-err', pattern: '*' }, Options: { debounce: 100 }, Resize: { width: 400, height: 400, centerCrop: false }, ResizeIf: '$width > 400 || $height > 400', FirefoxPaste: true };\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogImportCsv',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false\r\n });\r\n\r\n $scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n $scope.ImportCsv = function () {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var apiUrl = GetIp();\r\n var formData = new FormData();\r\n formData.append(\"\", $scope.File);\r\n\r\n var settings = {\r\n \"cache\": false,\r\n \"method\": 'POST',\r\n headers: { \"Content-Type\": undefined },\r\n };\r\n\r\n return $http.post(apiUrl + '/api/ServiceGuide/ImportCsv', formData, settings)\r\n .then(function (result) {\r\n ImportCsvData(result.data);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.CloseDialog('DialogImportCsv');\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n };\r\n\r\n $('#alt-style-pagination').pagination({\r\n items: 260,\r\n itemOnPage: $scope.ItemsPerPage,\r\n currentPage: $scope.CurrentPage,\r\n cssStyle: '',\r\n prevText: '',\r\n nextText: '',\r\n displayedPages: 4,\r\n edges: 1,\r\n ellipsePageSet: false,\r\n onInit: function () { },\r\n onPageClick: function (page, _evt) {\r\n $scope.CurrentPage = page;\r\n $scope.ScrollToTop('.ListSolutions');\r\n }\r\n });\r\n\r\n function ImportCsvData(solutionsImported) {\r\n solutionsImported.forEach(solutionImported => {\r\n var solution = GetSolutionByCode($scope.Solutions, solutionImported.Code);\r\n\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n if (isNaN(solution.MinimumQuantity)) {\r\n solution.MinimumQuantity = solutionImported.ProjectQuantity;\r\n }\r\n else {\r\n solution.MinimumQuantity = solution.MinimumQuantity + solutionImported.ProjectQuantity;\r\n }\r\n\r\n if (isNaN(solution.ProjectQuantity)) {\r\n solution.ProjectQuantity = solutionImported.ProjectQuantity;\r\n }\r\n else {\r\n solution.ProjectQuantity = solution.ProjectQuantity + solutionImported.ProjectQuantity;\r\n }\r\n\r\n var solutionToAdd = SetSolutionToAddInImportCsv(solution, solutionImported);\r\n\r\n solutionToAdd.Id = ++lastSolutionId;\r\n\r\n $scope.Project.Solutions.push(solutionToAdd);\r\n\r\n AddInSequencer(solutionToAdd);\r\n });\r\n };\r\n\r\n function SetSolutionToAddInImportCsv(solution, solutionFromCsv) {\r\n var solutionToAdd = angular.copy(solution);\r\n\r\n SetPropertyValueInt(solutionToAdd, solutionFromCsv, \"ParticipantsQuantity\");\r\n SetPropertyValueInt(solutionToAdd, solutionFromCsv, \"LinksToSendQuantity\");\r\n\r\n solutionToAdd.IsAtYourSite = solutionFromCsv.IsAtYourSite;\r\n solutionToAdd.ProjectQuantity = solutionFromCsv.ProjectQuantity;\r\n solutionToAdd.IsDojoRentalIncluded = solutionFromCsv.IsDojoRentalIncluded;\r\n solutionToAdd.IsCoffeeBreakIncluded = solutionFromCsv.IsCoffeeBreakIncluded;\r\n solutionToAdd.IsLunchIncluded = solutionFromCsv.IsLunchIncluded;\r\n solutionToAdd.IsSafetyTrainingIncluded = solutionFromCsv.IsSafetyTrainingIncluded;\r\n solutionToAdd.IsExpensesIncluded = solutionFromCsv.IsExpensesIncluded;\r\n solutionToAdd.IsSafetyEquipmentIncluded = solutionFromCsv.IsSafetyEquipmentIncluded;\r\n solutionToAdd.Participants = solutionFromCsv.Participants;\r\n solutionToAdd.LinksToSend = solutionFromCsv.LinksToSend;\r\n solutionToAdd.Address = solutionFromCsv.Address;\r\n solutionToAdd.RequestsToOpen = solutionFromCsv.RequestsToOpen;\r\n solutionToAdd.Notes = solutionFromCsv.Notes;\r\n\r\n return solutionToAdd;\r\n };\r\n\r\n function SetPropertyValueInt(solution, csvSolution, propertyName) {\r\n var valueToSet = parseInt(csvSolution[propertyName]);\r\n\r\n if (!valueToSet || isNaN(valueToSet)) {\r\n valueToSet = 0;\r\n }\r\n\r\n solution[propertyName] = valueToSet;\r\n };\r\n //#endregion\r\n\r\n function SetSolutionPages() {\r\n var numberOfPages = $scope.SolutionsFiltered.length / $scope.ItemsPerPage;\r\n\r\n if (numberOfPages > 1) {\r\n $scope.ShowInfoPages = true;\r\n } else {\r\n $scope.ShowInfoPages = false;\r\n }\r\n\r\n $scope.CurrentPage = 1;\r\n\r\n $('#alt-style-pagination').pagination('updateItems', numberOfPages);\r\n $scope.ScrollToTop('.ListSolutions');\r\n }\r\n\r\n function GetCodesFromCharacteristic(characteristic) {\r\n var codes = [];\r\n var isCharacteristicValid = ((characteristic.length % 2) === 0);\r\n\r\n if (!isCharacteristicValid) {\r\n return codes;\r\n }\r\n\r\n for (var i = 0; i < characteristic.length; i += 2) {\r\n codes.push(characteristic.substr(i, 2));\r\n }\r\n\r\n return codes;\r\n }\r\n\r\n function SelectCharacteristicOption(mainCode, optionCode) {\r\n var characteristics = $scope.Characteristics;\r\n\r\n var characteristic = characteristics.find(find => (find.Code === mainCode));\r\n\r\n if (!characteristic) {\r\n return;\r\n }\r\n\r\n if (optionCode.toUpperCase() === \"ALL\") {\r\n for (var i = 0; i < characteristic.CharacteristicOptions.length; i++) {\r\n var characteristicOption = characteristic.CharacteristicOptions[i];\r\n\r\n characteristicOption.Selected = true;\r\n }\r\n\r\n return;\r\n }\r\n\r\n var characteristicOption = characteristic.CharacteristicOptions.find(find => (find.Code === optionCode));\r\n\r\n if (!characteristicOption) {\r\n return;\r\n }\r\n\r\n characteristicOption.Selected = true;\r\n }\r\n\r\n function GetSelectedCharacteristicsOptions() {\r\n var selectedCharacteristicsToReturn = [];\r\n var selectedCharacteristics = $scope.Characteristics.filter(filter => filter.CharacteristicOptions.some(some => some.Selected));\r\n\r\n for (var i = 0; i < selectedCharacteristics.length; i++) {\r\n var selectedCharacteristicToAnalyse = selectedCharacteristics[i];\r\n\r\n var selectedCharacteristicsOptions = selectedCharacteristicToAnalyse.CharacteristicOptions.filter(filter => filter.Selected);\r\n\r\n if (selectedCharacteristicToAnalyse.CharacteristicOptions.length === selectedCharacteristicsOptions.length) {\r\n selectedCharacteristicsToReturn.push(selectedCharacteristicToAnalyse.Code);\r\n\r\n continue;\r\n }\r\n\r\n var optionCodes = selectedCharacteristicToAnalyse.Code;\r\n\r\n for (var j = 0; j < selectedCharacteristicsOptions.length; j++) {\r\n optionCodes += selectedCharacteristicsOptions[j].Code;\r\n }\r\n\r\n selectedCharacteristicsToReturn.push(optionCodes);\r\n }\r\n\r\n return selectedCharacteristicsToReturn;\r\n }\r\n\r\n //function GetSolutionsFromCsvInMenu(filename) {\r\n // $scope.generalModel.FullPageLoading = true;\r\n\r\n // var promises = [];\r\n\r\n // var parameters = {\r\n // filename: filename\r\n // };\r\n\r\n // promises.push(GeneralLoadData.GeneralGet(\"SolutionGuide\", \"GetSolutionsFromCsv\", parameters, null));\r\n\r\n // $q.all(promises).then(function (result) {\r\n // var results = result[0].data;\r\n\r\n // if (!results.length) {\r\n // GeneralModel.ShowToastWarning(Helpers.Translations.NoSolutionsWereFound);\r\n\r\n // return;\r\n // }\r\n\r\n // $scope.CloseMenus();\r\n // SetProjectSolutions(results);\r\n\r\n // if ($scope.HasSelectedSolutions()) {\r\n // $scope.OpenProjectDialog();\r\n // }\r\n // }).catch(function (reason) {\r\n // GeneralModel.ShowToastWarning(reason);\r\n // }).finally(function () {\r\n // $scope.generalModel.FullPageLoading = false;\r\n // });\r\n //}\r\n\r\n //#region Link\r\n function GetBaseUrl(isToSeo) {\r\n var baseUrl = $location.protocol() + '://' + $location.host();\r\n\r\n if ($location.port() !== '') {\r\n baseUrl += ':' + $location.port();\r\n }\r\n\r\n if (isToSeo) {\r\n baseUrl += '/Solution/';\r\n }\r\n else {\r\n baseUrl += '/SolutionConfigurator/ServiceConfigurator/';\r\n }\r\n\r\n return baseUrl;\r\n }\r\n\r\n $scope.CopyIndividualLink = function () {\r\n var url = GetIndividualLink($scope.SolutionSelected);\r\n\r\n CopyToClipboard(url);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.IndividualUrlCopied);\r\n }\r\n\r\n function GetIndividualLink(solution) {\r\n var url = GetBaseUrl();\r\n\r\n url = url.slice(0, -1);\r\n\r\n var json = \"?S=\" + solution.Code + \"&O=true\";\r\n\r\n url += json;\r\n\r\n url = url.replace(/ /g, \"%20\");\r\n\r\n return url;\r\n }\r\n\r\n function CopyToClipboard(textToCopy) {\r\n if (navigator && navigator.clipboard && navigator.clipboard.writeText) {\r\n navigator.clipboard.writeText(textToCopy);\r\n\r\n return;\r\n }\r\n\r\n var temporaryElement = document.createElement('textarea');\r\n\r\n temporaryElement.value = textToCopy;\r\n document.body.appendChild(temporaryElement);\r\n temporaryElement.select();\r\n document.execCommand('Copy');\r\n document.body.removeChild(temporaryElement);\r\n }\r\n\r\n $scope.CopyGeneralLink = function () {\r\n var url = GetBaseUrl();\r\n\r\n url = url.slice(0, -1);\r\n\r\n var selectedCharacteristicsOptions = GetSelectedCharacteristicsOptions();\r\n\r\n var json = \"?P=\" + $scope.CurrentPage;\r\n\r\n if (selectedCharacteristicsOptions && selectedCharacteristicsOptions.length) {\r\n json += \"&C=\" + selectedCharacteristicsOptions.toString();\r\n }\r\n\r\n if ($scope.SearchValues.length) {\r\n var searchValues = $scope.SearchValues.toString();\r\n\r\n json += \"&S=\" + searchValues;\r\n }\r\n\r\n if (json.length > 260) {\r\n GeneralModel.ShowToastWarning(Helpers.Translations.UrlMaxLengthReached);\r\n\r\n return;\r\n }\r\n\r\n url += json;\r\n\r\n CopyToClipboard(url);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.GeneralUrlCopied);\r\n }\r\n\r\n $scope.GetSolutionIndividualLink = function (solution) {\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n var link = GetIndividualLink(solution);\r\n\r\n return link;\r\n }\r\n //#endregion\r\n\r\n //#region Route\r\n function SetSearchValuesFromRoute() {\r\n if (!urlParameters || !urlParameters.S || !urlParameters.S.length) {\r\n return;\r\n }\r\n\r\n urlParameters.S.forEach(searchValue => {\r\n if (searchValue.length) {\r\n $scope.SearchValues.push(searchValue);\r\n }\r\n });\r\n\r\n Filter();\r\n }\r\n\r\n function SetCharacteristicsFromRoute() {\r\n if (!urlParameters || !urlParameters.C || !urlParameters.C.length) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < urlParameters.C.length; i++) {\r\n var characteristicToAnalyse = urlParameters.C[i];\r\n\r\n var codes = GetCodesFromCharacteristic(characteristicToAnalyse);\r\n\r\n if (!codes.length) {\r\n continue;\r\n }\r\n\r\n var mainCode = codes[0];\r\n\r\n if (codes.length === 1) {\r\n SelectCharacteristicOption(mainCode, 'ALL');\r\n\r\n continue;\r\n }\r\n\r\n for (var j = 1; j < codes.length; j++) {\r\n SelectCharacteristicOption(mainCode, codes[j])\r\n }\r\n }\r\n\r\n FilterCharacteristicOption();\r\n }\r\n\r\n function SetActivePageFromRoute() {\r\n if (!urlParameters || !urlParameters.P) {\r\n return;\r\n }\r\n\r\n var activePage = urlParameters.P;\r\n\r\n if (isNaN(activePage)) {\r\n return;\r\n }\r\n\r\n var numberOfPages = $scope.SolutionsFiltered.length / $scope.ItemsPerPage;\r\n\r\n if ((activePage >= 1) && (activePage <= numberOfPages)) {\r\n $scope.CurrentPage = activePage;\r\n\r\n $('#alt-style-pagination').pagination('selectPage', activePage);\r\n $scope.ScrollToTop('.ListSolutions');\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Emails\r\n $scope.AddEmail = function (originalEmail) {\r\n var values = originalEmail.split(/[ ,]+/);\r\n\r\n if (values.length < 2) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < values.length; i++) {\r\n var value = values[i].replace('<', '').replace('>', '');\r\n\r\n if (ValidateEmail(value, false)) {\r\n var emailPosition = $scope.Project.Details.Emails.indexOf(originalEmail);\r\n\r\n if (emailPosition > -1) {\r\n $scope.Project.Details.Emails[emailPosition] = value;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Help\r\n $scope.ApplyHelpFilter = function () {\r\n clearTimeout(delayHelpFilter);\r\n\r\n delayHelpFilter = setTimeout(function () {\r\n HelpFilter()\r\n }, 250);\r\n }\r\n\r\n $scope.OpenHelp = function () {\r\n $scope.HelpSearchValues = [];\r\n\r\n LoadHelp();\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogHelp',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false,\r\n })\r\n };\r\n\r\n $scope.CloseHelp = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogHelp'\r\n });\r\n }\r\n\r\n function HelpFilter() {\r\n var i;\r\n var helpLinksFiltered = [];\r\n\r\n if ($scope.HelpSearchValues.length) {\r\n for (i = 0; i < $scope.HelpLinks.length; i++) {\r\n var helpLinkToAnalyse = $scope.HelpLinks[i];\r\n\r\n for (var j = 0; j < $scope.HelpSearchValues.length; j++) {\r\n var searchValue = $scope.HelpSearchValues[j];\r\n\r\n if (searchValue) {\r\n searchValue = searchValue.toLowerCase().trim();\r\n\r\n if (helpLinkToAnalyse.Name.toLowerCase().trim().includes(searchValue)) {\r\n helpLinksFiltered.push(helpLinkToAnalyse);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n helpLinksFiltered = $scope.HelpLinks;\r\n }\r\n\r\n $timeout(function () {\r\n $scope.HelpLinksFiltered = helpLinksFiltered;\r\n });\r\n }\r\n\r\n function LoadHelp() {\r\n $scope.LoadingHelp = true;\r\n $scope.HelpLinks = [];\r\n $scope.HelpLinksFiltered = [];\r\n var parameters = { applicationCode: codes.Application.Services };\r\n\r\n GeneralLoadData.GeneralGet(\"Document\", \"List\", parameters, null).then(function (result) {\r\n $scope.HelpLinks = result.data;\r\n $scope.HelpLinksFiltered = $scope.HelpLinks;\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.LoadingHelp = false;\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Translations\r\n function SetTranslations() {\r\n var translations = webTranslations.find(first => (first.Language === $scope.LanguageSelected));\r\n\r\n Helpers.Translation.SetTranslations($sessionStorage, translations.Translations);\r\n }\r\n //#endregion\r\n\r\n //#region Zoom\r\n $scope.ApplyZoom = function (e) {\r\n if (!zoomObject) {\r\n SetZoomObject();\r\n }\r\n\r\n var lensPosition = GetLensPosition(e);\r\n\r\n SetZoomedPhotography(lensPosition);\r\n }\r\n\r\n function SetZoomObject() {\r\n var lens = document.getElementById(\"ZoomLens\");\r\n var photography = document.getElementById(\"Photography\");\r\n var individualSolutionPhotography = document.getElementById(\"IndividualSolutionPhotography\");\r\n\r\n var scaleX = 234 / lens.offsetWidth;\r\n var scaleY = 234 / lens.offsetHeight;\r\n\r\n zoomObject = {\r\n lens: lens,\r\n photography: photography,\r\n individualSolutionPhotography: individualSolutionPhotography,\r\n scaleX: scaleX,\r\n scaleY: scaleY\r\n };\r\n }\r\n\r\n function GetLensPosition(e) {\r\n var cursorPositions = GetCursorPositions(e);\r\n e.preventDefault();\r\n\r\n var lensPosition = {\r\n lensX: cursorPositions.cursorPositionX - (zoomObject.lens.offsetWidth / 2),\r\n lensY: cursorPositions.cursorPositionY - (zoomObject.lens.offsetHeight / 2)\r\n };\r\n\r\n CheckLensPosition(lensPosition, \"lensX\", zoomObject.photography.width, zoomObject.lens.offsetWidth);\r\n CheckLensPosition(lensPosition, \"lensY\", zoomObject.photography.height, zoomObject.lens.offsetHeight);\r\n\r\n AdjustLens(lensPosition);\r\n\r\n return lensPosition;\r\n }\r\n\r\n function SetZoomedPhotography(lensPosition) {\r\n var zoomedPhotography = document.getElementById(\"ZoomedPhotography\");\r\n\r\n if (!zoomedPhotography.style.backgroundSize) {\r\n zoomedPhotography.style.backgroundSize = (zoomObject.photography.width * zoomObject.scaleX) + \"px \" + (zoomObject.photography.height * zoomObject.scaleY) + \"px\";\r\n }\r\n\r\n zoomedPhotography.style.backgroundPosition = \"-\" + (lensPosition.lensX * zoomObject.scaleX) + \"px -\" + (lensPosition.lensY * zoomObject.scaleY) + \"px\";\r\n }\r\n\r\n function CheckLensPosition(lensPosition, measurement, photographyMax, offset) {\r\n if (lensPosition[measurement] > photographyMax - offset) {\r\n lensPosition[measurement] = photographyMax - offset;\r\n }\r\n\r\n if (lensPosition[measurement] < 0) {\r\n lensPosition[measurement] = 0;\r\n }\r\n }\r\n\r\n function AdjustLens(lensPosition) {\r\n zoomObject.lens.style.left = lensPosition.lensX + ((zoomObject.individualSolutionPhotography.offsetWidth - zoomObject.photography.width) / 2) + \"px\";\r\n zoomObject.lens.style.top = lensPosition.lensY + ((zoomObject.individualSolutionPhotography.offsetHeight - zoomObject.photography.height) / 2) + \"px\";\r\n }\r\n\r\n function GetCursorPositions(e) {\r\n var photographyPosition = zoomObject.photography.getBoundingClientRect();\r\n var pagePosition = e || window.event;\r\n\r\n var cursorPositionX = pagePosition.pageX - photographyPosition.left;\r\n var cursorPositionY = pagePosition.pageY - photographyPosition.top;\r\n\r\n cursorPositionX = cursorPositionX - window.pageXOffset;\r\n cursorPositionY = cursorPositionY - window.pageYOffset;\r\n\r\n var cursorPositions = { cursorPositionX: cursorPositionX, cursorPositionY: cursorPositionY };\r\n\r\n return cursorPositions;\r\n }\r\n\r\n $scope.HideLens = function () {\r\n $scope.ShowZoomLens = false;\r\n }\r\n\r\n $scope.ShowLens = function () {\r\n $scope.ShowZoomLens = true;\r\n }\r\n //#endregion\r\n\r\n //#region Download\r\n $scope.DownloadFile = function (file) {\r\n var fileName = file.Name + file.Extension;\r\n\r\n var parameters = {\r\n 'applicationCode': codes.Application.Services,\r\n 'fileName': fileName,\r\n 'folderName': $scope.SolutionSelected.Code\r\n };\r\n\r\n GeneralLoadData.PreviewFiles(\"Document\", \"DownloadFile\", parameters).then(function (result) {\r\n $scope.generalModel.DownloadResultBlob(result);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region SlideShow\r\n $scope.SetPhotography = function (photographyPositionToSet) {\r\n $scope.SolutionDetail.SelectedPhotographyIndex = photographyPositionToSet;\r\n }\r\n\r\n $scope.GoPreviousPhotography = function () {\r\n if ($scope.SolutionDetail.StartPhotographyIndex > 0) {\r\n $scope.SolutionDetail.StartPhotographyIndex--;\r\n }\r\n }\r\n\r\n $scope.GoNextPhotography = function () {\r\n var lastPosition = $scope.SolutionDetail.Photographies.length - 1;\r\n\r\n if (lastPosition > ($scope.SolutionDetail.StartPhotographyIndex + 2)) {\r\n $scope.SolutionDetail.StartPhotographyIndex++;\r\n }\r\n }\r\n\r\n $scope.ShowGoNextPhotography = function () {\r\n var lastPosition = $scope.SolutionDetail.Photographies.length - 1;\r\n\r\n if (lastPosition < 3) {\r\n return false;\r\n }\r\n\r\n if (lastPosition > ($scope.SolutionDetail.StartPhotographyIndex + 2)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n //#endregion\r\n\r\n //#region Menus\r\n function SetMenus(result, open) {\r\n $scope.Menus = result.data;\r\n\r\n if (!$scope.Menus.length) {\r\n return;\r\n }\r\n\r\n $scope.MenusHistory = [];\r\n $scope.MenusHistory.push($scope.Menus[0]);\r\n\r\n SetMenu();\r\n\r\n if (!open) {\r\n return;\r\n }\r\n\r\n $scope.OpenMenus();\r\n }\r\n\r\n function SetMenu() {\r\n var lastMenuIndex = $scope.MenusHistory.length - 1;\r\n\r\n $scope.SelectedMenu = $scope.MenusHistory[lastMenuIndex];\r\n\r\n ClearMenuSelectedOption();\r\n\r\n if ($scope.SelectedMenu.Photography) {\r\n return;\r\n }\r\n\r\n var parameters = {\r\n applicationCode: codes.Application.Services,\r\n menuCode: $scope.SelectedMenu.Code\r\n };\r\n\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n GeneralLoadData.GeneralGet(\"Menu\", \"ListPhotography\", parameters).then(function (result) {\r\n var photographies = result.data;\r\n var photography = photographies.find(find => (find.FileName.toUpperCase() === \"Menu\".toUpperCase()));\r\n\r\n if (photography) {\r\n $scope.SelectedMenu.Photography = $scope.GetPhotography(photography.FileArray);\r\n } else {\r\n $scope.SelectedMenu.Photography = $scope.GetPhotography();\r\n }\r\n\r\n for (var i = 0; i < $scope.SelectedMenu.MenuOptions.length; i++) {\r\n var menuOption = $scope.SelectedMenu.MenuOptions[i];\r\n photography = photographies.find(find => (find.FileName === menuOption.Code));\r\n\r\n if (photography) {\r\n menuOption.Photography = $scope.GetPhotography(photography.FileArray);\r\n } else {\r\n menuOption.Photography = $scope.GetPhotography();\r\n }\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n $scope.OpenMenus = function () {\r\n if (!document.getElementById('DialogMenus')) {\r\n return;\r\n }\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogMenus',\r\n parent: angular.element(document.body),\r\n multiple: false,\r\n clickOutsideToClose: false,\r\n });\r\n };\r\n\r\n $scope.CloseMenus = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogMenus'\r\n });\r\n\r\n ApplyMenuFilters();\r\n }\r\n\r\n function ApplyMenuFilters() {\r\n $scope.FilterClear();\r\n\r\n for (var i = 0; i < $scope.MenusHistory.length; i++) {\r\n var menuHistory = $scope.MenusHistory[i];\r\n var menuSelected = menuHistory.MenuOptions.find(find => find.Selected);\r\n\r\n if (!menuSelected) {\r\n continue;\r\n }\r\n\r\n var menuOptionsFilters = menuSelected.Filters;\r\n\r\n if (!menuOptionsFilters) {\r\n continue;\r\n }\r\n\r\n for (var k = 0; k < menuOptionsFilters.length; k++) {\r\n var menuOptionFilters = menuOptionsFilters[k];\r\n var index = menuOptionFilters.indexOf(\".\");\r\n var characteristicCode = menuOptionFilters.substr(0, index);\r\n var characteristic = $scope.Characteristics.find(find => (find.Code === characteristicCode));\r\n\r\n if (!characteristic) {\r\n continue;\r\n }\r\n\r\n var characteristicOptionCode = menuOptionFilters.substr(index + 1);\r\n var characteristicOption = characteristic.CharacteristicOptions.find(find => (find.Code === characteristicOptionCode));\r\n\r\n if (!characteristicOption) {\r\n continue;\r\n }\r\n\r\n characteristicOption.Selected = true;\r\n }\r\n }\r\n }\r\n\r\n $scope.MenuOptionClick = function (menuOption) {\r\n ClearMenuSelectedOption();\r\n\r\n menuOption.Selected = true;\r\n\r\n if (menuOption.Link) {\r\n Helpers.Page.OpenInNewTab(menuOption.Link);\r\n\r\n return;\r\n }\r\n\r\n if (menuOption.Csv) {\r\n //GetSolutionsFromCsvInMenu(menuOption.Csv);\r\n\r\n return;\r\n }\r\n\r\n if (menuOption.Menu) {\r\n var validNextMenu = NextMenu(menuOption);\r\n\r\n if (validNextMenu) {\r\n return;\r\n }\r\n }\r\n\r\n $scope.CloseMenus();\r\n }\r\n\r\n function NextMenu(menuOption) {\r\n var nextMenu = $scope.Menus.find(find => (find.Code === menuOption.Menu));\r\n\r\n if (!nextMenu) {\r\n return false;\r\n }\r\n\r\n $scope.MenusHistory.push(nextMenu);\r\n\r\n SetMenu();\r\n\r\n return true;\r\n }\r\n\r\n $scope.PreviousMenu = function () {\r\n $scope.MenusHistory.pop();\r\n\r\n SetMenu();\r\n }\r\n\r\n $scope.RestartMenus = function () {\r\n $scope.MenusHistory = [];\r\n\r\n $scope.MenusHistory.push($scope.Menus[0]);\r\n\r\n SetMenu();\r\n }\r\n\r\n function ClearMenuSelectedOption() {\r\n var selectedMenuOption = $scope.SelectedMenu.MenuOptions.find(find => find.Selected);\r\n\r\n if (selectedMenuOption) {\r\n selectedMenuOption.Selected = false;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Youtube Player\r\n $scope.GetVideoLink = function (link) {\r\n if (!link || !link.Url) {\r\n return;\r\n }\r\n\r\n var url = $sce.trustAsResourceUrl(link.Url);\r\n\r\n return url;\r\n };\r\n //#endregion\r\n\r\n //#region Files\r\n $scope.OnFileUpload = function (solution, file) {\r\n if (!solution || !file) {\r\n return;\r\n }\r\n\r\n var fileReader = new FileReader();\r\n\r\n fileReader.onload = function (e) {\r\n if (!fileToUpload) {\r\n return;\r\n }\r\n\r\n var fileInBase64 = e.target.result;\r\n\r\n fileInBase64 = fileInBase64.replace('data:' + fileToUpload.type + ';base64,', '');\r\n\r\n var fileToAdd = {\r\n FileType: fileToUpload.type,\r\n FileName: fileToUpload.name,\r\n FileInBase64: fileInBase64\r\n }\r\n\r\n solution.Files.push(fileToAdd);\r\n\r\n $scope.$apply();\r\n };\r\n\r\n var fileToUpload = file;\r\n\r\n fileReader.readAsDataURL(file);\r\n };\r\n\r\n $scope.OnDeleteFile = function (solution, file) {\r\n if (!solution || !solution.Files || !solution.Files.length || !file) {\r\n return;\r\n }\r\n\r\n solution.Files.remove(file);\r\n };\r\n\r\n $scope.GetFileImage = function (file) {\r\n if (!file || !file.FileType) {\r\n return 'images/FallBackImage.1739284541000.png';\r\n }\r\n\r\n switch (file.FileType) {\r\n case 'application/pdf':\r\n return 'images/file-icons/pdf.svg';\r\n case 'image/png':\r\n case 'image/jpeg':\r\n return $scope.GetPhotography(file.FileInBase64);\r\n case 'application/vnd.ms-excel':\r\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\r\n return 'images/file-icons/xls.svg';\r\n default:\r\n return 'images/file-icons/file.svg';\r\n }\r\n };\r\n\r\n function CleanFiles() {\r\n var solutionsWithFiles = $scope.Project.Solutions.filter(filter => (filter.Files && filter.Files.length));\r\n\r\n solutionsWithFiles.forEach(solutionWithFiles => {\r\n solutionWithFiles.Files = [];\r\n });\r\n };\r\n //#endregion\r\n\r\n //#region Login\r\n $scope.OpenLogin = function () {\r\n $scope.Logout();\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogLogin',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false\r\n });\r\n };\r\n\r\n $scope.Login = function (isFormValid) {\r\n if (!isFormValid) {\r\n $scope.LoginClicked = false;\r\n GeneralModel.ShowToastWarning(Helpers.Translations.InvalidLogin);\r\n\r\n return;\r\n }\r\n\r\n $scope.LoginClicked = false;\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var parameters = {\r\n 'username': $scope.LoginData.Username,\r\n 'password': $scope.LoginData.Password,\r\n 'grant_type': 'password'\r\n };\r\n\r\n GeneralLoadData.GetToken(parameters).then(function (result) {\r\n userToken = result.token_type + \" \" + result.access_token;\r\n\r\n var promise = GeneralLoadData.GeneralGet(\"User\", \"DetailsLogin\", {}, userToken, null, null, true);\r\n\r\n return promise;\r\n }).then(function (result) {\r\n $scope.User = {\r\n Name: result.data.Name,\r\n Email: result.data.Email,\r\n ClientName: result.data.ClientName,\r\n ServiceUploadFiles: result.data.ServiceUploadFiles\r\n }\r\n\r\n $scope.generalModel.CloseDialog('DialogLogin');\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n };\r\n\r\n $scope.Logout = function () {\r\n delete $scope.User;\r\n\r\n $scope.LoginClicked = false;\r\n $scope.LoginData = {};\r\n userToken = null;\r\n CleanFiles();\r\n };\r\n //#endregion\r\n\r\n //#region Sequencer\r\n $scope.HasSolutionsToSequence = function () {\r\n var hasSolutionsToSequence = ($scope.Project.Solutions && ($scope.Project.Solutions.length > 1));\r\n\r\n return hasSolutionsToSequence;\r\n };\r\n\r\n $scope.ShowProjectSequencer = function () {\r\n var isFormValid = IsFormValid();\r\n\r\n if (!isFormValid) {\r\n $scope.ShowProjectDetailsInvalidFields = true;\r\n\r\n return;\r\n }\r\n\r\n $timeout(SetSortable);\r\n\r\n $scope.SendSequencer = false;\r\n $scope.StepProjectServiceRequest = false;\r\n $scope.StepProjectSequencer = true;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n }\r\n\r\n function CleanSequencer() {\r\n $scope.Sequencer = {};\r\n $scope.Sequencer.Columns = [];\r\n };\r\n\r\n function AddInSequencer(solution, ignoreAddColumn) {\r\n var columnId = 1;\r\n\r\n if (solution.ColumnId) {\r\n columnId = solution.ColumnId;\r\n }\r\n else {\r\n solution.ColumnId = columnId;\r\n }\r\n\r\n var sequencerColumn = $scope.Sequencer.Columns.find(find => (find.Id === columnId));\r\n\r\n if (sequencerColumn) {\r\n solution.Order = sequencerColumn.Solutions.length;\r\n\r\n sequencerColumn.Solutions.push(solution);\r\n\r\n if (ignoreAddColumn) {\r\n return;\r\n }\r\n\r\n columnId = sequencerColumn.Solutions.length;\r\n\r\n let newColumn = {\r\n Id: columnId,\r\n Position: columnId,\r\n Solutions: []\r\n }\r\n\r\n $scope.Sequencer.Columns.push(newColumn);\r\n }\r\n else {\r\n solution.Order = 0;\r\n\r\n let newColumn = {\r\n Id: columnId,\r\n Position: columnId,\r\n Solutions: [solution]\r\n };\r\n\r\n $scope.Sequencer.Columns.push(newColumn);\r\n }\r\n };\r\n\r\n function RemoveInSequencer(solution) {\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n $scope.Sequencer.Columns.forEach(column => {\r\n var solutionToDelete = column.Solutions.find(find => (find.Id === solution.Id));\r\n\r\n if (solutionToDelete) {\r\n Reorder(column.ColumnId, solution.Order, null, false, solution.Id);\r\n\r\n column.Solutions.remove(solutionToDelete);\r\n\r\n if (!column.Solutions.length) {\r\n $scope.Sequencer.Columns.remove(column);\r\n }\r\n }\r\n });\r\n\r\n var columnToRemove = $scope.Sequencer.Columns.find(find => (find.Id === solution.Id));\r\n\r\n if (!columnToRemove || columnToRemove.Solutions.length) {\r\n return;\r\n }\r\n\r\n $scope.Sequencer.Columns.remove(columnToRemove);\r\n\r\n if ($scope.Project.Solutions.length === 1) {\r\n $scope.BackToStepProjectServiceRequest();\r\n }\r\n };\r\n\r\n function OrderColumn(columnId, setOrder) {\r\n var column = $scope.Sequencer.Columns.find(find => (find.Id === columnId));\r\n\r\n var solutionsOrdered = column.Solutions.sort(function (a, b) {\r\n if (a.Order < b.Order) {\r\n return -1;\r\n }\r\n\r\n if (a.Order > b.Order) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n if (setOrder) {\r\n var newOrder = 0;\r\n\r\n solutionsOrdered.forEach(solution => {\r\n solution.Order = newOrder;\r\n\r\n newOrder++;\r\n });\r\n }\r\n\r\n column.Solutions = solutionsOrdered;\r\n };\r\n\r\n $scope.BackToStepProjectServiceRequest = function (solution) {\r\n $scope.StepProjectServiceRequest = true;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n\r\n if (solution) {\r\n var elementId = \"solution_\" + solution.Id;\r\n\r\n $timeout(function () {\r\n Helpers.HTML.ScrollToElement(elementId);\r\n }, 200);\r\n }\r\n };\r\n\r\n $scope.GetNumberOfItems = function (columnId) {\r\n var column = $scope.Sequencer.Columns.find(find => (find.Id === columnId));\r\n\r\n if (!column || !column.Solutions) {\r\n return 0;\r\n }\r\n\r\n var numberOfItems = column.Solutions.length;\r\n\r\n return numberOfItems;\r\n };\r\n\r\n function SetSortable() {\r\n $('.SortableCards').each(function () {\r\n var columnId = $(this).attr('column-id');\r\n\r\n $(this).dxSortable({\r\n data: {\r\n ColumnId: columnId\r\n },\r\n group: 'tasksGroup',\r\n moveItemOnDrop: true,\r\n onDragEnd: function (e) {\r\n var oldColumnId = e.fromData.ColumnId;\r\n var newColumnId = e.toData.ColumnId;\r\n\r\n e.cancel = true;\r\n\r\n if ((oldColumnId === newColumnId) && (e.fromIndex === e.toIndex)) {\r\n return;\r\n }\r\n\r\n var solutionId = e.itemElement.attr('solution-id');\r\n\r\n if (oldColumnId !== newColumnId) {\r\n UpdatePosition(solutionId, oldColumnId, newColumnId, e.fromIndex, e.toIndex);\r\n\r\n return;\r\n }\r\n\r\n Reorder(solutionId, oldColumnId, e.fromIndex, e.toIndex);\r\n }\r\n });\r\n });\r\n\r\n Helpers.DevExtreme.Scroll.Refresh('#Kanban');\r\n Helpers.DevExtreme.Scroll.Refresh('.ScrollableCards');\r\n };\r\n\r\n function UpdatePosition(solutionId, oldColumnId, newColumnId, fromIndex, toIndex) {\r\n solutionId = +solutionId;\r\n oldColumnId = +oldColumnId;\r\n newColumnId = +newColumnId;\r\n\r\n var oldColumn = $scope.Sequencer.Columns.find(find => (find.Id === oldColumnId));\r\n var newColumn = $scope.Sequencer.Columns.find(find => (find.Id === newColumnId));\r\n var solution = oldColumn.Solutions.find(find => (find.Id === solutionId));\r\n\r\n oldColumn.Solutions.splice(fromIndex, 1);\r\n\r\n var solutionsToDecrementOrderInOldColumn = oldColumn.Solutions.filter(filter => (filter.Order > fromIndex));\r\n\r\n solutionsToDecrementOrderInOldColumn.forEach(solution => {\r\n solution.Order--;\r\n });\r\n\r\n var solutionsToIncrementOrderInNewColumn = newColumn.Solutions.filter(filter => (filter.Order >= toIndex));\r\n\r\n solution.ColumnId = newColumnId;\r\n solution.Order = toIndex;\r\n\r\n newColumn.Solutions.splice(toIndex, 0, solution);\r\n\r\n solutionsToIncrementOrderInNewColumn.forEach(solution => {\r\n solution.Order++;\r\n });\r\n\r\n $timeout($scope.$apply());\r\n }\r\n\r\n function Reorder(solutionId, columnId, fromIndex, toIndex) {\r\n solutionId = +solutionId;\r\n columnId = +columnId;\r\n\r\n var column = $scope.Sequencer.Columns.find(find => (find.Id === columnId));\r\n var solution = column.Solutions.find(find => (find.Id === solutionId));\r\n\r\n if (fromIndex < toIndex) {\r\n let solutionToDecrementOrder = column.Solutions.filter(filter => ((filter.Order > fromIndex) && (filter.Order <= toIndex)));\r\n\r\n solutionToDecrementOrder.forEach(solution => {\r\n solution.Order--;\r\n });\r\n\r\n }\r\n else if (fromIndex > toIndex) {\r\n let solutionsToIncrementOrder = column.Solutions.filter(filter => (filter.Order < fromIndex) && (filter.Order >= toIndex));\r\n\r\n solutionsToIncrementOrder.forEach(solution => {\r\n solution.Order++;\r\n });\r\n }\r\n\r\n solution.Order = toIndex;\r\n\r\n $timeout($scope.$apply());\r\n\r\n OrderColumn(columnId);\r\n }\r\n //#endregion\r\n\r\n //#region Filter Code Mask\r\n //#region Initialize\r\n function InitializeFilterCodeMask() {\r\n let maxLength = $scope.FilterCodeLength || 30;\r\n\r\n $scope.EditFilterCodeComponent = {\r\n Options: {\r\n bindingOptions: {\r\n value: 'EditFilterCodeComponent.Code'\r\n },\r\n mask: '9'.repeat(maxLength)\r\n }\r\n };\r\n }\r\n //#endregion\r\n\r\n //#region Modal\r\n $scope.OpenDialogFilterCode = function () {\r\n $scope.File = '';\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n $scope.EditFilterCodeComponent = {\r\n Code: angular.copy($scope.FilterCode).replace(/_/g, ' ')\r\n }\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogFilterCode',\r\n parent: angular.element(document.body),\r\n multiple: false,\r\n clickOutsideToClose: false\r\n });\r\n\r\n $scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n function CloseDialogFilterCode() {\r\n delete $scope.EditFilterCodeComponent.Code;\r\n\r\n $scope.generalModel.CloseDialog('DialogFilterCode');\r\n };\r\n //#endregion\r\n\r\n $scope.EditFilterCode = function () {\r\n let code = $scope.EditFilterCodeComponent.Code;\r\n\r\n SetSolutionFilters(code);\r\n CloseDialogFilterCode();\r\n };\r\n //#endregion\r\n });\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n myApp.controller('BuilderConfiguratorAppController', function ($scope, GeneralLoadData, GeneralModel, $q, $timeout, $mdDialog, GetIp, $http, $mdConstant, $sessionStorage, $sce, $stateParams, $location, $state) {\r\n var zoomObject, originalValue;\r\n var delayTimer, delayHelpFilter;\r\n var lastStructureId = 0;\r\n let detailsImported = {};\r\n\r\n $scope.Project = {\r\n Structures: [],\r\n Details: {}\r\n };\r\n\r\n $scope.StructuresProject = {\r\n Structures: []\r\n };\r\n\r\n $scope.Menus = [];\r\n $scope.SearchValues = [];\r\n $scope.HelpSearchValues = [];\r\n $scope.separatorKeysForEmails = [$mdConstant.KEY_CODE.ENTER, $mdConstant.KEY_CODE.COMMA, $mdConstant.KEY_CODE.SPACE, $mdConstant.KEY_CODE.SEMICOLO];\r\n $scope.ItemsPerPage = 60;\r\n $scope.CurrentPage = 1;\r\n $scope.ShowInfoPages = false;\r\n $scope.HasHelp = false;\r\n $scope.MenuOpen = false;\r\n $scope.CanUploadPhoto = (window.FileReader);\r\n $scope.EditFilterCodeComponent = {\r\n Options: {\r\n bindingOptions: {\r\n value: 'EditFilterCodeComponent.Code'\r\n }\r\n }\r\n };\r\n\r\n SetSEO();\r\n CleanStructureDetail();\r\n CleanSequencer();\r\n\r\n var urlParameters = null;\r\n\r\n this.$onInit = function () {\r\n $scope.generalModel = GeneralModel.model;\r\n $scope.generalModel.FullPageLoading = true;\r\n $scope.Helpers = Helpers;\r\n\r\n SetParameters();\r\n SetLanguages();\r\n SetSubmissionTypes();\r\n SetStructures(true);\r\n };\r\n\r\n function SetSubmissionTypes() {\r\n $scope.SubmissiontTypes = [{\r\n Code: \"01\",\r\n Description: Helpers.Translations.Draft\r\n }, {\r\n Code: \"02\",\r\n Description: Helpers.Translations.AssemblyCuttingList\r\n }, {\r\n Code: \"03\",\r\n Description: Helpers.Translations.ProposalRequest\r\n }];\r\n }\r\n\r\n function SetParameters() {\r\n if ($stateParams.P) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.P = parseInt($stateParams.P);\r\n }\r\n\r\n if ($stateParams.C) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.C = $stateParams.C.split(\",\");\r\n }\r\n\r\n if ($stateParams.S) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.S = $stateParams.S.split(\",\");\r\n }\r\n\r\n if ($stateParams.O) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.O = ($stateParams.O.toUpperCase() === \"TRUE\");\r\n }\r\n }\r\n\r\n function SetLanguages() {\r\n $scope.LanguageSelected = localStorage.getItem(\"languageSelected\");\r\n\r\n if (!$scope.LanguageSelected) {\r\n $scope.LanguageSelected = \"EN\";\r\n }\r\n\r\n $scope.Languages = [\"EN\", \"ES\", \"FR\", \"IT\", \"PT\"].reverse();\r\n\r\n SetTranslations();\r\n }\r\n\r\n $scope.GetLanguagePhotography = function (flag) {\r\n var photography = \"images/flags/\" + flag.toLowerCase() + \".1739284541000.png\";\r\n\r\n var findElement = $(\"#Language\" + flag);\r\n findElement.attr(\"alt\", flag);\r\n findElement.attr(\"title\", flag);\r\n\r\n return photography;\r\n }\r\n\r\n $scope.ChangeLanguage = function (language) {\r\n $scope.generalModel.FullPageLoading = true;\r\n $scope.LanguageSelected = language;\r\n\r\n localStorage.setItem(\"languageSelected\", language);\r\n\r\n SetTranslations();\r\n SetStructures(false);\r\n }\r\n\r\n $scope.ApplyFilter = function () {\r\n clearTimeout(delayTimer);\r\n\r\n delayTimer = setTimeout(function () {\r\n Filter()\r\n }, 250);\r\n }\r\n\r\n $scope.GetCharacteristicsPhotographies = function (structureCode, characteristicMainCode) {\r\n if (!structureCode) {\r\n return false;\r\n }\r\n\r\n if (!characteristicMainCode || (characteristicMainCode === structureCode.substr(0, 2))) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function SetStructures(checkStructures) {\r\n $scope.HasHelp = false;\r\n\r\n var promises = [];\r\n var openMenu = !urlParameters;\r\n\r\n var parameters = {\r\n languageId: $scope.LanguageSelected\r\n };\r\n\r\n promises.push(GeneralLoadData.GeneralGet(\"BuilderConfigurator\", \"Get\", parameters, null));\r\n\r\n parameters = {\r\n applicationCode: codes.Application.Builder\r\n };\r\n\r\n promises.push(GeneralLoadData.GeneralGet(\"Document\", \"CheckIfExists\", parameters, null));\r\n\r\n parameters = {\r\n applicationCode: codes.Application.Builder,\r\n languageId: $scope.LanguageSelected\r\n };\r\n\r\n promises.push(GeneralLoadData.GeneralGet(\"Menu\", \"Get\", parameters, null));\r\n\r\n $q.all(promises).then(function (result) {\r\n $scope.Structures = result[0].data.Structures;\r\n $scope.StructuresFiltered = result[0].data.Structures;\r\n $scope.Characteristics = result[0].data.Characteristics;\r\n $scope.Orientations = result[0].data.Orientations;\r\n $scope.Slopes = result[0].data.Slopes;\r\n $scope.SlopeDirections = result[0].data.SlopeDirections;\r\n $scope.HUSupportTypes = result[0].data.HUSupportTypes;\r\n $scope.HUSupports = result[0].data.HUSupports;\r\n $scope.RollJoints = result[0].data.RollJoints;\r\n $scope.GuideTypes = result[0].data.GuideTypes;\r\n $scope.Types = result[0].data.Types;\r\n $scope.ContactTypes = result[0].data.ContactTypes;\r\n $scope.SalesPersons = result[0].data.SalesPersons;\r\n $scope.Markets = result[0].data.Markets;\r\n $scope.RequestTypes = result[0].data.RequestTypes;\r\n $scope.AssemblyTypes = result[0].data.AssemblyTypes;\r\n $scope.InternalExternalMeasures = result[0].data.InternalExternalMeasures;\r\n $scope.ProfileSupportQuantities = result[0].data.ProfileSupportQuantities;\r\n\r\n $scope.HasHelp = result[1].data;\r\n\r\n SetMenus(result[2], openMenu);\r\n\r\n $scope.FilterDescriptionLength = 14 * 3;\r\n $scope.FilterCodeLength = Math.max.apply(Math, $scope.Characteristics.map(function (characteristic) { return characteristic.StartIndex; })) + 2;\r\n $scope.FilterCode = ''.padEnd($scope.FilterCodeLength, '_');\r\n $scope.FilterDescription = ''.padEnd($scope.FilterDescriptionLength, ' | ');\r\n\r\n $scope.SearchValues = [];\r\n\r\n InitializeFilterCodeMask();\r\n SetStructurePages();\r\n SetStructureQrCodes();\r\n\r\n var firstCharacteristic = $scope.Characteristics[0];\r\n\r\n $scope.Characteristics[0].Visible = true;\r\n\r\n SetSearchValuesFromRoute();\r\n SetCharacteristicsFromRoute();\r\n\r\n $timeout(function () {\r\n FilterCharacteristicOption(firstCharacteristic);\r\n\r\n if (checkStructures) {\r\n SetStructuresSubmitted();\r\n\r\n if ($scope.StructuresProject && $scope.StructuresProject.Structures.length) {\r\n $scope.OpenStructures();\r\n }\r\n }\r\n });\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n OpenStructureDetailsFromSearchValues();\r\n\r\n $scope.generalModel.FullPageLoading = false;\r\n\r\n urlParameters = null;\r\n });\r\n }\r\n\r\n function InitializeFilterCodeMask() {\r\n $(\"#EditFilterCodeComponent\").dxTextBox(\"instance\").option(\"mask\", '9'.repeat($scope.FilterCodeLength));\r\n }\r\n\r\n $scope.CopyIndividualViewLink = function () {\r\n var url = GetBaseUrl();\r\n\r\n url = url.slice(0, -1);\r\n\r\n var json = \"?S=\" + $scope.StructureSelected.Code + \"&O=true\";\r\n\r\n url += json;\r\n\r\n url = url.replace(/ /g, \"%20\");\r\n\r\n CopyToClipboard(url);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.IndividualUrlCopied);\r\n }\r\n\r\n function GetBaseUrl() {\r\n var baseUrl = $location.protocol() + \"://\" + $location.host();\r\n\r\n if ($location.port() !== '') {\r\n baseUrl += ':' + $location.port();\r\n }\r\n\r\n baseUrl += \"/SolutionConfigurator/StructureBuilderConfigurator/\";\r\n\r\n return baseUrl;\r\n }\r\n\r\n $scope.OpenStructureDetail = function (structure) {\r\n $scope.StructureSelected = structure;\r\n\r\n SetStructureDetail();\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogSolutionDetail',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false,\r\n onComplete: function () {\r\n SetProjectQuantity();\r\n }\r\n });\r\n }\r\n\r\n function OpenStructureDetailsFromSearchValues() {\r\n if (!urlParameters || (urlParameters.O !== true) || !urlParameters.S) {\r\n return;\r\n }\r\n\r\n if (urlParameters.S.length !== 1) {\r\n return;\r\n }\r\n\r\n var searchValue = urlParameters.S[0];\r\n var structure = $scope.Structures.find(find => (find.Code === searchValue));\r\n\r\n if (structure) {\r\n $scope.OpenStructureDetail(structure);\r\n }\r\n }\r\n\r\n $scope.CloseStructureDetail = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogSolutionDetail'\r\n });\r\n\r\n CleanStructureDetail();\r\n }\r\n\r\n function GetStructureByCode(structures, code) {\r\n var structure = structures.find(first => (first.Code === code));\r\n\r\n return structure;\r\n }\r\n\r\n $scope.GetIndexStructureSelected = function () {\r\n if ($scope.StructuresFiltered === undefined) {\r\n return null;\r\n }\r\n\r\n var indexStructureSelected = $scope.StructuresFiltered.indexOf($scope.StructureSelected);\r\n\r\n return indexStructureSelected;\r\n }\r\n\r\n $scope.ShowPreviousStructureDetail = function () {\r\n if ($scope.StructuresFiltered === undefined) {\r\n return false;\r\n }\r\n\r\n var indexStructureSelected = $scope.GetIndexStructureSelected();\r\n var show = (indexStructureSelected !== 0);\r\n\r\n return show;\r\n }\r\n\r\n $scope.PreviousStructureDetail = function () {\r\n var indexStructureSelected = $scope.GetIndexStructureSelected();\r\n $scope.StructureSelected = $scope.StructuresFiltered[indexStructureSelected - 1];\r\n\r\n SetStructureDetail();\r\n SetProjectQuantity();\r\n }\r\n\r\n $scope.ShowNextStructureDetail = function () {\r\n if ($scope.StructuresFiltered === undefined) {\r\n return false;\r\n }\r\n\r\n var indexStructureSelected = $scope.GetIndexStructureSelected();\r\n var show = (indexStructureSelected !== ($scope.StructuresFiltered.length - 1));\r\n\r\n return show;\r\n }\r\n\r\n $scope.NextStructureDetail = function () {\r\n var indexStructureSelected = $scope.GetIndexStructureSelected();\r\n $scope.StructureSelected = $scope.StructuresFiltered[indexStructureSelected + 1];\r\n\r\n SetStructureDetail();\r\n SetProjectQuantity();\r\n }\r\n\r\n $scope.OpenCloseFilter = function (e) {\r\n var content = e.target.nextElementSibling;\r\n\r\n e.target.classList.toggle(\"active\");\r\n\r\n if (content.style.maxHeight) {\r\n content.style.maxHeight = null;\r\n content.parentElement.style.paddingBottom = null;\r\n } else {\r\n CalculateMaxHeight(content);\r\n }\r\n }\r\n\r\n $(window).resize(function () {\r\n var characteristicsOptionsElements = document.getElementsByClassName(\"CharacteristicOptions\");\r\n var characteristicsOptionsElementsLength = characteristicsOptionsElements.length;\r\n\r\n for (var i = 0; i < characteristicsOptionsElementsLength; i++) {\r\n var characteristicsOptionsElement = characteristicsOptionsElements[i];\r\n\r\n if (characteristicsOptionsElement.style.maxHeight) {\r\n CalculateMaxHeight(characteristicsOptionsElement);\r\n }\r\n }\r\n });\r\n\r\n function CalculateMaxHeight(characteristicsOptionsElement) {\r\n characteristicsOptionsElement.style.maxHeight = characteristicsOptionsElement.scrollHeight + \"px\";\r\n characteristicsOptionsElement.parentElement.style.paddingBottom = \"15px\";\r\n }\r\n\r\n $scope.FilterClearShow = function () {\r\n if ($scope.Characteristics === undefined) {\r\n return false;\r\n }\r\n\r\n var show = $scope.Characteristics.filter(where => where.CharacteristicOptions.filter(secondWhere => secondWhere.Selected).length).length;\r\n\r\n return show;\r\n }\r\n\r\n $scope.FilterClear = function () {\r\n var characteristics = $scope.Characteristics;\r\n var characteristicsLength = characteristics.length;\r\n\r\n for (var i = 0; i < characteristicsLength; i++) {\r\n var characteristic = characteristics[i];\r\n var characteristicOptions = characteristic.CharacteristicOptions.filter(where => where.Selected);\r\n var characteristicOptionsLength = characteristicOptions.length;\r\n\r\n for (var j = 0; j < characteristicOptionsLength; j++) {\r\n var characteristicOption = characteristicOptions[j];\r\n\r\n characteristicOption.Selected = false;\r\n }\r\n\r\n if (i > 0) {\r\n characteristic.Visible = false;\r\n }\r\n }\r\n\r\n $scope.FilterCode = ''.padEnd($scope.FilterCodeLength, '_');\r\n $scope.FilterDescription = ''.padEnd($scope.FilterDescriptionLength, ' | ');\r\n\r\n FilterCharacteristicOption($scope.Characteristics[0], true);\r\n }\r\n\r\n function FilterClearCharacteristicsOptions() {\r\n var firtsCharacteristicCode = $scope.Characteristics[0].Code;\r\n var characteristics = $scope.Characteristics.filter(where => ((where.Code !== firtsCharacteristicCode) && where.CharacteristicOptions.filter(secondWhere => secondWhere.Selected).length));\r\n var characteristicsLength = characteristics.length;\r\n\r\n for (var i = 0; i < characteristicsLength; i++) {\r\n var characteristic = characteristics[i];\r\n var characteristicOptions = characteristic.CharacteristicOptions.filter(where => where.Selected);\r\n var characteristicOptionsLength = characteristicOptions.length;\r\n\r\n for (var j = 0; j < characteristicOptionsLength; j++) {\r\n var characteristicOption = characteristicOptions[j];\r\n\r\n characteristicOption.Selected = false;\r\n }\r\n }\r\n }\r\n\r\n $scope.GetCharacteristicOptionCount = function (characteristic, characteristicOption) {\r\n var count = $scope.StructuresFiltered.filter(where => (where.Code.substr(characteristic.StartIndex, 2) === characteristicOption.Code)).length;\r\n\r\n return count;\r\n }\r\n\r\n $scope.GetCheckBoxEditor = function () {\r\n this.characteristicOption.Selected = this.characteristicOption.Selected || false;\r\n\r\n var checkBoxEditor = {\r\n bindingOptions: {\r\n value: \"characteristicOption.Selected\"\r\n },\r\n elementAttr: {\r\n class: \"CharacteristicOptionCheckBox\"\r\n },\r\n onValueChanged: function (e) {\r\n clearTimeout(delayTimer);\r\n var characteristic = this.$parent.characteristic;\r\n var selectedOptionCode = e.model.$parent.characteristicOption.Code;\r\n var characteriticCode = this.$parent.characteristic.Code;\r\n\r\n if ((characteriticCode === $scope.Characteristics[0].Code) && !$scope.MenuOpen) {\r\n FilterClearCharacteristicsOptions();\r\n }\r\n\r\n if (!e.previousValue) {\r\n SetSelectedMainCharacteristic(characteristic, selectedOptionCode);\r\n }\r\n\r\n var mainCharacteristicsSelected = $scope.Characteristics[0].CharacteristicOptions.some(some => some.Selected);\r\n\r\n if (!mainCharacteristicsSelected) {\r\n $scope.FilterClear();\r\n }\r\n\r\n delayTimer = setTimeout(function () {\r\n FilterCharacteristicOption(characteristic);\r\n }, 250);\r\n }\r\n };\r\n\r\n return checkBoxEditor;\r\n }\r\n\r\n function SetSelectedMainCharacteristic(characteristic, characteristicOptionCode) {\r\n if (characteristic.Code !== $scope.Characteristics[0].Code) {\r\n return;\r\n }\r\n\r\n var selectedCharacteristicOption;\r\n var characteristicOptions = $scope.Characteristics[0].CharacteristicOptions;\r\n var selectedCharacteristicsOptions = characteristicOptions.filter(filter => filter.Selected);\r\n\r\n for (var i = 0; i < selectedCharacteristicsOptions.length; i++) {\r\n selectedCharacteristicOption = selectedCharacteristicsOptions[i];\r\n\r\n selectedCharacteristicOption.Selected = false;\r\n }\r\n\r\n selectedCharacteristicOption = characteristicOptions.find(find => (find.Code === characteristicOptionCode));\r\n selectedCharacteristicOption.Selected = true;\r\n\r\n for (i = 0; i < $scope.Characteristics.length; i++) {\r\n characteristic = $scope.Characteristics[i];\r\n\r\n var visible = !characteristic.MainCode || (characteristic.MainCode === selectedCharacteristicOption.Code);\r\n\r\n characteristic.Visible = visible;\r\n }\r\n\r\n ResetFilterCodeAndDescription();\r\n }\r\n\r\n function FilterCharacteristicOption(characteristic, ignoreApplyFilter) {\r\n var characteristicOptionCode = \"__\";\r\n var characteristicOptionDescription = \"\";\r\n\r\n var characteristicOptionsSelected = characteristic.CharacteristicOptions.filter(where => (where.Selected));\r\n\r\n if (characteristicOptionsSelected.length === 1) {\r\n characteristicOptionCode = characteristicOptionsSelected[0].Code;\r\n characteristicOptionDescription = characteristicOptionsSelected[0].Description;\r\n }\r\n\r\n $scope.FilterCode = $scope.FilterCode.substr(0, characteristic.StartIndex) + characteristicOptionCode + $scope.FilterCode.substr(characteristic.StartIndex + 2);\r\n\r\n var characteristicsVisibles = $scope.Characteristics.filter(filter => filter.Visible);\r\n var characteristicIndex = characteristicsVisibles.indexOf(characteristic);\r\n var filterDescriptionSplited = $scope.FilterDescription.split(' | ');\r\n $scope.FilterDescription = \"\";\r\n\r\n for (var i = 0; i < filterDescriptionSplited.length; i++) {\r\n if (i === characteristicIndex) {\r\n $scope.FilterDescription += characteristicOptionDescription;\r\n }\r\n else {\r\n $scope.FilterDescription += filterDescriptionSplited[i];\r\n }\r\n\r\n if (i !== (filterDescriptionSplited.length - 1)) {\r\n $scope.FilterDescription += \" | \";\r\n }\r\n }\r\n\r\n if (ignoreApplyFilter) {\r\n return;\r\n }\r\n\r\n Filter();\r\n };\r\n\r\n function Filter() {\r\n var i;\r\n var structuresFiltered = [];\r\n\r\n if ($scope.SearchValues.length) {\r\n for (i = 0; i < $scope.Structures.length; i++) {\r\n var structureToAnalyse = $scope.Structures[i];\r\n\r\n for (var j = 0; j < $scope.SearchValues.length; j++) {\r\n var searchValue = $scope.SearchValues[j];\r\n\r\n if (searchValue) {\r\n searchValue = searchValue.toLowerCase().trim();\r\n\r\n if (structureToAnalyse.Code.toLowerCase().trim().includes(searchValue)) {\r\n structuresFiltered.push(structureToAnalyse);\r\n\r\n break;\r\n }\r\n\r\n if (structureToAnalyse.Description.toLowerCase().trim().includes(searchValue)) {\r\n structuresFiltered.push(structureToAnalyse);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n structuresFiltered = $scope.Structures;\r\n }\r\n\r\n if (structuresFiltered.length) {\r\n for (i = 0; i < $scope.Characteristics.length; i++) {\r\n var characteristicsItem = $scope.Characteristics[i];\r\n var characteristicOptionCodes = characteristicsItem.CharacteristicOptions.filter(where => (where.Selected)).map(function (characteristicOption) { return characteristicOption.Code; });\r\n\r\n if (!characteristicOptionCodes.length || (characteristicOptionCodes.length === characteristicsItem.CharacteristicOptions.length)) {\r\n continue;\r\n }\r\n\r\n structuresFiltered = structuresFiltered.filter(where => characteristicOptionCodes.includes(where.Code.substr(characteristicsItem.StartIndex, 2)));\r\n\r\n if (!structuresFiltered.length) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n SetDefaultStructure(structuresFiltered);\r\n\r\n $timeout(function () {\r\n $scope.StructuresFiltered = structuresFiltered;\r\n SetStructureQrCodes();\r\n SetStructurePages();\r\n SetActivePageFromRoute();\r\n });\r\n }\r\n\r\n $scope.EditFilterCode = function () {\r\n let code = $scope.EditFilterCodeComponent.Code;\r\n\r\n SetStructureFilters(code);\r\n CloseDialogFilterCode();\r\n };\r\n\r\n $scope.OpenDialogFilterCode = function () {\r\n $scope.File = '';\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n $scope.EditFilterCodeComponent = {\r\n Code: angular.copy($scope.FilterCode).replace(/_/g, ' ')\r\n }\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogFilterCode',\r\n parent: angular.element(document.body),\r\n multiple: false,\r\n clickOutsideToClose: false\r\n });\r\n\r\n $scope.generalModel.FullPageLoading = false;\r\n\r\n $timeout(function () {\r\n let dxTextBoxInstance = $(\"#EditFilterCodeComponent\").dxTextBox(\"instance\");\r\n\r\n if (dxTextBoxInstance) {\r\n dxTextBoxInstance.focus();\r\n }\r\n }, 0);\r\n };\r\n\r\n function CloseDialogFilterCode() {\r\n delete $scope.EditFilterCodeComponent.Code;\r\n\r\n $scope.generalModel.CloseDialog('DialogFilterCode');\r\n };\r\n\r\n function SetDefaultStructure(structuresFiltered) {\r\n var defaultStructure = $scope.Structures.find(find => (find.Code === codes.BlankStructureCode));\r\n\r\n if (!defaultStructure) {\r\n return;\r\n }\r\n\r\n var defaultStructureInFilter = structuresFiltered.find(find => (find.Code === codes.BlankStructureCode));\r\n\r\n if (!defaultStructureInFilter) {\r\n structuresFiltered.push(defaultStructure);\r\n }\r\n }\r\n\r\n function ResetFilterCodeAndDescription() {\r\n $scope.FilterDescriptionLength = 14 * 3;\r\n\r\n $scope.FilterCodeLength = Math.max.apply(Math, $scope.Characteristics.filter(filter => filter.Visible).map(function (characteristic) { return characteristic.StartIndex; })) + 2;\r\n $scope.FilterCode = ''.padEnd($scope.FilterCodeLength, '_');\r\n $scope.FilterDescription = ''.padEnd($scope.FilterDescriptionLength, ' | ');\r\n\r\n InitializeFilterCodeMask();\r\n\r\n var characteristicsVisibles = $scope.Characteristics.filter(filter => filter.Visible);\r\n\r\n for (var i = 0; i < characteristicsVisibles.length; i++) {\r\n var characteristic = characteristicsVisibles[i]\r\n\r\n FilterCharacteristicOption(characteristic, true);\r\n }\r\n }\r\n\r\n function SetStructureQrCodes() {\r\n $timeout(function () {\r\n for (var i = 0; i < $scope.StructuresFiltered.length; i++) {\r\n var structure = $scope.StructuresFiltered[i];\r\n\r\n SetQrCode(\"Qr\", structure);\r\n }\r\n });\r\n }\r\n\r\n function SetStructureDetailQrCode() {\r\n $timeout(function () {\r\n SetQrCode(\"QrStructureDetail\", $scope.StructureSelected);\r\n });\r\n }\r\n\r\n function SetQrCode(id, structure) {\r\n $(\"#\" + id + structure.Code).ClassyQR({\r\n size: 90,\r\n type: 'text',\r\n text: structure.Code\r\n });\r\n }\r\n\r\n $scope.GetPhotography = function (photography) {\r\n if ($scope.generalModel.IsUndefinedEmptyOrNull(photography)) {\r\n photography = 'images/FallBackImage.1739284541000.png';\r\n }\r\n else {\r\n photography = 'data:image/jpg;base64,' + photography;\r\n }\r\n\r\n return photography;\r\n };\r\n\r\n $scope.GetStructurePhotography = function (structure) {\r\n var photography;\r\n\r\n if (!structure) {\r\n photography = $scope.GetPhotography(null);\r\n\r\n return photography;\r\n }\r\n\r\n if (structure.Photography) {\r\n photography = $scope.GetPhotography(structure.Photography);\r\n\r\n return photography;\r\n }\r\n\r\n GetStructurePhotographyFromServer(structure.Code);\r\n\r\n photography = $scope.GetPhotography(null);\r\n\r\n return photography;\r\n };\r\n\r\n function GetStructurePhotographyFromServer(structureCode, specificStructure) {\r\n var structureCodeToGet;\r\n\r\n if (structureCode) {\r\n structureCodeToGet = structureCode;\r\n } else {\r\n structureCodeToGet = specificStructure.Code;\r\n }\r\n\r\n var structureFiltered = GetStructureByCode($scope.StructuresFiltered, structureCodeToGet);\r\n var structure = GetStructureByCode($scope.Structures, structureCodeToGet);\r\n\r\n structure.Photography = \" \";\r\n structureFiltered.Photography = \" \";\r\n\r\n var parameters = {\r\n structureId: structureCodeToGet\r\n };\r\n\r\n $q.when(GeneralLoadData.GeneralGet(\"BuilderConfigurator\", \"GetStructurePhotography\", parameters, null)).then(function (result) {\r\n structure.Photography = result.data;\r\n structureFiltered.Photography = result.data;\r\n\r\n if (specificStructure) {\r\n specificStructure.Photography = result.data;\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n }\r\n\r\n $scope.GetCharacteristicOptionPhotography = function (id, structure, characteristic) {\r\n var photography;\r\n\r\n if (structure === undefined) {\r\n return photography;\r\n }\r\n\r\n var title = characteristic.Description + \" -> \";\r\n var characteristicOptionCode = structure.Code.substr(characteristic.StartIndex, 2);\r\n var characteristicOption = characteristic.CharacteristicOptions.filter(where => (where.Code === characteristicOptionCode))[0];\r\n\r\n if (characteristicOption !== undefined) {\r\n photography = characteristicOption.Photography;\r\n title += characteristicOption.Description;\r\n }\r\n\r\n var findElement = $(\"#\" + id + structure.Code + characteristic.Code);\r\n findElement.attr(\"alt\", title);\r\n findElement.attr(\"title\", title);\r\n\r\n photography = $scope.GetPhotography(photography);\r\n\r\n return photography;\r\n }\r\n\r\n $scope.ScrollbarOptions = {\r\n \"onScroll\": function (y) {\r\n var buttonTopVisibility = (y.scroll > 100);\r\n\r\n if (buttonTopVisibility !== $scope.ButtonTopVisibility) {\r\n $timeout(function () {\r\n $scope.ButtonTopVisibility = buttonTopVisibility;\r\n });\r\n }\r\n }\r\n };\r\n\r\n $scope.ScrollToTop = function (elementId) {\r\n angular.element(elementId).animate({ scrollTop: 0 }, 400);\r\n };\r\n\r\n $scope.Copy = function (elementId, event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n var element = document.getElementById(elementId);\r\n var selection = window.getSelection();\r\n var range = document.createRange();\r\n\r\n range.selectNodeContents(element);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n document.execCommand(\"Copy\");\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.Copied + \": \" + element.innerHTML);\r\n }\r\n\r\n $scope.CopyWithWhitespaces = function (elementId, event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n let element = document.getElementById(elementId);\r\n let textToCopy = element.innerHTML.replace(/_/g, ' ');\r\n let tempElement = document.createElement(\"textarea\");\r\n\r\n document.body.appendChild(tempElement);\r\n tempElement.value = textToCopy;\r\n\r\n tempElement.select();\r\n document.execCommand(\"copy\");\r\n\r\n document.body.removeChild(tempElement);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.Copied + \": \" + textToCopy);\r\n };\r\n\r\n $scope.CopyAll = function (code, description) {\r\n var valueToCopy = code + '\\n' + description;\r\n var elementToCopy = document.createElement('textarea');\r\n\r\n elementToCopy.value = valueToCopy;\r\n\r\n document.body.appendChild(elementToCopy);\r\n elementToCopy.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(elementToCopy);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.Copied + \": \" + valueToCopy);\r\n }\r\n\r\n function CopyToClipboard(textToCopy) {\r\n if (navigator && navigator.clipboard && navigator.clipboard.writeText) {\r\n navigator.clipboard.writeText(textToCopy);\r\n\r\n return;\r\n }\r\n\r\n var temporaryElement = document.createElement('textarea');\r\n\r\n temporaryElement.value = textToCopy;\r\n document.body.appendChild(temporaryElement);\r\n temporaryElement.select();\r\n document.execCommand('Copy');\r\n document.body.removeChild(temporaryElement);\r\n }\r\n\r\n function SetProjectQuantity() {\r\n if (!$scope.StructureSelected.ProjectQuantity) {\r\n $scope.StructureSelected.ProjectQuantity = 0;\r\n }\r\n\r\n $timeout(() => {\r\n var element = document.getElementById('selectedStructureQuantity');\r\n\r\n element.focus();\r\n element.select();\r\n }, 0)\r\n }\r\n\r\n $scope.FilterOption = function (structure) {\r\n return function (fieldOption) {\r\n var structureMainCode = structure.Code.slice(0, 2);\r\n\r\n if (structureMainCode === fieldOption.MainCode) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n };\r\n\r\n $scope.OpenProjectDialog = function () {\r\n $scope.StepMakeAList = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectSubmitted = false;\r\n\r\n var structuresToAdd = $scope.Structures.filter(filter => (filter.ProjectQuantity > 0));\r\n\r\n structuresToAdd.forEach(structure => {\r\n var numberOfStructuresToAdd = $scope.Project.Structures.count(\"Code\", structure.Code);\r\n\r\n numberOfStructuresToAdd = structure.ProjectQuantity - numberOfStructuresToAdd;\r\n\r\n if (numberOfStructuresToAdd <= 0) {\r\n return;\r\n }\r\n\r\n structure.MinimumQuantity = structure.ProjectQuantity;\r\n\r\n var structureToAdd = SetStructureToAdd(structure);\r\n\r\n for (let i = 1; i <= numberOfStructuresToAdd; i++) {\r\n var structureToAdd = angular.copy(structureToAdd);\r\n\r\n lastStructureId++;\r\n structureToAdd.Id = lastStructureId;\r\n\r\n $scope.Project.Structures.push(structureToAdd);\r\n\r\n AddInSequencer(structureToAdd);\r\n }\r\n });\r\n\r\n $scope.StepMakeAList = true;\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogProject',\r\n parent: angular.element(document.body),\r\n multiple: false,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n $scope.BackToMakeAList = function (structure) {\r\n $scope.StepMakeAList = true;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectSubmitted = false;\r\n\r\n if (structure) {\r\n var elementId = \"structure_\" + structure.Id;\r\n\r\n $timeout(function () {\r\n Helpers.HTML.ScrollToElement(elementId);\r\n }, 100);\r\n }\r\n }\r\n\r\n function SetStructureToAdd(structure) {\r\n var mainCode = structure.Code.substr(0, 2);\r\n var structureCharacteristics = $scope.Characteristics.filter(filter => (!filter.MainCode || (filter.MainCode === mainCode)));\r\n var structureToAdd = angular.copy(structure);\r\n\r\n structureToAdd.Characteristics = structureCharacteristics;\r\n\r\n structureCharacteristics.forEach(structureCharacteristic => {\r\n if (!structureCharacteristic.Field) {\r\n return;\r\n }\r\n\r\n var valueCodeToSet = structure.Code.substr(structureCharacteristic.StartIndex, 2);\r\n var optionToSet = structureCharacteristic.CharacteristicOptions.find(find => (find.Code === valueCodeToSet));\r\n\r\n if (optionToSet) {\r\n var valueToAdd;\r\n\r\n switch (structureCharacteristic.Field) {\r\n case \"ExternalWidth\":\r\n case \"InternalWidth\":\r\n case \"ExternalDepth\":\r\n case \"InternalDepth\":\r\n case \"HeightThickness\":\r\n case \"DepthHu\":\r\n case \"FreeSpace\":\r\n valueToAdd = parseInt(optionToSet.Description);\r\n\r\n if (!valueToAdd || isNaN(valueToAdd)) {\r\n valueToAdd = 0;\r\n }\r\n\r\n break;\r\n\r\n case \"Weight\":\r\n valueToAdd = parseFloat(optionToSet.Description);\r\n\r\n if (!valueToAdd || isNaN(valueToAdd)) {\r\n valueToAdd = 0;\r\n }\r\n\r\n break;\r\n\r\n case \"Orientation\":\r\n case \"Slope\":\r\n case \"SlopeDirection\":\r\n case \"HUSupportType\":\r\n case \"SlopeDirection\":\r\n case \"HUSupport\":\r\n case \"RollJoint\":\r\n case \"GuideType\":\r\n var arrayToCheck = structureCharacteristic.Field + \"s\";\r\n var validValue = CheckDropDownValue($scope[arrayToCheck], optionToSet.Description);\r\n\r\n if (validValue) {\r\n valueToAdd = optionToSet.Description;\r\n }\r\n\r\n break;\r\n\r\n case \"ProfileSupportQuantity\":\r\n var arrayToCheck = \"ProfileSupportQuantities\";\r\n var validValue = CheckDropDownValue($scope[arrayToCheck], optionToSet.Description);\r\n\r\n if (validValue) {\r\n valueToAdd = optionToSet.Description;\r\n }\r\n\r\n break;\r\n\r\n default:\r\n valueToAdd = optionToSet.Description;\r\n }\r\n\r\n structureToAdd[structureCharacteristic.Field] = valueToAdd;\r\n }\r\n });\r\n\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"ExternalWidth\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"InternalWidth\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"ExternalDepth\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"InternalDepth\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"HeightThickness\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"DepthHu\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"FreeSpace\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"Weight\", 0);\r\n\r\n SetFieldsToConsiderInLeanProject(structureToAdd);\r\n\r\n structureToAdd.StructureQuantityToDuplicate = 1;\r\n\r\n delete structureToAdd.DrawingNumber;\r\n delete structureToAdd.HasDetails;\r\n delete structureToAdd.MinimumQuantity;\r\n delete structureToAdd.ProjectQuantity;\r\n delete structureToAdd.SeoInformation;\r\n delete structureToAdd.SolutionNumber;\r\n\r\n return structureToAdd;\r\n }\r\n\r\n function SetFieldsToConsiderInLeanProject(structure) {\r\n let mainCode = structure.Code.substring(0, 2);\r\n let fieldsToConsiderInLeanProject = $scope.Characteristics.filter(filter => (!filter.MainCode || (filter.MainCode === mainCode)) && filter.ConsiderInLeanProject && filter.Field).map(map => map.Field);\r\n\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structure, \"FieldsToConsiderInLeanProject\", fieldsToConsiderInLeanProject);\r\n }\r\n\r\n function CheckDropDownValue(arrayToCheck, valueToCheck) {\r\n var validValue = arrayToCheck.some(some => (some.Description === valueToCheck));\r\n\r\n return validValue;\r\n }\r\n\r\n $scope.GetFieldsToConsiderInLeanProject = function (structure) {\r\n if (!$scope.StepProjectSequencer) {\r\n return;\r\n }\r\n\r\n let fields = structure.FieldsToConsiderInLeanProject;\r\n let fieldsToConsiderInLeanProject = fields.map(field => structure[field]).filter(value => value).join(\" | \");\r\n\r\n return fieldsToConsiderInLeanProject;\r\n };\r\n\r\n $scope.DeleteStructure = function (structureToDelete) {\r\n structureToDelete.ProjectQuantity = 0;\r\n\r\n $scope.Project.Structures.remove(structureToDelete);\r\n\r\n RemoveInSequencer(structureToDelete);\r\n\r\n var structure = $scope.Structures.find(find => (find.Code === structureToDelete.Code));\r\n\r\n if (!structure) {\r\n return;\r\n }\r\n\r\n structure.ProjectQuantity--;\r\n structure.MinimumQuantity--;\r\n\r\n if (!$scope.Project.Structures.length) {\r\n $scope.CloseProject();\r\n }\r\n }\r\n\r\n $scope.DuplicateStructure = function (structureToDuplicate) {\r\n var positionToInsert = $scope.Project.Structures.indexOf(structureToDuplicate);\r\n\r\n if (positionToInsert < 0) {\r\n return;\r\n }\r\n\r\n var structure = $scope.Structures.find(find => (find.Code === structureToDuplicate.Code));\r\n\r\n if (!structure) {\r\n return;\r\n }\r\n\r\n var numberOfStructuresToDuplicate = structureToDuplicate.StructureQuantityToDuplicate;\r\n\r\n structureToDuplicate.StructureQuantityToDuplicate = 1;\r\n\r\n structure.ProjectQuantity = structure.ProjectQuantity + numberOfStructuresToDuplicate;\r\n structure.MinimumQuantity = structure.MinimumQuantity + numberOfStructuresToDuplicate;\r\n positionToInsert++;\r\n\r\n for (let i = 0; i < numberOfStructuresToDuplicate; i++) {\r\n structureToDuplicate = angular.copy(structureToDuplicate);\r\n lastStructureId++;\r\n\r\n structureToDuplicate.Id = lastStructureId;\r\n $scope.Project.Structures.splice(positionToInsert, 0, structureToDuplicate);\r\n AddInSequencer(structureToDuplicate);\r\n }\r\n\r\n return structureToDuplicate;\r\n }\r\n\r\n $scope.CloseProject = function () {\r\n if ($scope.StepProjectSubmitted) {\r\n $scope.ProjectComplete();\r\n\r\n return;\r\n }\r\n\r\n $scope.StepMakeAList = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectSubmitted = false;\r\n\r\n $mdDialog.hide({\r\n contentElement: '#DialogProject'\r\n });\r\n }\r\n\r\n $scope.SetOriginalValue = function (valueToSet) {\r\n originalValue = valueToSet;\r\n }\r\n\r\n $scope.ReplicateValue = function (structure, property, newValue) {\r\n if (!structure) {\r\n return;\r\n }\r\n\r\n if (!structure[property]) {\r\n return;\r\n }\r\n\r\n var valueToConsider;\r\n\r\n if (newValue) {\r\n valueToConsider = newValue;\r\n }\r\n else {\r\n if (structure[property] === originalValue) {\r\n return;\r\n }\r\n\r\n valueToConsider = structure[property];\r\n }\r\n\r\n var structuresToUpdate = $scope.Project.Structures.filter(filter => ((filter.Code === structure.Code) && !filter[property]));\r\n\r\n structuresToUpdate.forEach(structureToUpdate => {\r\n structureToUpdate[property] = valueToConsider;\r\n });\r\n }\r\n\r\n $scope.HasSelectedStructures = function () {\r\n if (!$scope.Structures) {\r\n return false;\r\n }\r\n\r\n var selectedStructure = $scope.Structures.find(single => (single.ProjectQuantity && (single.ProjectQuantity > 0)))\r\n\r\n return selectedStructure;\r\n }\r\n\r\n function GetStructureToSetQuantity(structureCode) {\r\n var structureFiltered = GetStructureByCode($scope.Structures, structureCode);\r\n\r\n if (!structureFiltered) {\r\n return structureFiltered;\r\n }\r\n\r\n if (!structureFiltered.ProjectQuantity) {\r\n structureFiltered.ProjectQuantity = 0;\r\n }\r\n\r\n return structureFiltered;\r\n };\r\n\r\n $scope.IncreaseProjectQuantity = function (structureCode) {\r\n var structure = GetStructureToSetQuantity(structureCode);\r\n\r\n if (!structure) {\r\n return;\r\n }\r\n\r\n structure.ProjectQuantity++;\r\n };\r\n\r\n $scope.DecreaseProjectQuantity = function (structureCode) {\r\n var structure = GetStructureToSetQuantity(structureCode);\r\n\r\n if (!structure) {\r\n return;\r\n }\r\n\r\n var minimumQuantity = $scope.GetMinimumQuantity(structure);\r\n\r\n if (structure.ProjectQuantity === minimumQuantity) {\r\n return;\r\n }\r\n\r\n structure.ProjectQuantity--;\r\n };\r\n\r\n $scope.GetMinimumQuantity = function (structure) {\r\n if (!structure) {\r\n return 0;\r\n }\r\n\r\n var minimumQuantity = structure.MinimumQuantity || 0;\r\n\r\n return minimumQuantity;\r\n }\r\n\r\n $scope.OnUploadPhoto = function (structure, photo) {\r\n if (!photo || !structure) {\r\n return;\r\n }\r\n\r\n var fileReader = new FileReader();\r\n\r\n fileReader.onload = function (e) {\r\n var photoInBase64 = e.target.result;\r\n var imageType = Helpers.Upload.GetImageTypeFromBase64(photoInBase64);\r\n\r\n photoInBase64 = photoInBase64.replace('data:' + imageType + ';base64,', '');\r\n structure.Photography = photoInBase64;\r\n structure.UploadedPhoto = true;\r\n\r\n $scope.UploadedPhoto = null;\r\n $scope.$apply();\r\n };\r\n\r\n fileReader.readAsDataURL(photo);\r\n }\r\n\r\n $scope.ClearPhoto = function (structure) {\r\n if (!structure) {\r\n return;\r\n }\r\n\r\n if (!structure.UploadedPhoto) {\r\n return;\r\n }\r\n\r\n if (structure.Code) {\r\n var mainStructure = GetStructureByCode($scope.Structures, structure.Code);\r\n\r\n structure.Photography = mainStructure.Photography;\r\n structure.UploadedPhoto = false;\r\n } else {\r\n structure.Photography = null;\r\n }\r\n }\r\n\r\n //#region Sequencer\r\n function AddInSequencer(structure) {\r\n var mainCode = structure.Code.slice(0, 2);\r\n var columnId = mainCode + \".0001\";\r\n\r\n if (structure.ColumnId) {\r\n columnId = structure.ColumnId;\r\n }\r\n else {\r\n structure.ColumnId = columnId;\r\n }\r\n\r\n var sequencerColumn = $scope.Sequencer.Columns.find(find => (find.Id === columnId));\r\n\r\n if (sequencerColumn) {\r\n structure.Order = sequencerColumn.Structures.length;\r\n\r\n sequencerColumn.Structures.push(structure);\r\n }\r\n else {\r\n var index = columnId.split('.')[1];\r\n var characteristicOption = structure.Characteristics[0].CharacteristicOptions.find(find => (find.Code === mainCode));\r\n\r\n structure.Order = 0;\r\n\r\n var newColumn = {\r\n Id: columnId,\r\n MainCode: mainCode,\r\n Position: index,\r\n Description: characteristicOption.Description,\r\n Structures: [structure]\r\n };\r\n\r\n $scope.Sequencer.Columns.push(newColumn);\r\n }\r\n }\r\n\r\n function RemoveInSequencer(structure) {\r\n var structureMainCode = structure.Code.slice(0, 2);\r\n\r\n $scope.Sequencer.Columns.forEach(column => {\r\n if (column.MainCode !== structureMainCode) {\r\n return;\r\n }\r\n\r\n var structureToDelete = column.Structures.find(find => (find.Id === structure.Id));\r\n\r\n if (structureToDelete) {\r\n Reorder(column.ColumnId, structure.Order, null, false, structure.Id);\r\n\r\n column.Structures.remove(structureToDelete);\r\n\r\n if (!column.Structures.length) {\r\n $scope.Sequencer.Columns.remove(column);\r\n }\r\n }\r\n });\r\n }\r\n\r\n $scope.ShowProjectSequencer = function () {\r\n $scope.Sequencer.Columns.forEach(column => {\r\n OrderColumn(column.Id, true);\r\n });\r\n\r\n $timeout(SetSortable);\r\n\r\n $scope.StepMakeAList = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSequencer = true;\r\n $scope.StepProjectSubmitted = false;\r\n }\r\n\r\n $scope.AddColumn = function (column) {\r\n var canAddColumn = $scope.CheckAddColumn(column);\r\n\r\n if (!canAddColumn) {\r\n return;\r\n }\r\n\r\n var position = GetNextPosition(column);\r\n var columnId = column.MainCode + \".\" + position;\r\n\r\n var newColumn = {\r\n Id: columnId,\r\n MainCode: column.MainCode,\r\n Position: position,\r\n Description: column.Description,\r\n Structures: []\r\n };\r\n\r\n $scope.Sequencer.Columns.push(newColumn);\r\n\r\n $timeout(SetSortable);\r\n }\r\n\r\n function GetNextPosition(column) {\r\n var position = column.Position;\r\n\r\n position = Number(position) + 1;\r\n position = String(position).padStart(4, '0');\r\n\r\n return position;\r\n }\r\n\r\n $scope.CheckAddColumn = function (column) {\r\n var columnsOfSameMainCode = $scope.Sequencer.Columns.filter(filter => (filter.MainCode === column.MainCode));\r\n var maximum = columnsOfSameMainCode.max(\"Position\");\r\n\r\n if (maximum === column.Position) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function SetSortable() {\r\n $(\".SortableCards\").each(function () {\r\n var columnId = $(this).attr(\"column-id\");\r\n\r\n $(this).dxSortable({\r\n data: {\r\n ColumnId: columnId\r\n },\r\n group: \"tasksGroup\",\r\n moveItemOnDrop: true,\r\n onDragEnd: function (e) {\r\n var oldColumnId = e.fromData.ColumnId;\r\n var newColumnId = e.toData.ColumnId;\r\n var oldColumnMainCode = oldColumnId.slice(0, 2);\r\n var newColumnMainCode = newColumnId.slice(0, 2);\r\n\r\n e.cancel = true;\r\n\r\n if (oldColumnMainCode !== newColumnMainCode) {\r\n GeneralModel.ShowToastWarning(Helpers.Translations.InvalidStructurePosition);\r\n\r\n return;\r\n }\r\n\r\n if ((oldColumnId === newColumnId) && (e.fromIndex === e.toIndex)) {\r\n return;\r\n }\r\n\r\n var structureId = e.itemElement.attr(\"structure-id\");\r\n\r\n if (oldColumnId !== newColumnId) {\r\n UpdatePosition(structureId, oldColumnId, newColumnId, e.fromIndex, e.toIndex);\r\n\r\n return;\r\n }\r\n\r\n Reorder(newColumnId, e.fromIndex, e.toIndex, true, structureId);\r\n }\r\n });\r\n })\r\n\r\n Helpers.DevExtreme.Scroll.Refresh('#Kanban');\r\n Helpers.DevExtreme.Scroll.Refresh('.ScrollableCards');\r\n }\r\n\r\n function UpdatePosition(structureId, oldColumnId, newColumnId, oldIndex, newIndex) {\r\n structureId = Number(structureId);\r\n\r\n var oldColumn = $scope.Sequencer.Columns.find(find => (find.Id === oldColumnId));\r\n var newColumn = $scope.Sequencer.Columns.find(find => (find.Id === newColumnId));\r\n var structure = oldColumn.Structures.find(find => (find.Id === structureId));\r\n var oldStructureIndex = oldColumn.Structures.findIndex(find => (find.Id === structureId));\r\n\r\n structure.ColumnId = newColumnId;\r\n oldColumn.Structures.splice(oldStructureIndex, 1);\r\n newColumn.Structures.push(structure);\r\n\r\n Reorder(newColumnId, null, newIndex, false, structureId);\r\n Reorder(oldColumnId, oldIndex, null, true, structureId);\r\n }\r\n\r\n function Reorder(columnId, oldIndex, newIndex, refreshScope, structureId) {\r\n if (!columnId) {\r\n return;\r\n }\r\n\r\n structureId = Number(structureId);\r\n\r\n var column = $scope.Sequencer.Columns.find(find => (find.Id === columnId));\r\n var structuresToReorder;\r\n var coefficient = -1;\r\n\r\n if (oldIndex === null) {\r\n coefficient = 1;\r\n structuresToReorder = column.Structures.filter(filter => ((filter.Id === structureId) || (filter.Order >= newIndex)));\r\n }\r\n else if (newIndex === null) {\r\n structuresToReorder = column.Structures.filter(filter => ((filter.Id === structureId) || (filter.Order >= oldIndex)));\r\n }\r\n else if (newIndex > oldIndex) {\r\n structuresToReorder = column.Structures.filter(filter => ((filter.Id === structureId) || ((filter.Order >= oldIndex) && (filter.Order <= newIndex))));\r\n }\r\n else {\r\n structuresToReorder = column.Structures.filter(filter => ((filter.Id === structureId) || ((filter.Order <= oldIndex) && (filter.Order >= newIndex))));\r\n coefficient = 1;\r\n }\r\n\r\n structuresToReorder.forEach(structureToReorder => {\r\n if (structureToReorder.Id === structureId) {\r\n structureToReorder.Order = newIndex;\r\n\r\n return;\r\n }\r\n\r\n structureToReorder.Order = structureToReorder.Order + coefficient;\r\n });\r\n\r\n OrderColumn(columnId);\r\n\r\n if (refreshScope) {\r\n $timeout($scope.$apply());\r\n }\r\n }\r\n\r\n function OrderColumn(columnId, setOrder) {\r\n var column = $scope.Sequencer.Columns.find(find => (find.Id === columnId));\r\n\r\n var structuresOrdered = column.Structures.sort(function (a, b) {\r\n if (a.Order < b.Order) {\r\n return -1;\r\n }\r\n\r\n if (a.Order > b.Order) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n if (setOrder) {\r\n var newOrder = 0;\r\n\r\n structuresOrdered.forEach(structure => {\r\n structure.Order = newOrder;\r\n\r\n newOrder++;\r\n });\r\n }\r\n\r\n column.Structures = structuresOrdered;\r\n }\r\n\r\n $scope.GetNumberOfItens = function (columnId) {\r\n var numberOfItens = $('div[column-id=\"' + columnId + '\"]').children(':visible').length;\r\n\r\n return numberOfItens;\r\n }\r\n\r\n function CleanSequencer() {\r\n $scope.Sequencer = {};\r\n $scope.Sequencer.Columns = [];\r\n }\r\n //#endregion\r\n\r\n //#region Project Submission Form\r\n $scope.ShowProjectDetails = function () {\r\n SetProjectDetails();\r\n\r\n $scope.StepMakeAList = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = true;\r\n $scope.StepProjectSubmitted = false;\r\n $scope.ShowProjectDetailsInvalidFields = false;\r\n }\r\n\r\n function SetProjectDetails() {\r\n var details;\r\n\r\n if (Object.keys(detailsImported).length) {\r\n details = detailsImported;\r\n $scope.Project.Details = details;\r\n }\r\n else {\r\n details = localStorage.getItem(\"BuilderProject.Details\");\r\n\r\n if (details) {\r\n $scope.Project.Details = JSON.parse(details)\r\n\r\n delete $scope.Project.Details.Photos;\r\n }\r\n }\r\n\r\n if (!Object.keys(detailsImported).length) {\r\n if ($scope.Project.Details) {\r\n if ($scope.Project.Details.Email) {\r\n $scope.Project.Details.Emails = [];\r\n $scope.Project.Details.ContactEmails = [];\r\n\r\n var emailsToAdd = $scope.Project.Details.Email.split(\";\");\r\n\r\n for (var i = 0; i < emailsToAdd.length; i++) {\r\n var emailToAdd = emailsToAdd[i];\r\n\r\n if (!emailToAdd.length) {\r\n continue;\r\n }\r\n\r\n $scope.Project.Details.Emails.push(emailToAdd);\r\n }\r\n\r\n delete $scope.Project.Details.Email;\r\n }\r\n }\r\n else {\r\n $scope.Project.Details = {}\r\n }\r\n }\r\n\r\n if (!$scope.Project.Details.Quantity) {\r\n $scope.Project.Details.Quantity = 1;\r\n }\r\n\r\n if (!$scope.Project.Details.ContactEmails) {\r\n $scope.Project.Details.ContactEmails = [];\r\n }\r\n\r\n if (!$scope.Project.Details.Emails) {\r\n $scope.Project.Details.Emails = [];\r\n }\r\n\r\n if (!$scope.Project.Details.SubmissionTypeCode) {\r\n $scope.Project.Details.SubmissionTypeCode = \"01\";\r\n }\r\n\r\n if (!$scope.Project.Details.Photos || !$scope.Project.Details.Photos.length) {\r\n $scope.Project.Details.Photos = [{\r\n Photography: null\r\n }, {\r\n Photography: null\r\n }, {\r\n Photography: null\r\n }, {\r\n Photography: null\r\n }, {\r\n Photography: null\r\n }];\r\n }\r\n }\r\n\r\n $scope.BackToLeanProject = function () {\r\n $scope.StepMakeAList = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSequencer = true;\r\n $scope.StepProjectSubmitted = false;\r\n }\r\n\r\n $scope.ProjectSubmit = function () {\r\n var isFormValid = IsFormValid();\r\n\r\n if (isFormValid) {\r\n SendProject();\r\n\r\n return;\r\n }\r\n\r\n $scope.ShowProjectDetailsInvalidFields = true;\r\n }\r\n\r\n function IsFormValid() {\r\n if (!ValidateFieldValue(\"Customer\", \"Customer is required!\")) {\r\n return false;\r\n }\r\n\r\n if (!ValidateFieldValue(\"AssemblyType\", \"Assembly type is required!\")) {\r\n return false;\r\n }\r\n\r\n if (!$scope.Project.Details.Quantity || ($scope.Project.Details.Quantity < 1)) {\r\n GeneralModel.ShowToastWarning(\"Quantity is invalid. Must be at least 1!\");\r\n\r\n return false;\r\n }\r\n\r\n if (!$scope.Project.Details.Emails || !$scope.Project.Details.Emails.length) {\r\n GeneralModel.ShowToastWarning(\"At least one email is required!\");\r\n\r\n return false;\r\n }\r\n\r\n var isEmailsValid = ValidateEmails($scope.Project.Details.Emails, true) && ValidateEmails($scope.Project.Details.ContactEmails, false);\r\n\r\n if (isEmailsValid) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function ValidateFieldValue(field, errorMessage) {\r\n if ($scope.Project.Details[field]) {\r\n return true;\r\n }\r\n\r\n GeneralModel.ShowToastWarning(errorMessage);\r\n\r\n return false;\r\n }\r\n\r\n function SendProject() {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var structuresToSend = [];\r\n\r\n $scope.Project.Structures.forEach(structure => {\r\n var structureToSend = angular.copy(structure);\r\n\r\n delete structureToSend.Characteristics;\r\n delete structureToSend.Description;\r\n delete structureToSend.Id;\r\n delete structureToSend.StructureQuantityToDuplicate;\r\n\r\n if (!structureToSend.UploadedPhoto) {\r\n delete structureToSend.Photography;\r\n }\r\n\r\n delete structureToSend.UploadedPhoto;\r\n\r\n structuresToSend.push(structureToSend);\r\n });\r\n\r\n var parameters = {\r\n Structures: structuresToSend,\r\n ProjectDetail: $scope.Project.Details,\r\n Language: $scope.LanguageSelected\r\n };\r\n\r\n parameters.ProjectDetail.Photos = parameters.ProjectDetail.Photos.filter(filter => filter.Photography);\r\n\r\n $q.when(GeneralLoadData.GeneralPost(\"BuilderConfigurator\", \"Send\", parameters, null)).then(function () {\r\n delete $scope.Project.Details.Photos;\r\n\r\n localStorage.setItem(\"BuilderProject.Details\", JSON.stringify($scope.Project.Details))\r\n\r\n detailsImported = {};\r\n $scope.Project.Structures = []\r\n $scope.StepMakeAList = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = true;\r\n\r\n CleanSequencer();\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n $scope.ProjectComplete = function () {\r\n $scope.Project.Structures = [];\r\n\r\n $scope.Structures.forEach(structure => {\r\n if (structure.ProjectQuantity && (structure.ProjectQuantity > 0)) {\r\n structure.ProjectQuantity = 0;\r\n structure.MinimumQuantity = 0;\r\n }\r\n });\r\n\r\n $mdDialog.hide({\r\n contentElement: '#DialogProject'\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Imports\r\n $scope.OpenImportCsvDialog = function () {\r\n $scope.File = '';\r\n $scope.generalModel.FullPageLoading = true;\r\n $scope.UploadBox = { Multiple: false, Pattern: '.csv', Accept: '.csv', Capture: 'camera', Validate: { size: { max: '1MB', min: '1B' }, height: { max: 12000 }, width: { max: 12000 } }, DragOverClass: { accept: 'dragover', reject: 'dragover-err', pattern: '*' }, Options: { debounce: 100 }, Resize: { width: 400, height: 400, centerCrop: false }, ResizeIf: '$width > 400 || $height > 400', FirefoxPaste: true };\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogImportCsv',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false\r\n });\r\n\r\n $scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n $scope.ImportCsv = function () {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var apiUrl = GetIp();\r\n var formData = new FormData();\r\n\r\n formData.append(\"\", $scope.File);\r\n\r\n var settings = {\r\n \"cache\": false,\r\n \"method\": 'POST',\r\n headers: { \"Content-Type\": undefined },\r\n };\r\n\r\n var importCsvApiUrl = apiUrl + \"/api/BuilderConfigurator/ImportCsv\";\r\n\r\n return $http.post(importCsvApiUrl, formData, settings)\r\n .then(function (result) {\r\n ImportCsvData(result.data);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.CloseDialog('DialogImportCsv');\r\n $scope.generalModel.FullPageLoading = false;\r\n })\r\n }\r\n\r\n function ImportCsvData(structuresImported) {\r\n if (!structuresImported) {\r\n return;\r\n }\r\n\r\n structuresImported.forEach(structureImported => {\r\n var structure = GetStructureByCode($scope.Structures, structureImported.Code);\r\n\r\n if (!structure) {\r\n return;\r\n }\r\n\r\n if (isNaN(structure.MinimumQuantity)) {\r\n structure.MinimumQuantity = 1\r\n }\r\n else {\r\n structure.MinimumQuantity = structure.MinimumQuantity + 1;\r\n }\r\n\r\n if (isNaN(structure.ProjectQuantity)) {\r\n structure.ProjectQuantity = 1;\r\n }\r\n else {\r\n structure.ProjectQuantity = structure.ProjectQuantity + 1;\r\n }\r\n\r\n structure.Photography = structure.Photography || structureImported.Photography;\r\n\r\n var structureToAdd = SetStructureToAddInImportCsv(structure, structureImported);\r\n\r\n lastStructureId++;\r\n structureToAdd.Id = lastStructureId;\r\n\r\n $scope.Project.Structures.push(structureToAdd);\r\n\r\n AddInSequencer(structureToAdd);\r\n });\r\n\r\n SetProjectDetailsFromCsv(structuresImported);\r\n }\r\n\r\n function SetStructureToAddInImportCsv(structure, structureFromCsv) {\r\n var mainCode = structure.Code.substr(0, 2);\r\n var structureCharacteristics = $scope.Characteristics.filter(filter => (!filter.MainCode || (filter.MainCode === mainCode)));\r\n var structureToAdd = angular.copy(structure);\r\n\r\n structureToAdd.Characteristics = structureCharacteristics;\r\n\r\n SetPropertyValueInt(structureToAdd, structureFromCsv, \"Order\");\r\n SetPropertyValueInt(structureToAdd, structureFromCsv, \"ExternalWidth\");\r\n SetPropertyValueInt(structureToAdd, structureFromCsv, \"InternalWidth\");\r\n SetPropertyValueInt(structureToAdd, structureFromCsv, \"ExternalDepth\");\r\n SetPropertyValueInt(structureToAdd, structureFromCsv, \"InternalDepth\");\r\n SetPropertyValueInt(structureToAdd, structureFromCsv, \"HeightThickness\");\r\n SetPropertyValueInt(structureToAdd, structureFromCsv, \"DepthHu\");\r\n SetPropertyValueInt(structureToAdd, structureFromCsv, \"FreeSpace\");\r\n SetPropertyValueFloat(structureToAdd, structureFromCsv, \"Weight\");\r\n SetPropertyValueDropDown(structureToAdd, structureFromCsv, \"Orientation\");\r\n SetPropertyValueDropDown(structureToAdd, structureFromCsv, \"Slope\");\r\n SetPropertyValueDropDown(structureToAdd, structureFromCsv, \"SlopeDirection\");\r\n SetPropertyValueDropDown(structureToAdd, structureFromCsv, \"HUSupportType\");\r\n SetPropertyValueDropDown(structureToAdd, structureFromCsv, \"HUSupport\");\r\n SetPropertyValueDropDown(structureToAdd, structureFromCsv, \"RollJoint\");\r\n SetPropertyValueDropDown(structureToAdd, structureFromCsv, \"GuideType\");\r\n SetPropertyValueDropDown(structureToAdd, structureFromCsv, \"ProfileSupportQuantity\");\r\n SetFieldsToConsiderInLeanProject(structureToAdd);\r\n\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"ExternalWidth\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"InternalWidth\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"ExternalDepth\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"InternalDepth\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"HeightThickness\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"DepthHu\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"FreeSpace\", 0);\r\n Helpers.Object.SetPropertyValueIfUndefinedOrNull(structureToAdd, \"Weight\", 0);\r\n\r\n structureToAdd.Topic = structureFromCsv.Topic;\r\n structureToAdd.Type = structureFromCsv.Type;\r\n structureToAdd.Annotations = structureFromCsv.Annotations;\r\n structureToAdd.StructureQuantityToDuplicate = 1;\r\n structureToAdd.ColumnId = structureFromCsv.ColumnId;\r\n\r\n delete structureToAdd.DrawingNumber;\r\n delete structureToAdd.HasDetails;\r\n delete structureToAdd.MinimumQuantity;\r\n delete structureToAdd.ProjectQuantity;\r\n delete structureToAdd.SeoInformation;\r\n delete structureToAdd.SolutionNumber;\r\n\r\n return structureToAdd;\r\n }\r\n\r\n function SetProjectDetailsFromCsv(structuresImported) {\r\n if (!structuresImported.length) {\r\n return;\r\n }\r\n\r\n let structureImported = structuresImported[0];\r\n\r\n detailsImported = {};\r\n\r\n SetProjectDetailInformationFromCsv(structureImported, \"ContactType\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"Country\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"Customer\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"Location\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"Address\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"ContactName\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"ContactEmails\", true);\r\n SetProjectDetailInformationFromCsv(structureImported, \"SalesPerson\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"Market\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"RequestType\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"FromPreviousRequest\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"GlobalProposal\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"GlobalProposalRequestNumberFrom\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"GlobalProposalRequestNumberTo\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"AssemblyType\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"Quantity\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"IncludeTransport\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"SolutionCode\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"ProjectApplication\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"PreviousProcess\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"NextProcess\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"InternalOrExternalMeasures\");\r\n SetProjectDetailInformationFromCsv(structureImported, \"Emails\", true);\r\n SetProjectDetailInformationFromCsv(structureImported, \"Notes\");\r\n }\r\n\r\n function SetProjectDetailInformationFromCsv(structureImported, field, isList) {\r\n if (structureImported[field]) {\r\n let valueToSet;\r\n\r\n if (isList) {\r\n valueToSet = structureImported[field].split(\",\");\r\n }\r\n else {\r\n valueToSet = structureImported[field]\r\n }\r\n\r\n detailsImported[field] = valueToSet;\r\n }\r\n }\r\n\r\n function SetPropertyValueInt(structure, csvStructure, propertyName) {\r\n var valueToSet = parseFloat(csvStructure[propertyName]);\r\n\r\n if (!valueToSet || isNaN(valueToSet)) {\r\n valueToSet = 0;\r\n }\r\n\r\n structure[propertyName] = valueToSet;\r\n }\r\n\r\n function SetPropertyValueFloat(structure, csvStructure, propertyName) {\r\n var valueToSet = parseInt(csvStructure[propertyName]);\r\n\r\n if (!valueToSet || isNaN(valueToSet)) {\r\n valueToSet = 0;\r\n }\r\n\r\n structure[propertyName] = valueToSet;\r\n }\r\n\r\n function SetPropertyValueDropDown(structure, csvStructure, propertyName) {\r\n var arrayToCheck;\r\n\r\n if (propertyName === \"ProfileSupportQuantity\") {\r\n arrayToCheck = \"ProfileSupportQuantities\";\r\n }\r\n else {\r\n arrayToCheck = propertyName + \"s\";\r\n }\r\n\r\n var validValue = CheckDropDownValue($scope[arrayToCheck], csvStructure[propertyName]);\r\n\r\n if (validValue) {\r\n structure[propertyName] = csvStructure[propertyName];\r\n }\r\n }\r\n //#endregion\r\n\r\n function ValidateEmails(emailsToValidate, required) {\r\n var existValidEmail = false;\r\n\r\n for (var i = 0; i < emailsToValidate.length; i++) {\r\n var emailToValidate = emailsToValidate[i];\r\n\r\n if (!emailToValidate.length) {\r\n continue;\r\n }\r\n\r\n var emailValid = ValidateEmail(emailToValidate, true);\r\n\r\n if (!emailValid) {\r\n return false;\r\n }\r\n\r\n existValidEmail = true;\r\n }\r\n\r\n if (!existValidEmail && required) {\r\n GeneralModel.ShowToastWarning(\"You must insert at least one valid email.\");\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function ValidateEmail(emailToValidate, showErrorMessage) {\r\n if (/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(emailToValidate)) {\r\n return true;\r\n }\r\n\r\n if (showErrorMessage) {\r\n GeneralModel.ShowToastWarning(\"Email '\" + emailToValidate + \"' is invalid.\");\r\n }\r\n\r\n return false;\r\n }\r\n\r\n $('#alt-style-pagination').pagination({\r\n items: 260,\r\n itemOnPage: $scope.ItemsPerPage,\r\n currentPage: $scope.CurrentPage,\r\n cssStyle: '',\r\n prevText: '',\r\n nextText: '',\r\n displayedPages: 4,\r\n edges: 1,\r\n ellipsePageSet: false,\r\n onInit: function () { },\r\n onPageClick: function (page, _evt) {\r\n $scope.CurrentPage = page;\r\n $scope.ScrollToTop('.ListSolutions');\r\n }\r\n });\r\n\r\n function SetStructurePages() {\r\n var numberOfPages = $scope.StructuresFiltered.length / $scope.ItemsPerPage;\r\n\r\n if (numberOfPages > 1) {\r\n $scope.ShowInfoPages = true;\r\n } else {\r\n $scope.ShowInfoPages = false;\r\n }\r\n\r\n $('#alt-style-pagination').pagination('updateItems', numberOfPages);\r\n $scope.ScrollToTop('.ListStructures');\r\n }\r\n\r\n function SelectCharacteristicOption(mainCode, code, optionCode) {\r\n var characteristics = $scope.Characteristics;\r\n\r\n var characteristic = characteristics.find(find => (find.MainCode === mainCode) && (find.Code === code));\r\n\r\n if (!characteristic) {\r\n return false;\r\n }\r\n\r\n characteristic.Visible = true;\r\n\r\n if (optionCode.toUpperCase() === \"ALL\") {\r\n for (var i = 0; i < characteristic.CharacteristicOptions.length; i++) {\r\n var characteristicOption = characteristic.CharacteristicOptions[i];\r\n\r\n characteristicOption.Selected = true;\r\n characteristicOption.Visible = true;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n var characteristicOption = characteristic.CharacteristicOptions.find(find => (find.Code === optionCode));\r\n\r\n if (!characteristicOption) {\r\n return false;\r\n }\r\n\r\n characteristicOption.Selected = true;\r\n characteristicOption.Visible = true;\r\n\r\n return true;\r\n }\r\n\r\n function GetCodesFromCharacteristic(characteristic) {\r\n var codes = [];\r\n var isCharacteristicValid = ((characteristic.length % 2) === 0);\r\n\r\n if (!isCharacteristicValid) {\r\n return codes;\r\n }\r\n\r\n for (var i = 0; i < characteristic.length; i += 2) {\r\n codes.push(characteristic.substr(i, 2));\r\n }\r\n\r\n return codes;\r\n }\r\n\r\n //#region Details\r\n $scope.SetFiltersToStructure = function () {\r\n let structureSelectedCode = $scope.StructureSelected.Code;\r\n\r\n SetStructureFilters(structureSelectedCode);\r\n }\r\n\r\n function SetStructureFilters(code) {\r\n var mainCode = code.substr(0, 2);\r\n\r\n code = code.slice(2);\r\n\r\n $scope.SearchValues = [];\r\n $scope.FilterClear();\r\n\r\n SetSelectedMainCharacteristic($scope.Characteristics[0], mainCode);\r\n\r\n $timeout(function () {\r\n $scope.Characteristics.forEach((characteristic) => {\r\n if (characteristic.MainCode && (characteristic.MainCode === mainCode)) {\r\n var optionCodeToSelect = code.substr(0, 2);\r\n\r\n code = code.slice(2);\r\n SelectCharacteristicOption(mainCode, characteristic.Code, optionCodeToSelect);\r\n }\r\n });\r\n\r\n ResetFilterCodeAndDescription();\r\n });\r\n };\r\n\r\n function SetStructureDetail() {\r\n GetDetails($scope.StructureSelected);\r\n\r\n SetStructureDetailQrCode(\"QrStructureDetail\");\r\n }\r\n\r\n function GetDetails(structure) {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var parameters = {\r\n structureId: structure.Code\r\n };\r\n\r\n CleanStructureDetail();\r\n\r\n GeneralLoadData.GeneralGet(\"BuilderConfigurator\", \"GetDetails\", parameters, null).then(function (result) {\r\n $scope.StructureDetail.Links = result.data.Links;\r\n $scope.StructureDetail.Files = result.data.Files;\r\n $scope.SetPhotographies(result.data.Photographies);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n function CleanStructureDetail() {\r\n $scope.StructureDetail = {};\r\n $scope.StructureDetail.Photographies = [];\r\n $scope.StructureDetail.Links = [];\r\n $scope.StructureDetail.Files = [];\r\n $scope.StructureDetail.StartPhotographyIndex = -1;\r\n $scope.StructureDetail.SelectedPhotographyIndex = -1;\r\n }\r\n\r\n $scope.SetPhotographies = function (photographies) {\r\n if (!photographies) {\r\n return;\r\n }\r\n\r\n $scope.StructureDetail.StartPhotographyIndex = 0;\r\n $scope.StructureDetail.SelectedPhotographyIndex = 0;\r\n\r\n photographies.forEach(photography => {\r\n var newPhotography = $scope.GetPhotography(photography);\r\n\r\n $scope.StructureDetail.Photographies.push(newPhotography);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Download\r\n $scope.DownloadFile = function (file) {\r\n var fileName = file.Name + file.Extension;\r\n\r\n var parameters = {\r\n 'applicationCode': codes.Application.Builder,\r\n 'fileName': fileName,\r\n 'folderName': file.FolderName\r\n };\r\n\r\n GeneralLoadData.PreviewFiles(\"Document\", \"DownloadFile\", parameters).then(function (result) {\r\n $scope.generalModel.DownloadResultBlob(result);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Emails\r\n $scope.AddEmail = function (originalEmail, isTechnicalEmail) {\r\n var values = originalEmail.split(/[ ,]+/);\r\n\r\n if (values.length < 2) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < values.length; i++) {\r\n var value = values[i].replace('<', '').replace('>', '');\r\n var isEmailValid = ValidateEmail(value, false);\r\n\r\n if (isEmailValid) {\r\n var emails = $scope.Project.Details.Emails;\r\n\r\n if (isTechnicalEmail) {\r\n emails = $scope.Project.Details.ContactEmails;\r\n }\r\n\r\n var emailPosition = emails.indexOf(originalEmail);\r\n\r\n if (emailPosition > -1) {\r\n emails[emailPosition] = value;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Help\r\n $scope.ApplyHelpFilter = function () {\r\n clearTimeout(delayHelpFilter);\r\n\r\n delayHelpFilter = setTimeout(function () {\r\n HelpFilter()\r\n }, 250);\r\n }\r\n\r\n $scope.OpenHelp = function () {\r\n $scope.HelpSearchValues = [];\r\n\r\n LoadHelp();\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogHelp',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false,\r\n })\r\n };\r\n\r\n $scope.CloseHelp = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogHelp'\r\n });\r\n };\r\n\r\n function HelpFilter() {\r\n var i;\r\n var helpLinksFiltered = [];\r\n\r\n if ($scope.HelpSearchValues.length) {\r\n for (i = 0; i < $scope.HelpLinks.length; i++) {\r\n var helpLinkToAnalyse = $scope.HelpLinks[i];\r\n\r\n for (var j = 0; j < $scope.HelpSearchValues.length; j++) {\r\n var searchValue = $scope.HelpSearchValues[j];\r\n\r\n if (searchValue) {\r\n searchValue = searchValue.toLowerCase().trim();\r\n\r\n if (helpLinkToAnalyse.Name.toLowerCase().trim().includes(searchValue)) {\r\n helpLinksFiltered.push(helpLinkToAnalyse);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n helpLinksFiltered = $scope.HelpLinks;\r\n }\r\n\r\n $timeout(function () {\r\n $scope.HelpLinksFiltered = helpLinksFiltered;\r\n });\r\n }\r\n\r\n function LoadHelp() {\r\n $scope.LoadingHelp = true;\r\n $scope.HelpLinks = [];\r\n $scope.HelpLinksFiltered = [];\r\n\r\n var parameters = {\r\n applicationCode: codes.Application.Builder\r\n };\r\n\r\n GeneralLoadData.GeneralGet(\"Document\", \"List\", parameters, null).then(function (result) {\r\n $scope.HelpLinks = result.data;\r\n $scope.HelpLinksFiltered = $scope.HelpLinks;\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.LoadingHelp = false;\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region SlideShow\r\n $scope.SetPhotography = function (photographyPositionToSet) {\r\n $scope.StructureDetail.SelectedPhotographyIndex = photographyPositionToSet;\r\n }\r\n\r\n $scope.GoPreviousPhotography = function () {\r\n if ($scope.StructureDetail.StartPhotographyIndex > 0) {\r\n $scope.StructureDetail.StartPhotographyIndex--;\r\n }\r\n }\r\n\r\n $scope.GoNextPhotography = function () {\r\n var lastPosition = $scope.StructureDetail.Photographies.length - 1;\r\n\r\n if (lastPosition > ($scope.StructureDetail.StartPhotographyIndex + 2)) {\r\n $scope.StructureDetail.StartPhotographyIndex++;\r\n }\r\n }\r\n\r\n $scope.ShowGoNextPhotography = function () {\r\n var lastPosition = $scope.StructureDetail.Photographies.length - 1;\r\n\r\n if (lastPosition < 3) {\r\n return false;\r\n }\r\n\r\n if (lastPosition > ($scope.StructureDetail.StartPhotographyIndex + 2)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n //#endregion\r\n\r\n //#region Structures\r\n function SetStructuresSubmitted() {\r\n var structureProject = localStorage.getItem(\"StructuresProjectSubmitted\");\r\n\r\n if (!structureProject) {\r\n return;\r\n }\r\n\r\n structureProject = JSON.parse(structureProject)\r\n\r\n for (var i = 0; i < structureProject.Structures.length; i++) {\r\n var structure = structureProject.Structures[i];\r\n\r\n CheckAndAddStructure(structure, structureProject.Database);\r\n }\r\n\r\n localStorage.removeItem(\"StructuresProjectSubmitted\");\r\n }\r\n\r\n function CheckAndAddStructure(structure, database) {\r\n if (!structure || !structure.Code) {\r\n return;\r\n }\r\n\r\n if (structure.Code.length !== 30) {\r\n return;\r\n }\r\n\r\n var newStructure = $scope.StructuresProject.Structures.find(find => (find.Code === structure.Code));\r\n\r\n if (newStructure) {\r\n return;\r\n }\r\n\r\n newStructure = {\r\n Code: structure.Code,\r\n Notes: structure.Notes,\r\n DatabaseName: database,\r\n TimesImported: 0\r\n };\r\n\r\n $scope.StructuresProject.Structures.push(newStructure);\r\n }\r\n\r\n $scope.ImportStructureCsv = function (structure) {\r\n if (!structure || !structure.HasBuilderCsv) {\r\n return;\r\n }\r\n\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var parameters = {\r\n structureId: structure.Code,\r\n databaseName: structure.DatabaseName\r\n };\r\n\r\n GeneralLoadData.GeneralGet(\"BuilderConfigurator\", \"ImportStructureCsv\", parameters, null).then(function (result) {\r\n ImportCsvData(result.data);\r\n\r\n structure.TimesImported += 1;\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n })\r\n }\r\n\r\n $scope.GetProjectStructurePhotography = function (structure) {\r\n var photography;\r\n\r\n if (!structure) {\r\n photography = $scope.GetPhotography(null);\r\n\r\n return photography;\r\n }\r\n\r\n if (structure.Photography) {\r\n photography = $scope.GetPhotography(structure.Photography);\r\n\r\n return photography;\r\n }\r\n\r\n GetProjectStructurePhotographyFromServer(structure);\r\n\r\n photography = $scope.GetPhotography(null);\r\n\r\n return photography;\r\n };\r\n\r\n function GetProjectStructurePhotographyFromServer(structure) {\r\n structure.Photography = \" \";\r\n\r\n var parameters = {\r\n structureId: structure.Code,\r\n databaseName: structure.DatabaseName\r\n };\r\n\r\n $q.when(GeneralLoadData.GeneralGet(\"StructureConfigurator\", \"GetToStructureBuilder\", parameters, null)).then(function (result) {\r\n structure.Photography = result.data.Photography;\r\n structure.HasBuilderCsv = result.data.HasBuilderCsv;\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n }\r\n\r\n $scope.OpenStructures = function () {\r\n if ($scope.MenuOpen) {\r\n $scope.CloseMenus();\r\n }\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogStructures',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false,\r\n })\r\n };\r\n\r\n $scope.CloseStructures = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogStructures'\r\n });\r\n };\r\n //#endregion\r\n\r\n //#region Translations\r\n function SetTranslations() {\r\n var translations = webTranslations.find(first => (first.Language === $scope.LanguageSelected));\r\n\r\n Helpers.Translation.SetTranslations($sessionStorage, translations.Translations);\r\n }\r\n //#endregion\r\n\r\n //#region Youtube Player\r\n $scope.GetVideoLink = function (link) {\r\n if (!link || !link.Url) {\r\n return;\r\n }\r\n\r\n var url = $sce.trustAsResourceUrl(link.Url);\r\n\r\n return url;\r\n };\r\n //#endregion\r\n\r\n //#region Zoom\r\n $scope.ApplyZoom = function (e) {\r\n if (!zoomObject) {\r\n SetZoomObject();\r\n }\r\n\r\n var lensPosition = GetLensPosition(e);\r\n\r\n SetZoomedPhotography(lensPosition);\r\n }\r\n\r\n function SetZoomObject() {\r\n var lens = document.getElementById(\"ZoomLens\");\r\n var photography = document.getElementById(\"Photography\");\r\n var individualStructurePhotography = document.getElementById(\"IndividualSolutionPhotography\");\r\n\r\n var scaleX = 234 / lens.offsetWidth;\r\n var scaleY = 234 / lens.offsetHeight;\r\n\r\n zoomObject = {\r\n lens: lens,\r\n photography: photography,\r\n individualStructurePhotography: individualStructurePhotography,\r\n scaleX: scaleX,\r\n scaleY: scaleY\r\n };\r\n }\r\n\r\n function GetLensPosition(e) {\r\n var cursorPositions = GetCursorPositions(e);\r\n e.preventDefault();\r\n\r\n var lensPosition = {\r\n lensX: cursorPositions.cursorPositionX - (zoomObject.lens.offsetWidth / 2),\r\n lensY: cursorPositions.cursorPositionY - (zoomObject.lens.offsetHeight / 2)\r\n };\r\n\r\n CheckLensPosition(lensPosition, \"lensX\", zoomObject.photography.width, zoomObject.lens.offsetWidth);\r\n CheckLensPosition(lensPosition, \"lensY\", zoomObject.photography.height, zoomObject.lens.offsetHeight);\r\n\r\n AdjustLens(lensPosition);\r\n\r\n return lensPosition;\r\n }\r\n\r\n function SetZoomedPhotography(lensPosition) {\r\n var zoomedPhotography = document.getElementById(\"ZoomedPhotography\");\r\n\r\n if (!zoomedPhotography.style.backgroundSize) {\r\n zoomedPhotography.style.backgroundSize = (zoomObject.photography.width * zoomObject.scaleX) + \"px \" + (zoomObject.photography.height * zoomObject.scaleY) + \"px\";\r\n }\r\n\r\n zoomedPhotography.style.backgroundPosition = \"-\" + (lensPosition.lensX * zoomObject.scaleX) + \"px -\" + (lensPosition.lensY * zoomObject.scaleY) + \"px\";\r\n }\r\n\r\n function CheckLensPosition(lensPosition, measurement, photographyMax, offset) {\r\n if (lensPosition[measurement] > photographyMax - offset) {\r\n lensPosition[measurement] = photographyMax - offset;\r\n }\r\n\r\n if (lensPosition[measurement] < 0) {\r\n lensPosition[measurement] = 0;\r\n }\r\n }\r\n\r\n function AdjustLens(lensPosition) {\r\n zoomObject.lens.style.left = lensPosition.lensX + ((zoomObject.individualStructurePhotography.offsetWidth - zoomObject.photography.width) / 2) + \"px\";\r\n zoomObject.lens.style.top = lensPosition.lensY + ((zoomObject.individualStructurePhotography.offsetHeight - zoomObject.photography.height) / 2) + \"px\";\r\n }\r\n\r\n function GetCursorPositions(e) {\r\n var photographyPosition = zoomObject.photography.getBoundingClientRect();\r\n var pagePosition = e || window.event;\r\n\r\n var cursorPositionX = pagePosition.pageX - photographyPosition.left;\r\n var cursorPositionY = pagePosition.pageY - photographyPosition.top;\r\n\r\n cursorPositionX = cursorPositionX - window.pageXOffset;\r\n cursorPositionY = cursorPositionY - window.pageYOffset;\r\n\r\n var cursorPositions = { cursorPositionX: cursorPositionX, cursorPositionY: cursorPositionY };\r\n\r\n return cursorPositions;\r\n }\r\n\r\n $scope.HideLens = function () {\r\n $scope.ShowZoomLens = false;\r\n }\r\n\r\n $scope.ShowLens = function () {\r\n $scope.ShowZoomLens = true;\r\n }\r\n //#endregion\r\n\r\n //#region Menus\r\n function SetMenus(result, open) {\r\n $scope.Menus = result.data;\r\n\r\n if (!$scope.Menus.length) {\r\n return;\r\n }\r\n\r\n $scope.MenusHistory = [];\r\n $scope.MenusHistory.push($scope.Menus[0]);\r\n\r\n SetMenu();\r\n\r\n if (!open) {\r\n return;\r\n }\r\n\r\n $scope.OpenMenus();\r\n }\r\n\r\n function SetMenu() {\r\n var lastMenuIndex = $scope.MenusHistory.length - 1;\r\n\r\n $scope.SelectedMenu = $scope.MenusHistory[lastMenuIndex];\r\n\r\n ClearMenuSelectedOption();\r\n\r\n if ($scope.SelectedMenu.Photography) {\r\n return;\r\n }\r\n\r\n var parameters = {\r\n applicationCode: codes.Application.Builder,\r\n menuCode: $scope.SelectedMenu.Code\r\n };\r\n\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n GeneralLoadData.GeneralGet(\"Menu\", \"ListPhotography\", parameters).then(function (result) {\r\n var photographies = result.data;\r\n var photography = photographies.find(find => (find.FileName.toUpperCase() === \"Menu\".toUpperCase()));\r\n\r\n if (photography) {\r\n $scope.SelectedMenu.Photography = $scope.GetPhotography(photography.FileArray);\r\n } else {\r\n $scope.SelectedMenu.Photography = $scope.GetPhotography();\r\n }\r\n\r\n for (var i = 0; i < $scope.SelectedMenu.MenuOptions.length; i++) {\r\n var menuOption = $scope.SelectedMenu.MenuOptions[i];\r\n photography = photographies.find(find => (find.FileName === menuOption.Code));\r\n\r\n if (photography) {\r\n menuOption.Photography = $scope.GetPhotography(photography.FileArray);\r\n } else {\r\n menuOption.Photography = $scope.GetPhotography();\r\n }\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n $scope.OpenMenus = function () {\r\n $scope.MenuOpen = true;\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogMenus',\r\n parent: angular.element(document.body),\r\n multiple: false,\r\n clickOutsideToClose: false,\r\n })\r\n };\r\n\r\n $scope.CloseMenus = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogMenus'\r\n });\r\n\r\n ApplyMenuFilters();\r\n\r\n $timeout(function () {\r\n $scope.MenuOpen = false;\r\n });\r\n }\r\n\r\n function ApplyMenuFilters() {\r\n $scope.FilterClear();\r\n\r\n for (var i = 0; i < $scope.MenusHistory.length; i++) {\r\n var menuHistory = $scope.MenusHistory[i];\r\n var menuSelected = menuHistory.MenuOptions.find(find => find.Selected);\r\n\r\n if (!menuSelected) {\r\n continue;\r\n }\r\n\r\n var menuOptionsFilters = menuSelected.Filters;\r\n\r\n if (!menuOptionsFilters) {\r\n continue;\r\n }\r\n\r\n SetCharacteristicsFromMenu(menuOptionsFilters);\r\n }\r\n }\r\n\r\n function SetCharacteristicsFromMenu(characteristics) {\r\n if (!characteristics.length) {\r\n return;\r\n }\r\n\r\n if (!characteristics || !characteristics.length) {\r\n return;\r\n }\r\n\r\n var mainCode = $scope.Characteristics[0].MainCode;\r\n\r\n for (var i = 0; i < characteristics.length; i++) {\r\n var filter = characteristics[i];\r\n var index = filter.indexOf('.');\r\n var characteristicCode = filter.substr(0, index);\r\n var characteristic = $scope.Characteristics.find(find => (find.MainCode === mainCode) && (find.Code === characteristicCode));\r\n\r\n if (!characteristic) {\r\n continue;\r\n }\r\n\r\n var characteristicOptionCode = filter.substr(index + 1);\r\n var characteristicOption = characteristic.CharacteristicOptions.find(find => (find.Code === characteristicOptionCode));\r\n\r\n if (!characteristicOption) {\r\n continue;\r\n }\r\n\r\n var selected = SelectCharacteristicOption(mainCode, characteristicCode, characteristicOptionCode);\r\n\r\n if (!selected) {\r\n continue;\r\n }\r\n\r\n if (i == 0) {\r\n SetSelectedMainCharacteristic($scope.Characteristics[0], characteristicOptionCode);\r\n mainCode = characteristicOptionCode;\r\n }\r\n }\r\n\r\n ResetFilterCodeAndDescription();\r\n }\r\n\r\n $scope.MenuOptionClick = function (menuOption) {\r\n ClearMenuSelectedOption();\r\n\r\n menuOption.Selected = true;\r\n\r\n if (menuOption.Link) {\r\n Helpers.Page.OpenInNewTab(menuOption.Link);\r\n\r\n return;\r\n }\r\n\r\n if (menuOption.Menu) {\r\n var validNextMenu = NextMenu(menuOption);\r\n\r\n if (validNextMenu) {\r\n return;\r\n }\r\n }\r\n\r\n $scope.CloseMenus();\r\n }\r\n\r\n function NextMenu(menuOption) {\r\n var nextMenu = $scope.Menus.find(find => (find.Code === menuOption.Menu));\r\n\r\n if (!nextMenu) {\r\n return false;\r\n }\r\n\r\n $scope.MenusHistory.push(nextMenu);\r\n\r\n SetMenu();\r\n\r\n return true;\r\n }\r\n\r\n $scope.PreviousMenu = function () {\r\n $scope.MenusHistory.pop();\r\n\r\n SetMenu();\r\n }\r\n\r\n $scope.RestartMenus = function () {\r\n $scope.MenusHistory = [];\r\n\r\n $scope.MenusHistory.push($scope.Menus[0]);\r\n\r\n SetMenu();\r\n }\r\n\r\n function ClearMenuSelectedOption() {\r\n var selectedMenuOption = $scope.SelectedMenu.MenuOptions.find(find => find.Selected);\r\n\r\n if (selectedMenuOption) {\r\n selectedMenuOption.Selected = false;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Route\r\n function SetSearchValuesFromRoute() {\r\n if (!urlParameters || !urlParameters.S || !urlParameters.S.length) {\r\n return;\r\n }\r\n\r\n urlParameters.S.forEach(searchValue => {\r\n if (searchValue.length) {\r\n $scope.SearchValues.push(searchValue);\r\n }\r\n });\r\n }\r\n\r\n function SetCharacteristicsFromRoute() {\r\n if (!urlParameters || !urlParameters.C || !urlParameters.C.length) {\r\n return;\r\n }\r\n\r\n var mainCode;\r\n var firstCharacteristic = $scope.Characteristics[0];\r\n\r\n for (var i = 0; i < urlParameters.C.length; i++) {\r\n var characteristic = urlParameters.C[i];\r\n\r\n var codes = GetCodesFromCharacteristic(characteristic);\r\n\r\n if (!codes.length) {\r\n continue;\r\n }\r\n\r\n var firstCode = codes[0];\r\n\r\n if ((firstCode === firstCharacteristic.Code) && codes[1]) {\r\n mainCode = codes[1];\r\n\r\n SelectCharacteristicOption(firstCharacteristic.MainCode, firstCharacteristic.Code, codes[1]);\r\n SetSelectedMainCharacteristic(firstCharacteristic, codes[1]);\r\n\r\n continue;\r\n }\r\n\r\n if (!mainCode) {\r\n break;\r\n }\r\n\r\n if (codes.length === 1) {\r\n SelectCharacteristicOption(mainCode, firstCode, 'ALL');\r\n\r\n continue;\r\n }\r\n\r\n for (var j = 1; j < codes.length; j++) {\r\n SelectCharacteristicOption(mainCode, firstCode, codes[j]);\r\n }\r\n }\r\n\r\n ResetFilterCodeAndDescription();\r\n }\r\n\r\n function SetActivePageFromRoute() {\r\n if (!urlParameters || !urlParameters.P) {\r\n return;\r\n }\r\n\r\n var activePage = urlParameters.P;\r\n\r\n if (isNaN(activePage)) {\r\n return;\r\n }\r\n\r\n var numberOfPages = $scope.StructuresFiltered.length / $scope.ItemsPerPage;\r\n\r\n if ((activePage >= 1) && (activePage <= numberOfPages)) {\r\n $scope.CurrentPage = activePage;\r\n\r\n //$('#alt-style-pagination').pagination('selectPage', activePage);\r\n $scope.ScrollToTop('.ListStructures');\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region General Link\r\n $scope.CopyGeneralLink = function () {\r\n var url = GetBaseUrl();\r\n\r\n url = url.slice(0, -1);\r\n\r\n var selectedCharacteristicsOptions = GetSelectedCharacteristicsOptions();\r\n\r\n var json = \"?P=\" + $scope.CurrentPage;\r\n\r\n if (selectedCharacteristicsOptions && selectedCharacteristicsOptions.length) {\r\n json += \"&C=\" + selectedCharacteristicsOptions.toString();\r\n }\r\n\r\n if ($scope.SearchValues.length) {\r\n var searchValues = $scope.SearchValues.toString();\r\n\r\n json += \"&S=\" + searchValues;\r\n }\r\n\r\n if (json.length > 260) {\r\n GeneralModel.ShowToastWarning(Helpers.Translations.UrlMaxLengthReached);\r\n\r\n return;\r\n }\r\n\r\n url += json;\r\n\r\n CopyToClipboard(url);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.GeneralUrlCopied);\r\n }\r\n\r\n function GetSelectedCharacteristicsOptions() {\r\n var selectedCharacteristicsToReturn = [];\r\n var selectedCharacteristics = $scope.Characteristics.filter(where => where.CharacteristicOptions.some(some => some.Selected));\r\n\r\n for (var i = 0; i < selectedCharacteristics.length; i++) {\r\n var selectedCharacteristicToAnalyse = selectedCharacteristics[i];\r\n\r\n var selectedCharacteristicOption = selectedCharacteristicToAnalyse.CharacteristicOptions.filter(where => where.Selected);\r\n\r\n if (selectedCharacteristicToAnalyse.CharacteristicOptions.length === selectedCharacteristicOption.length) {\r\n selectedCharacteristicsToReturn.push(selectedCharacteristicToAnalyse.Code);\r\n\r\n continue;\r\n }\r\n\r\n var optionCodes = selectedCharacteristicToAnalyse.Code;\r\n\r\n for (var j = 0; j < selectedCharacteristicOption.length; j++) {\r\n optionCodes += selectedCharacteristicOption[j].Code;\r\n }\r\n\r\n selectedCharacteristicsToReturn.push(optionCodes);\r\n }\r\n\r\n return selectedCharacteristicsToReturn;\r\n }\r\n //#endregion\r\n\r\n //#region SEO\r\n function SetSEO() {\r\n var titleTag = angular.element('title');\r\n var canonicalLinkTag = document.querySelector('link[rel=\"canonical\"]')\r\n var metaDescription = angular.element('meta[name=\"description\"]');\r\n var metaKeywords = angular.element('meta[name=\"keywords\"]');\r\n\r\n titleTag[0].innerText = \"4Lean Structure Builder Configurator\";\r\n canonicalLinkTag.setAttribute('href', \"https://customer.4lean.net/solutionConfigurator/BuilderStructureConfigurator\");\r\n metaDescription.attr('content', \"The Structure Builder Configurator has thousands of configurations. You can see videos/images, pick a standard structure and reconfigure to your own structure, get bill of materials to get a proposal.\");\r\n metaKeywords.attr('content', \"lean manufacturing,Lean,kaizen,kaizen video,lean manufacturing video,lean manufacturing examples,logistics,logistic train,lean system,Solutions,Workstation,Production,Waste Reduction,Lean Thinking,Industry 4.0,How to,How to make,Mizusumashi,Process,manufacturing,karakuri, configurator\");\r\n }\r\n //#endregion\r\n });\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n myApp.controller('SolutionGuideAppCtrl', function ($scope, GeneralLoadData, GeneralModel, $q, $timeout, $compile, $mdDialog, GetIp, $http, $mdConstant, $sessionStorage, $sce, $location, $stateParams) {\r\n var delayTimer, delayHelpFilter;\r\n var zoomObject;\r\n\r\n $scope.Project = {\r\n Solutions: [],\r\n Details: {}\r\n };\r\n\r\n $scope.Menus = [];\r\n $scope.SearchValues = [];\r\n $scope.HelpSearchValues = [];\r\n $scope.separatorKeysForEmails = [$mdConstant.KEY_CODE.ENTER, $mdConstant.KEY_CODE.COMMA, $mdConstant.KEY_CODE.SPACE, $mdConstant.KEY_CODE.SEMICOLO];\r\n $scope.ItemsPerPage = 60;\r\n $scope.CurrentPage = 1;\r\n $scope.ShowInfoPages = false;\r\n $scope.HasHelp = false;\r\n CleanSolutionDetail();\r\n var urlParameters = null;\r\n var defaultTitle = \"4Lean Solution Configurator\";\r\n var defaultCanonicalUrl = \"https://customer.4lean.net/SolutionConfigurator/SolutionConfigurator\";\r\n var defaultMetaDescription = \"The Solutions Configurator has thousands of solutions.You can view videos/images and change the size of the structure and get bill of materials, to get the cost.\";\r\n var defaultMetaKeyword = \"lean manufacturing,Lean,kaizen,kaizen video,lean manufacturing video,lean manufacturing examples,logistics,logistic train,lean system,Solutions,Workstation,Production,Waste Reduction,Lean Thinking,Industry 4.0,How to,How to make,Mizusumashi,Process,manufacturing,karakuri\";\r\n\r\n this.$onInit = function () {\r\n $scope.generalModel = GeneralModel.model;\r\n $scope.Helpers = Helpers;\r\n\r\n SetParameters();\r\n SetLanguages();\r\n SetApplication();\r\n };\r\n\r\n function SetParameters() {\r\n if ($stateParams.P) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.P = parseInt($stateParams.P);\r\n }\r\n\r\n if ($stateParams.C) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.C = $stateParams.C.split(\",\");\r\n }\r\n\r\n if ($stateParams.S) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.S = $stateParams.S.split(\",\");\r\n }\r\n\r\n if ($stateParams.O) {\r\n urlParameters = urlParameters || {};\r\n urlParameters.O = ($stateParams.O.toUpperCase() === \"TRUE\");\r\n }\r\n }\r\n\r\n function SetLanguages() {\r\n $scope.LanguageSelected = localStorage.getItem(\"languageSelected\");\r\n\r\n if ($scope.generalModel.IsUndefinedEmptyOrNull($scope.LanguageSelected)) {\r\n $scope.LanguageSelected = \"EN\";\r\n }\r\n\r\n $scope.Languages = [\"EN\", \"ES\", \"FR\", \"IT\", \"PT\"].reverse();\r\n\r\n SetTranslations();\r\n }\r\n\r\n $scope.ChangeLanguage = function (language) {\r\n $scope.LanguageSelected = language;\r\n\r\n localStorage.setItem(\"languageSelected\", language);\r\n\r\n SetTranslations();\r\n SetApplication();\r\n }\r\n\r\n $scope.ApplyFilter = function () {\r\n clearTimeout(delayTimer);\r\n\r\n delayTimer = setTimeout(function () {\r\n Filter()\r\n }, 250);\r\n }\r\n\r\n function SetApplication() {\r\n $scope.generalModel.FullPageLoading = true;\r\n $scope.HasHelp = false;\r\n var promises = [];\r\n var openMenu = !urlParameters;\r\n\r\n var parameters = {\r\n applicationCode: codes.Application.Solutions,\r\n languageId: $scope.LanguageSelected\r\n };\r\n\r\n promises.push(GeneralLoadData.GeneralGet(\"Menu\", \"Get\", parameters, null));\r\n\r\n delete parameters.applicationCode;\r\n\r\n promises.push(GeneralLoadData.GeneralGet(\"SolutionGuide\", \"Get\", parameters, null));\r\n\r\n parameters = { applicationCode: codes.Application.Solutions };\r\n promises.push(GeneralLoadData.GeneralGet(\"Document\", \"CheckIfExists\", parameters, null));\r\n\r\n $q.all(promises).then(function (result) {\r\n SetMenus(result[0], openMenu);\r\n SetSolutions(result[1]);\r\n SetHelp(result[2]);\r\n\r\n SetFilters();\r\n SetSolutionPages();\r\n SetSolutionQrCodes();\r\n\r\n SetSearchValuesFromRoute();\r\n SetCharacteristicsFromRoute();\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n OpenSolutionDetailFromSearchValues();\r\n SetActivePageFromRoute();\r\n InitializeFilterCodeMask();\r\n\r\n if (!$scope.Menus.length) {\r\n $scope.generalModel.FullPageLoading = false;\r\n }\r\n\r\n urlParameters = null;\r\n });\r\n }\r\n\r\n function SetSolutions(result) {\r\n $scope.Solutions = result.data.Solutions;\r\n $scope.SolutionsFiltered = result.data.Solutions;\r\n $scope.Characteristics = result.data.Characteristics;\r\n $scope.Areas = result.data.Area;\r\n }\r\n\r\n function SetHelp(result) {\r\n $scope.HasHelp = result.data;\r\n }\r\n\r\n function SetFilters() {\r\n $scope.FilterDescriptionLength = ($scope.Characteristics.length - 1) * 3;\r\n $scope.FilterCodeLength = Math.max.apply(Math, $scope.Characteristics.map(function (characteristic) { return characteristic.StartIndex; })) + 2;\r\n $scope.FilterCode = ''.padEnd($scope.FilterCodeLength, '_');\r\n $scope.FilterDescription = ''.padEnd($scope.FilterDescriptionLength, ' | ');\r\n\r\n $scope.SearchValues = [];\r\n }\r\n\r\n $scope.OpenSolutionDetail = function (solution) {\r\n $scope.SolutionSelected = solution;\r\n\r\n SetSolutionDetail();\r\n SetSeoData(solution);\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogSolutionDetail',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false,\r\n onComplete: function () {\r\n SetProjectQuantity();\r\n }\r\n });\r\n }\r\n\r\n function OpenSolutionDetailFromSearchValues() {\r\n if (!urlParameters || (urlParameters.O !== true) || !urlParameters.S) {\r\n return;\r\n }\r\n\r\n if (urlParameters.S.length !== 1) {\r\n return;\r\n }\r\n\r\n var searchValue = urlParameters.S[0];\r\n var solution = $scope.Solutions.find(find => (find.Code === searchValue));\r\n\r\n if (solution) {\r\n $scope.OpenSolutionDetail(solution);\r\n }\r\n }\r\n\r\n $scope.CloseSolutionDetail = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogSolutionDetail'\r\n });\r\n\r\n CleanSolutionDetail();\r\n SetSeoData();\r\n }\r\n\r\n function SetSeoData(solution) {\r\n var titleTag = angular.element('title');\r\n var canonicalLinkTag = document.querySelector('link[rel=\"canonical\"]')\r\n var metaDescription = angular.element('meta[name=\"description\"]');\r\n var metaKeywords = angular.element('meta[name=\"keywords\"]');\r\n\r\n if (!solution) {\r\n titleTag[0].innerText = defaultTitle;\r\n canonicalLinkTag.setAttribute('href', defaultCanonicalUrl);\r\n metaDescription.attr('content', defaultMetaDescription);\r\n metaKeywords.attr('content', defaultMetaKeyword);\r\n\r\n return;\r\n }\r\n\r\n var url = GetIndividualLink(solution);\r\n\r\n titleTag[0].innerText = defaultTitle + ' - ' + solution.Description;\r\n canonicalLinkTag.setAttribute('href', url);\r\n\r\n if (solution.SeoInformation) {\r\n metaDescription.attr('content', solution.SeoInformation.Description)\r\n metaKeywords.attr('content', solution.SeoInformation.Keywords)\r\n }\r\n }\r\n\r\n function GetSolutionById(solutions, id) {\r\n var solution = solutions.find(first => (first.Id === id));\r\n\r\n return solution;\r\n }\r\n\r\n function GetSolutionByCode(solutions, code) {\r\n var solution = solutions.find(first => (first.Code === code));\r\n\r\n return solution;\r\n }\r\n\r\n function GetSolutionByOldId(solutions, oldId) {\r\n var solution = solutions.find(first => (first.OldId === oldId));\r\n\r\n return solution;\r\n }\r\n\r\n $scope.GetIndexSolutionSelected = function () {\r\n if ($scope.SolutionsFiltered === undefined) {\r\n return null;\r\n }\r\n\r\n var indexSolutionSelected = $scope.SolutionsFiltered.indexOf($scope.SolutionSelected);\r\n\r\n return indexSolutionSelected;\r\n }\r\n\r\n $scope.ShowPreviousSolutionDetail = function () {\r\n if ($scope.SolutionsFiltered === undefined) {\r\n return false;\r\n }\r\n\r\n var indexSolutionSelected = $scope.GetIndexSolutionSelected();\r\n var show = (indexSolutionSelected !== 0);\r\n\r\n return show;\r\n }\r\n\r\n $scope.PreviousSolutionDetail = function () {\r\n var indexSolutionSelected = $scope.GetIndexSolutionSelected();\r\n $scope.SolutionSelected = $scope.SolutionsFiltered[indexSolutionSelected - 1];\r\n\r\n SetSolutionDetail();\r\n SetProjectQuantity();\r\n }\r\n\r\n $scope.ShowNextSolutionDetail = function () {\r\n if ($scope.SolutionsFiltered === undefined) {\r\n return false;\r\n }\r\n\r\n var indexSolutionSelected = $scope.GetIndexSolutionSelected();\r\n var show = (indexSolutionSelected !== ($scope.SolutionsFiltered.length - 1));\r\n\r\n return show;\r\n }\r\n\r\n $scope.NextSolutionDetail = function () {\r\n var indexSolutionSelected = $scope.GetIndexSolutionSelected();\r\n $scope.SolutionSelected = $scope.SolutionsFiltered[indexSolutionSelected + 1];\r\n\r\n SetSolutionDetail();\r\n SetProjectQuantity();\r\n }\r\n\r\n $scope.OpenCloseFilter = function (e) {\r\n var content = e.target.nextElementSibling;\r\n\r\n e.target.classList.toggle(\"active\");\r\n\r\n if (content.style.maxHeight) {\r\n content.style.maxHeight = null;\r\n content.parentElement.style.paddingBottom = null;\r\n } else {\r\n CalculateMaxHeight(content);\r\n }\r\n }\r\n\r\n $(window).resize(function () {\r\n var characteristicsOptionsElements = document.getElementsByClassName(\"CharacteristicOptions\");\r\n var characteristicsOptionsElementsLength = characteristicsOptionsElements.length;\r\n\r\n for (var i = 0; i < characteristicsOptionsElementsLength; i++) {\r\n var characteristicsOptionsElement = characteristicsOptionsElements[i];\r\n\r\n if (characteristicsOptionsElement.style.maxHeight) {\r\n CalculateMaxHeight(characteristicsOptionsElement);\r\n }\r\n }\r\n });\r\n\r\n function CalculateMaxHeight(characteristicsOptionsElement) {\r\n characteristicsOptionsElement.style.maxHeight = characteristicsOptionsElement.scrollHeight + \"px\";\r\n characteristicsOptionsElement.parentElement.style.paddingBottom = \"15px\";\r\n }\r\n\r\n $scope.FilterClearShow = function () {\r\n if ($scope.Characteristics === undefined) {\r\n return false;\r\n }\r\n\r\n var show = $scope.Characteristics.filter(where => where.CharacteristicOptions.filter(secondWhere => secondWhere.Selected).length).length;\r\n\r\n return show;\r\n }\r\n\r\n $scope.FilterClear = function () {\r\n var characteristics = $scope.Characteristics.filter(where => where.CharacteristicOptions.filter(secondWhere => secondWhere.Selected).length);\r\n var characteristicsLength = characteristics.length;\r\n\r\n for (var i = 0; i < characteristicsLength; i++) {\r\n var characteristic = characteristics[i];\r\n var characteristicOptions = characteristic.CharacteristicOptions.filter(where => where.Selected);\r\n var characteristicOptionsLength = characteristicOptions.length;\r\n\r\n for (var j = 0; j < characteristicOptionsLength; j++) {\r\n var characteristicOption = characteristicOptions[j];\r\n\r\n characteristicOption.Selected = false;\r\n }\r\n }\r\n\r\n $scope.FilterCode = ''.padEnd($scope.FilterCodeLength, '_');\r\n $scope.FilterDescription = ''.padEnd($scope.FilterDescriptionLength, ' | ');\r\n }\r\n\r\n $scope.GetCharacteristicOptionCount = function (characteristic, characteristicOption) {\r\n var count = $scope.SolutionsFiltered.filter(where => (where.Code.substr(characteristic.StartIndex, 2) === characteristicOption.Code)).length;\r\n\r\n return count;\r\n }\r\n\r\n $scope.GetCheckBoxEditor = function () {\r\n this.characteristicOption.Selected = this.characteristicOption.Selected || false;\r\n\r\n var checkBoxEditor = {\r\n bindingOptions: {\r\n value: \"characteristicOption.Selected\"\r\n },\r\n elementAttr: {\r\n class: \"CharacteristicOptionCheckBox\"\r\n },\r\n onValueChanged: function () {\r\n clearTimeout(delayTimer);\r\n\r\n delayTimer = setTimeout(function () {\r\n FilterCharacteristicOption();\r\n }, 250);\r\n }\r\n };\r\n\r\n return checkBoxEditor;\r\n }\r\n\r\n function FilterCharacteristicOption() {\r\n for (var i = 0; i < $scope.Characteristics.length; i++) {\r\n var characteristic = $scope.Characteristics[i];\r\n\r\n SetFilter(characteristic);\r\n }\r\n\r\n Filter();\r\n };\r\n\r\n function SetFilter(characteristic) {\r\n var characteristicOptionCode = \"__\";\r\n var characteristicOptionDescription = \"\";\r\n var characteristicOptionsSelected = characteristic.CharacteristicOptions.filter(where => (where.Selected));\r\n\r\n if (characteristicOptionsSelected.length === 1) {\r\n characteristicOptionCode = characteristicOptionsSelected[0].Code;\r\n characteristicOptionDescription = characteristicOptionsSelected[0].Description;\r\n }\r\n\r\n $scope.FilterCode = $scope.FilterCode.substr(0, characteristic.StartIndex) + characteristicOptionCode + $scope.FilterCode.substr(characteristic.StartIndex + 2);\r\n\r\n var characteristicIndex = $scope.Characteristics.indexOf(characteristic);\r\n var filterDescriptionSplited = $scope.FilterDescription.split(' | ');\r\n $scope.FilterDescription = \"\";\r\n\r\n for (var i = 0; i < filterDescriptionSplited.length; i++) {\r\n if (i === characteristicIndex) {\r\n $scope.FilterDescription += characteristicOptionDescription;\r\n }\r\n else {\r\n $scope.FilterDescription += filterDescriptionSplited[i];\r\n }\r\n\r\n if (i !== (filterDescriptionSplited.length - 1)) {\r\n $scope.FilterDescription += \" | \";\r\n }\r\n }\r\n }\r\n\r\n function Filter() {\r\n var i;\r\n var solutionsFiltered = [];\r\n\r\n if ($scope.SearchValues.length) {\r\n for (i = 0; i < $scope.Solutions.length; i++) {\r\n var solutionToAnalyse = $scope.Solutions[i];\r\n\r\n for (var j = 0; j < $scope.SearchValues.length; j++) {\r\n var searchValue = $scope.SearchValues[j];\r\n\r\n if (searchValue) {\r\n searchValue = searchValue.toLowerCase().trim();\r\n\r\n if (solutionToAnalyse.Code.toLowerCase().trim().includes(searchValue) || solutionToAnalyse.Description.toLowerCase().trim().includes(searchValue)) {\r\n solutionsFiltered.push(solutionToAnalyse);\r\n break;\r\n }\r\n\r\n if (solutionToAnalyse.DrawingNumber && solutionToAnalyse.DrawingNumber.toLowerCase().trim().includes(searchValue)) {\r\n solutionsFiltered.push(solutionToAnalyse);\r\n break\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n solutionsFiltered = $scope.Solutions;\r\n }\r\n\r\n if (solutionsFiltered.length) {\r\n for (i = 0; i < $scope.Characteristics.length; i++) {\r\n var characteristicsItem = $scope.Characteristics[i];\r\n var characteristicOptionCodes = characteristicsItem.CharacteristicOptions.filter(where => (where.Selected)).map(function (characteristicOption) { return characteristicOption.Code; });\r\n\r\n if (!characteristicOptionCodes.length || (characteristicOptionCodes.length === characteristicsItem.CharacteristicOptions.length)) {\r\n continue;\r\n }\r\n\r\n solutionsFiltered = solutionsFiltered.filter(where => characteristicOptionCodes.includes(where.Code.substr(characteristicsItem.StartIndex, 2)));\r\n\r\n if (!solutionsFiltered.length) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n SetDefaultSolution(solutionsFiltered);\r\n\r\n $timeout(function () {\r\n $scope.SolutionsFiltered = solutionsFiltered;\r\n SetSolutionQrCodes();\r\n SetSolutionPages();\r\n });\r\n }\r\n\r\n function SetDefaultSolution(solutionsFiltered) {\r\n var defaultSolution = $scope.Solutions.find(find => (find.Code === \"999999999999999999\"))\r\n\r\n if (!defaultSolution) {\r\n return;\r\n }\r\n\r\n var defaultSolutionInFilter = solutionsFiltered.find(find => (find.Code === \"999999999999999999\"))\r\n\r\n if (!defaultSolutionInFilter) {\r\n solutionsFiltered.push(defaultSolution);\r\n }\r\n }\r\n\r\n function SetSolutionQrCodes() {\r\n $timeout(function () {\r\n for (var i = 0; i < $scope.SolutionsFiltered.length; i++) {\r\n var solution = $scope.SolutionsFiltered[i];\r\n\r\n SetQrCode(\"Qr\", solution);\r\n }\r\n });\r\n }\r\n\r\n function SetSolutionDetailQrCode() {\r\n $timeout(function () {\r\n SetQrCode(\"QrSolutionDetail\", $scope.SolutionSelected);\r\n });\r\n }\r\n\r\n function SetQrCode(id, solution) {\r\n $(\"#\" + id + solution.Code).ClassyQR({\r\n size: 90,\r\n type: 'text',\r\n text: solution.Code\r\n });\r\n }\r\n\r\n //#region Photography\r\n $scope.GetPhotography = function (photography) {\r\n if ($scope.generalModel.IsUndefinedEmptyOrNull(photography)) {\r\n photography = 'images/FallBackImage.1739284541000.png';\r\n }\r\n else {\r\n if (photography.endsWith(\".png\")) {\r\n photography = GetBaseUrl(true) + photography;\r\n }\r\n else {\r\n photography = 'data:image/jpg;base64,' + photography;\r\n }\r\n }\r\n\r\n return photography;\r\n };\r\n\r\n $scope.GetSolutionPhotography = function (solution) {\r\n var photography;\r\n\r\n if (!solution) {\r\n photography = $scope.GetPhotography(null);\r\n\r\n return photography;\r\n }\r\n\r\n if (solution.SeoInformation && solution.SeoInformation.PhotographyName) {\r\n photography = $scope.GetPhotography(solution.SeoInformation.PhotographyName);\r\n\r\n return photography;\r\n }\r\n\r\n if (solution.Photography) {\r\n photography = $scope.GetPhotography(solution.Photography);\r\n\r\n return photography;\r\n }\r\n\r\n GetSolutionPhotographyFromServer(solution.Code);\r\n\r\n photography = $scope.GetPhotography(null);\r\n\r\n return photography;\r\n };\r\n\r\n function GetSolutionPhotographyFromServer(solutionCode, specificSolution) {\r\n var solutionCodeToGet;\r\n\r\n if (solutionCode) {\r\n solutionCodeToGet = solutionCode;\r\n } else {\r\n solutionCodeToGet = specificSolution.Code;\r\n }\r\n\r\n var solutionFiltered = GetSolutionByCode($scope.SolutionsFiltered, solutionCodeToGet);\r\n var solution = GetSolutionByCode($scope.Solutions, solutionCodeToGet);\r\n\r\n solution.Photography = \" \";\r\n solutionFiltered.Photography = \" \";\r\n\r\n var parameters = {\r\n solutionId: solutionCodeToGet\r\n };\r\n\r\n GeneralLoadData.GeneralGet(\"SolutionGuide\", \"GetSolutionPhotography\", parameters, null).then(function (result) {\r\n solution.Photography = result.data;\r\n solutionFiltered.Photography = result.data;\r\n\r\n if (specificSolution) {\r\n specificSolution.Photography = result.data;\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n }\r\n //#endregion\r\n\r\n $scope.GetSolutionDescription = function (solution) {\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n if (!solution.SeoInformation || !solution.SeoInformation.Description) {\r\n var description = solution.Description;\r\n\r\n return description;\r\n }\r\n\r\n return solution.SeoInformation.Description;\r\n }\r\n\r\n $scope.GetSolutionIndividualLink = function (solution) {\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n var link = GetIndividualLink(solution);\r\n\r\n return link;\r\n }\r\n\r\n $scope.GetSelectedSolutionPhotography = function (index) {\r\n var photography;\r\n\r\n if (!$scope.SolutionSelected) {\r\n return;\r\n }\r\n\r\n if (!$scope.SolutionSelected.HasDetails && $scope.SolutionSelected.SeoInformation && $scope.SolutionSelected.SeoInformation.PhotographyName) {\r\n photography = $scope.GetPhotography($scope.SolutionSelected.SeoInformation.PhotographyName);\r\n }\r\n else {\r\n if (!$scope.SolutionDetail.Photographies.length) {\r\n return;\r\n }\r\n\r\n photography = $scope.SolutionDetail.Photographies[index].Photography;\r\n }\r\n\r\n return photography;\r\n }\r\n\r\n $scope.GetLanguagePhotography = function (flag) {\r\n var photography = \"images/flags/\" + flag.toLowerCase() + \".1739284541000.png\";\r\n\r\n var findElement = $(\"#Language\" + flag);\r\n findElement.attr(\"alt\", flag);\r\n findElement.attr(\"title\", flag);\r\n\r\n return photography;\r\n }\r\n\r\n $scope.GetCharacteristicOptionPhotography = function (id, solution, characteristic) {\r\n var photography;\r\n\r\n if (solution === undefined) {\r\n return photography;\r\n }\r\n\r\n var title = characteristic.Description + \" -> \";\r\n var characteristicOptionCode = solution.Code.substr(characteristic.StartIndex, 2);\r\n var characteristicOption = characteristic.CharacteristicOptions.filter(where => (where.Code === characteristicOptionCode))[0];\r\n\r\n if (characteristicOption !== undefined) {\r\n photography = characteristicOption.Photography;\r\n title += characteristicOption.Description;\r\n }\r\n\r\n var findElement = $(\"#\" + id + solution.Code + characteristic.Code);\r\n findElement.attr(\"alt\", title);\r\n findElement.attr(\"title\", title);\r\n\r\n photography = $scope.GetPhotography(photography);\r\n\r\n return photography;\r\n }\r\n\r\n $scope.ScrollbarOptions = {\r\n \"onScroll\": function (y) {\r\n var buttonTopVisibility = (y.scroll > 100);\r\n\r\n if (buttonTopVisibility !== $scope.ButtonTopVisibility) {\r\n $timeout(function () {\r\n $scope.ButtonTopVisibility = buttonTopVisibility;\r\n });\r\n }\r\n }\r\n };\r\n\r\n $scope.ScrollToTop = function (elementId) {\r\n angular.element(elementId).animate({ scrollTop: 0 }, 400);\r\n };\r\n\r\n $scope.Copy = function (elementId, event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n var element = document.getElementById(elementId);\r\n var selection = window.getSelection();\r\n var range = document.createRange();\r\n\r\n range.selectNodeContents(element);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n document.execCommand(\"Copy\");\r\n\r\n GeneralModel.ShowToastWarning(Helpers.Translations.Copied + \": \" + element.innerHTML);\r\n }\r\n\r\n $scope.CopyWithWhitespaces = function (elementId, event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n let element = document.getElementById(elementId);\r\n let textToCopy = element.innerHTML.replace(/_/g, ' ');\r\n let tempElement = document.createElement(\"textarea\");\r\n\r\n document.body.appendChild(tempElement);\r\n tempElement.value = textToCopy;\r\n\r\n tempElement.select();\r\n document.execCommand(\"copy\");\r\n\r\n document.body.removeChild(tempElement);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.Copied + \": \" + textToCopy);\r\n };\r\n\r\n $scope.CopyAll = function (code, description) {\r\n var valueToCopy = code + '\\n' + description;\r\n var elementToCopy = document.createElement('textarea');\r\n\r\n elementToCopy.value = valueToCopy;\r\n\r\n document.body.appendChild(elementToCopy);\r\n elementToCopy.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(elementToCopy);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.Copied + \": \" + valueToCopy);\r\n }\r\n\r\n function SetProjectQuantity() {\r\n if (!$scope.SolutionSelected.ProjectQuantity) {\r\n $scope.SolutionSelected.ProjectQuantity = 0;\r\n }\r\n\r\n $timeout(() => {\r\n var element = document.getElementById('selectedSolutionQuantity');\r\n\r\n element.focus();\r\n element.select();\r\n }, 0)\r\n }\r\n\r\n $scope.CheckKey = function (keyEvent) {\r\n if (keyEvent.which === 13) {\r\n keyEvent.preventDefault();\r\n }\r\n };\r\n\r\n $scope.OpenProjectDialog = function () {\r\n var oldProjectSolutions = angular.copy($scope.Project.Solutions);\r\n\r\n $scope.StepProjectSolutions = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n $scope.SendSequencer = false;\r\n $scope.Project.Solutions = [];\r\n\r\n $scope.Solutions.forEach(solution => {\r\n if (solution.ProjectQuantity && (solution.ProjectQuantity > 0)) {\r\n var solutionsFiltered = $scope.Project.Solutions.filter(where => where.Code === solution.Code);\r\n\r\n for (var i = 0; i < solution.ProjectQuantity - solutionsFiltered.length; i++) {\r\n var oldSolution = oldProjectSolutions.find(find => find.Code === solution.Code);\r\n\r\n if (oldSolution) {\r\n $scope.Project.Solutions.push(angular.copy(oldSolution));\r\n oldProjectSolutions.remove(oldSolution);\r\n } else {\r\n $scope.Project.Solutions.push(angular.copy(solution));\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (!$scope.Project.Solutions.length) {\r\n GeneralModel.ShowToastWarning(\"Please select at least one solution to complete the project.\");\r\n\r\n return;\r\n }\r\n\r\n $scope.StepProjectSolutions = true;\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogProject',\r\n parent: angular.element(document.body),\r\n multiple: false,\r\n clickOutsideToClose: false\r\n });\r\n }\r\n\r\n $scope.DeleteSolution = function (solutionToDelete) {\r\n var columnIdToReorder = solutionToDelete.ColumnId;\r\n\r\n $scope.DecreaseProjectQuantity(solutionToDelete.Code);\r\n\r\n $scope.Project.Solutions.remove(solutionToDelete);\r\n\r\n if (solutionToDelete.Id || (solutionToDelete.Id === 0)) {\r\n var element = $('#Solution' + solutionToDelete.Id);\r\n\r\n if (element) {\r\n element.remove();\r\n }\r\n }\r\n\r\n if (!$scope.Project.Solutions.length) {\r\n $scope.CloseProject();\r\n\r\n return;\r\n }\r\n\r\n if (columnIdToReorder) {\r\n SetSolutionsOrder(columnIdToReorder);\r\n }\r\n\r\n RemoveAndHideLines(solutionToDelete.Id);\r\n }\r\n\r\n $scope.DeleteSolutionById = function (solutionId) {\r\n var solution = GetSolutionById($scope.Project.Solutions, solutionId);\r\n\r\n $scope.DeleteSolution(solution);\r\n\r\n UpdateLines();\r\n }\r\n\r\n $scope.DuplicateSolutionById = function (solutionId) {\r\n var solution = GetSolutionById($scope.Project.Solutions, solutionId);\r\n\r\n var newSolution = $scope.DuplicateSolution(solution);\r\n\r\n AddSolutionToSequencer(newSolution);\r\n\r\n SetNotesOnChange();\r\n\r\n $compile('#Solution' + newSolution.Id)($scope);\r\n }\r\n\r\n $scope.DuplicateSolution = function (solutionToDuplicate) {\r\n var positionToInsert = $scope.Project.Solutions.indexOf(solutionToDuplicate);\r\n\r\n if (positionToInsert < 0) {\r\n return;\r\n }\r\n\r\n $scope.IncreaseProjectQuantity(solutionToDuplicate.Code);\r\n\r\n positionToInsert++;\r\n solutionToDuplicate = angular.copy(solutionToDuplicate);\r\n\r\n if (solutionToDuplicate.Order) {\r\n var maximumId = GetMaximumSolutionId();\r\n var order = $scope.Project.Solutions.filter(where => (where.ColumnId === solutionToDuplicate.ColumnId)).length;\r\n\r\n order++;\r\n maximumId++;\r\n solutionToDuplicate.Order = order;\r\n solutionToDuplicate.Id = maximumId;\r\n }\r\n\r\n $scope.Project.Solutions.splice(positionToInsert, 0, solutionToDuplicate);\r\n CheckSequencerColumns();\r\n\r\n return solutionToDuplicate;\r\n }\r\n\r\n function GetMaximumSolutionId() {\r\n var maximumId = 0;\r\n\r\n $scope.Project.Solutions.forEach(solution => {\r\n if (solution.Id > maximumId) {\r\n maximumId = solution.Id;\r\n }\r\n });\r\n\r\n return maximumId;\r\n }\r\n\r\n $scope.CloseProject = function () {\r\n $scope.StepProjectSolutions = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n\r\n $mdDialog.hide({\r\n contentElement: '#DialogProject'\r\n });\r\n }\r\n\r\n $scope.ShowProjectSolutions = function () {\r\n $scope.StepProjectSolutions = true;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n }\r\n\r\n $scope.HasSelectedSolutions = function () {\r\n if (!$scope.Solutions) {\r\n return false;\r\n }\r\n\r\n var selectedSolution = $scope.Solutions.find(single => single.ProjectQuantity && (single.ProjectQuantity > 0))\r\n\r\n return selectedSolution;\r\n }\r\n\r\n $scope.HasSolutionsToSequence = function () {\r\n if (!$scope.Project.Solutions) {\r\n return false;\r\n }\r\n\r\n if ($scope.Project.Solutions.length === 1) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n $scope.ShowProjectDetails = function () {\r\n SetProjectDetails();\r\n\r\n $scope.SendSequencer = $scope.StepProjectSequencer;\r\n $scope.StepProjectSolutions = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = true;\r\n $scope.StepProjectSubmitted = false;\r\n $scope.ShowProjectDetailsInvalidFields = false;\r\n }\r\n\r\n function SetProjectDetails() {\r\n var details = localStorage.getItem(\"Project.Details\");\r\n\r\n if (details) {\r\n $scope.Project.Details = JSON.parse(details)\r\n }\r\n\r\n if ($scope.Project.Details) {\r\n if ($scope.Project.Details.Email) {\r\n $scope.Project.Details.Emails = [];\r\n var emailsToAdd = $scope.Project.Details.Email.split(\";\");\r\n\r\n for (var i = 0; i < emailsToAdd.length; i++) {\r\n var emailToAdd = emailsToAdd[i];\r\n\r\n if (!emailToAdd.length) {\r\n continue;\r\n }\r\n\r\n $scope.Project.Details.Emails.push(emailToAdd);\r\n }\r\n\r\n delete $scope.Project.Details.Email;\r\n }\r\n }\r\n else {\r\n $scope.Project.Details = {}\r\n }\r\n\r\n if (!$scope.Project.Details.Emails) {\r\n $scope.Project.Details.Emails = [];\r\n }\r\n }\r\n\r\n $scope.ShowProjectSequencer = function () {\r\n SetSequencer();\r\n\r\n $scope.SendSequencer = false;\r\n $scope.StepProjectSolutions = false;\r\n $scope.StepProjectSequencer = true;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = false;\r\n $scope.ShowProjectDetailsInvalidFields = false;\r\n }\r\n\r\n function CheckSequencerColumns() {\r\n if (!$scope.StepProjectSequencer) {\r\n return;\r\n }\r\n\r\n var numberOfSolutions = $scope.Project.Solutions.length;\r\n var numberOfColumns = $scope.Sequencer.Columns.length;\r\n\r\n if (numberOfSolutions <= numberOfColumns) {\r\n return;\r\n }\r\n\r\n var newColumn = { Id: numberOfColumns + 1 };\r\n\r\n $scope.Sequencer.Columns.push(newColumn);\r\n $timeout(SetSequencerProperties, false);\r\n }\r\n\r\n function GetSolutionToSetQuantity(solutionCode) {\r\n var solutionFiltered = GetSolutionByCode($scope.Solutions, solutionCode);\r\n\r\n if (!solutionFiltered) {\r\n return solutionFiltered;\r\n }\r\n\r\n if (!solutionFiltered.ProjectQuantity) {\r\n solutionFiltered.ProjectQuantity = 0;\r\n }\r\n\r\n return solutionFiltered;\r\n };\r\n\r\n $scope.IncreaseProjectQuantity = function (solutionCode) {\r\n var solution = GetSolutionToSetQuantity(solutionCode);\r\n\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n solution.ProjectQuantity++;\r\n };\r\n\r\n $scope.DecreaseProjectQuantity = function (solutionCode) {\r\n var solution = GetSolutionToSetQuantity(solutionCode);\r\n\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n if (solution.ProjectQuantity === 0) {\r\n return;\r\n }\r\n\r\n solution.ProjectQuantity--;\r\n };\r\n\r\n $scope.ProjectSubmit = function () {\r\n var isFormValid = IsFormValid();\r\n\r\n if (isFormValid) {\r\n SendProject();\r\n\r\n return;\r\n }\r\n\r\n $scope.ShowProjectDetailsInvalidFields = true;\r\n }\r\n\r\n $scope.ProjectComplete = function () {\r\n $scope.Project.Solutions = [];\r\n RemoveAllLines();\r\n\r\n $scope.Solutions.forEach(solution => {\r\n if (solution.ProjectQuantity && (solution.ProjectQuantity > 0)) {\r\n solution.ProjectQuantity = 0;\r\n }\r\n });\r\n\r\n $mdDialog.hide({\r\n contentElement: '#DialogProject'\r\n });\r\n }\r\n\r\n function IsFormValid() {\r\n if (!$scope.Project.Details.CompanyName || ($scope.Project.Details.CompanyName.length === 0)) {\r\n GeneralModel.ShowToastWarning(\"There are mandatory fields to fill!\");\r\n\r\n return false;\r\n }\r\n\r\n if (!$scope.Project.Details.Emails) {\r\n GeneralModel.ShowToastWarning(\"There are mandatory fields to fill!\");\r\n\r\n return false;\r\n }\r\n\r\n if (ValidateEmails()) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function ValidateEmails() {\r\n var existValidEmail = false;\r\n\r\n for (var i = 0; i < $scope.Project.Details.Emails.length; i++) {\r\n var emailToValidate = $scope.Project.Details.Emails[i];\r\n\r\n if (!emailToValidate.length) {\r\n continue;\r\n }\r\n\r\n var emailValid = ValidateEmail(emailToValidate, true);\r\n\r\n if (!emailValid) {\r\n return false;\r\n }\r\n\r\n existValidEmail = true;\r\n }\r\n\r\n if (!existValidEmail) {\r\n GeneralModel.ShowToastWarning(\"You must insert at least one valid email.\");\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function ValidateEmail(emailToValidate, showErrorMessage) {\r\n if (/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(emailToValidate)) {\r\n return true;\r\n }\r\n\r\n if (showErrorMessage) {\r\n GeneralModel.ShowToastWarning(\"Email '\" + emailToValidate + \"' is invalid.\");\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function SendProject() {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var solutionsToSend = [];\r\n var openStructures = $scope.Project.Details.OpenStructures;\r\n\r\n $scope.Project.Solutions.forEach(solution => {\r\n var solutionToSend = {\r\n Code: solution.Code,\r\n Area: solution.Area,\r\n Notes: solution.Notes,\r\n ColumnId: solution.ColumnId,\r\n Order: solution.Order,\r\n Id: solution.Id\r\n }\r\n\r\n solutionsToSend.push(solutionToSend);\r\n });\r\n\r\n var parameters = {\r\n Solutions: solutionsToSend,\r\n ProjectDetail: $scope.Project.Details,\r\n Language: $scope.LanguageSelected,\r\n SendSequencer: $scope.SendSequencer\r\n };\r\n\r\n if ($scope.SendSequencer) {\r\n for (var i = 0; i < lines.length; i++) {\r\n var line = lines[i];\r\n\r\n var startSolution = GetSolutionById(solutionsToSend, line.StartSolutionId);\r\n\r\n startSolution.ConnectedToSolutionIds = startSolution.ConnectedToSolutionIds || [];\r\n\r\n startSolution.ConnectedToSolutionIds.push(line.EndSolutionId);\r\n }\r\n }\r\n\r\n GeneralLoadData.GeneralPost(\"SolutionGuide\", \"Send\", parameters, null).then(function () {\r\n localStorage.setItem(\"Project.Details\", JSON.stringify($scope.Project.Details))\r\n\r\n $scope.Project.Solutions = []\r\n $scope.StepProjectSolutions = false;\r\n $scope.StepProjectSequencer = false;\r\n $scope.StepProjectDetails = false;\r\n $scope.StepProjectSubmitted = true;\r\n\r\n if (openStructures) {\r\n SendSolutionsToStructures(solutionsToSend);\r\n }\r\n\r\n $scope.Project.Details.OpenStructures = false;\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n function SendSolutionsToStructures(solutionsToSend) {\r\n localStorage.setItem(\"SolutionsSubmitted\", JSON.stringify(solutionsToSend));\r\n $scope.OpenStructures();\r\n }\r\n\r\n $scope.OpenImportCsvDialog = function () {\r\n $scope.File = '';\r\n $scope.generalModel.FullPageLoading = true;\r\n $scope.UploadBox = { Multiple: false, Pattern: '.csv', Accept: '.csv', Capture: 'camera', Validate: { size: { max: '1MB', min: '1B' }, height: { max: 12000 }, width: { max: 12000 } }, DragOverClass: { accept: 'dragover', reject: 'dragover-err', pattern: '*' }, Options: { debounce: 100 }, Resize: { width: 400, height: 400, centerCrop: false }, ResizeIf: '$width > 400 || $height > 400', FirefoxPaste: true };\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogImportCsv',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false\r\n });\r\n\r\n $scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n $scope.ImportCsv = function () {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var apiUrl = GetIp();\r\n var formData = new FormData();\r\n formData.append(\"\", $scope.File);\r\n\r\n var settings = {\r\n \"cache\": false,\r\n \"method\": 'POST',\r\n headers: { \"Content-Type\": undefined },\r\n };\r\n\r\n return $http.post(apiUrl + '/api/SolutionGuide/ImportCsv', formData, settings)\r\n .then(function (result) {\r\n SetProjectSolutions(result.data);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.CloseDialog('DialogImportCsv');\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n };\r\n\r\n function SetProjectSolutions(solutions) {\r\n var maximumId = GetMaximumSolutionId();\r\n\r\n if (maximumId > 0) {\r\n maximumId++;\r\n }\r\n\r\n solutions.forEach(solutionToAnalyse => {\r\n var solution = GetSolutionByCode($scope.Solutions, solutionToAnalyse.Code);\r\n\r\n if (solution) {\r\n if (solution.ProjectQuantity && (solution.ProjectQuantity > 0)) {\r\n solution.ProjectQuantity++;\r\n }\r\n else {\r\n solution.ProjectQuantity = 1\r\n }\r\n\r\n solution = angular.copy(solution);\r\n solution.Notes = solutionToAnalyse.Notes;\r\n solution.Photography = solution.Photography || solutionToAnalyse.Photography;\r\n\r\n if (!solution.Photography || !solution.Photography.trim()) {\r\n GetSolutionPhotographyFromServer(null, solution);\r\n }\r\n\r\n if (solutionToAnalyse.Area) {\r\n solution.Area = solutionToAnalyse.Area;\r\n }\r\n\r\n if (solutionToAnalyse.ColumnId && (solutionToAnalyse.ColumnId > 0)) {\r\n solution.ColumnId = solutionToAnalyse.ColumnId;\r\n solution.Order = solutionToAnalyse.Order;\r\n\r\n if (solutionToAnalyse.Id !== null) {\r\n solution.Id = solutionToAnalyse.Id + maximumId;\r\n }\r\n\r\n if (solutionToAnalyse.ConnectedToSolutionIds !== null) {\r\n for (var i = 0; i < solutionToAnalyse.ConnectedToSolutionIds.length; i++) {\r\n var connectedToSolutionId = solutionToAnalyse.ConnectedToSolutionIds[i] + maximumId;\r\n\r\n var line = {\r\n StartSolutionId: solution.Id,\r\n EndSolutionId: connectedToSolutionId,\r\n }\r\n\r\n lines.push(line);\r\n }\r\n }\r\n }\r\n\r\n $scope.Project.Solutions.push(solution);\r\n }\r\n });\r\n }\r\n\r\n $('#alt-style-pagination').pagination({\r\n items: 260,\r\n itemOnPage: $scope.ItemsPerPage,\r\n currentPage: $scope.CurrentPage,\r\n cssStyle: '',\r\n prevText: '',\r\n nextText: '',\r\n displayedPages: 4,\r\n edges: 1,\r\n ellipsePageSet: false,\r\n onInit: function () { },\r\n onPageClick: function (page, _evt) {\r\n $scope.CurrentPage = page;\r\n $scope.ScrollToTop('.ListSolutions');\r\n }\r\n });\r\n\r\n function SetSolutionPages() {\r\n var numberOfPages = $scope.SolutionsFiltered.length / $scope.ItemsPerPage;\r\n\r\n if (numberOfPages > 1) {\r\n $scope.ShowInfoPages = true;\r\n } else {\r\n $scope.ShowInfoPages = false;\r\n }\r\n\r\n $scope.CurrentPage = 1;\r\n\r\n $('#alt-style-pagination').pagination('updateItems', numberOfPages);\r\n $scope.ScrollToTop('.ListSolutions');\r\n }\r\n\r\n function GetCodesFromCharacteristic(characteristic) {\r\n var codes = [];\r\n var isCharacteristicValid = ((characteristic.length % 2) === 0);\r\n\r\n if (!isCharacteristicValid) {\r\n return codes;\r\n }\r\n\r\n for (var i = 0; i < characteristic.length; i += 2) {\r\n codes.push(characteristic.substr(i, 2));\r\n }\r\n\r\n return codes;\r\n }\r\n\r\n function SelectCharacteristicOption(mainCode, optionCode) {\r\n var characteristics = $scope.Characteristics;\r\n\r\n var characteristic = characteristics.find(find => (find.Code === mainCode));\r\n\r\n if (!characteristic) {\r\n return;\r\n }\r\n\r\n if (optionCode.toUpperCase() === \"ALL\") {\r\n for (var i = 0; i < characteristic.CharacteristicOptions.length; i++) {\r\n var characteristicOption = characteristic.CharacteristicOptions[i];\r\n\r\n characteristicOption.Selected = true;\r\n }\r\n\r\n return;\r\n }\r\n\r\n var characteristicOption = characteristic.CharacteristicOptions.find(find => (find.Code === optionCode));\r\n\r\n if (!characteristicOption) {\r\n return;\r\n }\r\n\r\n characteristicOption.Selected = true;\r\n }\r\n\r\n function GetSelectedCharacteristicsOptions() {\r\n var selectedCharacteristicsToReturn = [];\r\n var selectedCharacteristics = $scope.Characteristics.filter(filter => filter.CharacteristicOptions.some(some => some.Selected));\r\n\r\n for (var i = 0; i < selectedCharacteristics.length; i++) {\r\n var selectedCharacteristicToAnalyse = selectedCharacteristics[i];\r\n\r\n var selectedCharacteristicsOptions = selectedCharacteristicToAnalyse.CharacteristicOptions.filter(filter => filter.Selected);\r\n\r\n if (selectedCharacteristicToAnalyse.CharacteristicOptions.length === selectedCharacteristicsOptions.length) {\r\n selectedCharacteristicsToReturn.push(selectedCharacteristicToAnalyse.Code);\r\n\r\n continue;\r\n }\r\n\r\n var optionCodes = selectedCharacteristicToAnalyse.Code;\r\n\r\n for (var j = 0; j < selectedCharacteristicsOptions.length; j++) {\r\n optionCodes += selectedCharacteristicsOptions[j].Code;\r\n }\r\n\r\n selectedCharacteristicsToReturn.push(optionCodes);\r\n }\r\n\r\n return selectedCharacteristicsToReturn;\r\n }\r\n\r\n function GetSolutionsFromCsvInMenu(filename) {\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n var promises = [];\r\n var solutionCodesToGetPhoto = [];\r\n var solutionsFromCsvMenu = [];\r\n\r\n var parameters = {\r\n filename: filename\r\n };\r\n\r\n promises.push(GeneralLoadData.GeneralGet(\"SolutionGuide\", \"GetSolutionsFromCsv\", parameters, null));\r\n\r\n $q.all(promises).then(function (result) {\r\n solutionsFromCsvMenu = result[0].data;\r\n\r\n if (!solutionsFromCsvMenu.length) {\r\n GeneralModel.ShowToastWarning(Helpers.Translations.NoSolutionsWereFound);\r\n\r\n return;\r\n }\r\n\r\n let promisesToGetPhotographies = [];\r\n\r\n solutionCodesToGetPhoto = [...new Set(solutionsFromCsvMenu.map(map => map.Code))];\r\n\r\n solutionCodesToGetPhoto.forEach(solutionCode => {\r\n let parameters = {\r\n solutionId: solutionCode\r\n };\r\n\r\n let newPromise = GeneralLoadData.GeneralGet(\"SolutionGuide\", \"GetSolutionPhotography\", parameters, null);\r\n\r\n promisesToGetPhotographies.push(newPromise);\r\n });\r\n\r\n return $q.all(promisesToGetPhotographies);\r\n }).then(function (results) {\r\n solutionsFromCsvMenu.forEach(solutionFromCsvMenu => {\r\n const solutionCodesToGetPhotoIndex = solutionCodesToGetPhoto.indexOf(solutionFromCsvMenu.Code);\r\n\r\n solutionFromCsvMenu.Photography = results[solutionCodesToGetPhotoIndex].data;\r\n });\r\n\r\n $scope.CloseMenus();\r\n SetProjectSolutions(solutionsFromCsvMenu);\r\n\r\n if ($scope.HasSelectedSolutions()) {\r\n $scope.OpenProjectDialog();\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n //#region Link\r\n function GetBaseUrl(isToSeo) {\r\n var baseUrl = $location.protocol() + '://' + $location.host();\r\n\r\n if ($location.port() !== '') {\r\n baseUrl += ':' + $location.port();\r\n }\r\n\r\n if (isToSeo) {\r\n baseUrl += '/Solution/';\r\n }\r\n else {\r\n baseUrl += '/SolutionConfigurator/SolutionConfigurator/';\r\n }\r\n\r\n return baseUrl;\r\n }\r\n\r\n $scope.CopyIndividualLink = function () {\r\n var url = GetIndividualLink($scope.SolutionSelected);\r\n\r\n CopyToClipboard(url);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.IndividualUrlCopied);\r\n }\r\n\r\n function GetIndividualLink(solution) {\r\n var url = GetBaseUrl();\r\n\r\n url = url.slice(0, -1);\r\n\r\n var json = \"?S=\" + solution.Code + \"&O=true\";\r\n\r\n url += json;\r\n\r\n url = url.replace(/ /g, \"%20\");\r\n\r\n return url;\r\n }\r\n\r\n function CopyToClipboard(textToCopy) {\r\n if (navigator && navigator.clipboard && navigator.clipboard.writeText) {\r\n navigator.clipboard.writeText(textToCopy);\r\n\r\n return;\r\n }\r\n\r\n var temporaryElement = document.createElement('textarea');\r\n\r\n temporaryElement.value = textToCopy;\r\n document.body.appendChild(temporaryElement);\r\n temporaryElement.select();\r\n document.execCommand('Copy');\r\n document.body.removeChild(temporaryElement);\r\n }\r\n\r\n $scope.CopyGeneralLink = function () {\r\n var url = GetBaseUrl();\r\n\r\n url = url.slice(0, -1);\r\n\r\n var selectedCharacteristicsOptions = GetSelectedCharacteristicsOptions();\r\n\r\n var json = \"?P=\" + $scope.CurrentPage;\r\n\r\n if (selectedCharacteristicsOptions && selectedCharacteristicsOptions.length) {\r\n json += \"&C=\" + selectedCharacteristicsOptions.toString();\r\n }\r\n\r\n if ($scope.SearchValues.length) {\r\n var searchValues = $scope.SearchValues.toString();\r\n\r\n json += \"&S=\" + searchValues;\r\n }\r\n\r\n if (json.length > 260) {\r\n GeneralModel.ShowToastWarning(Helpers.Translations.UrlMaxLengthReached);\r\n\r\n return;\r\n }\r\n\r\n url += json;\r\n\r\n CopyToClipboard(url);\r\n\r\n GeneralModel.ShowToast(Helpers.Translations.GeneralUrlCopied);\r\n }\r\n //#endregion\r\n\r\n //#region Route\r\n function SetSearchValuesFromRoute() {\r\n if (!urlParameters || !urlParameters.S || !urlParameters.S.length) {\r\n return;\r\n }\r\n\r\n urlParameters.S.forEach(searchValue => {\r\n if (searchValue.length) {\r\n $scope.SearchValues.push(searchValue);\r\n }\r\n });\r\n\r\n Filter();\r\n }\r\n\r\n function SetCharacteristicsFromRoute() {\r\n if (!urlParameters || !urlParameters.C || !urlParameters.C.length) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < urlParameters.C.length; i++) {\r\n var characteristicToAnalyse = urlParameters.C[i];\r\n\r\n var codes = GetCodesFromCharacteristic(characteristicToAnalyse);\r\n\r\n if (!codes.length) {\r\n continue;\r\n }\r\n\r\n var mainCode = codes[0];\r\n\r\n if (codes.length === 1) {\r\n SelectCharacteristicOption(mainCode, 'ALL');\r\n\r\n continue;\r\n }\r\n\r\n for (var j = 1; j < codes.length; j++) {\r\n SelectCharacteristicOption(mainCode, codes[j])\r\n }\r\n }\r\n\r\n FilterCharacteristicOption();\r\n }\r\n\r\n function SetActivePageFromRoute() {\r\n if (!urlParameters || !urlParameters.P) {\r\n return;\r\n }\r\n\r\n var activePage = urlParameters.P;\r\n\r\n if (isNaN(activePage)) {\r\n return;\r\n }\r\n\r\n var numberOfPages = $scope.SolutionsFiltered.length / $scope.ItemsPerPage;\r\n\r\n if ((activePage >= 1) && (activePage <= numberOfPages)) {\r\n $scope.CurrentPage = activePage;\r\n\r\n $('#alt-style-pagination').pagination('selectPage', activePage);\r\n $scope.ScrollToTop('.ListSolutions');\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Emails\r\n $scope.AddEmail = function (originalEmail) {\r\n var values = originalEmail.split(/[ ,]+/);\r\n\r\n if (values.length < 2) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < values.length; i++) {\r\n var value = values[i].replace('<', '').replace('>', '');\r\n\r\n if (ValidateEmail(value, false)) {\r\n var emailPosition = $scope.Project.Details.Emails.indexOf(originalEmail);\r\n\r\n if (emailPosition > -1) {\r\n $scope.Project.Details.Emails[emailPosition] = value;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Help\r\n $scope.ApplyHelpFilter = function () {\r\n clearTimeout(delayHelpFilter);\r\n\r\n delayHelpFilter = setTimeout(function () {\r\n HelpFilter()\r\n }, 250);\r\n }\r\n\r\n $scope.OpenHelp = function () {\r\n $scope.HelpSearchValues = [];\r\n\r\n LoadHelp();\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogHelp',\r\n parent: angular.element(document.body),\r\n multiple: true,\r\n clickOutsideToClose: false,\r\n })\r\n };\r\n\r\n $scope.CloseHelp = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogHelp'\r\n });\r\n }\r\n\r\n function HelpFilter() {\r\n var i;\r\n var helpLinksFiltered = [];\r\n\r\n if ($scope.HelpSearchValues.length) {\r\n for (i = 0; i < $scope.HelpLinks.length; i++) {\r\n var helpLinkToAnalyse = $scope.HelpLinks[i];\r\n\r\n for (var j = 0; j < $scope.HelpSearchValues.length; j++) {\r\n var searchValue = $scope.HelpSearchValues[j];\r\n\r\n if (searchValue) {\r\n searchValue = searchValue.toLowerCase().trim();\r\n\r\n if (helpLinkToAnalyse.Name.toLowerCase().trim().includes(searchValue)) {\r\n helpLinksFiltered.push(helpLinkToAnalyse);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n helpLinksFiltered = $scope.HelpLinks;\r\n }\r\n\r\n $timeout(function () {\r\n $scope.HelpLinksFiltered = helpLinksFiltered;\r\n });\r\n }\r\n\r\n function LoadHelp() {\r\n $scope.LoadingHelp = true;\r\n $scope.HelpLinks = [];\r\n $scope.HelpLinksFiltered = [];\r\n var parameters = { applicationCode: codes.Application.Solutions };\r\n\r\n GeneralLoadData.GeneralGet(\"Document\", \"List\", parameters, null).then(function (result) {\r\n $scope.HelpLinks = result.data;\r\n $scope.HelpLinksFiltered = $scope.HelpLinks;\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.LoadingHelp = false;\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Sequencer\r\n function SetSequencer() {\r\n CleanSequencer();\r\n\r\n var checkColumns = false;\r\n var columnsWithSolutions = [];\r\n\r\n for (var i = 0; i < $scope.Project.Solutions.length; i++) {\r\n var solution = $scope.Project.Solutions[i];\r\n var columnId = i + 1;\r\n var column = { Id: columnId };\r\n\r\n if (!solution.ColumnId) {\r\n solution.ColumnId = 1;\r\n solution.Order = 99999;\r\n } else {\r\n checkColumns = true;\r\n }\r\n\r\n solution.OldId = solution.Id;\r\n solution.Id = i;\r\n\r\n var indexofColumnWithSolutions = columnsWithSolutions.indexOf(solution.ColumnId);\r\n\r\n if (indexofColumnWithSolutions === -1) {\r\n columnsWithSolutions.push(solution.ColumnId);\r\n }\r\n\r\n $scope.Sequencer.Columns.push(column);\r\n }\r\n\r\n if (checkColumns) {\r\n CheckSolutionsColumn(columnsWithSolutions);\r\n }\r\n\r\n SetSolutionsOrder();\r\n\r\n $timeout(function () {\r\n SetSequencerProperties();\r\n\r\n var solutionsOrdered = $scope.Project.Solutions.sort((a, b) => (a.Order - b.Order));\r\n\r\n for (var i = 0; i < solutionsOrdered.length; i++) {\r\n var solution = solutionsOrdered[i];\r\n\r\n AddSolutionToSequencer(solution);\r\n }\r\n\r\n SetNotesOnChange();\r\n\r\n $compile('.scrollable-list')($scope);\r\n\r\n if (lines.length) {\r\n $timeout(function () {\r\n SetLines();\r\n }, 250);\r\n }\r\n }, false);\r\n }\r\n\r\n function SetNotesOnChange() {\r\n $('.SolutionNotes').on('change', function (event) {\r\n var solutionId = Number(event.target.attributes[\"solution-id\"].value);\r\n\r\n var solution = $scope.Project.Solutions.find(first => (first.Id === solutionId));\r\n\r\n solution.Notes = event.target.value;\r\n });\r\n }\r\n\r\n function AddSolutionToSequencer(solution) {\r\n var content = '';\r\n content += '
';\r\n content += '
';\r\n content += '
';\r\n\r\n if (solution.Area) {\r\n content += ' ' + solution.Area + '';\r\n }\r\n\r\n content += '
';\r\n content += '
';\r\n content += '
';\r\n content += ' ';\r\n content += ' ';\r\n content += '
';\r\n content += '
';\r\n content += '
';\r\n\r\n content += '
';\r\n\r\n var solutionSrc = $scope.GetSolutionPhotography(solution);\r\n\r\n content += ' \"'';\r\n content += '
';\r\n\r\n content += '
';\r\n content += '
';\r\n content += '
';\r\n\r\n solution.Notes = solution.Notes || \"\";\r\n\r\n content += ' ';\r\n content += '
';\r\n content += '
';\r\n content += '
';\r\n\r\n content += ' ';\r\n content += ' ';\r\n\r\n content += ' ';\r\n content += ' ';\r\n\r\n content += ' {{GetNumberOfStartLinesHidden(' + solution.Id + ')}}';\r\n content += ' {{GetNumberOfEndLinesHidden(' + solution.Id + ')}}';\r\n content += '
';\r\n\r\n $('#Column' + solution.ColumnId).append(content);\r\n }\r\n\r\n function CleanSequencer() {\r\n $scope.Sequencer = {};\r\n $scope.Sequencer.Columns = [];\r\n }\r\n\r\n function SetSequencerProperties() {\r\n $(\".scrollable-list\").each(function () {\r\n $(this).dxScrollView({\r\n direction: \"vertical\",\r\n showScrollbar: \"always\",\r\n onScroll: function () {\r\n UpdateLines();\r\n }\r\n });\r\n })\r\n\r\n $(\".sortable-cards\").each(function () {\r\n var columnId = $(this).attr(\"column-id\");\r\n\r\n $(this).dxSortable({\r\n data: { ColumnId: columnId },\r\n group: \"tasksGroup\",\r\n moveItemOnDrop: true,\r\n onDragEnd: function (e) {\r\n var solutionId = e.itemElement.attr(\"solution-id\");\r\n\r\n MoveSolution(solutionId, e.fromData, e.fromIndex, e.toData, e.toIndex);\r\n }\r\n });\r\n })\r\n\r\n $(\".scrollable-board\").each(function () {\r\n $(this).dxScrollView({\r\n direction: \"horizontal\",\r\n showScrollbar: \"always\",\r\n onScroll: function () {\r\n UpdateLines();\r\n }\r\n });\r\n\r\n $(this).dxSortable({\r\n filter: \".list\",\r\n itemOrientation: \"horizontal\",\r\n handle: \".list-title\",\r\n moveItemOnDrop: true\r\n });\r\n })\r\n }\r\n\r\n function MoveSolution(solutionId, fromData, fromIndex, toData, toIndex) {\r\n if (!solutionId) {\r\n return;\r\n }\r\n\r\n var validMove = CheckMove(fromData, fromIndex, toData, toIndex);\r\n\r\n if (!validMove) {\r\n return;\r\n }\r\n\r\n solutionId = parseInt(solutionId);\r\n\r\n var solution = GetSolutionById($scope.Project.Solutions, solutionId);\r\n\r\n if (!solution) {\r\n return;\r\n }\r\n\r\n var fromColumnId = parseInt(fromData.ColumnId);\r\n var toColumnId = parseInt(toData.ColumnId);\r\n\r\n solution.ColumnId = -1;\r\n toIndex++;\r\n fromIndex++;\r\n\r\n if (fromColumnId !== toColumnId) {\r\n IncrementSolutionsOrder(toColumnId, toIndex);\r\n DecrementSolutionsOrder(fromColumnId, fromIndex);\r\n }\r\n else if (fromIndex > toIndex) {\r\n IncrementSolutionsOrder(toColumnId, toIndex, fromIndex);\r\n }\r\n else {\r\n DecrementSolutionsOrder(toColumnId, fromIndex, toIndex);\r\n }\r\n\r\n solution.ColumnId = toColumnId;\r\n solution.Order = toIndex;\r\n\r\n if (fromColumnId !== toColumnId) {\r\n RemoveAndHideLines(solutionId);\r\n }\r\n\r\n $timeout(function () {\r\n UpdateLines();\r\n }, 100);\r\n }\r\n\r\n function CheckMove(fromData, fromIndex, toData, toIndex) {\r\n if (!fromData || (fromIndex < 0) || !toData || (toIndex < 0)) {\r\n return false;\r\n }\r\n\r\n if ((fromData === toData) && (fromIndex === toIndex)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function CheckSolutionsColumn(columnsWithSolutions) {\r\n $scope.Sequencer.Columns.forEach(column => {\r\n var indexofColumnWithSolutions = columnsWithSolutions.indexOf(column.Id);\r\n\r\n if (indexofColumnWithSolutions === -1) {\r\n DecrementSolutionsColumnId(column.Id);\r\n }\r\n });\r\n }\r\n\r\n function SetSolutionsOrder(columnId) {\r\n if (!$scope.Sequencer) {\r\n return;\r\n }\r\n\r\n var columnsToSetOrder = $scope.Sequencer.Columns;\r\n\r\n if (columnId) {\r\n columnsToSetOrder = columnsToSetOrder.filter(where => (where.Id === columnId));\r\n }\r\n\r\n for (var i = 0; i < columnsToSetOrder.length; i++) {\r\n var columnToSetOrder = columnsToSetOrder[i];\r\n\r\n var solutionsOrdered = $scope.Project.Solutions.filter(where => (where.ColumnId === columnToSetOrder.Id));\r\n\r\n solutionsOrdered = solutionsOrdered.sort((a, b) => (a.Order > b.Order) ? 2 : ((a.Order === b.Order) ? ((a.Code > b.Code) ? 1 : -1) : -2));\r\n\r\n for (var j = 0; j < solutionsOrdered.length; j++) {\r\n var solutionToSetOrder = solutionsOrdered[j];\r\n\r\n solutionToSetOrder.Order = j + 1;\r\n }\r\n }\r\n }\r\n\r\n function IncrementSolutionsOrder(columnId, orderStart, orderEnd) {\r\n var solutionsToReorder = $scope.Project.Solutions.filter(where => (where.ColumnId === columnId));\r\n\r\n for (var i = 0; i < solutionsToReorder.length; i++) {\r\n var solutionToReorder = solutionsToReorder[i];\r\n\r\n if ((solutionToReorder.Order >= orderStart) && (!orderEnd || solutionToReorder.Order <= orderEnd)) {\r\n solutionToReorder.Order = solutionToReorder.Order + 1;\r\n }\r\n }\r\n }\r\n\r\n function DecrementSolutionsOrder(columnId, orderStart, orderEnd) {\r\n var solutionsToReorder = $scope.Project.Solutions.filter(where => (where.ColumnId === columnId));\r\n\r\n for (var i = 0; i < solutionsToReorder.length; i++) {\r\n var solutionToReorder = solutionsToReorder[i];\r\n\r\n if ((solutionToReorder.Order >= orderStart) && (!orderEnd || solutionToReorder.Order <= orderEnd)) {\r\n solutionToReorder.Order = solutionToReorder.Order - 1;\r\n }\r\n }\r\n }\r\n\r\n function DecrementSolutionsColumnId(columnId) {\r\n var solutionsToReorder = $scope.Project.Solutions.filter(where => (where.ColumnId && (where.ColumnId >= columnId)));\r\n\r\n for (var i = 0; i < solutionsToReorder.length; i++) {\r\n var solutionToReorder = solutionsToReorder[i];\r\n\r\n solutionToReorder.ColumnId = solutionToReorder.ColumnId - 1;\r\n }\r\n }\r\n\r\n //#region Lines\r\n var lines = [];\r\n\r\n function SetLines() {\r\n for (var i = 0; i < lines.length; i++) {\r\n var line = lines[i];\r\n\r\n var newStartSolution = GetSolutionByOldId($scope.Project.Solutions, line.StartSolutionId);\r\n var newEndSolution = GetSolutionByOldId($scope.Project.Solutions, line.EndSolutionId);\r\n\r\n var newLine = NewLine(newStartSolution.Id, newEndSolution.Id);\r\n\r\n lines[i] = newLine;\r\n }\r\n\r\n UpdateLines();\r\n }\r\n\r\n $scope.StartLine = function (solutionId) {\r\n var solution = GetSolutionById($scope.Project.Solutions, solutionId);\r\n\r\n if ($scope.SolutionToStartLine) {\r\n delete $scope.SolutionToStartLine;\r\n }\r\n else {\r\n $scope.SolutionToStartLine = solution;\r\n }\r\n }\r\n\r\n $scope.EndLine = function (solutionId) {\r\n var solution = GetSolutionById($scope.Project.Solutions, solutionId);\r\n\r\n var line = lines.find(first => (first.StartSolutionId === $scope.SolutionToStartLine.Id) && (first.EndSolutionId === solution.Id));\r\n\r\n if (line) {\r\n RemoveAndHideLine(line);\r\n }\r\n else {\r\n line = NewLine($scope.SolutionToStartLine.Id, solution.Id);\r\n\r\n lines.push(line);\r\n }\r\n\r\n delete $scope.SolutionToStartLine;\r\n }\r\n\r\n function NewLine(startLineId, endLineId) {\r\n var line = new LeaderLine(\r\n document.getElementById('DotStart' + startLineId),\r\n document.getElementById('DotEnd' + endLineId),\r\n {\r\n color: '#db4535',\r\n path: 'straight'\r\n }\r\n );\r\n\r\n line.StartSolutionId = startLineId;\r\n line.EndSolutionId = endLineId;\r\n\r\n return line;\r\n }\r\n\r\n $scope.ShowDotStart = function (solutionId) {\r\n var solution = GetSolutionById($scope.Project.Solutions, solutionId);\r\n\r\n if (!solution) {\r\n return false;\r\n }\r\n\r\n var show = (!$scope.SolutionToStartLine || ((solution.ColumnId === $scope.SolutionToStartLine.ColumnId) && (solution.Id === $scope.SolutionToStartLine.Id)));\r\n\r\n return show;\r\n }\r\n\r\n $scope.ShowDotEnd = function (solutionId) {\r\n var solution = GetSolutionById($scope.Project.Solutions, solutionId);\r\n\r\n if (!solution) {\r\n return false;\r\n }\r\n\r\n var show = ($scope.SolutionToStartLine && (solution.ColumnId === ($scope.SolutionToStartLine.ColumnId + 1)));\r\n\r\n return show;\r\n }\r\n\r\n $scope.DotColorRed = function (solutionId) {\r\n var solution = GetSolutionById($scope.Project.Solutions, solutionId);\r\n\r\n if (!solution) {\r\n return false;\r\n }\r\n\r\n var colorRed = ($scope.SolutionToStartLine && (solution.ColumnId === $scope.SolutionToStartLine.ColumnId) && (solution.Id === $scope.SolutionToStartLine.Id));\r\n\r\n return colorRed;\r\n }\r\n\r\n function UpdateLines() {\r\n var scrollVertical = $(\".scrollable-list\");\r\n var scrollHorizontal = $(\".scrollable-board\");\r\n\r\n var scrollTop = $(scrollVertical).offset().top;\r\n var scrollBottom = scrollTop + scrollVertical.height();\r\n var scrollLeft = $(scrollHorizontal).offset().top;\r\n var scrollRight = scrollTop + scrollHorizontal.width();\r\n\r\n var existUpdates = false;\r\n\r\n for (var i = 0; i < lines.length; i++) {\r\n var line = lines[i];\r\n\r\n var dotStart = $('#DotStart' + line.StartSolutionId);\r\n var dotEnd = $('#DotEnd' + line.EndSolutionId);\r\n\r\n var dotStartTop = $(dotStart).offset().top;\r\n var dotEndTop = $(dotEnd).offset().top;\r\n var dotStartLeft = $(dotStart).offset().left;\r\n var dotEnddotStartLeft = $(dotEnd).offset().left;\r\n\r\n if ((dotStartTop >= scrollTop) && (dotStartTop <= scrollBottom) && (dotEndTop >= scrollTop) && (dotEndTop <= scrollBottom) && (dotStartLeft >= scrollLeft) && (dotStartLeft <= scrollRight) && (dotEnddotStartLeft >= scrollLeft) && (dotEnddotStartLeft <= scrollRight)) {\r\n line.position();\r\n\r\n if (line.Hidden) {\r\n line.show();\r\n line.Hidden = false;\r\n existUpdates = true;\r\n }\r\n }\r\n else if (!line.Hidden) {\r\n line.hide();\r\n line.Hidden = true;\r\n existUpdates = true;\r\n }\r\n }\r\n\r\n if (existUpdates) {\r\n $scope.$apply();\r\n }\r\n }\r\n\r\n function RemoveAllLines() {\r\n lines = [];\r\n }\r\n\r\n function RemoveAndHideLines(solutionId) {\r\n var linesToRemoveAndHide = ListLinesBySolution(solutionId);\r\n\r\n for (var i = 0; i < linesToRemoveAndHide.length; i++) {\r\n var line = linesToRemoveAndHide[i];\r\n\r\n RemoveAndHideLine(line);\r\n }\r\n }\r\n\r\n function HideLine(line) {\r\n line.remove();\r\n }\r\n\r\n function RemoveAndHideLine(line) {\r\n if ($scope.StepProjectSequencer) {\r\n line.remove();\r\n }\r\n\r\n lines.remove(line);\r\n }\r\n\r\n function ListLinesBySolution(solutionId) {\r\n var linesToReturn = lines.filter(where => (where.StartSolutionId === solutionId) || (where.EndSolutionId === solutionId));\r\n\r\n return linesToReturn;\r\n }\r\n\r\n $scope.$watch('StepProjectSequencer', function (newValue, oldValue) {\r\n if ((oldValue === true) && (newValue === false)) {\r\n for (var i = 0; i < lines.length; i++) {\r\n var line = lines[i];\r\n\r\n HideLine(line);\r\n }\r\n }\r\n });\r\n\r\n $scope.GetNumberOfStartLinesHidden = function (solutionId) {\r\n var number = lines.filter(where => (where.StartSolutionId === solutionId) && where.Hidden).length;\r\n\r\n var result = '';\r\n\r\n if (number > 0) {\r\n result = '+' + number;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n $scope.GetNumberOfEndLinesHidden = function (solutionId) {\r\n var number = lines.filter(where => (where.EndSolutionId === solutionId) && where.Hidden).length;\r\n\r\n var result = '';\r\n\r\n if (number > 0) {\r\n result = '+' + number;\r\n }\r\n\r\n return result;\r\n }\r\n //#endregion\r\n //#endregion\r\n\r\n //#region Structures\r\n $scope.OpenStructures = function (solutionCode) {\r\n var structureslink = $location.protocol() + \"://\" + $location.host();\r\n\r\n if ($location.port() !== '') {\r\n structureslink += ':' + $location.port();\r\n }\r\n\r\n structureslink += \"/StructureConfigurator/StructureConfigurator\";\r\n\r\n if (solutionCode) {\r\n var json = \"?S=\" + solutionCode + \"&O=true\";\r\n\r\n structureslink += json;\r\n }\r\n\r\n Helpers.Page.OpenInNewTab(structureslink);\r\n }\r\n //#endregion\r\n\r\n //#region Details\r\n $scope.SetFiltersToSolution = function () {\r\n let solutionSelectedCode = $scope.SolutionSelected.Code;\r\n\r\n SetSolutionFilters(solutionSelectedCode);\r\n }\r\n\r\n function SetSolutionFilters(code) {\r\n $scope.SearchValues = [];\r\n $scope.FilterClear();\r\n\r\n $scope.Characteristics.forEach((characteristic) => {\r\n var optionCodeToSelect = code.substr(0, 2);\r\n var characteristicOption = characteristic.CharacteristicOptions.find(find => (find.Code === optionCodeToSelect));\r\n\r\n code = code.slice(2);\r\n\r\n if (!characteristicOption) {\r\n return;\r\n }\r\n\r\n characteristicOption.Selected = true;\r\n });\r\n }\r\n\r\n function SetSolutionDetail() {\r\n GetDetails($scope.SolutionSelected);\r\n\r\n SetSolutionDetailQrCode(\"QrSolutionDetail\");\r\n }\r\n\r\n function GetDetails(solution) {\r\n $scope.generalModel.FullPageLoading = true;\r\n var parameters = { solutionId: solution.Code };\r\n\r\n CleanSolutionDetail();\r\n\r\n GeneralLoadData.GeneralGet(\"SolutionGuide\", \"GetDetails\", parameters, null).then(function (result) {\r\n $scope.SolutionDetail.Links = result.data.Links;\r\n $scope.SolutionDetail.Files = result.data.Files;\r\n $scope.SetPhotographies(result.data.SolutionDetailPhotographies, solution);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n function CleanSolutionDetail() {\r\n $scope.SolutionDetail = {};\r\n $scope.SolutionDetail.Photographies = [];\r\n $scope.SolutionDetail.Links = [];\r\n $scope.SolutionDetail.Files = [];\r\n $scope.SolutionDetail.StartPhotographyIndex = -1;\r\n $scope.SolutionDetail.SelectedPhotographyIndex = -1;\r\n }\r\n\r\n $scope.SetPhotographies = function (photographies, solution) {\r\n if (!photographies) {\r\n return;\r\n }\r\n\r\n $scope.SolutionDetail.StartPhotographyIndex = 0;\r\n $scope.SolutionDetail.SelectedPhotographyIndex = 0;\r\n\r\n photographies.forEach(photography => {\r\n var newPhotographyImage = $scope.GetPhotography(photography.Photography);\r\n var drawingNumber = photography.DrawingNumber || solution.DrawingNumber;\r\n\r\n var newPhotography = {\r\n DrawingNumber: drawingNumber,\r\n Photography: newPhotographyImage\r\n }\r\n\r\n $scope.SolutionDetail.Photographies.push(newPhotography);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Translations\r\n function SetTranslations() {\r\n var translations = webTranslations.find(first => (first.Language === $scope.LanguageSelected));\r\n\r\n Helpers.Translation.SetTranslations($sessionStorage, translations.Translations);\r\n }\r\n //#endregion\r\n\r\n //#region Zoom\r\n $scope.ApplyZoom = function (e) {\r\n if (!zoomObject) {\r\n SetZoomObject();\r\n }\r\n\r\n var lensPosition = GetLensPosition(e);\r\n\r\n SetZoomedPhotography(lensPosition);\r\n }\r\n\r\n function SetZoomObject() {\r\n var lens = document.getElementById(\"ZoomLens\");\r\n var photography = document.getElementById(\"Photography\");\r\n var individualSolutionPhotography = document.getElementById(\"IndividualSolutionPhotography\");\r\n\r\n var scaleX = 234 / lens.offsetWidth;\r\n var scaleY = 234 / lens.offsetHeight;\r\n\r\n zoomObject = {\r\n lens: lens,\r\n photography: photography,\r\n individualSolutionPhotography: individualSolutionPhotography,\r\n scaleX: scaleX,\r\n scaleY: scaleY\r\n };\r\n }\r\n\r\n function GetLensPosition(e) {\r\n var cursorPositions = GetCursorPositions(e);\r\n e.preventDefault();\r\n\r\n var lensPosition = {\r\n lensX: cursorPositions.cursorPositionX - (zoomObject.lens.offsetWidth / 2),\r\n lensY: cursorPositions.cursorPositionY - (zoomObject.lens.offsetHeight / 2)\r\n };\r\n\r\n CheckLensPosition(lensPosition, \"lensX\", zoomObject.photography.width, zoomObject.lens.offsetWidth);\r\n CheckLensPosition(lensPosition, \"lensY\", zoomObject.photography.height, zoomObject.lens.offsetHeight);\r\n\r\n AdjustLens(lensPosition);\r\n\r\n return lensPosition;\r\n }\r\n\r\n function SetZoomedPhotography(lensPosition) {\r\n var zoomedPhotography = document.getElementById(\"ZoomedPhotography\");\r\n\r\n if (!zoomedPhotography.style.backgroundSize) {\r\n zoomedPhotography.style.backgroundSize = (zoomObject.photography.width * zoomObject.scaleX) + \"px \" + (zoomObject.photography.height * zoomObject.scaleY) + \"px\";\r\n }\r\n\r\n zoomedPhotography.style.backgroundPosition = \"-\" + (lensPosition.lensX * zoomObject.scaleX) + \"px -\" + (lensPosition.lensY * zoomObject.scaleY) + \"px\";\r\n }\r\n\r\n function CheckLensPosition(lensPosition, measurement, photographyMax, offset) {\r\n if (lensPosition[measurement] > photographyMax - offset) {\r\n lensPosition[measurement] = photographyMax - offset;\r\n }\r\n\r\n if (lensPosition[measurement] < 0) {\r\n lensPosition[measurement] = 0;\r\n }\r\n }\r\n\r\n function AdjustLens(lensPosition) {\r\n zoomObject.lens.style.left = lensPosition.lensX + ((zoomObject.individualSolutionPhotography.offsetWidth - zoomObject.photography.width) / 2) + \"px\";\r\n zoomObject.lens.style.top = lensPosition.lensY + ((zoomObject.individualSolutionPhotography.offsetHeight - zoomObject.photography.height) / 2) + \"px\";\r\n }\r\n\r\n function GetCursorPositions(e) {\r\n var photographyPosition = zoomObject.photography.getBoundingClientRect();\r\n var pagePosition = e || window.event;\r\n\r\n var cursorPositionX = pagePosition.pageX - photographyPosition.left;\r\n var cursorPositionY = pagePosition.pageY - photographyPosition.top;\r\n\r\n cursorPositionX = cursorPositionX - window.pageXOffset;\r\n cursorPositionY = cursorPositionY - window.pageYOffset;\r\n\r\n var cursorPositions = { cursorPositionX: cursorPositionX, cursorPositionY: cursorPositionY };\r\n\r\n return cursorPositions;\r\n }\r\n\r\n $scope.HideLens = function () {\r\n $scope.ShowZoomLens = false;\r\n }\r\n\r\n $scope.ShowLens = function () {\r\n $scope.ShowZoomLens = true;\r\n }\r\n //#endregion\r\n\r\n //#region Download\r\n $scope.DownloadFile = function (file) {\r\n var fileName = file.Name + file.Extension;\r\n\r\n var parameters = {\r\n 'applicationCode': codes.Application.Solutions,\r\n 'fileName': fileName,\r\n 'folderName': $scope.SolutionSelected.Code\r\n };\r\n\r\n GeneralLoadData.PreviewFiles(\"Document\", \"DownloadFile\", parameters).then(function (result) {\r\n $scope.generalModel.DownloadResultBlob(result);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region SlideShow\r\n $scope.SetPhotography = function (photographyPositionToSet) {\r\n $scope.SolutionDetail.SelectedPhotographyIndex = photographyPositionToSet;\r\n }\r\n\r\n $scope.GoPreviousPhotography = function () {\r\n if ($scope.SolutionDetail.StartPhotographyIndex > 0) {\r\n $scope.SolutionDetail.StartPhotographyIndex--;\r\n }\r\n }\r\n\r\n $scope.GoNextPhotography = function () {\r\n var lastPosition = $scope.SolutionDetail.Photographies.length - 1;\r\n\r\n if (lastPosition > ($scope.SolutionDetail.StartPhotographyIndex + 2)) {\r\n $scope.SolutionDetail.StartPhotographyIndex++;\r\n }\r\n }\r\n\r\n $scope.ShowGoNextPhotography = function () {\r\n var lastPosition = $scope.SolutionDetail.Photographies.length - 1;\r\n\r\n if (lastPosition < 3) {\r\n return false;\r\n }\r\n\r\n if (lastPosition > ($scope.SolutionDetail.StartPhotographyIndex + 2)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n //#endregion\r\n\r\n //#region Menus\r\n function SetMenus(result, open) {\r\n $scope.Menus = result.data;\r\n\r\n if (!$scope.Menus.length) {\r\n return;\r\n }\r\n\r\n $scope.MenusHistory = [];\r\n $scope.MenusHistory.push($scope.Menus[0]);\r\n\r\n SetMenu();\r\n\r\n if (!open) {\r\n return;\r\n }\r\n\r\n $scope.OpenMenus();\r\n }\r\n\r\n function SetMenu() {\r\n var lastMenuIndex = $scope.MenusHistory.length - 1;\r\n\r\n $scope.SelectedMenu = $scope.MenusHistory[lastMenuIndex];\r\n\r\n ClearMenuSelectedOption();\r\n\r\n if ($scope.SelectedMenu.Photography) {\r\n return;\r\n }\r\n\r\n var parameters = {\r\n applicationCode: codes.Application.Solutions,\r\n menuCode: $scope.SelectedMenu.Code\r\n };\r\n\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n GeneralLoadData.GeneralGet(\"Menu\", \"ListPhotography\", parameters).then(function (result) {\r\n var photographies = result.data;\r\n var photography = photographies.find(find => (find.FileName.toUpperCase() === \"Menu\".toUpperCase()));\r\n\r\n if (photography) {\r\n $scope.SelectedMenu.Photography = $scope.GetPhotography(photography.FileArray);\r\n } else {\r\n $scope.SelectedMenu.Photography = $scope.GetPhotography();\r\n }\r\n\r\n for (var i = 0; i < $scope.SelectedMenu.MenuOptions.length; i++) {\r\n var menuOption = $scope.SelectedMenu.MenuOptions[i];\r\n photography = photographies.find(find => (find.FileName === menuOption.Code));\r\n\r\n if (photography) {\r\n menuOption.Photography = $scope.GetPhotography(photography.FileArray);\r\n } else {\r\n menuOption.Photography = $scope.GetPhotography();\r\n }\r\n }\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n }).finally(function () {\r\n $scope.generalModel.FullPageLoading = false;\r\n });\r\n }\r\n\r\n $scope.OpenMenus = function () {\r\n $mdDialog.show({\r\n contentElement: '#DialogMenus',\r\n parent: angular.element(document.body),\r\n multiple: false,\r\n clickOutsideToClose: false,\r\n })\r\n };\r\n\r\n $scope.CloseMenus = function () {\r\n $mdDialog.hide({\r\n contentElement: '#DialogMenus'\r\n });\r\n\r\n ApplyMenuFilters();\r\n }\r\n\r\n function ApplyMenuFilters() {\r\n $scope.FilterClear();\r\n\r\n for (var i = 0; i < $scope.MenusHistory.length; i++) {\r\n var menuHistory = $scope.MenusHistory[i];\r\n var menuSelected = menuHistory.MenuOptions.find(find => find.Selected);\r\n\r\n if (!menuSelected) {\r\n continue;\r\n }\r\n\r\n var menuOptionsFilters = menuSelected.Filters;\r\n\r\n if (!menuOptionsFilters) {\r\n continue;\r\n }\r\n\r\n for (var k = 0; k < menuOptionsFilters.length; k++) {\r\n var menuOptionFilters = menuOptionsFilters[k];\r\n var index = menuOptionFilters.indexOf(\".\");\r\n var characteristicCode = menuOptionFilters.substr(0, index);\r\n var characteristic = $scope.Characteristics.find(find => (find.Code === characteristicCode));\r\n\r\n if (!characteristic) {\r\n continue;\r\n }\r\n\r\n var characteristicOptionCode = menuOptionFilters.substr(index + 1);\r\n var characteristicOption = characteristic.CharacteristicOptions.find(find => (find.Code === characteristicOptionCode));\r\n\r\n if (!characteristicOption) {\r\n continue;\r\n }\r\n\r\n characteristicOption.Selected = true;\r\n }\r\n }\r\n }\r\n\r\n $scope.MenuOptionClick = function (menuOption) {\r\n ClearMenuSelectedOption();\r\n\r\n menuOption.Selected = true;\r\n\r\n if (menuOption.Link) {\r\n Helpers.Page.OpenInNewTab(menuOption.Link);\r\n\r\n return;\r\n }\r\n\r\n if (menuOption.Csv) {\r\n GetSolutionsFromCsvInMenu(menuOption.Csv);\r\n\r\n return;\r\n }\r\n\r\n if (menuOption.Menu) {\r\n var validNextMenu = NextMenu(menuOption);\r\n\r\n if (validNextMenu) {\r\n return;\r\n }\r\n }\r\n\r\n $scope.CloseMenus();\r\n }\r\n\r\n function NextMenu(menuOption) {\r\n var nextMenu = $scope.Menus.find(find => (find.Code === menuOption.Menu));\r\n\r\n if (!nextMenu) {\r\n return false;\r\n }\r\n\r\n $scope.MenusHistory.push(nextMenu);\r\n\r\n SetMenu();\r\n\r\n return true;\r\n }\r\n\r\n $scope.PreviousMenu = function () {\r\n $scope.MenusHistory.pop();\r\n\r\n SetMenu();\r\n }\r\n\r\n $scope.RestartMenus = function () {\r\n $scope.MenusHistory = [];\r\n\r\n $scope.MenusHistory.push($scope.Menus[0]);\r\n\r\n SetMenu();\r\n }\r\n\r\n function ClearMenuSelectedOption() {\r\n var selectedMenuOption = $scope.SelectedMenu.MenuOptions.find(find => find.Selected);\r\n\r\n if (selectedMenuOption) {\r\n selectedMenuOption.Selected = false;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Youtube Player\r\n $scope.GetVideoLink = function (link) {\r\n if (!link || !link.Url) {\r\n return;\r\n }\r\n\r\n var url = $sce.trustAsResourceUrl(link.Url);\r\n\r\n return url;\r\n };\r\n //#endregion\r\n\r\n //#region Filter Code Mask\r\n //#region Initialize\r\n function InitializeFilterCodeMask() {\r\n let maxLength = $scope.FilterCodeLength || 30;\r\n\r\n $scope.EditFilterCodeComponent = {\r\n Options: {\r\n bindingOptions: {\r\n value: 'EditFilterCodeComponent.Code'\r\n },\r\n mask: '9'.repeat(maxLength)\r\n }\r\n };\r\n }\r\n //#endregion\r\n\r\n //#region Modal\r\n $scope.OpenDialogFilterCode = function () {\r\n $scope.File = '';\r\n $scope.generalModel.FullPageLoading = true;\r\n\r\n $scope.EditFilterCodeComponent = {\r\n Code: angular.copy($scope.FilterCode).replace(/_/g, ' ')\r\n }\r\n\r\n $mdDialog.show({\r\n contentElement: '#DialogFilterCode',\r\n parent: angular.element(document.body),\r\n multiple: false,\r\n clickOutsideToClose: false\r\n });\r\n\r\n $scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n function CloseDialogFilterCode() {\r\n delete $scope.EditFilterCodeComponent.Code;\r\n\r\n $scope.generalModel.CloseDialog('DialogFilterCode');\r\n };\r\n //#endregion\r\n\r\n $scope.EditFilterCode = function () {\r\n let code = $scope.EditFilterCodeComponent.Code;\r\n\r\n SetSolutionFilters(code);\r\n CloseDialogFilterCode();\r\n };\r\n //#endregion\r\n });\r\n})();\n(function () {\r\n \"use strict\";\r\n angular.module(myApplication.appName).service('GeneralModel', function ($timeout, $mdToast) {\r\n\r\n var _model = {\r\n IsOnline: true\r\n };\r\n\r\n var _ShowToast = function (text) {\r\n var toast = $mdToast.simple()\r\n .hideDelay(3000)\r\n .textContent(text)\r\n .action('x')\r\n .highlightAction(true)\r\n .highlightClass('md-accent')\r\n .position('bottom left');\r\n\r\n $mdToast.hide();\r\n $mdToast.show(toast).then(function () { });\r\n };\r\n\r\n var _ShowToastWarning = function (text) {\r\n if (_model.Expired !== true) {\r\n if ((text === '') || (typeof text === 'undefined') || (text.substr(0, 15) === '')) {\r\n text = myApplication.getLanguageObject.selectedLanguage('warningMessages', myApplication).thereWasErrorTryAgain();\r\n }\r\n if (text.indexOf('401') < 0) {\r\n var toast = $mdToast.simple()\r\n .hideDelay(3000)\r\n .textContent(text)\r\n .action('x')\r\n .toastClass('Warning')\r\n .highlightAction(true)\r\n .highlightClass('md-accent')\r\n .position('bottom left');\r\n\r\n $mdToast.hide();\r\n $mdToast.show(toast).then(function () { });\r\n }\r\n }\r\n };\r\n\r\n var _UpdateStateButton = function (state) {\r\n $timeout(_model.ButtonTopVisibility = state, 1);\r\n };\r\n\r\n return {\r\n model: _model,\r\n ShowToast: function (text) {\r\n return _ShowToast(text);\r\n },\r\n ShowToastWarning: function (text) {\r\n return _ShowToastWarning(text);\r\n },\r\n UpdateStateButton: function (state) {\r\n return _UpdateStateButton(state);\r\n },\r\n };\r\n });\r\n})();\n(function () {\r\n \"use strict\";\r\n myApp.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {\r\n $urlRouterProvider.otherwise(function ($injector, $location) {\r\n $injector.invoke(['$state', function ($state) {\r\n $state.go('SolutionConfigurator');\r\n }]);\r\n });\r\n\r\n $stateProvider\r\n //#region Solutions\r\n .state('SolutionConfigurator', {\r\n url: \"/SolutionConfigurator?P&C&S&O\",\r\n params: {\r\n 'P': null,\r\n 'C': null,\r\n 'S': null,\r\n 'O': null\r\n },\r\n templateUrl: \"Application/Views/Solutions/solutionGuide.1739284541000.html\",\r\n controller: function (GeneralModel, $stateParams) {\r\n $stateParams.delete;\r\n },\r\n resolve: {\r\n params: ['$stateParams', function ($stateParams) {\r\n return $stateParams;\r\n }]\r\n }\r\n })\r\n .state('StructureBuilderConfigurator', {\r\n url: \"/StructureBuilderConfigurator?P&C&S&O\",\r\n params: {\r\n 'P': null,\r\n 'C': null,\r\n 'S': null,\r\n 'O': null\r\n },\r\n templateUrl: \"Application/Views/BuilderConfigurator/builderConfigurator.1739284541000.html\",\r\n controller: function (GeneralModel, $stateParams) {\r\n $stateParams.delete;\r\n },\r\n resolve: {\r\n params: ['$stateParams', function ($stateParams) {\r\n return $stateParams;\r\n }]\r\n }\r\n })\r\n .state('ServiceConfigurator', {\r\n url: \"/ServiceConfigurator?P&C&S&O\",\r\n params: {\r\n 'P': null,\r\n 'C': null,\r\n 'S': null,\r\n 'O': null\r\n },\r\n templateUrl: \"Application/Views/ServiceGuide/serviceGuide.1739284541000.html\",\r\n controller: function (GeneralModel, $stateParams) {\r\n $stateParams.delete;\r\n },\r\n resolve: {\r\n params: ['$stateParams', function ($stateParams) {\r\n return $stateParams;\r\n }]\r\n }\r\n });\r\n //#endregion\r\n }]);\r\n})();\n(function () {\r\n \"use strict\";\r\n myApp.factory('ExportFiles', [\"$q\", \"GeneralModel\", function ($q, GeneralModel) {\r\n\r\n function ExportFiles(scope, model, fileName, format, controller, byId, additionalParameters, customAction) {\r\n scope.generalModel.FullPageLoading = true;\r\n\r\n switch (format) {\r\n\r\n case 'xml':\r\n var action = \"ExportToXml\";\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(byId)) {\r\n action = \"ExportToXmlById\";\r\n }\r\n\r\n if (!scope.generalModel.IsUndefinedEmptyOrNull(customAction)) {\r\n action = customAction;\r\n }\r\n\r\n $q.when(GeneralModel.ExportToXml(model, controller, action, additionalParameters)).then(function () {\r\n ReadXml(scope, fileName, model.XmlFile);\r\n }).catch(function (reason) {\r\n GeneralModel.ShowToastWarning(reason);\r\n scope.generalModel.FullPageLoading = false;\r\n });\r\n\r\n break;\r\n }\r\n }\r\n\r\n var ReadXml = function (scope, fileName, xmlFile) {\r\n var byteArray = new Uint8Array(xmlFile);\r\n var dataToBase64 = new TextDecoder(\"utf-8\").decode(byteArray);\r\n dataToBase64 = JSON.parse(dataToBase64).FileArray;\r\n dataToBase64 = dataToBase64.replace(/[\\'\\\"]/g, '');\r\n var byteCharacters = atob(dataToBase64);\r\n var blob = new Blob([byteCharacters], {\r\n type: 'text/xml'\r\n });\r\n saveAs(blob, '' + fileName + '.xml');\r\n scope.generalModel.FullPageLoading = false;\r\n };\r\n\r\n return ExportFiles;\r\n }]);\r\n})();\n(function () {\r\n \"use strict\";\r\n var version = '11.1.3';\r\n myApp.factory('UploadMethod', function (GeneralModel, $http, $timeout, $compile, Upload) {\r\n\r\n function UploadMethod(pageScope, parentModel) {\r\n pageScope.generalModel = GeneralModel.model;\r\n pageScope.usingFlash = FileAPI && FileAPI.upload !== null;\r\n\r\n pageScope.CloseUploadFileDialog = function () {\r\n pageScope.generalModel.CloseDialog('DialogInsertImage');\r\n };\r\n\r\n pageScope.changeAngularVersion = function () {\r\n window.location.hash = pageScope.angularVersion;\r\n window.location.reload(true);\r\n };\r\n pageScope.angularVersion = window.location.hash.length > 1 ? (window.location.hash.indexOf('/') === 1 ?\r\n window.location.hash.substring(2) : window.location.hash.substring(1)) : '1.2.24';\r\n\r\n pageScope.invalidFiles = [];\r\n pageScope.generalModel.InvalidFiles = pageScope.invalidFiles;\r\n pageScope.invalidFilesAnnex = [];\r\n pageScope.generalModel.InvalidFilesAnnex = pageScope.invalidFilesAnnex;\r\n pageScope.invalidFilesNotesAnnex = [];\r\n pageScope.generalModel.InvalidFilesNotesAnnex = pageScope.invalidFilesNotesAnnex;\r\n pageScope.invalidFilesNotesAnnexPhoto = [];\r\n pageScope.generalModel.InvalidFilesNotesAnnexPhoto = pageScope.invalidFilesNotesAnnexPhoto;\r\n\r\n pageScope.$watch('generalModel.InvalidFiles', function (invalidFiles) {\r\n if (invalidFiles !== null && !angular.isArray(invalidFiles)) {\r\n $timeout(function () {\r\n pageScope.invalidFiles = [invalidFiles];\r\n var maxSize = '';\r\n if (pageScope.generalModel.InvalidFiles.$errorMessages.maxSize) {\r\n maxSize = 'Maximum size exceeded -';\r\n }\r\n angular.element('#InvalidFiles').append('

The file \"' + pageScope.generalModel.InvalidFiles.name + '\" is Invalid.

' + maxSize + pageScope.generalModel.InvalidFiles.$errorParam + '
Size: ' + pageScope.generalModel.InvalidFiles.size + ' B - Type: ' + pageScope.generalModel.InvalidFiles.type + '

');\r\n });\r\n pageScope.generalModel.LoadingUpload = false;\r\n }\r\n else {\r\n angular.element('#InvalidFiles').html('');\r\n }\r\n });\r\n\r\n pageScope.$watch('generalModel.InvalidFilesAnnex', function (invalidFilesAnnex) {\r\n if (invalidFilesAnnex !== null && !angular.isArray(invalidFilesAnnex)) {\r\n $timeout(function () { pageScope.invalidFilesAnnex = [invalidFilesAnnex]; });\r\n pageScope.generalModel.LoadingUpload = false;\r\n }\r\n });\r\n\r\n pageScope.$watch('generalModel.InvalidFilesNotesAnnex', function (invalidFilesNotesAnnex) {\r\n if (invalidFilesNotesAnnex !== null && !angular.isArray(invalidFilesNotesAnnex)) {\r\n $timeout(function () {\r\n pageScope.invalidFilesNotesAnnex = [invalidFilesNotesAnnex];\r\n pageScope.FileUploadNameNotesAnnex = \"\";\r\n });\r\n pageScope.generalModel.LoadingUpload = false;\r\n }\r\n });\r\n\r\n pageScope.$watch('generalModel.InvalidFilesNotesAnnexPhoto', function (invalidFilesNotesAnnexPhoto) {\r\n if ((invalidFilesNotesAnnexPhoto !== null) && (!angular.isArray(invalidFilesNotesAnnexPhoto))) {\r\n $timeout(function () {\r\n pageScope.invalidFilesNotesAnnexPhoto = [invalidFilesNotesAnnexPhoto];\r\n pageScope.FileUploadNameNotesAnnexPhoto = \"\";\r\n });\r\n pageScope.generalModel.LoadingUpload = false;\r\n }\r\n });\r\n\r\n pageScope.$watch('generalModel.Files', function (files) {\r\n pageScope.formUpload = false;\r\n if (files !== null) {\r\n pageScope.generalModel.LoadingUpload = true;\r\n if (!angular.isArray(files)) {\r\n $timeout(function () {\r\n pageScope.generalModel.Files = files = [files];\r\n if (typeof pageScope.generalModel.Files[0].$ngfName !== 'undefined') {\r\n pageScope.generalModel.FileUploadName = pageScope.generalModel.Files[0].$ngfName.substring(0, pageScope.generalModel.Files[0].$ngfName.lastIndexOf('.'));\r\n }\r\n else if (typeof pageScope.generalModel.Files[0].name !== 'undefined') {\r\n pageScope.generalModel.FileUploadName = pageScope.generalModel.Files[0].name.substring(0, pageScope.generalModel.Files[0].name.lastIndexOf('.'));\r\n }\r\n });\r\n return;\r\n }\r\n for (var i = 0; i < files.length; i++) {\r\n pageScope.errorMsg = null;\r\n (function (f) {\r\n pageScope.upload(f, true);\r\n })(files[i]);\r\n }\r\n pageScope.generalModel.LoadingUpload = false;\r\n }\r\n });\r\n\r\n pageScope.$watch('generalModel.FilesAnnex', function (files) {\r\n pageScope.formUpload = false;\r\n if ((files !== null) && (typeof files !== 'undefined')) {\r\n pageScope.generalModel.LoadingUpload = true;\r\n if (!angular.isArray(files)) {\r\n $timeout(function () {\r\n pageScope.generalModel.FilesAnnex = files = [files];\r\n if (typeof pageScope.generalModel.FilesAnnex[0].$ngfName !== 'undefined') {\r\n pageScope.generalModel.FileUploadNameAnnex = pageScope.generalModel.FilesAnnex[0].$ngfName.substring(0, pageScope.generalModel.FilesAnnex[0].$ngfName.lastIndexOf('.'));\r\n }\r\n else if (typeof pageScope.generalModel.FilesAnnex[0].name !== 'undefined') {\r\n pageScope.generalModel.FileUploadNameAnnex = pageScope.generalModel.FilesAnnex[0].name.substring(0, pageScope.generalModel.FilesAnnex[0].name.lastIndexOf('.'));\r\n }\r\n });\r\n return;\r\n }\r\n for (var i = 0; i < files.length; i++) {\r\n pageScope.errorMsg = null;\r\n (function (f) {\r\n pageScope.upload(f, true);\r\n })(files[i]);\r\n }\r\n pageScope.generalModel.LoadingUpload = false;\r\n }\r\n });\r\n\r\n pageScope.$watch('generalModel.FilesNotesAnnex', function (files) {\r\n pageScope.formUpload = false;\r\n if ((files !== null) && (typeof files !== 'undefined')) {\r\n pageScope.generalModel.LoadingUpload = true;\r\n if (!angular.isArray(files)) {\r\n $timeout(function () {\r\n pageScope.generalModel.FilesNotesAnnex = files = [files];\r\n if (typeof pageScope.generalModel.FilesNotesAnnex[0].$ngfName !== 'undefined') {\r\n pageScope.generalModel.FileUploadNameNotesAnnex = pageScope.generalModel.FilesNotesAnnex[0].$ngfName.substring(0, pageScope.generalModel.FilesNotesAnnex[0].$ngfName.lastIndexOf('.'));\r\n }\r\n else if (typeof pageScope.generalModel.FilesNotesAnnex[0].name !== 'undefined') {\r\n pageScope.generalModel.FileUploadNameNotesAnnex = pageScope.generalModel.FilesNotesAnnex[0].name.substring(0, pageScope.generalModel.FilesNotesAnnex[0].name.lastIndexOf('.'));\r\n }\r\n });\r\n return;\r\n }\r\n for (var i = 0; i < files.length; i++) {\r\n pageScope.errorMsg = null;\r\n (function (f) {\r\n pageScope.upload(f, true);\r\n })(files[i]);\r\n }\r\n pageScope.generalModel.LoadingUpload = false;\r\n }\r\n });\r\n\r\n pageScope.$watch('generalModel.FilesNotesAnnexPhoto', function (files) {\r\n pageScope.formUpload = false;\r\n if ((files !== null) && (typeof files !== 'undefined')) {\r\n pageScope.generalModel.LoadingUpload = true;\r\n if (!angular.isArray(files)) {\r\n $timeout(function () {\r\n pageScope.generalModel.FilesNotesAnnexPhoto = files = [files];\r\n if (typeof pageScope.generalModel.FilesNotesAnnexPhoto[0].$ngfName !== 'undefined') {\r\n pageScope.generalModel.FileUploadNameNotesAnnexPhoto = pageScope.generalModel.FilesNotesAnnexPhoto[0].$ngfName.substring(0, pageScope.generalModel.FilesNotesAnnexPhoto[0].$ngfName.lastIndexOf('.'));\r\n }\r\n else if (typeof pageScope.generalModel.FilesNotesAnnexPhoto[0].name !== 'undefined') {\r\n pageScope.generalModel.FileUploadNameNotesAnnexPhoto = pageScope.generalModel.FilesNotesAnnexPhoto[0].name.substring(0, pageScope.generalModel.FilesNotesAnnexPhoto[0].name.lastIndexOf('.'));\r\n }\r\n });\r\n return;\r\n }\r\n for (var i = 0; i < files.length; i++) {\r\n pageScope.errorMsg = null;\r\n (function (f) {\r\n pageScope.upload(f, true);\r\n })(files[i]);\r\n }\r\n pageScope.generalModel.LoadingUpload = false;\r\n }\r\n });\r\n\r\n pageScope.uploadPic = function (file) {\r\n pageScope.formUpload = true;\r\n if (file !== null) {\r\n pageScope.upload(file);\r\n }\r\n };\r\n\r\n pageScope.upload = function (file, resumable) {\r\n pageScope.errorMsg = null;\r\n if (pageScope.howToSend === 1) {\r\n uploadUsingUpload(file, resumable);\r\n } else if (pageScope.howToSend === 2) {\r\n uploadUsing$http(file);\r\n }\r\n };\r\n\r\n pageScope.isResumeSupported = Upload.isResumeSupported();\r\n\r\n pageScope.restart = function (file) {\r\n if (Upload.isResumeSupported()) {\r\n $http.get('https://angular-file-upload-cors-srv.appspot.com/upload?restart=true&name=' + encodeURIComponent(file.name)).then(function () {\r\n pageScope.upload(file, true);\r\n });\r\n } else {\r\n pageScope.upload(file);\r\n }\r\n };\r\n\r\n pageScope.chunkSize = 100000;\r\n function uploadUsingUpload(file, resumable) {\r\n file.upload = Upload.upload({\r\n url: 'https://angular-file-upload-cors-srv.appspot.com/upload' + pageScope.getReqParams(),\r\n resumeSizeUrl: resumable ? 'https://angular-file-upload-cors-srv.appspot.com/upload?name=' + encodeURIComponent(file.name) : null,\r\n resumeChunkSize: resumable ? pageScope.chunkSize : null,\r\n headers: {\r\n 'optional-header': 'header-value'\r\n },\r\n data: { username: pageScope.username, file: file }\r\n });\r\n\r\n file.upload.then(function (response) {\r\n $timeout(function () {\r\n file.result = response.data;\r\n });\r\n }, function (response) {\r\n if (response.status > 0)\r\n pageScope.errorMsg = response.status + ': ' + response.data;\r\n }, function (evt) {\r\n file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));\r\n });\r\n\r\n file.upload.xhr(function (xhr) {\r\n });\r\n }\r\n\r\n function uploadUsing$http(file) {\r\n file.upload = Upload.http({\r\n url: 'https://angular-file-upload-cors-srv.appspot.com/upload' + pageScope.getReqParams(),\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': file.type\r\n },\r\n data: file\r\n });\r\n\r\n file.upload.then(function (response) {\r\n file.result = response.data;\r\n }, function (response) {\r\n if (response.status > 0)\r\n pageScope.errorMsg = response.status + ': ' + response.data;\r\n });\r\n\r\n file.upload.progress(function (evt) {\r\n file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));\r\n });\r\n }\r\n\r\n function uploadS3(file) {\r\n file.upload = Upload.upload({\r\n url: pageScope.s3url,\r\n method: 'POST',\r\n data: {\r\n key: file.name,\r\n AWSAccessKeyId: pageScope.AWSAccessKeyId,\r\n acl: pageScope.acl,\r\n policy: pageScope.policy,\r\n signature: pageScope.signature,\r\n 'Content-Type': file.type === null || file.type === '' ? 'application/octet-stream' : file.type,\r\n filename: file.name,\r\n file: file\r\n }\r\n });\r\n\r\n file.upload.then(function (response) {\r\n $timeout(function () {\r\n file.result = response.data;\r\n });\r\n }, function (response) {\r\n if (response.status > 0)\r\n pageScope.errorMsg = response.status + ': ' + response.data;\r\n });\r\n\r\n file.upload.progress(function (evt) {\r\n file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));\r\n });\r\n storeS3UploadConfigInLocalStore();\r\n }\r\n\r\n pageScope.generateSignature = function () {\r\n $http.post('/s3sign?aws-secret-key=' + encodeURIComponent(pageScope.AWSSecretKey), pageScope.jsonPolicy).success(function (data) {\r\n pageScope.policy = data.policy;\r\n pageScope.signature = data.signature;\r\n });\r\n };\r\n\r\n if (localStorage) {\r\n pageScope.s3url = localStorage.getItem('s3url');\r\n pageScope.AWSAccessKeyId = localStorage.getItem('AWSAccessKeyId');\r\n pageScope.acl = localStorage.getItem('acl');\r\n pageScope.success_action_redirect = localStorage.getItem('success_action_redirect');\r\n pageScope.policy = localStorage.getItem('policy');\r\n pageScope.signature = localStorage.getItem('signature');\r\n }\r\n\r\n pageScope.success_action_redirect = pageScope.success_action_redirect || window.location.protocol + '//' + window.location.host;\r\n pageScope.jsonPolicy = pageScope.jsonPolicy || '{\\n \"expiration\": \"2020-01-01T00:00:00Z\",\\n \"conditions\": [\\n {\"bucket\": \"angular-file-upload\"},\\n [\"starts-with\", \"$key\", \"\"],\\n {\"acl\": \"private\"},\\n [\"starts-with\", \"$Content-Type\", \"\"],\\n [\"starts-with\", \"$filename\", \"\"],\\n [\"content-length-range\", 0, 524288000]\\n ]\\n}';\r\n pageScope.acl = pageScope.acl || 'private';\r\n\r\n function storeS3UploadConfigInLocalStore() {\r\n if (pageScope.howToSend === 3 && localStorage) {\r\n localStorage.setItem('s3url', pageScope.s3url);\r\n localStorage.setItem('AWSAccessKeyId', pageScope.AWSAccessKeyId);\r\n localStorage.setItem('acl', pageScope.acl);\r\n localStorage.setItem('success_action_redirect', pageScope.success_action_redirect);\r\n localStorage.setItem('policy', pageScope.policy);\r\n localStorage.setItem('signature', pageScope.signature);\r\n }\r\n }\r\n\r\n (function handleDynamicEditingOfScriptsAndHtml(pageScope) {\r\n if (document.getElementById('editArea') !== null) {\r\n pageScope.defaultHtml = document.getElementById('editArea').innerHTML.replace(/\\t\\t\\t\\t/g, '').replace(/&/g, '&');\r\n\r\n var fromLocal = (localStorage && localStorage.getItem('editHtml' + version));\r\n pageScope.editHtml = fromLocal || pageScope.defaultHtml;\r\n function htmlEdit() {\r\n document.getElementById('editArea').innerHTML = pageScope.editHtml;\r\n $compile(document.getElementById('editArea'))(pageScope);\r\n pageScope.editHtml && localStorage && localStorage.setItem('editHtml' + version, pageScope.editHtml);\r\n }\r\n\r\n pageScope.$watch('editHtml', htmlEdit);\r\n }\r\n })(pageScope, $http);\r\n\r\n pageScope.confirm = function () {\r\n return confirm('Tem a certeza? As suas alterações locais serão perdidas.');\r\n };\r\n\r\n pageScope.getReqParams = function () {\r\n return pageScope.generateErrorOnServer ? '?errorCode=' + pageScope.serverErrorCode +\r\n '&errorMessage=' + pageScope.serverErrorMsg : '';\r\n };\r\n\r\n angular.element(window).bind('dragover', function (e) {\r\n e.preventDefault();\r\n });\r\n angular.element(window).bind('drop', function (e) {\r\n e.preventDefault();\r\n });\r\n\r\n pageScope.modelOptionsObj = {};\r\n pageScope.$watch('validate+dragOverClass+modelOptions+resize+resizeIf', function (v) {\r\n pageScope.validateObj = eval('(function(){return ' + pageScope.validate + ';})()');\r\n pageScope.dragOverClassObj = eval('(function(){return ' + pageScope.dragOverClass + ';})()');\r\n pageScope.modelOptionsObj = eval('(function(){return ' + pageScope.modelOptions + ';})()');\r\n pageScope.resizeObj = eval('(function($file){return ' + pageScope.resize + ';})()');\r\n pageScope.resizeIfFn = eval('(function(){var fn = function($file, $width, $height){return ' + pageScope.resizeIf + ';};return fn;})()');\r\n });\r\n\r\n pageScope.modelOptionsObj = {};\r\n pageScope.$watch('validate+dragOverClass+modelOptions+resize+resizeIf', function (v) {\r\n pageScope.validateObj = eval('(function(){return ' + pageScope.validate + ';})()');\r\n pageScope.dragOverClassObj = eval('(function(){return ' + pageScope.dragOverClass + ';})()');\r\n pageScope.modelOptionsObj = eval('(function(){return ' + pageScope.modelOptions + ';})()');\r\n pageScope.resizeObj = eval('(function($file){return ' + pageScope.resize + ';})()');\r\n pageScope.resizeIfFn = eval('(function(){var fn = function($file, $width, $height){return ' + pageScope.resizeIf + ';};return fn;})()');\r\n });\r\n\r\n $timeout(function () {\r\n pageScope.capture = localStorage.getItem('capture' + version) || 'camera';\r\n pageScope.pattern = localStorage.getItem('pattern' + version) || 'image/*,audio/*,video/*';\r\n pageScope.acceptSelect = localStorage.getItem('acceptSelect' + version) || 'image/*,audio/*,video/*';\r\n pageScope.modelOptions = localStorage.getItem('modelOptions' + version) || '{debounce:100}';\r\n pageScope.dragOverClass = localStorage.getItem('dragOverClass' + version) || '{accept:\\'dragover\\', reject:\\'dragover-err\\', pattern:\\'image/*,audio/*,video/*,text/*\\'}';\r\n pageScope.disabled = localStorage.getItem('disabled' + version) === 'true' || false;\r\n pageScope.multiple = localStorage.getItem('multiple' + version) === 'true' || false;\r\n pageScope.allowDir = localStorage.getItem('allowDir' + version) === 'true' || true;\r\n pageScope.validate = localStorage.getItem('validate' + version) || '{size: {max: \\'1MB\\', min: \\'10B\\'}, height: {max: 12000}, width: {max: 12000}, duration: {max: \\'5m\\'}}';\r\n pageScope.keep = localStorage.getItem('keep' + version) === 'true' || false;\r\n pageScope.keepDistinct = localStorage.getItem('keepDistinct' + version) === 'true' || false;\r\n pageScope.orientation = localStorage.getItem('orientation' + version) === 'true' || false;\r\n pageScope.runAllValidations = localStorage.getItem('runAllValidations' + version) === 'true' || false;\r\n pageScope.resize = localStorage.getItem('resize' + version) || \"{width: 1000, height: 1000, centerCrop: true}\";\r\n pageScope.resizeIf = localStorage.getItem('resizeIf' + version) || \"$width > 5000 || $height > 5000\";\r\n pageScope.dimensions = localStorage.getItem('dimensions' + version) || \"$width < 12000 || $height < 12000\";\r\n pageScope.duration = localStorage.getItem('duration' + version) || \"$duration < 10000\";\r\n pageScope.maxFiles = localStorage.getItem('maxFiles' + version) || \"500\";\r\n pageScope.ignoreInvalid = localStorage.getItem('ignoreInvalid' + version) || \"\";\r\n pageScope.$watch('validate+capture+pattern+acceptSelect+disabled+capture+multiple+allowDir+keep+orientation+' +\r\n 'keepDistinct+modelOptions+dragOverClass+resize+resizeIf+maxFiles+duration+dimensions+ignoreInvalid+runAllValidations', function () {\r\n localStorage.setItem('capture' + version, pageScope.capture);\r\n localStorage.setItem('pattern' + version, pageScope.pattern);\r\n localStorage.setItem('acceptSelect' + version, pageScope.acceptSelect);\r\n localStorage.setItem('disabled' + version, pageScope.disabled);\r\n localStorage.setItem('multiple' + version, pageScope.multiple);\r\n localStorage.setItem('allowDir' + version, pageScope.allowDir);\r\n localStorage.setItem('validate' + version, pageScope.validate);\r\n localStorage.setItem('keep' + version, pageScope.keep);\r\n localStorage.setItem('orientation' + version, pageScope.orientation);\r\n localStorage.setItem('keepDistinct' + version, pageScope.keepDistinct);\r\n localStorage.setItem('dragOverClass' + version, pageScope.dragOverClass);\r\n localStorage.setItem('modelOptions' + version, pageScope.modelOptions);\r\n localStorage.setItem('resize' + version, pageScope.resize);\r\n localStorage.setItem('resizeIf' + version, pageScope.resizeIf);\r\n localStorage.setItem('dimensions' + version, pageScope.dimensions);\r\n localStorage.setItem('duration' + version, pageScope.duration);\r\n localStorage.setItem('maxFiles' + version, pageScope.maxFiles);\r\n localStorage.setItem('ignoreInvalid' + version, pageScope.ignoreInvalid);\r\n localStorage.setItem('runAllValidations' + version, pageScope.runAllValidations);\r\n });\r\n });\r\n }\r\n return UploadMethod;\r\n });\r\n})();"]}